大语言模型之LlaMA系列- LlaMA 2及LLaMA2_chat(上)

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’ 只做了速检,笔者水平有限,敬请勘误。

原始信息

  • 名称: Llama 2: Open Foundation and Fine-Tuned Chat Models
  • 译名: Llama 2:开源的基础模型和微调的聊天模型
  • 文章: arxiv.org/pdf/2307.09…
  • 代码:huggingface.co/meta-llama
  • 日期: 2023-07-19
  • LlaMA全称:Large Language Model Meta AI

引言

大模型作为一个能力强大的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过程中所做创新,诸如时间组织的知识和工具使用。

发布的Llama 2系列版本,可供研究与商业使用

  1. Llama 2, 是Llama 1的升级版,由公开可用的数据重新组合训练而成。对比Llama 1其预训练语料库的大小增加了40%模型的上下度增加了一倍, 采用了分组查询注意力。 Llama 2一共发行了7B,13B和70B参数的三个不同参数的版本,另外Meta内部训练了一个34B参数的版本,该版本在论文中提及并没有发布。
  2. Llama 2-Chat,专门针对对话场景做了优化与精调听Llama 2版本,该Llama 2-Chat也有7B, 13B, and 70B的三个不同参数的版本。

Meta声明公开发行的Llama 2采用了新的技术,这些新技术在使用时目前还有潜在风险,因此Meta对Llama 2做了安全评测与调整。Meta相信这个经过安全评测的LLMs是对社会有益。 论文指出目前所有用于Llama 2测试数据都是基于英文的,并没有涵盖所有的场景,他们建议开发人员在配置Llama 2-Chat之前应该根据他们特定的应用程序对模型进行安全测试与调整

LLAMA 2-CHAT的训练过程图

image.png

上图是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的属性对比 image.png

Figure 5: LlaMa 2的损失训练

image.png

分词器

Llama 2使用了和Llama 1相同的分词器。 它采用字节对编码(BPE)算法,使用了来自SentencePiece的实现。和Llama 1一样,我们拆解所有的数字类数据成单个数字,用字节拆解未知的UTF-8字符。总词汇大小为32k

训练硬件

Llama 2分别在’Meta的研究超级集群(Meta’s Research Super Cluster RSC)'与’内部生产集群’上预训练了模型,两个集群都使用了英伟达(NVIDIA)A100的GPU。两个集群的区别在于:

  • 1、 RSC使用了英伟达InfiniBand的交换机,内部集群则是基于商用以太网交换机的RoCE(RDMA over converged Ethernet)的解决方案;两个方案都实现了200 Gbps的端点互联;
  • 2、集群上的GPU的功耗上限:RSC是400瓦,而生产集群则使用了350瓦。

由此我们可以对比不同类型的交换机是否符合大规模训练。RoCE是一种更经济实惠的商用互联网络,与昂贵的 Infiniband 相比几乎可以扩展到 2000个GPU,这让预训练更加平民化

预训练的碳足迹

Meta指出GPU 的实际功耗取决于其使用情况,同时该计算并没有考虑其他电力需求,比如来自互连设备或非GPU服务器的电力消耗,也没有考虑数据中心冷却系统的电力需求。正如Gupta等人所指出的那样,与GPU等人工智能硬件生产相关的碳排放可能会增加整体碳足迹。

Table2: Llama 2模型进行预训练时的碳排放表

image.png

Llama 2预训练模型评估

表3是 Llama 2 在流行基准评测的总体性能, 参与评测的开源模型:Llama 1、 Llama 2 基本模型、MosaicML的MPT系列和Falcon模型。

image.png

表4是Llama 2在流行基准评测与闭封模型的性能对比

image.png

微调

Llama 2-Chat是对准技术(alignment techniques)几个月的研究和迭代应用的结果,包括指令微调和RLHF,这些需要大量的计算和标注资源。本章内容有:

  • 有监督微调
  • RLHF
  • 初始化和迭代奖励建模
  • Ghost Attention(GATT) - 该新技术可以帮助我们在多轮对话中控制对话流程
  • 模型微调后的安全评估

