标题
简介 模型预训练 预训练设置 硬件资源与碳排放 模型评估 模型微调 有监督微调 基于人工反馈的强化学习(RLHF) 人类偏好数据的收集 奖励模型 迭代微调过程 多轮对话控制 RLHF 结果 模型回答的安全性一直以来,Llama模型被认为是AI社区最强大的开源模型,国内外众多的开源模型均是在其基础上二次训练/开发而来,如Alpaca模型、BELLEE模型、Guanaco模型、Vicuna模型。但由于开源协议问题,Llama模型一直无法被免费商用。上周,Meta AI 团队开源了最新的大模型Llama2,其能力比肩ChatGPT,并且可免费商用,开源地址见 这里,示例代码见 这里,为大模型的开源再次推波助澜。值得一提的是,Meta AI 团队不仅开源了Llama 2的预训练模型,同时发布了Llama 2的论文详细介绍了Llama 2模型的训练过程和微调过程,本文将对Llama 2的论文进行解读,学习Llama 2模型微调中的核心方法。
简介
在介绍详细工作之前,Meta AI 团队首先将Llama 2 模型的能力进行其他开源模型和比原模型进行了对比,如图1所示。可以看出,在Meta AI 团队的测试中,在模型能力方面,Llama 2 模型的能力已经比肩ChatGPT;在模型的能力和安全性综合能力方面,Llama 2则要更胜一筹。
论文中介绍到,经过Meta AI 对大模型的实用性和安全性的测试对比,此次发布的Llama 2是目前开源模型中效果最好的模型,并且可以免费商业。本次发布的开源模型有两个系列:
Llama 2模型的训练工作,主要分为三大部分,分别是Pre-training、Fine-tuning和Human Feedback,整个训练的过程如图2所示。其中,Pre-training模块主要进行模型预训练;Fine-tuning 模块聚焦于基于人类反馈的强化学习过程(RLHF,Reinforcement Learning from Human Feedback),其中涉及了两种算法/策略,一种是曾在GPT系列文章中被采用的Proximal Policy Optimization (PPO)算法,另一种则是Rejection Sampling fine-tuning策略;Human Feedback 模块主要进行奖励模型(Reward Model)的训练,其中针对模型的能力和回答的安全性分别训练了两个奖励模型——Safety Reward Model 和Helpful Reward Model。
模型预训练
预训练设置
Llama 2模型与Llama 1模型在模型的结构和预训练的设置上大部分保持一致,Llama 2模型中采用了标准的transformer 结构,在其中采用了RMSNorm,同时使用了SwiGLU激活函数和RoPE的embedding方式。与Llama 1的训练相比,Llama 2的训练的特点主要有:
1)完成更多的数据清洗工作
2)更新了数据混合策略
3)增加了更多的训练数据
4)实现了文本长度的翻倍
5)采用了grouped-query attention (GQA) 方法
Llama 2模型与Llama 1模型的预训练设置对比如下表所示,文章的附录A.2.1还提供了相关的对比试验:
在Llama 2模型的预训练中,Meta AI采用了全新的公开数据(其中并不涉及任何meta产品的用户数据),并且对数据中的个人信息和隐私数据进行了筛选和删除,共计2万亿token。采用的tokenizer与Llama 1一样,词典大小为32K,预训练过程的主要超参数设置如下表:
论文中还提供了Llama 2模型预训练过程的loss统计,如下图所示。可以看出,随着模型参数的增加,模型的训练效果更加显著,这种趋势在GPT系列工作的论文中也有介绍;同时,还可以看出,随着预训练的数据量增加,模型的训练loss也呈下降趋势,也就是说,如果采用更多的预训练数据,模型的预训练效果可能会更好。
硬件资源与碳排放
Meta AI 在训练Llama 2时使用的是Meta 的超级计算机群,其中全部配置的NVIDIA A100显卡。为了响应低碳计划,论文还列出了不同模型预训练所需的GPU计算时间、功率和碳排放,如下图所示。根据此统计表,大家也可根据预训练时间推测Llama 2模型预训练所使用的GPU数量。
模型评估
Llama 2预训练完成后,论文对Llama 1、Llama 2(预训练版本)、MPT和Falcon在内部评测数据上对模型的代码能力、推理能力、阅读理解能力、数学能力等进行了对比测试,如下图所示。从对比图中可以看出,在同样的参数量级下,完成预训练后的Llama 2模型的各项能力要优于Llama 1、MPT和Falcon。
除了与上述的开源模型进行对比外,论文中还提供了与部分闭源模型的测试对比,如下图所示。可以看出,预训练后的Llama 2模型的多项得分虽然低于这些闭源模型的得分,但是差距也是相对较小的。当然,这仅仅是预训练后的Llama 2模型(即开源的Llama 2系列)的表现,还没进行后面的微调工作呢。
模型微调
对于Llama 2的微调,Meta AI将经过微调后的Llama 2的模型命名为Llama 2-Chat,其中的微调过程包括指令微调和RLHF过程。对于模型的微调工作,论文中将其分为了三个小节,第一小节主要介绍“有监督微调”,第二章节主要讲解“奖励模型”的训练和“RLHF”过程,第三个章节重点介绍了Ghost Attention(GAtt)方法。
有监督微调
作者首先采用了与Llama 1相同的微调方法和微调指令集进行第一步的有监督微调;然后使用质量更高的数据进行再次微调。在微调过程中,作者发现高质量的数据集能给模型的效果带来显著的提升,因此Meta AI团队做了很多工作来确保数据的高质量,此过程中共计收集了27540条高质量数据(其中不包含任何Meta产品的用户数据)。
微调细节:在有监督微调过程中,每个样本数据包括一个prompt和一个answer,为了保证模型的文本长度一致,每条数据的prompt和answer用一个特殊的符号进行拼接,然后传入模型,整个过程仅仅进行了2个epochs。
基于人工反馈的强化学习(RLHF)
RLHF也是一个训练过程,此过程是为了让微调后的模型能够更加倾向于给出人类/研究人员希望/偏好的回答。作者让一些标注人员对模型生成的答案进行标注,选出他们最喜欢的答案,然后用这些标注人员更满意的答案来训练一个reward 模型。
人类偏好数据的收集
对于RLHF阶段的数据收集,作者先让标注人员写一个prompt/问题,然后根据指定的评判规则从两个模型生成的答案中选择一个。为了保证生成答案的多样性,这两个答案分别是由不同的模型中生成(其中的temperature参数被改变)。此外,作者还要求注释者标注他们对所选答案的偏好程度:significantly better, better, slightly better, or negligibly better/ unsure。
此外,作者还对数据集做了可用性和安全性的思考,并且进行了针对性的处理。 其中,人工标注的数据会每周进行一次收集,每次用收集完的数据训练完reward模型后,llama 2-Chat模型也会同样进行一次更新,然后再用新版的llama 2-Chat的新生成的数据进行人工标注,再继续更新reward 模型,如此迭代,保证新的reward 模型能够与llama 2-Chat 模型同步更新。
在下面的表格中,作者将收集的数据集与多个开源的人类偏好数据集进行了对比,从比较结果可以看出,作者收集的数据集包含更多的会话回合,并且平均内容更长。
奖励模型
关于RLHF,作者训练了两个奖励模型,其中一个是利用“可用性”偏好的数据集针对可用性的优化,另一个是利用“安全性”偏好的数据集针对安全性的优化。对于奖励模型,作者同样使用预训练的Llama 2-Chat模型的checkpoints为基础进行训练,这样就能保证奖励模型也能理解Llama 2-Chat模型的目标的任务。这种办法的优点是能够避免一些意外的偏差情况出现,比如,这两个模型出现信息不匹配,这可能导致模型出现偏好幻觉(即模型认为它是按照人类数据偏好进行的奖励学习,但实际上却不是),reward模型和Llama 2-Chat模型差别就在于模型输出中的标记预测的分类头被用于输出标量奖励的回归头所取代。
奖励模型的训练的目标(loss函数)为:
其中,yc 表示更倾向人类偏好的答案,yr 表示相对不适合人类偏好的答案;rθ (x,yc ) 表示当模型参数集合为 θ 的情况下,输入 x 得到的输出与 yc 的标量分数,rθ (x,yr ) 同理。前面提到过,训练reward模型的数据需要人工进行标签(significantly better, better, slightly better, or negligibly better/ unsure.)。为了使loss能够体现出不同标签之间的差异,作者在loss函数中添加了一个 m (r) 离散函数,这个函数能够更好地提升奖励模型的准确率(论文在table 28和附录A.3.3中进行了解释)
对于奖励模型的训练参数,论文中进行了简要的介绍:同样使用AdamW 优化器,70B的Llama 2-Chat模型最大学习率为 5×10-6,其他的模型最大学习率为 1×10-5,learning rate schedule 为cosine, warm up设置为总训练步数的 3%,最小值为5,batch size 为512。
奖励模型训练完成后,作者将训练的奖励模型与其他公开的奖励模型进行了测试对比,如下表所示。可以看出,Llama 2-Chat的奖励模型在可用性和安全性上的表现都是非常出色的;综合来看,完全超过了其他模型。
除了与其他奖励模型进行对比外,作者还对奖励模型的训练过程数据进行了统计,如下图所示。作者发现,随着模型参数的增加,奖励模型的能力呈上升趋势(这一点和预训练的过程的数据呈现的趋势一致);同时,随着训练数据的增加,奖励模型的能力同样呈上升趋势。作者认为,RLHF作为大模型最终能力的最重要步骤之一,提升奖励模型的效果将直接给大模型的最终能力带来显著的提升(在下个版本中,作者可能对奖励模型进一步优化)。
迭代微调过程
前面我们提到过,奖励模型的训练和Llama 2-Chat模型的训练是同步迭代的,作者在RLHF中训练了多个版本的大模型,被称为RLHF-V1, RLHF-V2,…, RLHF-V5,整个过程采用了两种算法来更新大模型:
Proximal Policy Optimization(PPO)算法,目前最常见的RLHF算法之一,是由OpenAI的团队提出,并且在GPT系列的工作中得到应用并表现出非常好的效果。 Rejection Sampling fine-tuning(拒绝采样)方法,当输入prompt后,从之前的模型(本次迭代训练之前的模型)中抽样出最好的K个输出,然后用最新的奖励模型对这些得到的输出进行评分,其中选择评分最高的输出进行模型参数更新。需要注意的是,作者在RLHF(V4)之前一直在RLHF中采用拒绝采样的方式;之后就采用拒绝采样和PPO的方式来完成RLHF过程。另外,作者仅仅在最大的模型70B的 llama-chat的微调过程中使用了拒绝采样,其他小模型都是用大模型拒绝采样的数据来进行微调,也就是利用能力好的大模型来蒸馏小模型。
多轮对话控制
在对话任务中,某些instruction可能需要在多轮对话中使用,但是作者在最初的RLHF中发现,模型在多轮对话后会遗忘对话开始的instruction。为了解决这个问题,作者提出了Ghost Attention (GAtt)方法——一种模型训练的trick,这种方法能够帮助模型在多轮对话中对知识进行聚焦,效果如图所示。
Ghost Attention(GAtt)方法就是在原先的多轮对话中增加一个instruction,将原始的对话变[u1,a1,…,un,an] (u1表示用户的第一轮输入,a1表示对应的第一轮回答,u2表示第二轮的用户输入,依次类推)变为[inst+u1,a1 ’ ,…,inst+un,an’ ]。这种方式的思路就是生成一种更加聚焦的数据集来微调模型,比如原始的数据集为[u1,a1,…,un,an],作者通过新增instructions 得到新的数据集[inst+u1,a1 ’ ,…,inst+un,an’ ],然后用这两者混合的数据[inst+u1,a1 ‘,u2,a2’ ,…,un,an’ ]来微调模型,这样就能使模型在多轮对话中始终保持对instruction的聚焦。为了避免出现语句不匹配的问题,在训练过程中,仅仅保留第一轮的提示,并将中间轮数的损失置为0。需要注意的是,作者并不是在RLHF阶段一开始就使用GAtt方法,而是在RLHF V3之后才使用GAtt方法使模型增加对多轮对话的控制。
RLHF 结果
为了评测RLHF后的模型效果,作者将Llama 2-Chat模型、部分开源模型和闭源模型的进行了效果对比,其中采用人工评测的方式对各个模型的回答进行评分,总体对比结果如下图所示。可以看出,Llama 2-Chat模型的整体测试结果要优于其他的开源模型,并且基本上与ChatGPT相当。
模型回答的安全性
为了保证模型回答的安全性,作者也进行了大量的工作,其中主要有:
(1) 作者在收集数据的时候就按照人类的安全偏好进行了数据收集,这就使模型在RLHF之前就会生成偏向遵从人类的安全意识的回答。
(2) 在RLHF阶段,单独训练了一个安全性的奖励模型,以便于对模型的进一步微调时能够偏向输出更加安全的回答。
(3) 在RLHF阶段使用上下文蒸馏的方法。其中包括通过增加额外的 prompt “You are a safe and responsible assistant, ” 来生成安全偏好的问题回答;然后用这些不带额外prompt的问题和对应生成的安全的回答去微调模型。
另外,作者还进行了一系列的主动安全测试——被称为 “red teaming”。这些安全测试是通过测试人员与模型进行不同领域的安全问答,并且将问答的结果进行反馈,以进一步优化模型的回答的安全性。其中,安全测试人员共计超过350人,其中包括各个领域的专家,如网络安全、社会舆论、法律、政策、人权、道德等领域;其中涉及的问题同样丰富,如社会经济、性别和种族等。
论文在对Llama 2-Chat模型的问答安全性进行了评估,同时与部分开源和闭源模型进行了对比,如下图所示。可以看出,在模型回答的安全性方面,Llama 2-Chat是远优于其他开源模型的,部分版本的模型优于ChatGPT。