大规模语言模型基础从理论到实践第二章大规模语言模型基础下
[复制链接]
2.训练词元分析器
BERT采用WordPiece分词算法,根据训练数据中的词频决定是否将一个完整的词切分为多
个词元。因此,需要先训练词元分析器(Tokenizer)。可以使用transformers库中的BertWord-
PieceTokenizer类来完成任务。
3.预处理数据集
在启动整个模型训练之前,还需要将训练数据根据训练好的词元分析器进行处理。如果文档长度超过512个词元,就直接截断。
truncate longer「……samples布尔变量控制用于对数据集进行词元处理的encode()回调函数如果该变量设置为True,则会截断超过最大序列长度(max_length)的句子。如果该变量设置
.为False,则需要将没有截断的样本连接起来,并组合成固定长度的向量。
4.模型训练
在构建处理好的预训练数据之后,就可以开始模型训练。
5.模型使用
可以针对不同应用需求使用训练好的模型。
## 2.3 大语言模型的结构
当前,绝大多数大语言模型都采用类似GPT的架构,使用基于Transformer结构构建的仅
由解码器组成的网络结构,采用自回归的方式构建语言模型,但是在位置编码、层归一化位置、激活函数等细节上各有不同。文献[5]介绍了GPT-3模型的训练过程,包括模型架构、训练数据组成、训练过程及评估方法。由于GPT-3并没有开放源代码,根据论文直接重现整个训练过程并不容易,因此文献介绍了根据GPT-3的描述复现的过程,构造并开源了系统OPT(OpenPre-trainedTransformerLanguageModels)。MetaAI也仿照GPT-3的架构开源了LLaMA模型。开评测结果及利用该模型进行有监督微调后的模型都有非常好的表现。GPT-3模型之后,OpenAI就不再开源(也没有开源模型),因此并不清楚ChatGPT和GPT-4采用的模型架构。
本节将以LLaMA模型为例,介绍大语言模型架构在Transformer原始结构上的改进,并介
绍Transformer结构中空间和时间占比最大的注意力机制的优化方法。
### 2.3.1LLaMA的模型结构
文献介绍了LLaMA采用的Transformer结构和细节,与2.1节介绍的Transformer 结构的不同之处为采用了前置层归一化(Pre-normalization)方法并使用RMSNorm归一化函数
(RootMeanSquareNormalizingFunction)、激活函数更换为SwiGLU,使用了旋转位置嵌入
(RotaryPositionalEmbeddings,RoPE),使用的Transformer结构与GPT-2类似,如图所示。
1.RMSNorm归一化函数
为了使模型训练过程更加稳定,GPT-2相较于GPT引入了前置层归一化方法,将第一个层
归一化移动到多头自注意力层之前,将第二个层归一化移动到全连接层之前。同时,残差连接的
位置调整到多头自注意力层与全连接层之后。层归一化中也采用了RMSNorm归一化函数。针对输入向量a,RMSNorm函数计算公式如下:
2.SwiGLU激活函数
SwiGLU激活函数是Shazeer在中提出的,在PaLM等模型中进行了广泛应用,并且取得了不错的效果,相较于ReLU函数在大部分评测中都有不少提升。在LLaMA中,全连接层使用带有SwiGLU激活函数的位置感知前馈网络的计算公式如下:
![[%2S`QODI3Z)S[EJK_[U4`)A_tmb.jpg]]
其中,σ(x)是Sigmoid函数。图2.5给出了Swish激活函数在参数β取不同值时的形状。可以
到,当β趋近于0时,Swish函数趋近于线性函数y=x;当β趋近于无穷大时,Swish函数趋过
于ReLU函数;当β取值为1时,Swish函数是光滑且非单调的。在HuggingFace的transformer
库中Swish函数被SiLU函数代替。
![[79XGV8U[_7~YDZA([I})VH6.jpg]]
![[JUP}]$[OBW)ET_S5E$LXR%K.jpg]]
![[DC~G(O]0EUS$%B5T1_0C~2D_tmb.jpg]]
![[CN)~DU)0JGK[P}]VB34Q}@F_tmb.jpg]]
4.模型整体框架
基于上述模型和网络结构可以实现解码器层,根据自回归方式利用训练数据进行模型训练的
过程与2.3.4节介绍的过程基本一致。不同规模的LLaMA模型使用的超参数如表2.1所示。由
于大语言模型的参数量非常大,并且需要大量的数据进行训练,因此仅利用单个GPU很难完成训练,需要依赖分布式模型训练框架(第4章将详细介绍相关内容)。
### 2.3.2 注意力机制优化
在Transformer结构中,自注意力机制的时间和存储复杂度与序列的长度呈平方的关系,因
此占用了大量的计算设备内存并消耗了大量的计算资源。如何优化自注意力机制的时空复杂度增强计算效率是大语言模型面临的重要问题。一些研究从近似注意力出发,旨在减少注意力计算和内存需求,提出了稀疏近似、低秩近似等方法。此外,有一些研究从计算加速设备本身的特性出发,研究如何更好地利用硬件特性对Transformer中的注意力层进行高效计算。本节将分别介绍上述两类方法。
1.稀疏注意力机制
对一些训练好的Transformer结构中的注意力矩阵进行分析时发现,其中很多是稀疏的,因此 可以通过限制Query-Key对的数量来降低计算复杂度。这类方法称为稀疏注意力(Sparse
Attention)机制。可以将稀疏化方法进一步分成基于位置的和基于内容的两类。
基于位置的稀疏注意力机制的基本类型如图2.6所示,主要包含如下五种类型。
(1)全局注意力(GlobalAttention):为了增强模型建模长距离依赖关系的能力,可以加入
一些全局节点。
(2)带状注意力(BandAttention):大部分数据都带有局部性,限制Query只与相邻的几
个节点进行交互。
(3)膨胀注意力(DilatedAttention):与CNN中的DilatedConv类似,通过增加空隙获取更大的感受野。
(4)随机注意力(RandomAttention):通过随机采样,提升非局部的交互能力。
(5)局部块注意力(BlockLocalAttention):使用多个不重叠的块(Block)来限制信息交互。
![[8DKDK[33H[NZV2ZSBDF)NML_tmb.jpg]]
现有的稀疏注意力机制,通常是基于上述五种基于位置的稀疏注意力机制的复合模式,图给出了一些典型的稀疏注意力模型。Star-Transformer[53]使用带状注意力和全局注意力的组合。
具体来说, Star-Transformer只包括一个全局注意力节点和宽度为3的带状注意力,其中任意 两个非相邻节点通过一个共享的全局注意力连接,相邻节点则直接相连。Longformer使用带 状注意力和内部全局节点注意力(InternalGlobal-nodeAttention)的组合。此外, Longformer
将上层中的一些带状注意力头部替换为具有膨胀窗口的注意力,在增加感受野的同时并不增加计算量。ETC(ExtendedTransformerConstruction)[55]使用带状注意力和外部全局节点注意力
(ExternalGlobal-nodeAttention)的组合。ETC稀疏注意力还包括一种掩码机制来处理结构化
输入,并采用对比预测编码(ContrastivePredictiveCoding,CPC)[56]进行预训练。BigBird[57]
使用带状注意力和全局注意力,并使用额外的随机注意力来近似全连接注意力。此外,BigBird揭示了稀疏编码器和稀疏解码器的使用可以模拟任何图灵机,这也在一定程度上解释了为什么稀疏注意力模型可以取得较好的结果。
![[]){7(@9SJPDN`2H~RI5LM)Q_tmb.jpg]]
![[XC[CURA@~NJ%72[LF5`%~XX_tmb.jpg]]
![[]V)E~~}WLC{)DNT%9$EO}H5_tmb.jpg]]
自注意力算法的标准实现将计算过程中的矩阵S、P写入全局内存,而这些中间矩阵的大小
与输入的序列长度有关且为二次型。因此,FlashAttention就提出了不使用中间注意力矩阵,这过存储归一化因子来减少全局内存消耗的方法。FlashAttention算法并没有将S、P整体写入局内存,而是通过分块写入,存储前向传播的Softmax归一化因子,在后向传播中快速重新计算片上注意力,这比从全局内存中读取中间注意力矩阵的标准方法更快。虽然大幅减少了全局内的访问量,重新计算也导致FLOPS增加,但其运行的速度更快且使用的内存更少。
![[WS`B%H]5LB~1837R5X_X$~6_tmb.jpg]]
## 2.4 实践思考
预训练语言模型除了本章介绍的自回归(Autoregressive)模型GPT,还有自编码模型(Au-
toencoding)BERT、编码器-解码器模型BART,以及融合上述三种方法的自回归填空(Au-
toregressiveBlankInfilling)模型GLM(GeneralLanguageModel)。ChatGPT的出现,使
得目前几乎所有大语言模型神经网络结构趋同,采用自回归模型,基础架构与GPT-2相同,但在归一化函数、激活函数及位置编码等细节方面有所不同。归一化函数和激活函数的选择对于大语言模型的收敛性具有一定影响,因此在LLaMA模型被提出之后,大多数开源模型沿用了RM- SNorm和SwiGLU的组合方式。由于LLaMA模型所采用的位置编码方法RoPE的外推能力不好,因此后续一些研究采用了ALiBi等具有更好外推能力的位置编码方法,使模型具有更长的上下文建模能力。
大语言模型训练需要使用大量计算资源,其中计算设备的内存是影响计算效率的最重要因素 之一,因此注意力机制改进算法也是在模型架构层的研究热点。本章介绍了注意力机制优化的典型方法,在这些方法的基础上,有很多研究陆续开展,如FlashAttention-2[69]等。如何更有效地利用计算设备的内存,以及如何使内存消耗与模型上下文近似线性扩展,都是重要的研究方向。本章介绍的方法都围绕GPT-3架构,而OpenAI发布的GPT-4相较于ChatGPT有显著的性能提升。GPT-4的神经网络模型结构和参数规模尚未公开,由于模型参数量庞大且计算成本高昂,不仅高校等研究机构很难支撑万亿规模大语言模型架构的研究,对互联网企业来说也不容易因此,大语言模型的未来架构研究该如何进行需要各方面的努力。
|