大型语言模型实战指南:应用实践与场景落地
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Transformer基础

Transformer模型由Google于2017年提出,用于解决序列到序列(Sequence-to-Sequence,Seq2Seq)任务,该模型摒弃了传统的卷积神经网络(Convolutional Neural Network,CNN)和循环神经网络(Recurrent Neural Network,RNN)结构,采用注意力(Attention)机制,在减少计算量和提高并行效率的同时取得了更加优异的效果。

为了解决Seq2Seq任务,Transformer模型的结构由编码器(Encoder)和解码器(Decoder)两部分组成,如图1-1所示,左边为编码器部分,右边为解码器部分。编码器部分主要由6个(图1-1左边的数字N为6)相同的层堆叠而成,而每一层都包含两个子层,分别为多头注意力(Multi-Head Attention)层和前馈网络(Feed-Forward Network,FFN)层,并采用相加和层归一化(Layer Normalization,LayerNorm)操作连接两个子层。解码器部分也是由6个(图1-1右边的数字N为6)相同的层堆叠而成,除了编码器的两层之外,又插入一个掩码多头注意力层,用于将编码器的输出与解码器的输入相融合。Transformer模型在解码器部分的注意力机制上增加了上三角掩码矩阵,防止在模型训练过程中出现信息泄露情况,保证模型在计算当前位置信息时不受后面位置信息的影响。

图1-1 Transformer模型结构

多头注意力层由多个缩放点积注意力(Scaled Dot-Product Attention)的自注意力(Self-Attention)机制组成,如图1-2所示。

注意力机制一般可以看作将查询(Query)和一组键值对(Key Value Pair)映射到高维空间,即对Value进行加权求和计算,其中加权求和时的权重值是由Query与Key计算得出的。对于缩放点积注意力来说,将查询向量(Q)与键向量(K)进行相乘,再进行大小为的缩放,经过归一化后,与值向量(V)进行相乘,获取最终输出,计算公式如下:

图1-2 多头注意力层结构

由于QK相乘得到向量时,向量中值之间的方差会变大,即向量中不同维度的取值波动变大,如果直接进行归一化,会导致较大的值更大,较小的值更小,因此进行参数缩放,使得参数之间的差距变小,训练效果更好。由于解码器部分的特殊性,注意力机制中QK相乘后,还需要额外乘上一个掩码矩阵。

多头注意力是将多个缩放点积注意力的输出结构进行拼接,再通过全连接层变换得到最终结构,计算公式如下:

MultiHead(QKV)=Concat(head1,…,headhW0

在不同位置中,QKV的获取方式不同。编码器部分的多头注意力层和解码器部分的第一个多头注意力层的QKV是由输入向量经过3种不同的全连接层变换得来的。解码器部分的第二个多头注意力层的Q是由第一个多头注意力层输出向量经过全连接变换得来的,KV则是编码器部分的输出向量。

Transformer中的FFN层则由两个全连接层加上ReLU激活函数组成,计算公式如下:

FFN(x)=max(0,xW1+b1W2+b2

每一层采用层归一化的原因是层归一化不受训练批次大小的影响,并且可以很好地应用在时序数据中,不需要额外的存储空间。

由于注意力机制与CNN结构一样,无法表示文本的时序性,相比于LSTM结构等循环神经网络,在NLP领域效果要差一些,因此引入位置信息编码,相当于使模型具备解决时序性内容的能力,这也是Transformer成功的重要因素之一。Transformer采用了绝对位置编码策略,通过不同频率的正余弦函数组成每个时刻的位置信息,计算公式如下:

Transformer模型目前已经成为主流框架,不仅在NLP任务上大放异彩,并且在计算机视觉(Computer Vision,CV)任务上崭露头角,目前主流的大型语言模型基本上都采用了Transformer模型结构。相较于CNN来说,Transformer模型可以获取全局的信息。相较于RNN来说,Transformer模型拥有更快的计算速度,可以并行计算,并且注意力机制也有效地解决了长序列遗忘的问题,具有更强的长距离建模能力。

Transformer结构仍存在一些缺点,例如:组成Transformer的自注意力机制的计算复杂度为OL2),当输入长度L过大时,会导致计算量爆炸;Transformer获取内容位置信息的方式全部来源于位置信息编码等。因此,出现了很多Transformer结构的变种,例如Sparse Transformer、Longformer、BigBird、Routing Transformer、Reformer、Linformer、Performer、Synthesizer和Transformer-XL等,也涌现出了各种位置编码,如RoPE、ALiBi等,用于解决上述问题。本节主要介绍原始Transformer的结构,上述变体以及位置编码就不过多介绍了,若想了解更多可以阅读相关论文。