有监督微调(Supervised Fine-Tuning SFT)

质量就是一切

第三方SFT数据集可以从不同的来源获得,但我们发现这些数据的大部都分存多样性与质量的不足,尤其是为了保持LLMs与对话式指令保持一致时。

因此,我们首先集中精力收集数千个高质量的SFT样本数据集,我们暂时隔离了数百万的第三方数据集的示例,使用我们供应商标注的更少但高质量数据一起,我们结果得到显著的提升。这个发现与Zhou等到的观点类似,后者也发现有限但干净的指令微调数据足以让模型达到高水平,如上表(Table 5)。 我们发现数以万计的SFT的标注足以让模型的微调达到高质量的结果。 在收集完27,540个标注数据后,我们停止了对SFT标注。这些数据不包括任何Meta的用户数据。

image.png

上表第一列SFT微调指令,第一个是有益指令(Prompt)及回答,第二个是安全指令及回答

我们还观察到不同的标注平台和供应商有可能会导致下游任务的性能明显不同,强调数据检查如此重要,即便使用供应商源标注时。为了验证我们的数据质量,我们仔细的检测180个样本集,将人类标注的数据同模型由手工仔细检查生成样本相比较。令人吃惊的是,我们发现 从所得的SFT模型采样输出的往往与人类手写的SFT数据具有竞争力。这表明我们可以重新定义RLHF优先级,并将更多的标注工作投入到基于偏好的标注中。

微调详细情况

我们用cosine学习速率表初始学习率为2*10-5衰减权重为0.1, batchsize为6token序列长度为4096。 对于微调过程,每个样本都包含 一个prompt和一个回答。为了确保模型序列长度的正常填满,我们将训练集中的所有的prompt和回答连接了起来,使用一个特殊符号隔开prompt与回答片段。我们使用自回归目标,将来自用户prompt的token损失归零,因此我们只对答案的token做了反向传播。最后我们对模型进行了2个epoch的微调

RLHF - Reinforcement Learning with Human Feedback

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百万的二次元比较数据集, 它们是基于 人类应用我们指定准则的了的数据集, 我们将其称为元奖励建模数所集。 注决,提示与回答的长度因文本域而异。 摘要和在线论文的数据 通常需要更长的提示而对话类的提示则较短。 与现存的开源偏好数据集相比,我们的偏好数据集的有更多对话轮次、平均更时间更长。

image.png

奖励建模

奖励模型获取一个模型的回复及其相应的提示(包括从上一轮回答中的上下文)作为输入,再输出一个标量分数用于指示模型生成的质量(安全性与有用性) 。利用这些反馈分数作为奖励杠杆,我们可以在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(如下表)。

image.png

数据组成。 我们将新收集的数据集与已存在的开源偏好数据集组成形成一个更多的训练集。 开源数据集用于引导我们的奖励模型,同时我们收集偏好的标注数据。我们注意到, 在研究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行。

image.png

奖励模型结果。 在每一批为奖励模型标注的人类偏好数据中,我们保留了其中的1000个样本作为一个测试集去评测我们的模型。我们将所有与测试集相关的提示称为 “元有用”与“元安全”,基于此,我们还评估了其他公开可用的可替代方案作为基线:

  • SteamSHP-XL 基于 FLAN-T5-xl
  • 基于DeBERTa V3 Larger开放式助手奖励模型
  • 可通过OpenAI的API访问GPT4

请注意,在推理时,与训练相反,所有奖励模型都可以预测单个输出的标量,无需访问他的配对输出。GPT-4,我们基于零样本提出问题:“请在A和B之间选择一个最优的答案”, 其中A和B是用于比较的两个响应, 其准确度方面请看Table 7。 正如所期待的,我们自己的奖励模型在基于Llama 2-Chat收集的内部测试集中的性能是最好的,有用性奖励模型在元有用测试集上性能最好,同样安全奖励模型在元安全测试集上性双脚也是最好的。总之,我们的奖励模型超过了所有的基线模型,包括GPT-4。 有意思的是,GPT-4优于其他非元奖励模型,尽管没有直接去训练该模弄也没有专门为这个模型做奖励建模任务。

