大语言模型实战

ChatGPT模型问世后,立刻在全球范围内掀起了轩然大波。其卓越的效果引发了新一轮AI浪潮,尤其是在零样本或少样本数据情况下,ChatGPT模型也能够达到SOTA(State Of The Art,最高水平)。这一现象使得许多AI从业人员转向大型语言模型(Large Language Model,LLM)的研究。大型语言模型中的“大”,不仅仅是指模型参数量大,还指模型在训练过程中所耗费的资源(数据和算力)量大。虽然目前尚无明确定义规定多少参数量的模型可以被称为大型语言模型,但本书参考了开源社区中的大型语言模型的参数量,暂将拥有10亿以上参数量的预训练语言模型定义为大型语言模型。

 

目前,大型语言模型已经成为AI从业人员必须掌握的重要知识领域。本章首先讲解大型语言模型的基础架构——Transformer,然后介绍目前常用的通用大型语言模型和领域大型语言模型的技术细节,最后讨论大型语言模型的评估方法,帮助读者更全面地理解大型语言模型的概念和原理。


Transformer基础


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

 

为了解决Seq2Seq任务,Transformer模型的结构由编码器(Encoder)和解码器(Decoder)两部分组成,如图1-1所示,左边为编码器部分,右边为解码器部分。编码器部分主要由6个(图1-1左边的数字N为6)相同的层堆叠而成,而每一层都包含两个子层,分别为多头注意力(MultiHead Attention)层和前馈网络(FeedForward 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)进行相乘,获取最终输出,计算公式如下:

 

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

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

0

MultiHead(Q,K,V)=Concat(head1,…,headh)W

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

 

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

FFN(x)=max(0,xW+b)W+b

1122

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

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

 

 

 

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

 

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