大语言模型的预训练:Transformer 语言模型实现过程(三)

一、Transformer 语言模型实现过程

1. Transformer 语言模型简介

Transformer 模型使用 Self-Attention 结构取代在 NLP 任务中常用的 RNN 网络结构。相比 RNN 网络结构,其最大的优点是可以并行计算。Transformer 的整体模型架构如下图所示:

Transformer 本质上是一个 Encoder-Decoder 架构。Transformer 的中间部分可以分为两个部分:编码组件和解码组件。如下图所示:

词向量的输入

Transformer 输入是一个序列数据,以我爱你为例:Encoder 的 inputs 就是 “I LOVE YOU” 分词后的词向量。
输入 inputs embedding 后需要给每个 word 的词向量添加位置编码 positional encoding。

1.1 位置编码 positional encoding

一句话中同一个词,如果词语出现位置不同,意思可能发生翻天覆���的变化,例如:我欠他 100 和 他欠我 100。这两句话的意思一个地狱一个天堂。可见获取词语出现在句子中的位置信息是一件很重要的事情。但是 Transformer 的是完全基于 self-Attention,而 self-attention 无法获取词语位置信息,就算打乱一句话中词语的位置,每个词还是能与其他词之间计算 attention 值,就相当于是一个功能强大的词袋模型,对结果没有任何影响。因此在输入的时候需要给每一个词向量添加位置编码。
positional encoding 获取过程:

Transformer 使用的是正余弦位置编码。位置编码通过使用不同频率的正弦、余弦函数生成,然后和对应的位置的词向量相加,位置向量维度必须和词向量的维度一致。过程如上图,PE(positional encoding)计算公式如下:

pos 表示单词在句子中的绝对位置,pos=0,1,2…,例如:YOU 在 “I LOVE YOU” 中的 pos=2;dmodel 表示词向量的维度,在这里 dmodel=512;2i 和 2i+1 表示奇偶性,i 表示词向量中的第几维,例如这里 dmodel=512,故 i=0,1,2…255。

编码组件由多层编码器(Encoder)组成(在此处使用了 6 层编码器)。解码组件也是由相同层数的解码器(Decoder)组成(在此处使用了 6 层)。如下图所示:

1.2 Encoder

编码器层的作用:作为编码器的组成单元,每个编码器层完成一次对输入的特征提取过程,即编码过程。
编码器的作用:编码器用于对输入进行指定的特征提取过程也称为编码,由 N 个编码器层堆叠而成。

每个编码器层由两个子层组成:Self-Attention 层(自注意力层)和 Position-wise Feed Forward Network(前馈网络,缩写为 FFN)如下图所示。每个编码器的结构都是相同的,但是它们使用不同的权重参数。

编码器的输入会先流入 Self-Attention 层,它可以让编码器在对特定词进行编码时使用输入句子中的其他词的信息(当翻译一个词时,不仅只关注当前的词,而且还会关注其他词的信息)。然后 Self-Attention 层的输出会流入前馈网络。
解码器也有编码器中这两层,但是它们之间还有一个注意力层(即 Encoder-Decoder Attention),用来帮解码器关注输入句子的相关部分(类似于 seq2seq 模型中的注意力)。如下图所示:

1.3 多头注意力机制(Multi-head Attention)

通过添加一种多头注意力机制,进一步完善自注意力层。首先,通过 h 个不同的线性变换对 Query、Key 和 Value 进行映射;然后,将不同的 Attention 拼接起来;最后,再进行一次线性变换。基本结构如下图所示:

每一组注意力用于将输入映射到不同的子表示空间,这使得模型可以在不同子表示空间中关注不同的位置。整个计算过程可表示为:

在多头注意力下,将输入的 X 乘以 WQ、WK 和 WV 矩阵,从而为每组注意力单独生成不同的 Query、Key 和 Value 矩阵。如下图所示:

按照上面的方法,使用不同的权重矩阵进行 8 次自注意力计算,得到 8 个不同的 Z 矩阵。接下来将这 8 个矩阵整合为一个矩阵。具体流程如下:

  1. 把 8 个矩阵{Z0,Z1,⋯,Z7}拼接。

  2. 把拼接后的矩阵和一个权重矩阵 WO 相乘。

  3. 得到最终的矩阵 Z,这个矩阵包含了所有注意力头的信息。这个矩阵会输入到 FFN 层。

1.4 Feed-Forward Networks

全连接层是一个两层的神经网络,先线性变换,然后 ReLU 非线性,再线性变换。公式如下:

这里的 x 就是 Multi-Head Attention 的输出 Z,引用上面的例子,那么 Z 是 (2,64) 维的矩阵,假设 W1 是(64,1024),其中 W2 与 W1 维度相反(1024,64),那么按照上面的公式:
FFN(Z)=(2,64)x(64,1024)x(1024,64)=(2,64),发现维度没有发生变化,这两层网络就是为了将输入的 Z 映射到更加高维的空间中 (2,64)x(64,1024)=(2,1024),然后通过非线性函数 ReLU 进行筛选,筛选完后再变回原来的维度。然后经过 Add&Normalize,输入下一个 encoder 中,经过 6 个 encoder 后输入到 decoder。