有用性与安全性的奖励模型在他们自己的领域里表现优秀的潜在的原因是两个目标之间的紧张关系, 这种关系这有可能会混淆训练奖励模型的过程, 为了让一个单一的模型在两个维度上都表现良好,这就需要模型不仅会在给定的提示中选择更好的响应,而且还要区分对抗性提示和安全性提示。为此,分别优化了两个模型,实际上是减轻奖励模型的任务。 更多细节请参考附录A4.1

当我们根据偏好评级按Table 8(如下图)进行分组打分时,我们可以看到,“非常好” 的测试集的准确性更高,并随着比较对的相似的增加而逐渐降低。 可以预见,在两个相似模型的响应中做出决定,学习更多的人类偏好模型变成很有挑战,因为标注者的主观性及他们对细节的依赖,有可能会让响应变的不同。我们强调准确性要比Llama 2-Chat的性能更加重要。人类偏好标注的一致率在非相似的两个响应对中更明显。

image.png

伸缩性。我们研究了奖励模型在数据和模型大小上的缩放趋势,根据每周收集的奖励模型数据的增量,微调了不同大小的模型。如图6(下图)展示了这些的趋势,从这个图可以看出,较大模型在类似数据量下会获得更高性能的预期结果。 更重要的是,考虑到用于训练的现有数据标注量,缩放性能尚未稳定下来,这表明就更多标注方面还有改进的空间。我们注意到奖励模型的准确度是Llama 2-Chat最终性能的重要指标之一。虽然对于生成模型的综合评估其最佳实战是一个开放性的研究问题,但奖励任务的排名并没有歧义。 因此,在同等条件下,奖励模型的改进能直接转化为Llama 2-Chat的改进

image.png

迭代微调

随着我们收到更多批次的人类偏好的标注数据, 我们能够将奖励划型训练的更好,也有收集到更多的提示。 因此我们为RLHF模型训练了连续的版本,我们称这些连续的版本为RLHF-V1,…,RLHF-V5. RLHJ微调我们用两个主要算法:

  • Proximal Policy Optimization (PPO,近端微略优化): RLHF文献中的标准
  • Rejection Sampling fine-tuning(拒绝采样微调):我们对模型的K个输出进行了采样,并用我们的奖励选择了最佳的候选项, 这与Bai等人(2022b)的方法是一致的。 Deng等也提出了相同的LLMs重排策略, 其中奖励被视为能量函数。这里,我们更进一步,用选定的输出进行梯度更新。 每个提示,获最高奖励分值的样本被视为新的黄金标准。这个想法与Scialom等人(2020a)将更相似。 然后我们用新的排序样本微调了我们的模型,以增强这个奖励。

两个学习率(RL)算法的主要不同点在于:

  • 广度(Breadth) - 在拒绝采样中, 模型为给定提示探索了K个样本, 而PPO只生成了一次。
  • 深度(Depth) - 在PPO中, 在步骤和的训练过程中,采样是在上一个步的梯度更新之后从t-1步开始的更新模型策略的函数。 在拒绝采样微调中, 在应用类似于SFT的微调之前,我们在给定的模型初始策略的情况下对所有的输出进行了采样,以收集新的数据集。然而,因为我们采用了迭代模型更新,两种算法的基本差异就不那么明显了。

直到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)的文献中记载的方法是一致的。

image.png

如上图(图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版本的基础模型开始。

image.png

PPO。我们按照Stiennon等人的方法进一步训练我们的语言模型,那我们使用奖励模型作为真实奖励函数的评估 和使用预训练语言模型作为优化策略。我们使用的发吓的优化方法:

argmax⁡πEp~D,g~π∣R(g∣p)∣arg\max\limits_{π} E_{p~D,g~π}|R(g | p)|argπmax​Ep~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)。

image.png

