一.引言
语言建模的四个阶段,统计语言模型(SLM):基于马尔科夫假设建立词预测模型,n-gram,神经语言模型(NLM):word2vec,预训练语言模型(PLM):bert,大语言模型(LLM):GPT,LLM出现PLM不曾有的涌现能力。
本文从四个方面,预训练(如何预训练出一个有能力的LLM),适应微调(如何从有效性和安全性两个角度有效的微调预训练的LLM),使用(如何利用LLM解决各种下游任务),能力评估(如何评估LLM能力)。
二、.概述
LLM基于transformer架构,大幅扩展了模型大小,预训练数据和总计算量。
大模型的涌现能力被定义为在小模型中不存在但在大模型中出现的能力,有3个代表性的LLM的涌现能力,
1.上下文学习,假设提供给语言模型自然语言指令或多个任务演示,它可以通过完成输入文本的但系序列来为测试实例生成期望的输出,而无需额外的训练或梯度更新;
2.指令遵循,通过使用自然语言描述的多任务数据集上微调,LLM可以在同样使用指令形式化描述的未见任务上表现良好,有更好的泛化能力;
3.逐步推理,采用思维链,LLM可以利用包含中间推理步骤的提示机制来解决问题。
LLM能力提升关键技术:
1.扩展,GPT3的175B和PaLM的540B,大模型大数据量;
2.训练,分布式训练,DeepSpeed,Megatron-LM;
3.能力引导,设计合理的任务指令或具体的上下文学习策略或者微调技术;
4.对齐微调,InstructGPT,保证生成有用性,诚实性和无害性内容;
5.外部工具:插件,搜索引擎,视觉和语音技术结合。
三、大语言模型资源
在现有的大语言模型的基础上进行开发
百亿级别模型:LLaMA(65B),NLLB(54.5B),10-20B之间:mT5,PanGu-alpha,T0,GPT-NeoX-20B,CodeGen,UL2,Flan-T5,mT0.
千亿级别模型:OPT,OPT-IML,BLOOM,BLOOMZ,GLM,Galactica
常用语料库
Books:Bookcorpus是之前小规模模型(GPT2)中常用的,包括超11000本电子书;Common Crawel:是最大的开源网络爬虫数据库之一,百万亿字节级别;Reddit link:高赞链接,知乎或者贴吧类似的;Wikipedia:在线百科全书,多语言;Code:github/stackOverflow
GPT3:300B,包括commonCrawl,WebText2,Books1,Books2,Wikipedia
PaLM:780B,网页,书籍,github,多语言维基百科,新闻
LLaMA:CommonCrawl,C4,Github,Wikipedia,书籍,Arixv和StackExchange
四、预训练
4.1 数据
与小规模预训练语言模型不同,大模型对计算资源的巨大需求,不可能对模型进行多次迭代。预训练语料库的质量和分布都会影响大模型性能。
1.混合来源,不同预料的分布会影响大模型下游任务的性能。
2.预训练数据的数量,随着大语言模型参数规模的增加,需要增加更多数据,chinchilla表明,现有许多大语言模型由于缺乏足够的预训练数据而受到次优训练的影响,llama表明,随着更多数据和更长时间的训练,较小的模型可以实现良好的性能。
3.预训练数据的质量,去重。
4.2 架构
4.2.1 主流架构
Transformer大致可分为三种类型,编码器-解码器,因果解码器,前缀解码器。
encoder-decoder:原始transformer,编码器采用堆叠的多头自注意层对输入序列进行编码已生成潜在表示,而解码器对这些表示进行交叉注意并自回归的生成目标序列。
causal decoder:单向注意力掩码,以确保每个输入标记只能关注过去的标记和它本身,GPT系列都是这个架构,OPT,BLOOM。
prefix decoder(non-causal decoder):修正了因果解码器的掩码机制,以使其能够对前缀标记执行双向注意力,并仅对生成的标记执行单向注意力。与encoder-decoder类似,前缀解码器可以双向编码前缀序列并自回归的逐个预测输出标记,PaLM和GLM。
4.2.2 配置
自transformer推出以来,改进方法包括:标准化、位置编码、激活函数、注意力和偏置。
标准化:LN后置->LN前置->Sandwich-LN->RMS Norm->DeepNorm
激活函数:GeLU->GLU->SwiGLU->GeGLU
位置编码:由于transformer中的自注意模块是置换等变的,因此需要使用位置编码来注入绝对或相对位置信息以建模序列,正弦函数和学习的位置编码,后者常在大模型中使用,ALiBi,RoPE.
注意力机制和偏差:transformer->flashattention
4.2.3 预训练任务
语言建模:LM,自回归
去噪自编码:DAE,输入一些有随机替换区间的损坏文本,语言模型被训练已回复被替换的标记,GLM和T5。
4.3 模型训练
4.3.1 优化设置
批量训练:8196个样例或1.6M标记。GPT和PaLM在训练中动态增加batch,从32k逐渐增加到3.2M。
目前很多训练技术已被集成到DeepSpeed,Pytorch和Megatron-LM中,混合精度训练技术,如BF16,可以提高训练效果和减少GPU内存使用,但是需要A100。
五、大语言模型的适配微调
指令微调和对齐微调,前一种方法旨在增强大语言模型的能力,后一种方法旨在将大语言模型的行为和人类的价值观偏好对齐。
5.1 指令微调
本质上,指令微调是在自然语言格式的实例集合上微调预训练后的大语言模型的方法。这种方法与有监督微调和多任务提示训练相关,首先收集或者构造指令格式的实例,然后,使用这些格式化的实例以有监督的方式微调大语言模型。例如instructGPT和GPT4。
5.1.1 格式化实例构造
通常情况下,一个指令格式化的实例包括一个任务描述(指令),一个输入输出对以及少量示例(可选)。
格式化已有数据集:作为指令微调实例的重要来源,使用自然语言的任务描述格式化这些多任务训练数据集是很方便的。使用人类编写的任务描述来增强标记的数据集,这些描述通过解释任务目标来知道LLM理解任务。对图4b中,针对问答任务中的每个实例都添加了一个任务描述:请回答下列问题,在指令调整之后,LLM可以通过遵循它们的任务描述很好的泛化到其他看不见的任务。
格式化人类需求:instructGPT建议采用用户提交给openai的查询作为任务描述,用户查询以自然语言表示,很适合引出LLM遵循指令的能力,人工描述指令。
实例构建的关键因素:扩展指令:扩大任务数量可以极大的提高LLM的泛化能力,格式设计:可以向现有数据集的输入-输出对添加任务描述和可选的示例,一些工作建议包含一些面向推理数据集的cot示例。
5.1.2 指令微调策略
与预训练不同,指令微调通常更加高效,其只需要使用一定数量的实例进行训练,指令微调可以被视为一个有监督的训练。
平衡数据分布:实例比例混合策略,即将所有数据合并,然后从混合数据集中等比例采样每个实例。
结合指令微调和预训练:在指令微调中可以加入预训练数据,可以看成是对模型的正则化。
5.2 对齐微调
5.2.1 对齐微调的背景
LLM,语言建模目标是通过单词预测对模型参数进行预训练,但缺乏对人类价值观和偏好的考虑,提出人类对齐,使大语言模型行为能够符合人类的期望,但是与初始的预训练和适应微调不同,语言模型的对齐需要考虑不同的标准。
对齐标准:有用性,诚实性和无害性。
5.2.1 人类反馈收集
主要有3种方法从人类标注者中收集反馈和偏好数据。
基于排序的方法:标注人员通常以较为粗略的方式从若干候选中选择最佳的评估模型生成的输出。
基于问题的方法:标注人员可以通过回答研究设计的特定问题来提供更详细的反馈。
基于规则的方法:不仅要求标注人员挑选最佳的回复,还设计了一系列规则还测试模型生成的回复是否符合有用、正确和无害的对齐标准。
5.2.3 基于人类反馈的强化学习
RLHF包括三个关键组件:要对齐的预训练LM,从人类反馈中学习的奖励模型以及训练LM的RL算法。
1.监督微调:通过需要收集一个包含输入提示和所需输出的监督数据集,以对LM进行微调。instructGPT使用人工标注。
2.训练奖励模型:使用人类反馈数据训练RM,使用LM采样提示(来自监督数据集或人工生成的提示)作为输入来生成一定数量的输出文本,让人工标注人对这些进行标注偏好,常见的做法是对生成的候选文本进行排序标注。在instructGPT中。标注人员将模型生成的输出从最好到最差进行排名,然后训练RM(即6B的GPT3)来预测排名。
3.RL微调:对齐微调被形式化为RL问题。在此设置中,预训练的LM作为策略,将提示作为输入并返回输出文本,它的动作空间是LM的词表,状态是当前生成的token序列,奖励由RM产生,instructGPT使用PPO算法针对RM优化LM,对于每个输入提示,instructGPT计算当前LM和初始LM生成的结果之间的KL散度作为惩罚。
6.使用
7.能力测评