1.5 Decoder

Decoder 的输入分为两类:
一种是训练时的输入,一种是预测时的输入。
训练时的输入:已经对准备好对应的 target 数据。例如翻译任务,Encoder 输入 “I LOVE YOU”,Decoder 输入 “我爱你”。
预测时的输入:一开始输入的是起始符,然后每次输入是上一时刻 Transformer 的输出。例如,输入 “”,输出"I",输入"I",输出"I LOVE",输入" 我爱 “,输出"I LOVE YOU”,输入" 我爱你 “,输出” 我爱你 " 结束。

解码器层的作用:作为解码器的组成单元,每个解码器层根据给定的输入,向目标方向进行特征提取操作,即解码过程。
解码器的作用:根据编码器的结果以及. 上 - 次预测的结果,对下一次可能出现的 “值” 进行特征表示。

1.6 Mask(掩码)

Mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 Padding Mask 和 Sequence Mask。其中,Padding Mask 在所有的 scaled dot-product attention 里面都需要用到,而 Sequence Mask 只有在 Decoder 的 Self-Attention 里面用到。

Padding Mask: 由于每个批次输入序列长度不一样,所以要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但由于填充的位置,对于语句无实际意义,attention 机制不应该把注意力放在这些位置上,所以需要进行一些处理。具体做法是,把这些位置的值加上一个非常大的负数 (负无穷),再经过 softmax,这些位置的概率就会接近 0。

Sequence Mask:Sequence Mask 是为了使得 Decoder 不能看见未来的信息。对于一个序列,在 t 时刻,解码输出只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此需要隐藏 t 之后的信息。实现过程为:产生一个上三角矩阵,上三角的值全为 0,将这个矩阵作用在每一个序列上。

2. 模型评价

  • Transformer 优点:

    1. 长期依赖性建模:Transformer 模型通过使用自注意力机制(self-attention)可以更好地捕捉长期依赖关系,这对于处理长文本或具有远距离依赖性的任务非常重要。

    2. 并行计算:Transformer 模型中的自注意力机制和位置编码可以使输入序列的所有位置同时进行处理,这导致模型可以高效地并行计算,加快训练和推理速度。

    3. 可解释性:相对于传统的循环神经网络(RNN),Transformer 模型在处理序列数据时更具可解释性。由于自注意力机制可以指定每个位置与其他位置的相关性,因此可以更清晰地理解模型对输入的处理过程。

    4. 模块化架构:Transformer 模型以块(block)为基本单元构建,每个块包含多层自注意力机制和前馈神经网络层。这种模块化的架构使得 Transformer 模型易于修改、扩展和调整,研究人员和开发者可以根据需要自由组合和堆叠块。

    5. 多语言支持:Transformer 模型的设计使其能够轻松地适应不同的语言,无论是训练还是生成文本。这使得 Transformer 模型在机器翻译和跨语言任务中表现出色。

  • Transformer 缺点:

    1. 学习成本高:相对于传统的循环神经网络,Transformer 模型通常需要更大的计算资源和更长的训练时间。这限制了它在资源受限的环境中的应用。

    2. 过拟合风险:Transformer 模型通常具有大量的参数,当训练数据不足时容易发生过拟合。这需要使用正则化技术、更多的数据或其他方法来控制模型的泛化性能。

    3. 序列位置信息建模:尽管 Transformer 模型引入了位置编码来处理序列中的位置信息,但对于极长的序列,位置编码可能不足以准确地捕捉远距离的依赖关系,这可能影响模型的性能。

    4. 对输入序列长度的敏感性:Transformer 模型的自注意力机制对输入序列的长度非常敏感。较长的序列需要更多的计算资源,而较短的序列可能无法充分利用自注意力机制。因此,在设计模型时需要权衡输入序列的长度和计算效率之间的平衡。

二、Bert模型

BERT(Bidirectional Encoder Representations from Transformers)是一个预训练的语言表征模型。它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言模型进行浅层拼接的方法进行预训练,而是采用新的掩蔽语言模型(masked language model),以致能生成深度双向语言表征。

BERT 的特征抽取结构为双向的 Transformer,直接使用了 Transformer Encoder Block 结构,如上图所示。

1. Bert 词嵌入(Embedding)