针对所有的模型,我们都使用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迭代我们使用的参数如下:

  • batch-size=512
  • PPO Clip为0.2
  • mini-batch =64
  • mini-batch执行一次梯度更新
  • β = 0.01(7B和13B模型)
  • β = 0.005(34B和70B)

我们为所有模型训练了200和400次迭代, 并对延迟的提示进行评估,以便提前停止。70B的参数上的每次PPO迭代的平均耗时≈330秒。 为了快速训练大批次数训练我们使用FSDP。 这在使用O(1)复杂度的正向或反向传播都是有效的,但在生成期间会导致速度有很大的减慢(≈ 20倍), 即便使用了大批次数据和KV缓存也是一样。我们能缓存这样

这在使用O(1)正向或反向传递时是有效的,但在生成过程中会导致很大的速度减慢(≈20倍),即使在使用大批量和KV缓存时也是如此。我们能够通过在生成之前将模型权重合并到每个节点一次,然后在生成之后释放内存,恢复训练循环的其余部分来缓解这种情况。我们能够如下方式来缓存这种情况:在生成之前将模型的权重合并到每一个节点一次生成之后释放内存,再继续训练循环的其余部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CKS1.28【1】kube-bench 修复不安全项

Context 针对 kubeadm 创建的 cluster 运行 CIS 基准测试工具时,发现了多个必须立即解决的问题。 Task 通过配置修复所有问题并重新启动受影响的组件以确保新的设置生效。 修复针对 API 服务器发现的所有以下违规行为: 1.2.7 Ensure that the --authoriz…

JVM技术文档-Arthas--线上内存问题定位

阿丹: 记录一次线上问题的定位,以及解释和讲解一下在docker容器中arthas的使用。 arthas使用文档: 我先给官方的文档放在这里,在文章中我使用的代码和解释我也会写,但是针对于每个人遇到的情况不一样,我这…

HiveSQL题——array_contains函数

目录 一、原创文章被引用次数 0 问题描述 1 数据准备 2 数据分析 ​编辑 3 小结 二、学生退费人数 0 问题描述 1 数据准备 2 数据分析 3 小结 一、原创文章被引用次数 0 问题描述 求原创文章被引用的次数,注意本题不能用关联的形式求解。 1 数据准备 i…

OpenCV 13 - 图像对比度和亮度的调节基本阈值操作

1 图像阈值 图像阈值是一种图像处理技术,用于将图像转换为二值图像。通过设定一个阈值,将图像中的像素值与阈值进行比较,将大于或小于阈值的像素分别设置为不同的像素值,从而实现图像的二值化处理。 2 阈值类型 2-1 阈值类型-阈值二值化(threshold binary) 2-2 阈值类型…

学习Android的第一天

