赞
踩
LlaMA 2是一个经过预训练与微调的基于自回归的transformer的LLMs,参数从7B至70B。同期推出的Llama 2-Chat是Llama 2专门为对话领域微调的模型。 在许多开放的基准测试中Llama 2-Chat优于其他开源的聊天模型,此外Llama 2-Chat还做了可用性与安全性评估。 Meta官方推荐可将其作为大部分的闭源模型替代品。
Meta不仅开源了Llama 2而且还详细说明了其微调的方法和安全改进的方案, 是目前国内部分知名LLMs的前身,值得好好研究,内容比Gemini的报告强不少。
译自’Llama2: Open Foundation and Fine-Tuned Chat Models’ 只做了速检,笔者水平有限,敬请勘误。
大模型作为一个能力强大的AI助手, 擅长复杂的推理任务,这些任务往往需要广泛领域专业知识,包括编程、创意写作等专业领域。他们能通过直观的聊天界面与人类互动,使其在普通大众间迅速的传播及使用。
方法简单能力出众的LLMs, 需要大量的算力与人工标注成本
自回归的transformers是由大量的自监督语料库训练而成,然后通过诸如人类反馈强化学习(Reinforcement Learning with Human Feedback, RLHF) 等技术与人类偏好对齐。 尽管训练方法有简单,但其高算力的要求让LLMs的开发仅限在了几个大企业之间。目前有一些公开发行的LLMs(如BlOOM、LLaMa-1 和 Falcon) 其性能更靠近封闭式的预训练模型GPT-3和Chinchilla, 但这些产品并不是封闭式LLMs(如 ChatGPT、BARD 和 Claude) 的替代品。后者经过大严格的微调更符合人类偏好,且更具可靠性和安全性。 这些需要大量的算力和人工标注成本, 这些既不透明又不易于复制(easily reproducible) 的成本限制了社区推进AI对齐研究的进展。
我们发布的Llama 2,是经过微调与预训练的系列产品,Llama 2和Llama 2-Chat, 参数高达70B。 我们做一系列的可用性与安全性测试,Llama 2-Chat比现有的模型表现更好。它们似乎也和某些闭源模型的能力不相上下, 至少在我们的人工评测上是这样的。我们在提升模型安全性上采取了措施: 通过使用专有的安全数据标注与调整,进行了红蓝对抗(red-teaming)和迭代评估。 该论文包含了详尽的Llama 2的微调方式和其提升安全性的方法。我们希望这种开放性能让社区复制这个微调过的模型和并继续提高模型的安全性,为更尽责的发展LLMs铺平道路。
在该论文中,我们还分享了在开发Llama 2 and Llama 2-Chat过程中所做创新,诸如时间组织的知识和工具使用。
Meta声明公开发行的Llama 2采用了新的技术,这些新技术在使用时目前还有潜在风险,因此Meta对Llama 2做了安全评测与调整。Meta相信这个经过安全评测的LLMs是对社会有益。 论文指出目前所有用于Llama 2测试数据都是基于英文的,并没有涵盖所有的场景,他们建议开发人员在配置Llama 2-Chat之前应该根据他们特定的应用程序对模型进行安全测试与调整。
上图是LLAMA 2-CHAT的训练图示。 LLAMA 2使用了公开可用的在线数据进行预训练,基于此,Llama 2构建了一个LLAMA 2-CHAT的初始版本,该版本应用了有监督的微调技术。随后,模型使用RLHF对模武做了迭代策调,采用了拒绝采样与近端策略优化(Proximal Polic Optimization,简称PPO)。 在整个RLHF阶段, 迭代奖励建模数据的累积与模型增强并行,这确保被奖励的模型保持在其分布的范围内。
我们的预训练语料库来自公开来源的新数据组合,他们并不包含来自Meta的产品或服务的数据。我们删除从某些已知的保留大量个人信息网站上的数据。我们训练了2万亿的数据,这提供了良好的性能与成本权衡 (performance–cost trade-off), 对真实数据来源做了采样,以增强模型的知识性并抑制幻觉。
预训练数据来源有: CommonCrawl、C4、Github、Wikipedia、Books、ArXiv、StackExchange
我们采用了Llama 1中的大部分预训练配置与架构,使用标准了transformered架构,使用RMSNorm(均方根误差) 应用预归一化,使用SwiGLU激活函数,施转嵌入定位(RoPE)。 与Llama 1架构主要差别是增加了上下文长度和使用分组查询注意力(grouped-query attention GQA)。
超参数
我们使用了AdamW优化器, 其中β1=0.9,β2=0.95,eps=10−5β_1 = 0.9, β_2 = 0.95, eps = 10^{−5}β1=0.9,β2=0.95,eps=10−5。 我们使用了余弦学习率表,预热2000步,学习率最后衰减至其峰值的10%。我们使用了0.1衰减权重和1.0的梯度裁剪。
Table 1:Llama 2 与 Llama 1的属性对比
Figure 5: LlaMa 2的损失训练
分词器
Llama 2使用了和Llama 1相同的分词器。 它采用字节对编码(BPE)算法,使用了来自SentencePiece的实现。和Llama 1一样,我们拆解所有的数字类数据成单个数字,用字节拆解未知的UTF-8字符。总词汇大小为32k。
Llama 2分别在’Meta的研究超级集群(Meta’s Research Super Cluster RSC)'与’内部生产集群’上预训练了模型,两个集群都使用了英伟达(NVIDIA)A100的GPU。两个集群的区别在于:
由此我们可以对比不同类型的交换机是否符合大规模训练。RoCE是一种更经济实惠的商用互联网络,与昂贵的 Infiniband 相比几乎可以扩展到 2000个GPU,这让预训练更加平民化
Meta指出GPU 的实际功耗取决于其使用情况,同时该计算并没有考虑其他电力需求,比如来自互连设备或非GPU服务器的电力消耗,也没有考虑数据中心冷却系统的电力需求。正如Gupta等人所指出的那样,与GPU等人工智能硬件生产相关的碳排放可能会增加整体碳足迹。
Table2: Llama 2模型进行预训练时的碳排放表
表3是 Llama 2 在流行基准评测的总体性能, 参与评测的开源模型:Llama 1、 Llama 2 基本模型、MosaicML的MPT系列和Falcon模型。
表4是Llama 2在流行基准评测与闭封模型的性能对比
Llama 2-Chat是对准技术(alignment techniques)几个月的研究和迭代应用的结果,包括指令微调和RLHF,这些需要大量的计算和标注资源。本章内容有:
第三方SFT数据集可以从不同的来源获得,但我们发现这些数据的大部都分存多样性与质量的不足,尤其是为了保持LLMs与对话式指令保持一致时。
因此,我们首先集中精力收集数千个高质量的SFT样本数据集,我们暂时隔离了数百万的第三方数据集的示例,使用我们供应商标注的更少但高质量数据一起,我们结果得到显著的提升。这个发现与Zhou等到的观点类似,后者也发现有限但干净的指令微调数据足以让模型达到高水平,如上表(Table 5)。 我们发现数以万计的SFT的标注足以让模型的微调达到高质量的结果。 在收集完27,540个标注数据后,我们停止了对SFT标注。这些数据不包括任何Meta的用户数据。
上表第一列SFT微调指令,第一个是有益指令(Prompt)及回答,第二个是安全指令及回答
我们还观察到不同的标注平台和供应商有可能会导致下游任务的性能明显不同,强调数据检查如此重要,即便使用供应商源标注时。为了验证我们的数据质量,我们仔细的检测180个样本集,将人类标注的数据同模型由手工仔细检查生成样本相比较。令人吃惊的是,我们发现 从所得的SFT模型采样输出的往往与人类手写的SFT数据具有竞争力。这表明我们可以重新定义RLHF优先级,并将更多的标注工作投入到基于偏好的标注中。
我们用cosine学习速率表,初始学习率为2*10-5,衰减权重为0.1, batchsize为6和token序列长度为4096。 对于微调过程,每个样本都包含 一个prompt和一个回答。为了确保模型序列长度的正常填满,我们将训练集中的所有的prompt和回答连接了起来,使用一个特殊符号隔开prompt与回答片段。我们使用自回归目标,将来自用户prompt的token损失归零,因此我们只对答案的token做了反向传播。最后我们对模型进行了2个epoch的微调。
RLHF(人类反馈强化训练) 是一个模型训练的过程,应用于模型微调,使模型能进一步和人类偏好与指令对齐。 我们收集数据是代表人类偏好的经验采样,人类标注者可以选择他们更喜欢的两种模型输出中的哪一种。这个人工反馈被用于于奖励模型中, 该模型通过学习人类标注者的偏好的模式,能自动进行偏好决策。
接下来,我们为奖励建模收集人类偏好数据。 我们选择二元比较协议(binary comparision protocol),主要是因为他能使我们最大限度提高提示(prompt)的多样化。当然,其他策略也值得考虑,我们将其留给未来的工作。
我们的标注过程如下: 我们要求标注员首先写一个提示,然后基于给定的标准,在两个采样模型的回答中做出选择, 为了最大限度的提高多样化, 给定提示的两个回答抽取自两个不同模型的变体,他们拥有不同的温度和超参数。除了要求参者选择之外, 我们还要求标注者去标注他们所选回答与备选回签间相比的偏好级别:非常好,比较好,好,一般好, 可以忽略不计或不确定。
我们收集偏好标注重点关注其有用性和安全性。 有用益主要是指LlaMA 2-chat的回答如何更好完成用户的问题并提供所需信息。安全性是指Llama 2-Chat的回答内容是否不安全,比如,"提供一份制作炸弹的详细流程"可能被认为是有用的,但根据我们的安全指南,它是不安全的。 将两者区别开来,可以让我们对每种情况提供特定的指南,更好的指导标注者,例如,我们的安全标注提供了对抗性指令等指导原则。
除了标注准则的差异外,我们在安全阶段额外收集了一个安全标签。这个附加信息将模型的响应分为三类:1. 首选安全其他则不安全; 2. 两个回答都是安全的;3. 两个回答都是不安全的,分别有18%, 47%, and 35%安全数据集属于这3类。 我们不包括任务样本是属于 所选的响应是不安全的而其他是安全的 选项, 因为我们相信更安全的回答将更受人们的青睐。 有关安全原则和安全标注的更多细节可参考4.2.1。
我们的人工标注是按周分批收集的。 随着我们收集到了更多的偏好数据,我们的奖励模型也提到了改进,我们能够为Llama 2-Chat训练出越来越好的版本。Llama 2-Chat改进了也改变了模型的数据分布。因为 如果不暴露这些新的样本分布,奖励模型会的准确性会迅速下降。因此在新版的Llama 2-Chat调整迭代前收集新的偏好数据用于最新Llama 2-Chat迭代是非常重要的。这步将有助于保持奖励模型的分布和最新版模型的准确奖励。
如Tabe 6 是我们随着时间的推进收集到的奖励建模数据的统计表, 并将其与多个开源的偏好数据集进行比较,包括 Anthropic Helpful 和 Harmless (Bai et al., 2022a), OpenAI Summarize (Stiennon et al., 2020), OpenAI WebGPT (Nakano et al., 2021), StackExchange (Lambert et al., 2023), Stanford Human Preferences (Ethayarajh et al., 2022), 和 Synthetic GPT-J (Havrilla). 我们收集了超过1百万的二次元比较数据集, 它们是基于 人类应用我们指定准则的了的数据集, 我们将其称为元奖励建模数所集。 注决,提示与回答的长度因文本域而异。 摘要和在线论文的数据 通常需要更长的提示而对话类的提示则较短。 与现存的开源偏好数据集相比,我们的偏好数据集的有更多对话轮次、平均更时间更长。
奖励模型获取一个模型的回复及其相应的提示(包括从上一轮回答中的上下文)作为输入,再输出一个标量分数用于指示模型生成的质量(安全性与有用性) 。利用这些反馈分数作为奖励杠杆,我们可以在RLFH期间优化Llama 2-Chat, 更好的向人类偏好对齐,提升有用性和安全性。
其他人发现,有用性与安全性有时会相互抵消, 这可能会使单一的奖励模型在机器上表现良好受到挑战。 为了解决这个问题,我们分别训练两个奖励模型, 一个在有用性上做了优化, 另外一则是在安全性上做了优化。 我们从预训练聊天模型检查点开始的初始化奖励模型, 因为这样能确保两个模型都受益于从预训练中知识获取。简单的来说,奖励模型 “知道” 聊天模型所知道的内容。 例如,这可以防止两个模型的信息是不匹配, 它有可能造成的幻觉。这个模型的架构和超参数和那些预训练的语言模型是相同的,除了 用于下一个token预测的分类头 被用于 输出标量奖励的回归头替换外。
训练目标。 为了训练奖励模型,我们将收集的成对的人类偏好数据转换成按二进制排序的标签格式,强制所选响应的分值要高于其他响应。我们使用与Ouyang一致的二元排名损失:
Lranking=−log(σ(rθ(x,yc)−rθ(x,yr)))L_{ranking} = -log(σ(r_θ(x,y_c) - r_θ(x,y_r)))Lranking=−log(σ(rθ(x,yc)−rθ(x,yr)))
其中rθ(x,y)r_θ(x,y)rθ(x,y)是一个用模型权重为θ输出的提示x和完成y的标量分数。ycy_cyc是标注器选择的首选响应,yry_ryr拒绝的对应项。
在这种二元排名损失的基础上,我们又分别对其做了改进,以获取更好的有用性和安全性的奖励模型,如下所示。 正如上面章节所述,我们给定的偏好评级分为4分制(例如,非常好), 它能利用这些信息来过确的教导奖励模型去赋予更多差异的分数去生成更多不同的信息。为此,我们在这个损失表达式中添加了一个边距组件:
Lranking=−log(σ(rθ(x,yc)−rθ(x,yr)−m®))L_{ranking} = -log(σ(r_θ(x,y_c) - r_θ(x,y_r) - m®))Lranking=−log(σ(rθ(x,yc)−rθ(x,yr)−m®))
其中,边距 m®是一个偏好评级的离散函数。 自然的,我们对具有不同响应的配对使用更大的边距, 而为那些较相似响应的配对使用了较小的边距。我们发现这个边距组件能提升有用性的奖励模型的准确度,特别是在样本的两个响应更加分离的情况下。消融实验与分析请参与表28(如下表)。
数据组成。 我们将新收集的数据集与已存在的开源偏好数据集组成形成一个更多的训练集。 开源数据集用于引导我们的奖励模型,同时我们收集偏好的标注数据。我们注意到, 在研究RLHF的背景下,奖励信号主要是用于Llama 2-Chat学习人类偏好输出而不是任何模型的输出。然而, 在我们的实验中,我们并没有观察到来自开源偏好数据集的负面转移。 因此,我们决定将他们保留在我们的数据混合集中,因为他们能让生成的奖励模型更加的泛化并阻止奖励破解(reward hacking), 即Llama 2-Chat利用我们奖励模型的某些弱点,刻意的提高分数,尽管其表现并不好。
随着不同来源数据集的获取,我们用不同的混合方案去训练奖励模型的有用性和安全性,以确定其最佳方案。 经过广泛的实验,有用性奖励模型最终在所有的元有用性数据上做了训练,与来自源元安全数所集与开源的剩余数据集相合。元安全奖励模型在所有的元安全数据集和Anthropic Harmless上训练,与有用性数据集和开源有用性数据集以90/10的比例混合。我们发现对于10%有用性数据集的设置对样本的准确度特别有用, 其中,选择响应和拒绝响应都被认为是安全的。
训练细节。 我们对训练数据进行了1 epoch的训练。在早期实验中,我们发现这个过长时间的训练会导致过拟合。我们使用与基础模型相同的优化器参数, 70B参数的Llama 2-Chat的最大的学习率是 5×10−65 × 10−65×10−6,其他参数的学习率则是1×10−5 1 × 10−51×10−5. 学习率的下降策略采用余弦学习率表, 最终下降到了最大值的10%。 我们对总步骤中的3%进行预热,最小值是5。 有效的batch_size固定在512对或每批1024行。
奖励模型结果。 在每一批为奖励模型标注的人类偏好数据中,我们保留了其中的1000个样本作为一个测试集去评测我们的模型。我们将所有与测试集相关的提示称为 “元有用”与“元安全”,基于此,我们还评估了其他公开可用的可替代方案作为基线:
请注意,在推理时,与训练相反,所有奖励模型都可以预测单个输出的标量,无需访问他的配对输出。GPT-4,我们基于零样本提出问题:“请在A和B之间选择一个最优的答案”, 其中A和B是用于比较的两个响应, 其准确度方面请看Table 7。 正如所期待的,我们自己的奖励模型在基于Llama 2-Chat收集的内部测试集中的性能是最好的,有用性奖励模型在元有用测试集上性能最好,同样安全奖励模型在元安全测试集上性双脚也是最好的。总之,我们的奖励模型超过了所有的基线模型,包括GPT-4。 有意思的是,GPT-4优于其他非元奖励模型,尽管没有直接去训练该模弄也没有专门为这个模型做奖励建模任务。
有用性与安全性的奖励模型在他们自己的领域里表现优秀的潜在的原因是两个目标之间的紧张关系, 这种关系这有可能会混淆训练奖励模型的过程, 为了让一个单一的模型在两个维度上都表现良好,这就需要模型不仅会在给定的提示中选择更好的响应,而且还要区分对抗性提示和安全性提示。为此,分别优化了两个模型,实际上是减轻奖励模型的任务。 更多细节请参考附录A4.1
当我们根据偏好评级按Table 8(如下图)进行分组打分时,我们可以看到,“非常好” 的测试集的准确性更高,并随着比较对的相似的增加而逐渐降低。 可以预见,在两个相似模型的响应中做出决定,学习更多的人类偏好模型变成很有挑战,因为标注者的主观性及他们对细节的依赖,有可能会让响应变的不同。我们强调准确性要比Llama 2-Chat的性能更加重要。人类偏好标注的一致率在非相似的两个响应对中更明显。
伸缩性。我们研究了奖励模型在数据和模型大小上的缩放趋势,根据每周收集的奖励模型数据的增量,微调了不同大小的模型。如图6(下图)展示了这些的趋势,从这个图可以看出,较大模型在类似数据量下会获得更高性能的预期结果。 更重要的是,考虑到用于训练的现有数据标注量,缩放性能尚未稳定下来,这表明就更多标注方面还有改进的空间。我们注意到奖励模型的准确度是Llama 2-Chat最终性能的重要指标之一。虽然对于生成模型的综合评估其最佳实战是一个开放性的研究问题,但奖励任务的排名并没有歧义。 因此,在同等条件下,奖励模型的改进能直接转化为Llama 2-Chat的改进
随着我们收到更多批次的人类偏好的标注数据, 我们能够将奖励划型训练的更好,也有收集到更多的提示。 因此我们为RLHF模型训练了连续的版本,我们称这些连续的版本为RLHF-V1,…,RLHF-V5. RLHJ微调我们用两个主要算法:
两个学习率(RL)算法的主要不同点在于:
直到RLHF(v4),我们仅使用了拒绝采样微调,之后,我们将两按序组合,在再次采样之前,应用PPO在生成的拒绝样本的检查点之上。
Rejection Sampling 我们只使用最大的70B参数的Llama 2-Chat进行了拒绝采样,所有的更小模型微调的拒绝样本的数据都来自于最这个最大的模型, 这样可以将最大模型的能力提取到小模型中。这种方式的结果分析将在以后的工作中进行。
在每个迭代阶段,我们为最新模型的每个提示采样了K个回答。我为对每个样本进行了打分,给出了实验时可获得的最佳模型,然后为这些提示选择了最佳答案。在我们模型的较早版本中,直到RLHFv3为止, 我们的方法是将答案选择限定在之前迭代中收集的“袋子”样本。例如,RLHF v3仅使用了来自RLHF v2的样本进行训练。然而,尽管不断改进,这种方法还是导致模型的某些能力的倒退。例如, 通过定性分析发现, RLHF V3在诗歌的押韵方面比之前版本要差,这表明对遗忘原因及缓解措施的进一步调查,可能是未来一个富有成果的领域。
我们在随后的迭代版本中修改了我们的策略,即合并了所有先前迭代中表现最好的样本,例如RLHF-V1和RLHF-V2中使用的样本。尽管我们没有提供具体的数字,这个调整使迭代的性能显著提升,并有效解决了之前关注的问题。这个缓解措施与Synnaeve等人(2019)和Vinyals等人(2019)的文献中记载的方法是一致的。
如上图(图7) 我们说明了拒绝样本的好处。
最大曲线和中值曲线之间的增量可以解释为对最佳输出进行微调的潜在增益。在最大值曲线和中值曲线中间的增量可以解析为对最佳输出的进行微调的潜在增益。正如预期的那样,这个增益随样本的增加而增加,增加的是最大值而但中位数的保持不变。探索和我们从样本中获得的最大回报之间有着直接的连接。这个temperature parameter也在探索中扮演了一个重要的角色,温度越高能使我们样本到更多样化的输出。
如图8(左图是Llama 2-Chat的SFT右图是Llama 2-Chat RLHF)展示了不同temperatures下在N个样本间的最大奖励曲线(N ∈[1,…,100]∈[1,…,100]∈[1,…,100])。我们有观察到在模型迭代更新过程中最佳的temperature不是恒定的: RLHF对重新调整temperature有直接的影响。 因为Llama 2-Chat的RLHF, 当样本输入在10~100之间时其最佳temperature为 T∈[1.2,1.3]T∈[1.2, 1.3]T∈[1.2,1.3]。 在计算预算有限的情况下,有必要逐步重新调整temperature。请注意,对于每个模型来说,这种temperature重新调整的步骤数是恒定的,并且总是从在最新RLHF版本的基础模型开始。
PPO。我们按照Stiennon等人的方法进一步训练我们的语言模型,那我们使用奖励模型作为真实奖励函数的评估 和使用预训练语言模型作为优化策略。我们使用的发吓的优化方法:
argmaxπEp~D,g~π∣R(g∣p)∣arg\max\limits_{π} E_{p~D,g~π}|R(g | p)|argπmaxEp~D,g~π∣R(g∣p)∣
我们从我们数据集D中采样提示p和从策略 π 中生成g来迭代改进策略,且为了达到该目标我们使用PPO算法和损失函数。在优化期间我们使用的最终奖励函数如下:
R(g∣p)=R˜c(g∣p)−βDKL(πθ(g∣p)∣∣π0(g∣p))R(g | p) = ~R_c(g | p) - βD_{KL}(π_θ(g | p) || π_0(g | p))R(g∣p)=R˜c(g∣p)−βDKL(πθ(g∣p)∣∣π0(g∣p))
其中包含来自原始策略T0T_0T0的惩罚项。正如我们从他人的工作中观察到的那样,我们发现这样的约束有助于训练的稳定性,并减少奖励攻击(reward hacking), 既我们从奖励模型中得了高分但从人类评估中却得了低分。
RcR_cRc是安全性RsR_sRs与有用性RhR_hRh模型的分段组合。我们在数据集中标识了可能引起不安全响应的提示并从安全模型中优先考虑了分数。过滤不安全响应的阈值是0.15, 对应在元安全数据测试集上是0.89确定度和0.55的召回率。我们也发现,为了提高稳定性并与上述KL的惩罚项目(β)保持适当平衡,对最终线性分数的白化也很重要(如图所示: 用逻辑函数反转的sigmoid)。
针对所有的模型,我们都使用AdamW优化器。β1=0.9,β2=0.95,eps=10−5β_1=0.9,β_2=0.95,eps=10_{-5}β1=0.9,β2=0.95,eps=10−5。 我们使用0.1的衰减权重,1.0的梯度剪裁和10−610^{-6}10−6恒定学习率。每次PPO迭代我们使用的参数如下:
我们为所有模型训练了200和400次迭代, 并对延迟的提示进行评估,以便提前停止。70B的参数上的每次PPO迭代的平均耗时≈330秒。 为了快速训练大批次数训练我们使用FSDP。 这在使用O(1)复杂度的正向或反向传播都是有效的,但在生成期间会导致速度有很大的减慢(≈ 20倍), 即便使用了大批次数据和KV缓存也是一样。我们能缓存这样
这在使用O(1)正向或反向传递时是有效的,但在生成过程中会导致很大的速度减慢(≈20倍),即使在使用大批量和KV缓存时也是如此。我们能够通过在生成之前将模型权重合并到每个节点一次,然后在生成之后释放内存,恢复训练循环的其余部分来缓解这种情况。我们能够如下方式来缓存这种情况:在生成之前将模型的权重合并到每一个节点一次生成之后释放内存,再继续训练循环的其余部分。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。