Bert 的 Embedding 由三种 Embedding 求和而成,如下图所示:

  • Token embedding 层是要将各个词转换成固定维度的向量。在 BERT 中,每个词会被转换成 768 维的向量表示。输入文本在送入 token embeddings 层之前要先进行 tokenization 处理。假设输入文本是:“my dog is cute he likes playing”,会将两个特殊的 token 会插入到 tokenization 的结果的开头 ([CLS]) 和结尾 ([SEP]) 。这两个 token 为后面的分类任务和划分句子对服务。

  • tokenization 使用的方法是 WordPiece tokenization。这是一个数据驱动式的 tokenization 方法,旨在权衡词典大小和 oov 词(超出词表外的词)的个数。这种方法把例子中的 “playing” 切分成了 “play” 和“##ing”(此处不详细展开)。使用 WordPiece tokenization 让 BERT 在处理英文文本的时候仅需要存储 30,522 个词,而且很少遇到 oov 的词。

  • 经过处理,上述句子被转换成 “[CLS] my dog is cute [SEP] he likes play ##ing [SEP]”,也就是 11 个 token。这样,例子中的 7 个词的句子就转换成了 11 个 token,然后接着得到了一个(11, 768) 的矩阵或者是(1, 11, 768) 的张量。

Segment Embeddings 层用来区别两种句子,预训练除了 LM,还需要做判断两个句子先后顺序的分类任务。

  1. 前一个句子的每个 token 都用 0 表示,后一个句子的每个 token 都用 1 表示。如 “[CLS] my dog is cute [SEP] he likes play ##ing [SEP]” 表示成 “0 0 0 0 0 0 1 1 1 1 1”。如果输入仅仅只有一个句子,那么它的 segment embedding 就是全 0。这也是一个(11, 768) 维的向量。
  2. Position Embeddings 层和 Transformer 的 Position Embeddings 不一样,在 Transformer 中使用的是公式法,在 Bert 中是通过训练得到的。加入 position embeddings 会让 BERT 理解 “I think, therefore I am” 中的第一个 “I”和第二个 “I” 应该有着不同的向量表示。
  3. BERT 能够处理最长 512 个 token 的输入序列。通过让 BERT 在各个位置上学习一个向量表示来讲序列顺序的信息编码进来。这意味着 Position Embeddings layer 实际上就是一个大小为 (512, 768) 的 lookup 表,表的第一行是代表第一个序列的第一个位置,第二行代表序列的第二个位置,以此类推。因此,如果有这样两个句子 “Hello world” 和“Hi there”,“Hello”和 “Hi” 会由完全相同的 position embeddings,因为他们都是句子的第一个词。同理,“world”和 “there” 也会有相同的 position embedding。

2. 预训练任务(Pre-training Task)

第一个任务是采用 MaskLM(掩蔽语言模型)的方式来训练语言模型,通俗地说就是在输入一句话的时候,随机地选一些要预测的词,然后用一个特殊的符号 [MASK] 来代替它们,之后让模型根据所给的标签去学习这些地方该填的词。
第二个任务在双向语言模型的基础上额外增加了一个句子级别的连续性预测任务,即预测输入 BERT 的两段文本是否为连续的文本,引入这个任务可以更好地让模型学到连续的文本片段之间的关系。
BERT 使用了 Transformer 的 Encoder 模块,分别用 12 层和 24 层 Transformer Encoder 组装了两套 BERT 模型,分别是:

其中层的数量 (即,Transformer Encoder 块的数量) 为 L,隐藏层的维度为 H,自注意头的个数为 A。将前馈 / 过滤器 (Transformer Encoder 端的 feed-forward 层) 的维度设置为 4H,即当 H=768 时是 3072;当 H=1024 是 4096 。

3. 优缺点

  • 优点:效果好,能够解决 11 项 NLP 任务。Bert 微调下游任务的时候,即使数据集非常小(比如小于 5000 个标注样本),模型性能也有不错的提升。
  • 缺点:1.BERT 的预训练任务 MLM 使得能够借助上下文对序列进行编码,但同时也使得其预训练过程与中的数据与微调的数据不匹配,难以适应生成式任务。 2.BERT 没有考虑预测 [MASK] 之间的相关性,是对语言模型联合概率的有偏估计。由于最大输入长度的限制,适合句子和段落级别的任务,不适用于文档级别的任务(如长文本分类)。

最后

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频,免费分享!

一、大模型全套的学习路线

L1级别:AI大模型时代的华丽登场
L2级别:AI大模型API应用开发工程
L3级别:大模型应用架构进阶实践
L4级别:大模型微调与私有化部署

在这里插入图片描述

达到L4级别也就意味着你具备了在大多数技术岗位上胜任的能力,想要达到顶尖水平,可能还需要更多的专业技能和实战经验。

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述

三、大模型经典PDF书籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

在这里插入图片描述

四、AI大模型商业化落地方案

在这里插入图片描述

作为普通人在大模型时代,需要不断提升自己的技术和认知水平,同时还需要具备责任感和伦理意识,为人工智能的健康发展贡献力量。

有需要全套的AI大模型学习资源的小伙伴,可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

如有侵权,请联系删除。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值