目录 什么是 Android? Android 官网 Android 应用程序 Android 开发环境搭建 Android 平台架构 Android 应用程序组件 附件组件 Android 第一个程序 HelloWorld 什么是 Android? Android(发音为[ˈnˌdrɔɪd],非官方中文…

《云原生安全攻防》-- 云原生安全概述

从本节课程开始,我们将正式踏上云原生安全的学习之旅。在深入探讨云原生安全的相关概念之前,让我们先对云原生有一个全面的认识。 什么是云原生呢? 云原生(Cloud Native)是一个组合词,我们把它拆分为云和原生两个词来…

Arduino 推出基于乐鑫 ESP32-S3 的 STEM 教育机器人

Arduino Alvik 是 Arduino Education 推出的一款新型机器人,可作为一种跨学科工具,为当前教育和未来机器人世界筑起连接的桥梁。Hackster 的 Gareth Halfacree 表示:“Alvik 的设计灵感来自 Arduino 简化复杂技术的理念,同时它也 …

css实现按钮边框旋转

先上效果图 本质&#xff1a;一个矩形在两个矩形互相重叠遮盖形成的缝隙中旋转形成&#xff0c;注意css属性z-index层级关系 直接上代码 <div class"bg"><div class"button">按钮</div></div><style>.bg {width: 100%;heigh…

80.如何评估一台服务器能承受的最大TCP连接数

文章目录 一、一个服务端进程最多能支持多少条 TCP 连接&#xff1f;二、一台服务器最大最多能支持多少条 TCP 连接&#xff1f;三、总结 一个服务端进程最大能支持多少条 TCP 连接&#xff1f; 一台服务器最大能支持多少条 TCP 连接&#xff1f; 很多朋友可能第一反应就是端…

【pytorch】anaconda使用及安装pytorch

https://zhuanlan.zhihu.com/p/348120084 https://blog.csdn.net/weixin_44110563/article/details/123324304 介绍 Conda创建环境相当于创建一个虚拟的空间将这些包都装在这个位置&#xff0c;不需要了可以直接打包放入垃圾箱&#xff0c;同时也可以针对不同程序的运行环境选…

有趣的css - 动态的毛玻璃背景

页面效果 此效果主要使用 backdrop-filter 属性&#xff0c;以及配合 animation 属性来实现毛玻璃模糊和一些动效。 此效果可适用于登录窗口&#xff0c;网站背景或者一些卡片列表中&#xff0c;使网页更具科技感和空间感。 核心代码部分&#xff0c;简要说明了写法思路&#x…

【Docker】使用VS创建、运行、打包、部署.net core 6.0 webapi

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

应用智能家居领域中的低功耗蓝牙模块

智能家居&#xff08;smart home, home automation&#xff09;是以住宅为平台&#xff0c;利用综合布线技术、网络通信技术、 安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成&#xff0c;构建高效的住宅设施与家庭日程事务的管理系统&#xff0c;提升家居安…

MySQL for update锁表还是锁行校验

select * from user where id 1 for update ; 1. for update作用 在MySQL中&#xff0c;使用for update子句可以对查询结果集进行行级锁定&#xff0c;以便在事务中对这些行进行更新或者防止其他事务对这些行进行修改。 当使用for update时&#xff0c;锁定行的方式取决于wh…

AI 智能体:探索自主智能的世界

AI 智能体&#xff1a;探索自主智能的世界 认真的飞速小软 飞速创软 2024-01-30 11:06 发表于新加坡 想象一下&#xff0c;在这样一个世界里&#xff0c;软件自身可以自主地与环境交互&#xff0c;根据收集的数据做出决策&#xff0c;并以最少的人工干预来执行任务。这些AI智能…

2024美赛C题全网最早思路 网球运动(持续更新)

2024美赛已经于今天早上6点准时公布题目。本次美赛将全程跟大家一起战斗冲刺O奖&#xff01;思路持续更新。 2024 MCM Problem C: Momentum in Tennis &#xff08;网球运动的势头&#xff09; 注&#xff1a;在网球运动中&#xff0c;"势头"通常指的是比赛中因一系…

数据分析基础之《pandas(3)—DataFrame运算》

一、算术运算 1、add() 加法运算 2、sub() 减法运算 3、想要得到每天的涨跌幅大小&#xff0c;求出每天close-open价格差 # 算术运算 close data[close] open1 data[open] # 收盘价减去开盘价 data[m_price_change] close.sub(open1) data.head() 二、逻辑运算 1、逻辑…

2024 美国大学生数学建模竞赛 美赛(C题)网球比赛趋势问题 国际大学生数学建模竞赛| 建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍希望大家都能轻松建模呀&#xff0c;华数杯也会持续给大家放送思路滴~ 抓紧小秘籍&#xff0c;我们出发吧~ 完整内容可以在文章末尾领取&#xff01; 问题1 • 开发一个模型&#xff0c;捕捉到比赛进行时点的流动&#xff0c;…

three.js CSS3DRenderer、CSS3DSprite渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果: <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"></div><…

python脚本扫描win系统中运行程序内存值并修改

用于修改运行中程序的内存值 #!encodingutf8import os import json import psutil import shutil import threading import ctypes import win32api import win32process from win32con import PROCESS_ALL_ACCESS class MemScan:注&#xff1a;一定要以系统管理员身份运行脚…