ChatGPT模型爆火之后,“百模”甚至“千模”大战的帷幕慢慢被拉开,各厂商纷纷入局大型语言模型,很多企业和高校也随之开源了一些表现优异的大型语言模型。本节主要介绍一些常用的大型语言模型,包括GPT(Generative Pre-Training,生成式预训练)系列模型、OPT模型、Bloom模型、GLM系列模型、LLaMA系列模型、Baichuan系列模型、Qwen系列模型和Skywork模型。当然,还有许多优秀的大型语言模型,但由于没有公开的技术报告,因此本书不做过多介绍。
GPT模型是由OpenAI于2018年提出的,其基础结构采用Transformer的解码器部分,也是首个采用Transformer结构的预训练语言模型(Pretrain Language Model,PLM)。与传统的语言模型一样,当前时刻的所有信息仅来源于前面所有时刻的信息,与后面的信息无关。预训练是自监督学习的一种特殊情况,其目的是找到一个良好的模型初始化参数,早期主要应用于计算机视觉任务,在NLP任务上常用的Word2Vec技术也属于预训练的一种。虽然Word2Vec在神经网络时代也取得了较好的效果,但由于模型中的参数没有经过大量数据训练,导致模型初始化时没有良好的起点。GPT模型采用Transformer结构,再充分利用大量未标记的文本数据进行生成式预训练,使得预训练过的模型在每个特定的任务上仅需要少量数据进行微调就可以取得较为优异的效果。具体如图1-3所示。
图1-3 GPT模型示意
预训练是一个标准的语言模型任务,损失函数如下:
当进行下游任务微调时,将最后一个时刻的节点作为整个句子的向量表征,损失函数如下:
在完成下游任务时,如果将语言模型任务与下游特定任务一起优化,会使得模型的泛化更好,收敛速度更快。
在预训练时,GPT模型仅采用Books Corpus数据集,并使用字节对编码(Byte Pair Encoding,BPE)方法获取大小为40 000的词表。模型仅包含12层,参数量为11 700万。在训练时,采用Adam优化器,学习率为2.5×10 -4 ,使用GeLU(Gaussian error Linear Units,高斯误差线性单元)激活函数,模型的最大输入长度为512。
但不幸的是,在BERT(Bidirectional Encoder Representation from Transformer,来自Transformer的双向编码器表示)模型(基础结构采用Transformer的编码器部分)出现后,GPT模型逐渐被人遗忘。OpenAI坚持认为Transformer的解码器结构才是正道,于是,在2019年OpenAI又提出了15亿参数量的GPT-2模型。GPT-2模型可以在无监督数据预训练后,在下游任务中不进行微调而获得较好的效果。在GPT-2模型的开发者看来,无监督数据中包含很多有监督的任务内容。如果在无监督数据上学习得足够充分,就不需要下游任务进行微调,只需对任务输入进行转化,增加对应的提示信息,就能够进行下游任务预测。例如,在完成英译法的翻译任务时,将输入变成“翻译成法语,[英文文本],[法语文本]”;在完成机器阅读理解任务时,将输入变成“回答问题,[文档内容],[问题],[答案]”。
因此,无监督数据的规模和质量显得尤为重要。GPT-2模型构建了一个高质量的、多领域的、带有任务性质的WebText数据集。该数据集主要爬取Reddit网站中Karma大于3的网页,并从中抽取文本内容,最终获取了800万个文档,总计40GB文本。以英译法的翻译任务为例,如图1-4所示,在WebText数据集中可以发现相似内容的表达,也充分证明了在无监督数据中包含各种有监督任务数据,但这些数据以片段或者隐含的方式体现。
图1-4 无监督WebText数据集中存在英译法的翻译任务的片段数据
GPT-2模型也采用Transformer的解码器结构,但做了一些微小的改动,具体如下。
●将归一化层移动到每个模型的输入前,并在每个自注意力模块后额外添加了一个归一化层。
●采用了更好的模型参数初始化方法,残差层的参数初始化随着模型深度的改变而改变。具体缩放值为 ,其中 N 为层数。
●采用了更大的词表,将词表大小扩展到50 257。此外,模型能接受的最大长度由512扩展到1024,并在模型训练时将批次扩大到512。
随着模型的增大,无论是文本摘要任务还是问答任务,其完成效果都随之增加。秉承着数据至上、参数至上的思想,OpenAI于2020年又推出了GPT-3模型,为大型语言模型时代的到来打下坚实的基础。
GPT-3模型的结构与GPT-2模型的一致,包括模型初始化方法、归一化标准、分词器等。然而GPT-3在全连接和局部带状稀疏注意力模块方面借鉴了Sparse Transformer模型,并设计了8个大小不同的模型,模型参数细节如表1-1所示。在这些模型中,模型越大,训练的批次就越大,而学习率减小。
表1-1 GPT-3模型的不同尺度的模型参数细节
训练一个拥有1750亿参数量的庞大模型需要更大规模的训练语料,数据主要来自Common Crawl数据集,但由于该数据集质量偏低,因此需要进行数据清洗,具体步骤如下。
步骤1:对原始Common Crawl数据集进行过滤,即通过GPT-2的高质量数据集和现有的Common Crawl数据集构建正负样本,使用逻辑回归分类器训练,再使用分类器对Common Crawl数据集进行判断,获取质量较高的数据集。
步骤2:对过滤后的内容进行重复数据过滤,即通过Spark中的MinHashLSH方法,找出一个与现有数据集相似的文档,并将模糊、重复内容删除,进一步提高模型训练数据质量和防止过拟合。
步骤3:加入已知高质量GPT-2模型所使用的训练数据集。
最终从45TB的Common Crawl数据集中清洗了570GB,相当于4000亿个Token,用于GPT-3模型的训练。在模型预训练过程中,训练集数据的采样并不是按照数据集大小进行的,而是质量较高的数据集的采样频率更高。各数据集分布情况如表1-2所示,Common Crawl和Books2数据集在训练过程中采样小于1次,其他数据集采样2~3次。
表1-2 GPT-3模型预训练过程中各数据集分布情况
GPT-3模型训练采用Adam优化器,其中 β 1和 β 2的值分别为0.9和0.95,采用余弦将学习率衰减到10%。模型能接受的最大总长度为2048,当文档中句子的总长度小于2048时,将多个文档采用停止符拼接,以提高模型的训练效率。模型在微软提供的高带宽V100 GPU集群上进行训练。
为了更好地挖掘预训练语言模型本身的能力,GPT-3模型在下游任务中不使用任何数据进行模型微调,通过情景学习或上下文学习来完成任务。在不更新语言模型参数的前提下,仅通过给定的自然语言指示和任务上的几个演示示例预测真实测试示例的结果。根据演示示例的个数,可以将其分为3种,如图1-5所示。
●少样本学习(Few-Shot),允许在给定上下文窗口范围内尽可能多地放入演示示例。
●单样本学习(One-Shot),仅允许放入一个演示示例。
●零样本学习(Zero-Shot),即不允许放入任何演示示例,仅给模型一个自然语言指令。
图1-5 GPT-3模型中少样本学习、单样本学习、零样本学习及传统微调的训练流程
最终在无训练的情况下,GPT-3模型在很多复杂的NLP任务上效果超过了微调之后的SOTA方法,例如机器翻译等。除了传统的NLP任务,GPT-3模型在数学计算、文章生成、编写代码等领域也取得了非常惊人的效果。
如果说GPT-3模型是将大家带入大型语言模型时代的先驱者,那么ChatGPT模型就是让大型语言模型得到广泛认可的推动者。ChatGPT模型因其流畅的对话表达、极强的上下文存储、丰富的知识创作及全面解决问题的能力而风靡全球,刷新了大众对人工智能的认知,并使人们对人工智能的发展重拾信心。ChatGPT模型是在GPT-3模型的基础上,让大型语言模型更好地遵循用户意图,避免生成编造的信息、偏见或具有安全隐患的文本。它主要是通过人类反馈进行模型微调,按照用户的意图(明确意图和隐含意图)进行模型训练,使得语言模型与用户意图在广泛的任务中保持一致,并具有3H特性,即Helpful(有用的,可以帮助用户完成任务)、Honest(真实的,不应该编造信息误导用户)和Harmless(无害的,不应该对人造成身体、心理或社会伤害),具体流程如图1-6所示。
图1-6 ChatGPT模型训练流程图
步骤1:监督微调(Supervised Fine-Tuning,SFT)阶段,收集示例数据并训练一个监督学习模型。从提示数据集中抽取一个提示内容,由标注人员编写答案,最后使用监督学习方法微调GPT-3模型。
步骤2:奖励模型(Reward Modeling,RM)阶段,收集比较数据并训练一个奖励模型。对于一个提示内容,使用模型预测多个结果,然后由标注人员对答案进行排序,最后将这些数据用于训练奖励模型,以判断答案的具体分值。
步骤3:强化学习阶段,通过强化学习的近端策略优化(Proximal Policy Optimization,PPO)方法进行模型优化。从提示数据集中抽取一些新的提示,然后根据模型策略生成一些结果,再根据奖励模型打分,最后采用PPO方法更新模型生成策略。这使得GPT-3模型生成的内容与特定人群(标注人员)的偏好一致。
所有步骤均可持续迭代,其中步骤3收集到更多的比较数据时,可以用于训练一个新的奖励模型,并将其用于新的策略更新。
对于奖励模型来说,采用SFT模型进行参数初始化,并将原来的LM输出层替换成一个线性全连接层,在接受提示和响应作为输入后,输出一个标量的奖励值。在训练过程中,采用Pair-Wise方法进行模型训练,即对于同一个提示内容 x 来说,比较两个不同回答 y w 和 y l 之间的差异。假设 y w 在真实情况下好于 y l ,那么希望 x + y w 经过模型后的分数比 x + y l 经过模型后的分数高,反之亦然。而对于奖励模型来说,标注人员对每个提示内容生成的 K 个(取值为4到9之间)回答进行排序,那么对于一个提示,就存在 个对,具体损失函数如下:
其中, r θ (x , y )为提示内容 x 和回答 y 经过RM模型的标量奖励值, D 为人工比较数据集。
对于强化学习部分,在环境中通过PPO策略优化SFT模型。在环境中,对于随机给出的提示内容进行回复,并根据RM模型决定环境中优化的模型的奖励值,从而对模型进行更新;在SFT模型的每个Token输出上增加KL散度惩罚,以防止奖励模型的过度优化。具体优化如下:
其中, 为强化学习策略, π SFT 为监督训练模型, D pretrain 为预训练分布。加入预训练部分参数进行整体优化,可以使模型效果更优。
经过上述大型语言模型与用户指示的对齐操作后,虽然在现在的NLP任务榜单上模型效果没有明显变化,但通过用户的真实评价可以发现,输出结果远远优于原始1750亿参数量的GPT-3模型的输出结果。这也说明在当前的NLP任务中,很多任务数据和评价指标与真实世界的用户使用感受存在较大的差距。
2023年3月14日,OpenAI又发布了GPT-4模型,GPT-4模型是一个多模态模型,相比于ChatGPT模型,它不仅可以接受文本输入,还可以接受图像输入,并输出文本内容。GPT-4模型可以很好地理解输入图片所包含的语义内容。此外,GPT-4模型在生成编造内容、偏见内容及生成内容安全方面均有较大的改善,并且可以以排名前10%的成绩通过模拟律师资格考试。
时代在发展,GPT系列模型也会迎来新的成员,GPT-5模型可能会在不久的将来发布。
经过大量数据的训练,大型语言模型在小样本甚至零样本学习方面展现出卓越的能力。但是,考虑到成本问题,很多模型在没有大量资金的情况下很难复制。对于通过API访问的模型,没有完全授予整个模型所有的权重访问权,使基于这些大型语言模型的研究变得更加困难。此外,随着大型语言模型的伦理、偏见等问题的出现,对于模型风险、危害、偏见和毒性的研究也变得更加困难。
MetaAI在2022年提出了GPT-3模型的开源复制版本OPT(Open Pre-trained Transformer language model,开放的预训练Transformer语言模型)。OPT的结构与GPT-3一致,仅采用解码器部分,参数个数从1.25亿到1750亿,旨在实现大型语言模型的可重复性和负责任的研究。其中,1.25亿到660亿参数量的模型可以直接下载,1750亿参数量的模型可以通过申请获取完整模型的权限。模型结构信息具体如表1-3所示。
表1-3 模型结构信息
为了实现模型的可重复性,OPT公布了模型训练日志并开放了源代码。在训练1750亿个参数的模型时,使用了992个80GB显存的A100型号GPU显卡,每个GPU的利用率达到147 TFLOP/s,总计算资源消耗为GPT-3的1/7。模型训练权重的初始化与Megatron-LM开源代码保持一致,采用均值为0、标准差为0.006的正态分布初始化,输出层的标准差采用 进行缩放,其中 L 为层数。所有偏差都被初始化为0,并采用ReLU激活函数,最大训练长度为2048。优化器采用AdamW优化器, β 1和 β 2分别为0.9和0.95,权重衰减率为0.1,dropout始终为0.1,但在嵌入层上不使用dropout。学习率和批次大小随模型大小不同而变化。
在训练过程中,出现过硬件故障、损失值异常、优化器选择等问题,这些都是大型语言模型在训练过程中可能出现的。
随着LLM被证明可以仅根据一些示例或提示来完成一些新任务,越来越多的研究人员开始深入研究LLM。但是,训练LLM的成本只有资源充足的组织才能承担。目前,GPT-3等模型没有开放参数,而OPT需要向MetaAI申请使用,因此没有真正实现开源。为此,Hugging Face牵头组织了Big Science项目,并于2022年提出了Bloom(Bigscience large open-science open-access multilingual language model,大科学、大型、开放科学、开源的多语言语言模型)。Bloom涉及46种自然语言和13种编程语言,共计1.6TB的文本数据。任何人都可以在Hugging Face网站上免费下载,并允许商业化使用。
Bloom的结构与GPT-3模型一致,共计1760亿参数量,主要包括70层解码器结构,每层112个注意力头,文本的最大序列长度为2048,在激活函数的使用上采用了GeLU函数,词表大小为250 680,如图1-7所示。在位置信息编码上采用ALiBi位置嵌入策略,它没有向词嵌入层添加位置信息,而是根据Key-Value的距离直接降低注意力分数。在词嵌入层之后,直接加入一个归一化层,从而提高模型训练的稳定性。
图1-7 Bloom结构
GLM(General Language Model pretraining with autoregressive blank infilling,基于自回归空白填充的通用语言预训练模型)是由清华大学于2021年3月提出的。GLM通过修改注意力掩码机制实现统一模型,使得模型既可以用于NLU任务,又可以用于NLG任务。
在预训练过程中,GLM会从一个文本中随机挑选出多个文本片段(片段长度服从 λ 为3的泊松分布),利用[MASK]标记替换挑选出的片段并组成文本A,同时将这些挑选出的文本片段随机排列组合成文本B。通过对[MASK]标记进行预测,达到模型预训练的目的。GLM模型利用特殊的掩码技术,使得文本A中的所有Token内容可以相互看见,而文本B中的Token只能看到当前Token以前的内容,具体如图1-8所示。
为了解决每个[MASK]标记与文本B中文本片段对齐的问题,在预训练过程中,GLM使用了两种位置编码方式。第一种位置编码方式是,文本A的位置编码按照Token顺序进行递增编码,而文本B中每个文本片段的位置编码与文本A中对应的[MASK]标记的位置编码相同。第二种位置编码方式是,文本A的位置编码全为0,而文本B中每个文本片段按照Token顺序递增编码,具体如图1-9所示。
图1-8 GLM模型注意力掩码矩阵
图1-9 GLM模型位置编码示意图
采用以 λ 为3的泊松分布选取文本片段长度的策略,使得GLM模型更偏向于完成NLU任务。为了更好地适应NLG任务,GLM模型在预训练过程中增加了文档级任务和句子级任务。在文档级任务中,GLM模型选择仅抽取单个长度为原始文本长度的50%~100%的文本片段作为后续生成内容。在句子级任务中,GLM模型选择抽取多个完整句子的文本片段,使其总长度不超过原始文本长度的15%,再将多个句子拼接成一段作为后续生成内容。
2022年10月,清华大学又发布了GLM-130B模型的开源版本。相较于GLM模型,GLM-130B模型在以下方面进行了优化。
●模型参数量更大,支持中、英两种语言。
●采用两种不同的掩码标记[MASK]和[gMASK],分别用于短文本和长文本。
●位置编码采用了旋转位置编码。
●采用深度归一化(DeepNorm)方案作为层归一化方案。
在ChatGPT出现之后,清华大学和智谱AI参考了ChatGPT的设计思路,以GLM-130B模型为底座,通过有监督微调等技术实现人类意图对齐的ChatGLM模型,并在2023年3月14日开启了ChatGLM-130B模型的内测,开源了具有60亿个参数的ChatGLM-6B模型,在业界受到了不少好评。
2023年6月25日,清华大学和智谱AI开源ChatGLM2-6B模型,在保留了Chat-GLM-6B模型对话流畅、部署门槛较低等众多优秀特性的基础上,又利用更多的数据进行预训练并与人类偏好对齐,进一步改善模型的相关性能指标;利用Flash Attention技术将模型支持的长上下文扩展到了3.2万个Token;利用Multi-Query Attention技术使模型有更快的推理速度和更低的显存占用,推理速度比ChatGLM-6B模型提升了42%。
同年10月27日,智谱AI又开源第三代基座大模型ChatGLM3-6B。ChatGLM3-6B模型在ChatGLM2-6B模型的基础上,采用了更多样的训练数据、更充分的训练步数、更长的上下文,并采用ChatML格式的数据(涉及系统信息、用户信息、AI助手信息、外部工具返回信息)来进行模型训练。ChatGLM3-6B模型除了正常的多轮对话外,还支持工具调用、代码执行及智能体任务等。ChatGLM2-6B和ChatGLM3-6B模型的权重均对学术研究完全开放,在填写问卷进行登记后也允许免费商业使用。
随着语言模型参数量的不断增加,如何在给定训练成本的情况下训练出效果更好的大型语言模型是一个重要的课题。很多研究表明,在有限的训练资源下,性能最佳的语言模型不是将参数量设置为无限大,而是在更多的数据上训练参数量较少(60亿个参数以上)的模型。在这种情况下,模型的推理成本也更低。
LLaMA模型是由MetaAI在2023年2月提出的,共开源了70亿个参数、130亿个参数、330亿个参数和650亿个参数4种不同大小的模型。经过1.4万亿个Token的数据训练后的LLaMA模型,仅130亿个参数的性能就优于使用1750亿个参数的GPT-3模型。此外,130亿个参数的LLaMA模型只需要一个V100显卡就可以进行推理计算,大大降低了大型语言模型的推理成本。
LLaMA模型在Transformer的解码器结构的基础上进行了以下3点改进。
●预先归一化:为了提高训练的稳定性,将每一层的输入进行归一化后,再进行层内参数计算,其中归一化函数采用RMSNorm函数。
●SwiGLU激活函数:将ReLU激活函数替换成SwiGLU激活函数。
●旋转位置编码:去除原有的绝对位置编码,在每一层网络中增加旋转位置编码。
模型在训练过程中使用AdamW优化器进行训练,其中 β 1和 β 2分别为0.9和0.95,并根据模型的大小改变学习率和训练批次大小,详情如表1-4所示。LLaMA模型在训练时进行了训练加速优化,使650亿个参数的模型在单个80GB显存的A100显卡上每秒可以处理380个Token,最终在2048个A100显卡上进行训练,1.4万亿个Token的训练数据在21天内训练完成。
表1-4 不同参数量LLaMA模型的训练参数
LLaMA模型开源后,衍生出了很多基于LLaMA模型进行继续预训练或指令微调的模型,如Alpaca模型、Vicuna模型、Chinese LLaMA模型等,如图1-10所示,可以说LLaMA模型降低了很多人进入大型语言模型赛道的门槛。
图1-10 LLaMA衍生模型示意图
2023年7月18日,MetaAI又开源了LLaMA2模型,此次不仅开源了预训练模型,还开源了利用对话数据微调后的LLaMA2-Chat模型,均包含70亿个参数、130亿个参数和700亿个参数三种。在预训练阶段使用了2万亿个Token,在微调阶段使用了超过10万个数据,人类偏好数据超过100万。
LLaMA2模型依旧采用Transformer的解码器结构,与LLaMA模型相同的是采用RMSNorm归一化、SwiGLU激活函数、RoPE位置嵌入、相同的词表构建方式与大小,与LLaMA模型不同的是增加了GQA(分组查询注意力),扩大了模型输入的最大长度,预训练语料库增加了40%。模型预训练采用AdamW优化器,其 β 1、 β 2和学习率分别为0.9、0.95和10×10 -5 ,采用cosin学习率,预热2000步后进行学习率衰减,最终降至峰值的10%,权重衰减系数为0.1,梯度裁剪值为1.0。
模型在进行人类偏好对齐时,重点关注有用性和安全性。由于有用性和安全性很难在同一个奖励模型中表现都很好,因此独立训练了两个奖励模型,一个针对有用性进行了优化,另一个针对安全性进行了优化。由于模型在几轮对话后往往忘记最初的指令,为了解决这些问题,采用Ghost Attention方法来增强模型对指令的遵从。
随着大型语言模型的飞速发展,不仅国外各大厂商在大型语言模型领域发力,国内也涌现出一批以大型语言模型为核心的创业公司。其中,不少公司选择将其在中文能力上表现优异的大型语言模型及技术成果贡献给开源社区,因此加速了大型语言模型技术的传播和发展。
2023年6月15日,百川智能发布了70亿个参数的具有中英双语能力的Baichuan-7B模型,不仅在C-Eval、AGIEval和Gaokao等中文评测榜单上超过同参数等级的模型,并且在MMLU英文评测榜单上超过LLaMA-7B模型。同年7月11日又发布了Baichuan-13B模型,两个模型均采用Transformer的解码器结构,支持的输入最大长度为4096,Baichuan-7B模型在1.2万亿个Token的中英双语数据下进行训练,采用RoPE位置编码,而Baichuan-13B模型则是在1.4万亿个Token数据下进行训练,采用ALiBi位置编码。
2023年9月6日,百川智能又发布了Baichuan2系列模型,包含7B和13B模型,同时还公布了更多数据构造及模型优化上的细节。相较于Baichuan模型来说,Baichuan2模型的主要改进在于:
●模型覆盖的语种变多:从仅支持中、英双语变成支持更多种语言。
●训练数据量增加:数据从1.2万亿个Token增加到2.6万亿个Token,使模型能力更强。
●词表增大:利用SentencePiece中的BPE方法将词表大小从64 000扩展到125 696。为了更好地编码数字内容,将数字序列分成单独的数字;为处理代码中的空格,在词表中额外添加了空Token;词表中Token的长度最长不超过32;对数据压缩更多,使模型的解码效率提高。
●开源中间步骤模型:不仅开源训练最终的模型,还开源了更多训练过程中的临时模型(checkpoint),更便于学术研究。
●垂域支持:在医疗和法律领域的效果更为优异。
Baichuan2模型在数据采集过程中,为了数据的全面性和代表性,从多个来源进行数据收集,包括网页、书籍、研究论文、代码等,各类别数据分布如图1-11所示。此外,从数据的频率和质量两个角度对数据进行清洗,最终保留了原始数据的36.18%,清洗规则如下:
●数据频率。借助LSH-like和嵌入(Embedding)特征对数据进行聚类和去重,主要是对每个聚类后的簇中内容(文档、段落、句子)进行去重和打分,分值用于最终的数据采样。
●数据质量。句子级别质量过滤,但未明确过滤规则。不过从图1-11的模型安全部分可知,对数据进行了暴力、色情、种族歧视、仇恨言论等有害内容过滤,应该还包含其他内容。
图1-11 Baichuan2模型训练数据分布图
Baichuan2模型仍然采用Transformer的解码器结构,但做了一些小改动。
●位置编码:7B的位置编码采用RoPE,13B的位置编码采用ALiBi。因为两种位置编码对模型效果基本没影响,所以继承了Baichuan1的7B和13B的位置编码。
●激活函数:采用SwiGLU激活函数,不同于传统FFN的2个矩阵,SwiGLU有3个矩阵,因此降低了隐藏层维度,由原来的4倍变成8/3倍,再调整为128的整数。
●归一化:对Transformer的输入进行层归一化,提高warm-up的鲁棒性,并用RMSNorm实现。
●NormHead:为了提高模型训练的稳定性,对输出的嵌入向量进行归一化。
●Max-z loss:受NormSoftmax启发,对logits进行归约,主要有助于稳定训练并使推理对超参数更具鲁棒性。
Baichuan2模型对微调数据进行严格把关,最终收集了10万个数据进行模型的有监督微调。并且,设计了一个三层分类系统全面覆盖所有类型的用户需求,包括6个主要类别、30个二级类别、200多个三级类别。在奖励模型训练时,需要保证每个类别内的数据有足够的多样性,以确保奖励模型有更好的泛化性。此外,奖励数据中的结果需要由Baichuan2模型生成,以确保数据分布的统一。在人类偏好对齐阶段,为了增加模型的安全性,召集10个有传统互联网安全经验的专家构建了6种攻击类型和超过100个细粒度安全价值类别,由50人标注团队生成20万个攻击性提示,进行模型安全性的对齐训练。
在ChatGPT爆火之后,国内各厂商都紧追不舍,纷纷开放自研大型语言模型接口邀请用户进行测试和体验。百度在2023年3月16日宣布大型语言模型“文心一言”开始内测,阿里巴巴在2023年4月7日宣布自研大型语言模型“通义千问”开始内测,很多厂商纷纷发声,开启了国内大型语言模型的崛起之路。但仅通过API来访问大型语言模型,对研究这些模型的人来说变得十分困难。阿里巴巴为了帮助更多人从事大型语言模型相关的研究,于2023年8月3日开源了70亿个参数的“通义千问”大模型Qwen-7B,在9月25日又开源了140亿个参数的“通义千问”大模型Qwen-14B,随后在11月30日开源了18亿个参数和720亿个参数的“通义千问”大模型Qwen-1.8B和Qwen-72B。
Qwen模型的预训练数据主要涉及公共网络文档、百科全书、书籍、代码等,数据涉及多种语言,但以中文和英文为主。为了保证数据质量,Qwen模型制定了一套全面的预处理程序,最终仅保留了3万亿个Token的训练预料,具体如下:
●Web数据需要从HTML中提取文本内容,并采用语言识别工具确定语种。
●通过重复数据删除技术增加数据的多样性,包括规范化后的精确匹配重复数据删除方法及使用MinHash和LSH算法的模糊重复数据删除方法。
●结合规则和机器学习的方法过滤低质量数据,即通过多个模型对内容进行评分,包括语言模型、文本质量评分模型及用于识别潜在冒犯性的模型。
●从各种来源数据中手动采样并进行审查,以确保其质量。
●有选择地对来自某些来源的数据进行采样,以确保模型在各种高质量内容上进行训练。
Qwen模型在构建词表的过程中,采用BPE分词器,以cl100k为基础词库,增加了常用的中文字词及其他语言的词汇,并把数字字符串拆成单个数字,最终将词表大小定为15.2万。模型结构依然采用Transformer的解码器结构,但做了以下修改:
●对于嵌入层和lm_head层不进行权重共享,是两个单独的权重。
●采用RoPE位置编码,并选择使用FP32精确度的逆频率矩阵。
●在QKV注意力层中添加了偏差,以增强模型的外推能力。
●采用预归一化提高训练稳定性,并将传统归一化方法替换为RMSNorm。
●采用SwiGLU激活函数,因此降低了隐藏层维度。
此外,在模型预训练过程中,Qwen模型采用Flash Attention技术来提高训练速度;采用AdamW优化器,并将超参数 β 1、 β 2和 ε 分别定为0.9、0.95和10 -8 ;采用余弦学习率计划,学习率衰减到峰值的10%;采用BFloat16进行混合精度训练。由于Transformer模型的注意力机制在上下文长度上有很大的限制,随着上下文长度的增加,模型的计算成本和内存会成倍增加。Qwen模型利用了动态NTK感知插值(随着序列长度的增加动态缩放位置信息)、LogN-Scaling(对 Q 和 V 的点积进行重新缩放,确保注意力值的熵随着上下文长度的增加而保持稳定)及窗口注意力机制(将注意力限制在一个上下文窗口内,防止模型关注到太远的内容)等方式,在推理过程中可以将上下文长度扩展到1.6万个Token。
为了提高有监督微调数据集的能力,Qwen模型对多种风格的对话进行了标注,以关注不同任务的自然语言生成,进一步提高模型的有用性。Qwen模型采用可以使模型有效区分各类信息(包括系统质量、用户输入、模型输出等)的ChatML样式的格式来进行模型训练,以增强模型对复杂会话的处理和分析能力。在人类偏好对齐阶段,奖励模型先采用大量数据进行偏好模型预训练(Preference Model Pretraining,PMP),再采用高质量偏好数据进行奖励模型精调。高质量偏好数据通过具有6600个详细标签的分类系统平衡采样获取,以保证数据的多样性和复杂性。奖励模型由同等大小的Qwen模型+池化层得来,用特殊的句子结束标记映射值作为模型奖励值。Qwen系列模型的详细参数如表1-5所示。
表1-5 Qwen系列模型的详细参数
2023年10月30日,昆仑万维开源了130亿个参数的天工大模型Skywork-13B。Skywork-13B模型共采用3.2万亿个Token的数据进行模型预训练。预训练数据以网页、书籍、学术论文、百科全书、代码为主,涉及多种语言,但以中、英文为主,详细数据分布如表1-6所示。其中,杂项数据涉及法律文本、法律裁决书、年报等。Skywork模型的数据清洗过程主要包括结构内容提取、数据分布过滤、数据去重、数据质量过滤,并为了协调模型中英文的熟练程度,还构建了一个高质量的平行语料库(将英文段落与相应的中文段落配对,确保两种语言之间的语言能力无缝匹配)。
表1-6 Skywork模型的详细数据分布
(续)
Skywork模型在构建词表的过程中采用BPE分词器,对LLaMA模型的原始词表进行扩充,加入常用的中文字符和词语,包括BERT模型词表中的8000个单字符和25 000个高频的中文词语,并且保留了17个预留符号,最终词表大小扩展到65 536。Skywork模型的结构依然采用Transformer的解码器结构,但做了以下修改。
●位置编码:采用与LLaMA模型相同的RoPE,以便后续的上下文扩展。
●层归一化:对Transformer的输入进行前层归一化(pre-normalization),并用RMSNorm实现,以增强模型训练的稳定性。
●激活函数:采用SwiGLU激活函数,并将前馈网络的维度从隐藏层的4倍变成8/3倍。
与LLaMA模型相比,Skywork模型的结构更深、更窄,如表1-7所示,Skywork模型的层数较多,但隐藏层维度较小。
表1-7 Skywork模型与LLaMA模型结构差异对比
Skywork模型在预训练时采用了两阶段预训练策略,在第一阶段中主要采用通用语料(爬取的网页数据、书籍数据、论文数据等)进行模型预训练,让模型学习通用能力;在第二阶段中主要采用STEM(科学、技术、工程、数学)数据进行模型预训练,提升模型数据、逻辑推理、解题等能力。模型在预训练过程中输入上下文的最大长度为4096,采用AdamW优化器进行模型优化,其中 β 1和 β 2值分别为0.9和0.95,并且模型采用BFloat16混合精度进行训练。在第一阶段通用预训练时,采用2万亿个Token数据,利用余弦学习率进行训练,学习率从6×10 -4 逐步衰减到6×10 -5 。后续发现模型并没有完全收敛,增加了1万亿个Token数据进行增量训练,并将学习率恒定为6×10 -5 。在第二阶段预训练时,采用1300亿个数据和恒定为6×10 -5 的学习率进行模型训练。