作者:唯亚
链接:https://zhuanlan.zhihu.com/p/987052830
前言
今年工业界陆续开源了多款优秀的大语言模型,并放出了技术报告,本文整理工业界主流开源LLM的后训练方案,着重介绍训练算法和数据处理部分。以下是模型列表:
Llama3(Meta,https://arxiv.org/abs/2407.21783#,https://github.com/meta-llama/llama3) Qwen2(阿里云,https://arxiv.org/pdf/2407.10671,https://github.com/QwenLM/Qwen2) Nemotron(Nvidia,https://arxiv.org/abs/2406.11704,https://github.com/NVIDIA/NeMo-Aligner) AFM(Apple,https://arxiv.org/pdf/2407.21075) Yi(01ai,https://arxiv.org/abs/2403.04652,https://github.com/01-ai/Yi,https://arxiv.org/abs/2412.01253) GLM-4(智谱,https://arxiv.org/abs/2406.12793,github) Gemma2(Google,https://storage.googleapis.com/deepmind-media/gemma/gemma-2-report.pdf,https://arxiv.org/abs/2403.08295,https://arxiv.org/abs/2312.11805) DeepSeek-V2(DeepSeek,https://arxiv.org/abs/2405.04434,https://github.com/deepseek-ai/deepseek-v2) Baichuan2 Alignment(百川,https://arxiv.org/abs/2410.14940)
总结以上技术报告,可以发现一些基本趋势:
数据合成已成为工业界主流LLM后训练的基本方案,未来大概率也会持续发展,快速开发出领先的数据合成pipeline,有助于企业保持领先地位。 善用LLM-as-judge和拒绝采样技术。在偏好数据的构造上,Llama3、Qwen2、Baichuan2、AFM均采用拒绝采样(Rejection sampling)技术。用不同规模、不同参数的模型多次采样,再使用LLM和人工评估构造偏好样本对。 Instag (https://openreview.net/forum?id=pszewhybU9) 方法,最初出现在Qwen技术报告中,今年又出现在了Llama3、Qwen2、Yi三个模型的技术报告中,值得深入研究。 重点能力需要单独优化,如代码、多语言、数学、推理、长上下文、工具使用、指令遵循。 模型合并。使用不同版本的数据或超参数训练多个模型,最后平均模型参数,可以实现更均衡的性能。Llama3、Gemma2和Baichuan2均采用了模型合并技术。 强化学习。Llama3和Qwen2都只用了改良版的DPO,而没有使用PPO在线学习,说明PPO虽然上限高,但有一定门槛。各模型强化学习技术总结如下表。
模型 | 偏好对齐技术 |
---|---|
Llama3 | 迭代式DPO |
Qwen2、Yi-Lightning | offline DPO + online DPO |
ChatGLM4 | DPO + PPO |
Deepseek-V2、Baichuan2 | GRPO |
Nemotron-4 | 迭代式DPO+RPO |
AFM | 综合RS、DPO、IPO,以及改进版在线RL:MDLOO |
一、Llama3
1 算法
后训练迭代了数轮。每一轮都包括 SFT 和 DPO,使用人类注释数据或合成数据。后训练目标包括奖励模型和语言模型。首先基于预训练 checkpoint,使用人类标注的偏好数据训练一个 RM,SFT 后使用 RM 进行拒绝采样,并对预训练 checkpoint 进行微调,再执行 DPO 与人类偏好对齐。此过程如图7,适用于Llama 3 系列所有模型。
对话格式。与Llama2相比,Llama3具有新的能力,如 tool use。为支持这一点,llama3设计了一种新的多消息聊天协议,使用各种特殊的 header tokens 和 termination tokens。header tokens 用于指示对话中每个消息的来源和目的地,termination tokens指示何时轮到人类和AI交替发言。
奖励建模 RM。由于数据扩展后改进逐渐减少,Llama3的loss移除了边际项。过滤掉相似响应样本之后,使用所有偏好数据进行奖励建模。除了标准的偏好对(chosen,rejected)外,Llama 3还为某些提示创建了第三个“edited response”,基于chosen response进一步改进得到,偏好顺序:edited > chosen > rejected。训练期间将提示和多个响应合并成单行,并随机打乱响应,以近似响应分别放在不同行中计算分数的标准场景。
监督微调 SFT。使用奖励模型在人类标注提示上执行拒绝采样,详细信息见2.2节。与此拒绝采样数据和其他数据源(包括合成数据)一起,执行sft。最大的模型 lr=1e-5, $steps\in[8.5k, 9k]$ 。这些超参设置在不同的轮次和数据混合中都表现良好。
直接偏好优化 DPO。每一轮DPO都使用前一轮对齐中表现最好的模型,并收集最新一批偏好数据。对于Llama 3,lr=1e-5,β=0.1。此外,DPO还应用了以下算法修改:
DPO loss 屏蔽格式化tokens:从chosen 和 rejected responses 屏蔽特殊的格式化tokens,包括header tokens 和 termination tokens。这些token加入损失可能导致奇怪的模型行为,如尾部重复或突然生成终止符。这可能是由于DPO loss 的对比性质 - 两个响应存在共同token导致学习目标冲突,因为模型需要同时增加和减少这些token的可能性。 NLL loss 正则化:在选择的序列上增加了一个额外的负对数似然(NLL)损失项,缩放系数为0.2,类似于Pang等人(2024)。这有助于保持生成期望格式,并防止chosen response的对数概率下降,稳定DPO训练(Pang等人,2024;Pal等人,2024)。
模型平均。在每个RM、SFT或DPO阶段使用不同版本的数据或超参数进行实验,平均获得的模型(Izmailov等人,2019;Wortsman等人,2022;Li等人,2022)。
迭代轮次。llama 3应用以上方法迭代六轮。每一轮都收集新的偏好注释和SFT数据,从最新模型中采样合成数据。
2 数据
后训练数据包括人类注释数据、偏好数据,SFT数据组成,以及数据质量控制、清洗方法。
2.1 偏好数据
每训练一轮后部署多个模型进行注释,并为每个user prompt采样两个不同模型的response。这些模型可以使用不同的数据混合和对齐方法训练,从而允许不同的能力强度(例如,代码专业知识)和增加的数据多样性。llama 3要求注释者根据响应的喜好程度,将其分为四个等级:明显更好,更好,稍微更好或略好。还在偏好排名后增加了一个edit步骤,鼓励注释者进一步改进首选响应。因此,最终的偏好数据可能有三个排名响应:edited > chosen > rejected。
丢弃相似响应样本后,每一轮后训练llama 3使用所有的偏好数据进行奖励建模,同时仅使用来自各种能力的最新批次数据进行DPO训练。
2.2 SFT 数据
微调数据主要由以下来源组成:
人类注释收集的提示,拒绝采样的响应 针对特定能力的合成数据(第2.4节) 少量人类策划的数据(第2.4节)
拒绝采样 Rejection sampling。对于人类注释的每个提示,从最新的聊天模型(通常是后训练迭代中表现最佳的checkpoint,或特定能力表现良好的checkpoint)采样K(通常是10-30)个输出,并使用奖励模型选择最佳候选。训练后期引入系统提示以引导RS响应符合期望的语气、风格或格式,这些可能因不同能力而异。
整体数据组成。表7是“有用性”混合数据中每个广泛类别的统计信息。虽然SFT和偏好数据包含重叠领域,但它们是分别策划的。2.4节描述了用于对数据样本进行主题、复杂性和质量分类的技术。每一轮后训练仔细调整这些轴上的数据混合,以在广泛的基准测试中调整性能。最终的混合数据在一些高质量资源上多次采样,并降低其他资源采样。
2.3 数据处理和质量控制
由于大部分训练数据是模型生成的,因此需要仔细清洗和质量控制。
数据清洗。实施一系列基于规则的数据删除和修改策略。例如,缓解过度道歉问题,识别过度使用的短语(如“I’m sorry”或“I apologize”),识别过度使用的表情符号或感叹号,并仔细平衡数据集中这类样本的比例。
数据修剪。应用一系列基于模型的技术,删除低质量训练样本:
主题分类:将 Llama 3 8B 微调为一个主题分类器,在所有数据上进行推理,将其分类为粗粒度(如“数学推理”)和细粒度(如“几何和三角学”)的桶。 质量评分:使用奖励模型和基于 Llama 的信号为每个样本获得质量分数。对于基于 RM 的分数,llama 3认为处于 RM 分数Top 1/4的数据是高质量的。对于基于 Llama 的分数,使用Llama 3 checkpoint对每个样本在三点量表上进行一般数据评分(accuracy, instruction following 和 tone/presentation)。对编码数据进行两点量表评分(bug identification 和 user intention),并将最高分数的样本视为高质量。RM 和基于 Llama 的分数有很高的不一致率,llama 3结合这些信号在内部测试集上获得了最佳的召回率。最终,选择被 RM 或 Llama 标记的高质量示例。 难度评分:使用两种难度度量:https://arxiv.org/abs/2308.07074 标签和 https://arxiv.org/abs/2312.15685 评分。对于 https://arxiv.org/abs/2308.07074 (Lu et al., 2023),提示 Llama 3 70B 对 SFT 提示进行意图标记,更多的意图意味着更高的复杂性。对于https://arxiv.org/abs/2312.15685 (Liu等人,2024c),提示 Llama 3 在三点量表上测量对话的难度。 语义去重:参考(Abbas等人,2023;Liu等人,2024c)。首先使用 RoBERTa(Liu等人,2019b)对完整对话聚类,然后在每个聚类内按质量分数 × 难度分数排序。然后迭代所有排序示例,只保留与样本集的最大余弦相似度小于阈值的示例,贪婪选择。
2.4 能力
重点提升能力,包括:代码、多语言、数学和推理、长上下文、工具使用、事实性和可引导性。
2.4.1 代码
改进代码能力的方法包括:训练代码专家、合成sft数据、带系统提示引导的拒绝采样、代码执行和 model-as-judge 过滤。
1)训练代码专家。对预训练模型进行持续预训练获得,其中持续预训练语料大部分(>85%)是代码数据,合计 1T tokens。遵循类似CodeLlama的配方(Roziere et al.,2023)。最后几千步训练,在高质量的 repository-level 混合代码数据执行长上下文微调(LCFT),将专家的上下文长度扩展到16K tokens。最后,除了针对代码领域的SFT和DPO混合数据外,也遵循Llama 3训练流程对齐模型。该模型也用于代码 prompt 的拒绝采样。
2)合成sft数据。使用Llama 3和代码专家合成大量的SFT对话。包括三种代码数据合成方法,生成超过270万的例子。
合成数据生成:执行反馈。当使用参数量更大、性能更强的模型生成数据再进行训练时,8B 和 70B 模型显示出显着的性能改进。而使用 Llama 3 405B 自己生成的数据进行训练,却并没有什么帮助(甚至会降低性能)。为了解决这一限制,llama 3引入了执行反馈,提升代码数据质量,使用以下过程生成约100万代码对话:
问题描述生成:从各种来源抽取随机代码片段,并提示模型基于这些示例生成新编程问题。编程问题描述涵盖各种主题,包括长尾分布主题。 解决方案生成:提示 Llama 3 用给定的编程语言解决每个问题。在提示中添加一般性编程规则提高生成质量。在代码评论中解释其思维过程也能提升效果。 正确性分析:从生成的解决方案中提取源代码,并应用静态和动态分析技术测试其正确性,包括:
静态分析:通过解析器和 linter 运行所有生成代码,以确保语法正确性,捕获语法错误、使用未初始化变量、非导入函数、代码风格问题、键入错误等错误。 单元测试生成和执行:对于每个问题和解决方案,提示模型生成单元测试,与解决方案一起在容器化环境中执行,捕获执行错误和语义错误。
错误反馈和迭代自我修正:当解决方案在任何一步失败时,提示模型进行修改。提示包括原始问题描述、错误解决方案、解析器/linter/测试器反馈(stdout、stderr/ 和返回代码)。单元测试失败后,模型修复代码以通过现有测试,也可以修改单元测试以适应现有代码。只有完全正确的问答对才会包含在最终sft数据集中。llama 3发现约 20% 的解决方案最初是错误的,但可以自我纠正,表明模型从执行反馈中学习并提高了性能。 微调和迭代改进:微调过程分多轮进行,每一轮都建立在前一轮基础上,为下一轮生成更高质量的合成数据。
合成数据生成:编程语言翻译。将常见编程语言(例如,Python/C++),翻译为不太常见的语言(例如,Typescript/PHP)来补充现有数据,提升编程语言性能。并提示 Llama 3 通过语法解析、编译和执行,以确保质量。 合成数据生成:反向翻译。对于某些编码能力(例如,说明、解释),使用执行反馈不足以改进其能力,llama 3采用了另一种多步骤方法,生成了约 120 万个与代码解释、生成、说明和调试相关的对话。从预训练数据各种代码片段开始:
生成:提示 Llama 3 生成代表目标能力的数据,例如,为代码片段添加注释说明,或者解释一段代码。 反向翻译:提示模型将合成数据“反向翻译”为原始代码,例如,提示模型仅从代码说明生成代码,或者仅从代码解释生成代码。 过滤:使用原始代码作为参考,提示 Llama 3 确定输出质量,例如,询问模型反向翻译代码对原始代码的忠实程度,再使用 SFT 中具有最高自我验证分数的生成示例。
3)带系统提示引导的拒绝采样。拒绝抽样过程使用特定的代码系统提示,提高代码的可读性、说明、彻底性和特异性。
4)使用执行和 model-as-judge 信号过滤数据。早期版本的 Llama 3 评估根据两个标准分配二进制 (0/1) 分数:代码正确性和代码风格。只保留那些获得满分 2 分的样本。最初,这种严格的过滤导致了下游基准性能的回归,主要是因为它不成比例地删除了具有挑战性提示的示例。为了解决这个问题,llama 3策略性地修改了一些被归类为最具挑战性的代码数据响应,直到它们满足基于 Llama 的“model-as-judge”标准。通过改进这些具有挑战性的问题,代码数据实现了质量和难度的平衡,获得了最佳的下游性能。
2.4.2 多语言
方法包括训练多语言专家,采购和生成德语/法语/意大利语等多语言的的高质量指令数据。
训练多语言专家。使用预训练模型在多语言混合数据集(包含90%的多语言tokens)做持续预训练,然后,按照 使用前面的后训练流程。最后,使用该专家模型收集高质量的多语言注释数据直到预训练结束。
多语言数据收集。多语言 SFT 数据主要来自以下来源。总体分布是 2.4% 的人工注释、44.2% 其他 NLP 任务数据、18.8% 的拒绝采样数据和 34.6% 翻译的推理数据。
人工注释:从语言学家和母语人士那里收集高质量的人工注释数据。主要由现实世界的开放式提示组成。 其他 NLP 任务数据:使用其他任务的多语言训练数据并重写为对话格式。例如, exams-qa和 Conic10k。为了改进语言对齐,使用 GlobalVoices和 Wikimedia的并行文本。使用基于 LID 的过滤和 Blaser2.0 (Seamless Communication et al., 2023) 来删除低质量数据。对于并行文本数据,没有直接使用双文本对,而是应用受 Wei et al. (2022a) 启发的多语言模板,以更好地模拟翻译和语言学习场景中的现实对话。 拒绝采样数据:对人工注释的提示应用拒绝采样,以生成高质量微调样本,流程和收集英语类数据类似:
生成:前期从 $[0.2, 1]$ 区间随机选择温度T。高T时多语言响应会富有创意,但也容易出现语码转换问题。在最后一轮后训练时,设置T=0.6 。此外,使用专门的系统提示来改进响应格式、结构和可读性。 选择:在基于奖励模型的选择之前,实施特定的多语言检查,以确保提示和响应之间的语言匹配率(例如,罗马化印地语提示不应以印地文梵文响应)。
翻译数据:尽量避免使用机器翻译数据,以防止可能的翻译名称偏差、性别偏差或文化偏见。有一个例外,llama 3使用了翻译的推理数据(详见2.4.3 数学与推理),以提高非英语语言中定量推理性能。由于这些数学问题仅使用简单的语言,翻译后几乎没有质量问题。
2.4.3 数学与推理
提升数学推理能力,面临着一些挑战:
缺乏提示:SFT有效提示或问题数量不足,很难创建多样化且具有代表性的数学训练集。 缺乏真实的思维链:缺乏真实的思维链数据,以指导模型如何逐步分解问题并得出最终答案。 不正确的中间步骤:当使用模型生成的思维链时,中间步骤可能会出错,影响训练效果。 使用外部工具:增强模型利用外部工具(如代码解释器),或通过交错代码和文本进行推理。这种能力可以显着提高他们解决问题的能力。 训练和推理之间的差异:微调后的模型可能会与人类或其他模型交互,要求它使用反馈来改进推理结果。确保训练数据和实际使用场景的一致性,对于维持推理性能至关重要。
为了应对这些挑战,采用以下方法:
解决缺乏提示问题:从预训练数据中寻找数学相关数据,并将其转换为问答格式用于sft。创建数学技能分类,寻找模型表现不佳的数学技能,人工编写相关提示/问题。 通过逐步推理轨迹增强训练数据:使用 Llama 3 为一组提示生成逐步解决方案,再使用 Llama 3 验证特定的逐步解决方案对于给定问题是否有效,根据正确答案过滤这些结果。 过滤不正确的推理痕迹:训练结果RM和分步RM(Lightman et al., 2023; Wang et al., 2023a)过滤中间推理步骤不正确的训练数据。对于更具挑战性的提示,使用蒙特卡罗树搜索(MCTS)和学习的分步RM生成有效的推理轨迹。 交错代码和文本推理:提示 Llama 3 通过文本推理和 Python 代码组合解决推理问题。以代码执行作为反馈信号,消除推理链无效情况,保证推理过程正确性。 从反馈和错误中学习:为了模拟人类反馈,利用不正确的生成结果并提示 Llama 3 产生正确的生成结果,来执行错误纠正,这有助于提高模型推理和从错误中学习的能力。
2.4.4 长上下文
预训练最后阶段,Llama 3 的上下文长度从 8K 扩展到 128K tokens。与预训练类似,微调过程也必须仔细调整配方以平衡短上下文和长上下文能力。
合成数据。使用 Llama 3 的早期版本合成长上下文数据,包括:多回合问答、长文档摘要以及代码存储库推理。
QA对生成:从预训练数据中精心策划一组长文档,分成 8K token的块,使用早期版本的 Llama 3 模型根据随机选择的块生成 QA 对,训练期间使用整个文档作为上下文。 总结:首先使用最强的Llama 3 8K模型对输入长度为8K的块进行总结,然后再对所有的总结进行汇总,从而对长上下文文档进行分层汇总。训练期间,给模型提供完整的文档并提示模型总结文档,同时保留所有重要细节。另外,还根据文档摘要生成 QA 对,并提示模型提出需要理解整个长文档的全局问题。 长上下文代码推理:解析 Python 文件识别导入语句,并确定它们的依赖关系。选择最常依赖的文件,特别是至少五个其他文件引用的文件,从存储库中删除这些关键文件之一,并提示模型识别丢失的依赖文件,生成必要的丢失代码。
根据序列长度(16K、32K、64K 和 128K)进一步对这些合成样本进行分类,以实现更细粒度的输入长度定位。最终,消融实验发现混合 0.1% 的长上下文合成数据与原始短上下文数据,性能最佳。
DPO。实验发现只要 SFT 模型在长上下文任务中具有高质量的推理效果,那么 DPO 训练仅使用短上下文也不会影响长上下文性能。鉴于这一发现,长上下文 SFT 之后,保留了 DPO 的短上下文数据混合。
2.4.5 工具使用
Llama 3 训练了三种工具调用:搜索引擎、Python解释器、数学计算引擎。除此之外,还训练了zero-shot工具使用(上下文中给定可能未见过的工具定义和用户查询,训练模型使用正确的工具调用)。
执行。使用不同的方法将核心工具实现为 Python 对象。零样本工具可以实现为带有描述、文档示例的 Python 函数,并且模型只需要函数的签名和文档字符串作为上下文来生成适当的调用。还将函数定义和调用转换为 JSON 格式,所有工具调用均由 Python 解释器执行,必须在 Llama 3 系统提示符中启用该解释器。核心工具可以在系统提示符中单独启用或禁用。
数据收集。llama 3主要依靠人类注释和偏好,合成工具调用数据,这一点与toolformer不同。与标准后训练流程相比,有两个主要区别:
对于工具,对话通常包含多条助手消息(例如,调用工具,根据工具输出推理结果)。llama 3在消息级别进行注释以收集细粒度反馈:注释者在具有相同上下文的两条助手消息之间进行偏好选择,或者如果两者都有问题,则编辑改进其中一条消息。然后,所选或编辑的消息将添加到上下文中,对话继续。这为助手调用工具和推理工具输出提供了人类反馈。注释者无法排名或编辑工具输出。 不执行拒绝抽样,因为未在工具基准测试中观察到增益。
人工注释数据。人工注释过程从单轮工具注释开始,然后转向对话中的工具使用,最后注释多步工具使用和数据分析。流程如下:
单步工具使用:从合成用户提示的少样本生成开始(这些生成需要调用核心工具)。依靠几次生成,为这些提示生成适当的工具调用,执行它们,并将输出添加到模型上下文。最后,再次提示模型根据工具输出生成最终答案。可以得到以下形式的轨迹:系统提示、用户提示、工具调用、工具输出、最终答案。为提高数据质量,过滤了约30%无法执行的工具调用或其他格式问题。 多步工具使用:首先提示 Llama 3 生成需要至少两次工具调用的用户提示,这些工具可以与核心工具集不同。然后,使用这些提示多次,让 Llama 3 生成由交错推理步骤和工具调用组成的解决方案,类似于 ReAct。 文件上传与分析:对常用文件类型进行注释(如.txt、.docx、.pdf、.pptx、.xlsx、.csv、.py、.json等)。提示模型基于提供的文件,总结文件内容,查找并修复错误,优化代码,执行数据分析或可视化。
使用合成数据微调后,在各种具有挑战性的场景中收集人类注释(包括多轮交互、超过三步的工具使用以及工具调用不准的情况)。llama 3使用不同的系统提示增强合成数据,以教导模型仅在工具功能激活时才使用工具。为了训练模型简单查询直接推理(不需要额外调用工具)的能力,llama 3还添加了来自简单数学或问答数据集的查询,及其在没有工具情况下的响应,只在系统提示激活工具时才调用工具。
零样本工具调用。通过使用大量多样化的工具调用合成数据(函数定义、用户查询、相应调用等),提高了 Llama 3 零样本工具的使用能力。
单个、嵌套和并行函数调用:llama 3借助于 the Stack(Kocetkov et al., 2022) ,将合成用户查询应用于实际函数。更准确地说,提取函数调用及其定义,清理和过滤异常代码(例如缺少文档字符串或不可执行的函数)。然后,使用 Llama 3 生成与函数调用相对应的自然语言查询。 多轮函数调用:通过函数调用为多轮对话生成合成数据。使用多个代理来生成域、API、用户查询、API 调用和响应,同时确保生成的数据涵盖一组不同的域和实际的 API。所有代理都是 Llama 3 的变体,根据其角色以不同的方式提示,并以 step-by-step 方式进行协作。
2.4.6 事实性
llama 3遵循的原则是,后训练应该使模型 “know what it knows”,而不是添加知识 (Gekhman et al., 2024; Mielke et al., 2020)。主要方法涉及生成数据,使模型生成与预训练中存在的数据保持一致。基于llama 3的知识探测,数据生成过程如下:
从预训练数据中提取数据片段。 通过提示 Llama 3生成有关这些片段(上下文)的事实问题。 使用Llama 3 回答问题。 以原始上下文为参考,以 Llama 3 为评审,对各生成的正确性进行评分。 使用 Llama 3 作为评估者对各生成的信息量进行评分。 使用 Llama 3 对各生成结果的信息一致但不正确的响应生成拒绝。
使用知识探测生成的数据鼓励模型只回答它所了解的问题,并拒绝回答不确定问题。此外,预训练数据并不总是与事实一致或正确。因此,llama 3还收集了一组有限的带标签事实数据,这些数据涉及敏感主题,并且可能存在事实矛盾或不正确陈述。
2.4.7 操纵性(指令遵循)
可操纵性,即指导模型满足用户规范的能力。Llama 3专注于通过带有自然语言指令的系统提示来增强其可操纵性,特别是在响应长度、格式、语气和角色/性格方面。
数据收集。通过要求注释者为 Llama 3 设计不同的系统提示,收集一般英语类别中的可操纵性偏好样本。然后注释者与模型进行对话,以评估它们在对话过程中遵循系统提示中定义的指令一致性。下面展示了一个用于增强可操纵性的自定义系统提示示例:
你是一个乐于助人、快乐的人工智能聊天机器人,为忙碌的家庭提供膳食计划助手。这个家庭由2个成年人,3个青少年和2个学龄前儿童组成。
一次计划两到三天,第二天的计划中使用剩菜或额外的食材。用户会告诉你他们是否需要两到三天的时间。如果没有,假设是三天。
每个计划应该包括早餐、午餐、零食和晚餐。询问用户是否同意该计划或是否需要调整。在他们同意之后,提供一份考虑到家庭规模的购物清单。
始终牢记家人的喜好,如果有他们不喜欢的东西,提供替代品。如果用户没有受到启发,那就问他们这周度假时最想去的地方是哪里,
然后根据该地点的文化建议他们吃什么。周末的饭菜可能更复杂。工作日的饮食应该是快速和容易的。早餐和午餐最好是简单的食物,
比如麦片、英式松饼和预煮好的培根,以及其他快速简单的食物。全家人都很忙。一定要问他们手头是否有必需品和最喜欢的咖啡或能量饮料,
这样他们就不会忘记买。记住要精打细算,除非是特别的场合。
建模。收集偏好数据后,在奖励建模、拒绝采样、SFT 和 DPO 中利用这些数据来增强 Llama 3 的可操纵性。
二、Qwen2
Qwen2后训练阶段提升的能力范围,包括编码、数学、逻辑推理、指令遵循和多语言理解。此外,它确保模型的生成与人类价值观和谐一致,使其有益、诚实且无害。与严重依赖广泛的人类监督的传统方法不同,Qwen2侧重于以最少的人类注释进行可扩展的对齐(https://arxiv.org/abs/2406.01252)。从人类反馈中获取SFT和RLHF数据,最大限度地减少人工标记需求,同时最大限度地提高数据质量和可靠性。
后训练数据。训练数据构建需要两个步骤:协作数据注释和自动数据合成。首先,从大规模指令语料库中提取数据本体,从而产生广泛且多样化的高质量指令。再对这些指令进行系统增强以包含更大的复杂性。通过人工注释,获得目标响应 $y_i$ 以及对应的正、负 label $(y_{i}^+,y_{i}^−)$ 。随后,采用各种自动对齐策略合成大量代码、数学、指令遵循、创造性任务、角色扮演和安全领域的人工注释数据。
协作数据标注,包含以下四步:
自动本体提取。参考《InsTag: Instruction Tagging for Analyzing Supervised Fine-tuning of Large Language Models》,这是一种开放集细粒度标记器,用于从大规模指令数据集中提取底层本体。随后再人工精炼以保证提取准确性。 指令选择。参考《How Abilities in Large Language Models are Affected by Supervised Finetuning Data Composition》,对每条标签注释后的指令,评估标签多样性、语义丰富性、复杂性和意图完整性。根据这些标准选择一组代表性指令 。 指令进化。参考《Tree-Instruct: A Preliminary Study of the Intrinsic Relationship between Complexity and Alignment》,使用Qwen模型向现有指令添加约束或要求,从而增加其复杂性并确保数据集中的不同难度级别。 人工注释。使用不同的生成策略和不同规模的 Qwen 模型获得指令的多个响应。注释者根据自己的偏好对这些响应进行排名,确保最佳响应符合既定标准,生成事例数据和偏好数据。
自动数据合成。维持指令响应的注释质量提出了大规模的重大挑战,特别是那些需要专业知识、经验、细心、耐心的注释。为了应对这些挑战,Qwen2设计了各种自动对齐策略大规模合成数据。
Rejection Sampling 拒绝抽样。对于具有明确最终答案的数学或类似任务,应用 Rejection Sampling(Yuan et al., https://arxiv.org/abs/2308.01825 )提高解决方案质量。大型语言模型( LLMs )的任务是为每条指令生成多个响应(推理路径),然后,将推理路径正确并且模型认为合理的路径,保留下来作为示范数据。而偏好数据则是通过对比正确和错误路径生成的。 Execution Feedback 执行反馈。对于编码任务,参考《Self-play with Execution Feedback: Improving Instruction-following Capabilities of Large Language Models》, 使用LLMs生成解决方案和相关测试用例。再通过编译和执行评估测试用例,创建演示和偏好数据。该方法也适用于评估指令遵循。 Data Repurposing 数据再利用。对于文学写作任务,参考《Large Language Models are Superpositions of All Characters: Attaining Arbitrary Role-play via Self-Alignment》,Qwen2汇总了公共领域的高质量文学作品,并使用LLMs制定不同详细程度的说明。这些说明与原始作品配对,作为演示数据。例如,为了构造角色扮演数据使其具有生动的responses,Qwen2从维基百科等知识库中获取详细的角色档案,并指导LLMs生成相应的指令和响应。此过程类似于阅读理解任务,可确保角色个人资料的完整性。 Constitutional Feedback 宪法反馈。参考《Constitutional AI: Harmlessness from AI Feedback》,宪法AI是指导LLMs根据预定义的一组原则生成响应的过程。为了确保遵守安全和价值观等准则,Qwen2编制了宪法数据集。该数据集描述了应遵循的原则和应避免的原则。用来指导LLMs做出符合或偏离这些指南的回答,作为演示和偏好数据参考。
SFT。Qwen2收集了广泛的教学数据集,包含超过 500,000 个示例,涵盖指令遵循、编码、数学、逻辑推理、角色扮演、多语言和安全等技能。模型微调两个epoch,序列长度 32k。为了优化学习,学习率lr从 $7×10^{−6}$ 逐渐降低到 $7×10^{−7}$ 。为了解决过拟合问题,设置weight decay=0.1,梯度被裁剪为最大值 1.0。
RLHF。RLHF 包括两个连续阶段:offline训练和online训练。离线训练阶段,使用DPO算法在预编译的偏好数据集 $P$ 上,最大化 $y_i^+$ 和 $y_i^−$ 的可能性差异(DPO,Rafailov 等人,https://arxiv.org/html/2407.10671v4#bib.bib59)。在线训练阶段,模型利用奖励模型进行即时反馈,实时迭代地完善其性能。具体来说,从当前策略模型中采样多个响应,奖励模型选择最喜欢和最不喜欢的响应,形成每一轮迭代的 DPO 偏好对。此外,采用在线合并优化器(Lu et al.,https://arxiv.org/abs/2405.17931)减轻对齐税,缓解模型对齐后的性能下降。
三、Nemotron-4
1 奖励模型 RM
Nemotron-4收集了 10k 人类偏好数据集,称为 HelpSteer2,遵循 https://arxiv.org/abs/2311.09528 类似的方法。并开源发布,详细信息参考 Wang et al. (https://arxiv.org/abs/2406.08673)。
与欧阳等人采用的成对排名模型不同。Nemotron-4发现多属性回归奖励模型可以更有效地将真正的有用性与不相关性分开(例如仅仅因为其长度而更喜欢较长但无用的响应)。此外,回归模型更擅长预测细粒度奖励,捕捉相似响应之间有用性的细微差别。回归奖励模型建立在 Nemotron-4-340B-Base 模型之上,用新的reward “head”替换最终的 softmax 层。这个“head”是一个线性投影,它将最后一层的隐藏状态映射到 HelpSteer 属性(有用性、正确性、连贯性、复杂性、详细性)的五维向量中。在推理过程中,将这些属性值通过加权和的方式聚合,作为总体奖励。更多细节参考 Wang et al. (https://arxiv.org/abs/2406.08673)。这样的模型在 RewardBench (Lambert et al., 2024) 上表现非常好,达到了发布时的最高准确率。不同类别的得分如表4所示。
Nemotron-4-340B-Reward 的总体得分证明了 Nemotron-4-340B-Base 模型的优势、HelpSteer2 数据集的高质量以及方法的有效性。此外,该奖励模型为训练 Nemotron-4-340B-Instruct 提供了坚实的基础。
2 对齐数据
Nemotron-4开发了一套synthetic data generation (SDG) 解决方案。整个对齐过程中(SFT+偏好训练)超过 98%是合成数据,仅使用约 20K 人工注释数据(10K 用于监督微调,10K Helpsteer2 数据用于奖励模型训练和偏好微调)。整个数据准备过程包括五个部分:构造prompts、合成对话、合成偏好数据、迭代式弱到强对齐和其他数据源。
2.1 构造prompts
准备prompt:合成prompts是 SDG 第一步。这种方法能够控制提示分布以覆盖不同的场景。提示多样性是多维的,涉及任务多样性(例如写作、开放式问答、封闭式问答)、主题多样性(例如词干、人文、日常生活)和指令多样性(例如 json output, # paragraph, Yes-or-No answer)。为了确保prompts维度多样性,采用类似UltraChat(Ding 等人,2023)和 CAMEL(Li 等人,2023)的方法来生成prompts。具体来说,使用Mixtral-8x7B-Instruct-v0.1(Jiang et al., 2024)作为生成器,为开放式问答、写作、封闭式问答、数学和编码等任务分别合成提示。对于每个提示任务,使用一组不同的主题或关键字集合来合成prompt,以使其涵盖广泛的主题。还根据提示生成指令,明确定义期望响应的格式,例如“输出必须采用 json 格式”。此外,生成两轮提示,其中包括用户助手交互历史记录,以提高模型的对话技能。下面分别讨论合成单轮提示、合成指令遵循提示和合成两轮提示的pipeline。
合成单轮prompt:图 2 展示了合成单轮提示的pipeline。首先,提示生成器输出一组不同的宏观主题。然后,再为每个合成的宏观主题输出相关子主题。最终收集了 3K 个主题(包括宏观主题、子主题和人工收集主题)。
open Q&A prompts。提示生成器生成与每个给定主题相关的open Q&A prompts(例如,“什么是机器学习?”)。然后,要求生成器将问题细化地更加详细和具体(最初生成的问题通常非常短)。 writing。对于写作类提示(例如,“写一篇关于机器学习的论文。”),提示包括基于给定主题生成特定类型的文本 (例如,时事通讯、散文, Ding 等人(2023))。再要求生成器细化生成的任务以包含更多细节。 closed Q&A prompts。使用 C4 数据集中的文本(Raffel et al., 2020)。对于每个给定的文档,要求生成器输出受尊重的指令(例如,“总结给定的文本”或“根据给定的文本,xxx 是什么?”)。然后,使用手动定义模板将文档与指令连接起来。 math&coding。从数学和 Python 编程中收集一组不同的关键字(例如除法、循环、lambda 函数)。然后生成数学和 Python 编程的高级主题和子主题。接下来,提示生成器分类出维基百科条目中,与数学或 Python 编程相关的内容。最后,解析 Python 预训练数据以收集常见的 Python 关键字,并手动收集数学相关的关键字。
最终,收集得到 Python 关键字 12K ,数学关键字 17K。然后,提示生成器生成与每个关键字相关的问题。附录 B 给出了以上过程用到的合成prompts。
合成指令遵循prompts:例如,“写一篇关于机器学习的文章。您的回复应包含三段。” 首先,随机选择一组合成提示。对于每个合成提示,参考 Zhou et al. (https://arxiv.org/abs/2311.07911) 的“可验证”指令模板,随机生成一条合成指令(例如,您的回答应该包含三个段落)。然后将提示和指令用人工定义模板连接在一起。除了单轮指令跟随提示之外,还构建了多轮指令跟随提示,其中指令适用于所有未来对话,例如,“Answer the question and all following questions according to: [BEGIN OF INSTRUCTION] Answer with three paragraphs. [END OF INSTRUCTION]”。第二轮指令跟随提示需要根据给定的指令修改先前的响应。
合成两轮prompt:虽然sft阶段数据集通常是多轮的,但偏好数据通常是单轮的(Bai et al., 2022; Cui et al., 2023)。为了提高模型在偏好微调中的多轮对话技能,需要构建两轮提示的偏好数据集。具体地,该提示包含一个用户问题、一个助手答案和另一个用户问题,形式为“用户:XXX;助手:XXX;用户:XXX;”。先从 ShareGPT(RyokoAI,2023)获取第一个用户提示,再使用中间指令模型生成助手响应和下一回合问题。
现实世界的LMSYS prompts:从 LMSYS-Chat-1M (LMSYS) 中提取提示(Zheng et al., 2023)。以平衡的比例组合所有提示,并将它们分为两个不同的组,一组用于监督学习,另一组用于偏好学习,确保两者之间不重叠。在监督学习数据组中,从 LMSYS 中删除被标记为潜在不安全的提示。在偏好学习数据组中保留这些提示,以允许模型学习区分安全和不安全的响应。图 3 对合成单轮提示与 LMSYS 提示进行了比较。具体来说,对于每组提示,使用 Mixtral-8x7B-Instruct-v0.1 模型生成响应,并使用 Nemotron-4-340B-Reward 注释响应的有用性分数。图 3 有用性分布显示合成提示的平均有用性高于 LMSYS 提示。由于简单提示更容易“有帮助”,这意味着 LMSYS 提示平均难度高于合成单轮提示。
2.2 合成对话
合成多轮对话:为了培养多轮对话能力,将每个对话设计为三轮。通过迭代式角色扮演,模型在助手和用户角色之间交替。注意,为了在用户轮引发所需的行为,必须为模型提供明确的提示,定义不同的用户个性(如附录 C 所述),并附有对话历史记录。质量控制上,通过排除礼貌性陈述(例如“谢谢你……”、“当然我很乐意……”)来对用户进行后处理,以模仿现实世界的用户问题。采用贪婪采样进行演示数据合成。还利用 Nemotron-4-340B-Reward 评估对话质量,为每个样本分配分数并过滤掉低于预定阈值的样本。
2.3 合成偏好数据
使用 10K 人工注释的 HelpSteer2 偏好数据训练 Nemotron-4-340B-Reward,但还需要更多(更多样化prompt领域、带顶级中间模型的高质量响应以及带有ground-truth信号)的偏好数据。偏好数据为三元组形式(prompt, chosen response, rejected response)。
回复生成:偏好数据包含合成的单轮提示、指令跟随提示、两轮提示以及现实世界提示(包括 ShareGPT 提示、LMSYS 提示以及 GSM8K (Cobbe et al., 2021) 和 MATH ( Hendrycks 等人,2021)的训练数据集)。对于每个提示,使用多个随机中间模型生成响应。以确保偏好数据集的不同响应。此外,当响应是来自(根据 MT-Bench 表现)最佳的Nemotron-4模型的多个随机生成时,还构建了更具挑战性的合成偏好示例。这些具有挑战性的偏好示例使模型能够进一步改进自身。
真值标签:给定每个提示的多个响应,需要判断他们的偏好排名并选择 chosen response 和 rejected response。一些任务可以使用真实标签(例如,GSM8K 和 MATH 训练集答案)或验证器(例如 python 程序验证指令响应)来评估。
LLM评估和RM评估:在 LLM-as-Judge 中,为 LLM 提供prompt和两个响应,并要求其比较两个响应。为了避免位置偏差,询问 LLM 两次并交换响应顺序。只有两次判断一致时,才选择一组有效的(提示、选择响应、拒绝响应)三元组。判断提示位于附录 D 中。早期偏好数据迭代主要是 LLM 评估。在 RM-as-Judge 中, Nemotron-4-340B-Reward预测每对(提示、响应)的奖励,并根据奖励决定偏好排名。奖励基准分数 (Lambert et al., https://arxiv.org/abs/2403.13787) 显示,RM评估比LLM评估更准确。具体来说,在“Chat-Hard ”类别中,选择和拒绝的响应很难区分,RM评估比 LLM 评估要好得多,平均准确度为 0.87 比 0.54。实验显示 Chat-Hard 类别分数对于合成数据生成中的偏好排名特别重要。因此,后期的数据集迭代使用RM评估。
2.4 迭代式弱到强对齐
什么模型最适合作为生成器?生成器强度与数据质量有何关系,以及如何改进数据生成器。受弱到强泛化(Burns et al., https://arxiv.org/abs/2312.09390)的启发,Nemotron-4开发了一种新颖的迭代方法逐步完善数据以实现最优。这种方法结合了对齐训练和数据合成的优势,使它们能够相互增强并推动持续改进。
图4说明了迭代式弱到强对齐的流程。模型质量(无论弱还是强)是由多个评估指标的组合来定义的(参见原论文2.4节base model 和3.4.1节instruct model)。使用一个初始对齐模型作为对话和偏好数据的生成器。然后使用这些数据通过监督微调和偏好训练得到更好的基础模型。实验发现教师模型并没有限制学生模型的上限,随着基本模型和对齐数据的细化,新对齐的模型能够大大超过初始对齐模型。
对齐过程与基础模型预训练并行执行。第一次迭代中,选择 Mixtral-8x7B-Instruct-v0.1 作为初始对齐模型。生成的数据用于训练 Nemotron-4-340B-Base 的中间检查点(称为 340B-Interm-1-Base)。340B-Interm-1-Base 优于 Mixtral 8x7B Base 模型,这反过来又使生成的 340B-Interm-1-Instruct 模型超越 Mixtral-8x7B-Instruct-v0.1 模型。表明弱监督可以激发强能力。
第二次迭代中,利用 340B-Interm-1-Instruct 模型作为新的数据生成器。鉴于其比 Mixtral-8x7B-Instruct-v0.1 更强,第二次迭代中生成的合成数据质量比第一次更高。所得数据用于将 340B-Interm-2-Base 训练为 340B-Interm-2-Chat。这个迭代过程产生了自我强化的飞轮效应,其改进可以归因于两个方面:(1)数据集相同时,基础模型越强,产生的指令模型就越强。(2)基础模型相同时,数据质量更高,产生的指令模型更强。整个对齐过程进行多轮数据生成和细化,不断提高模型质量。
2.5 其他数据源
补充几个特定领域的数据集扩充多样性,如下。
主题遵循:纳入 CantTalkAboutThis 训练集(Sreedhar et al., https://arxiv.org/abs/2404.03820),其中包括广泛主题的合成对话,并故意穿插分散注意力的轮次,以将聊天机器人从主题转移开。该数据集有助于增强模型在面向任务的交互过程中专注于预期主题。 无法完成的任务:某些任务模型可能无法自行完成(例如互联网访问或实时知识)。为了减轻这些情况下的幻觉,使用人工编写示例(参见附录 A)提示 LLM 生成各种问题。然后,明确要求 LLM 做出拒绝回应,收集这些回应并将其与相应的问题配对。 STEM数据:增加五个STEM相关数据集。Open-Platypus (Lee et al.,https://arxiv.org/html/2406.11704v1#bib.bib30), PRM800K (Lightman et al.,https://arxiv.org/html/2406.11704v1#bib.bib33), SciBench(Wang et al.,https://arxiv.org/html/2406.11704v1#bib.bib64), ARB (Sawada et al.,https://arxiv.org/html/2406.11704v1#bib.bib56), openbookQA (Mihaylov et al.,https://arxiv.org/html/2406.11704v1#bib.bib39)。 文档推理和QA:使用 FinQA 数据集 (Chen et al.,https://arxiv.org/html/2406.11704v1#bib.bib10)提升数值推理,使用人工标注数据集 (Liu et al.,https://arxiv.org/html/2406.11704v1#bib.bib35)提升上下文QA,使用 wikitablequestions (Pasupat and Liang,https://arxiv.org/html/2406.11704v1#bib.bib49)提升模型半结构数据理解能力。 函数调用:使用(Glaive AI,https://arxiv.org/html/2406.11704v1#bib.bib20)数据子集。
3 对齐算法
参考(Ouyang et al., 2022),涉及两个阶段:监督微调和偏好微调。
3.1 监督微调
同时学习多种能力有时会导致它们之间的冲突,尤其是编码任务。为了解决这个问题, Nemotron-4 设计了一个两阶段 SFT 策略,这种方法在所有下游任务中都能产生优异的结果。
代码 SFT。第一阶段纯粹进行代码sft。此阶段需要大量代码数据才能有效提高模型编码能力。为了有效地合成编码数据,开发了 Genetic Instruct,这是一种模仿进化过程的方法,利用 self instruction(Wang 等人,https://arxiv.org/abs/2212.10560)和wizard coder mutations(Luo 等人,https://arxiv.org/abs/2306.08568)从有限的高质量种子中合成大量数据。此外,还引入了一个适应度函数,它使用 LLM 评估生成的指令及其解决方案的正确性和质量。通过评估和检查的样本将被添加到种群池中,持续数据进化流程,直到达到目标规模。整个pipeline旨在实现多个群体的高效并行执行,从而实现可扩展性。经过广泛的重复数据删除和过滤后,保留了约 800K 精选数据集用于 Code SFT 训练。固定lr=3e-7,batch size=128 ,epoch=1 。
通用 SFT:第二阶段进行通用sft,利用 200K 混合数据集(包含各种任务,如第2节对齐数据所述,还包括代码 SFT 阶段 2% 的样本,以降低遗忘风险)。batch size=128 ,epoch=3,lr取值范围[1e-7, 5e-7]。这两个阶段都仅计算助手回合的损失。
3.2 偏好微调
监督微调之后是偏好微调,数据格式为三元组(prompt, chosen response, rejected response)。偏好微调涉及多次迭代,直接偏好优化 DPO(Rafailov 等人,https://proceedings.neurips.cc/paper_files/paper/2023/hash/a85b405ed65c6477a4fe8302b5e06ce7-Abstract-Conference.html)和本文提出的新对齐算法RPO(奖励感知偏好优化)。
DPO:DPO算法通过最大化所选响应和拒绝响应之间的隐式奖励差距优化策略网络。但实验观察到选择的响应和拒绝的响应的likelihood随着差距的增加而一致下降,即使选择高质量响应。当训练足够长时,策略网络往往会过拟合,并且各种指标之间此消彼长(例如 MT-Bench提升,0-shot MMLU下降)。这里在所选响应上添加加权 SFT 损失,防止策略网络大量偏离偏好数据,特别是因为偏好数据不是从参考策略生成的。为了避免模型学习低质量的选择响应,当真实情况不可用时,使用 Nemotron-4-340B-Reward 挑选高质量选择响应示例。这会产生一个包含 16 万示例(包括各种任务)的偏好数据集。训练参数为batch size=256 ,epoch=1 ,lr调整区间[3e-8, 3e-7],DPO loss kl正则化系数调整区间[3e-4, 3e-3],SFT损失的权重调整区间[1e-5, 1e-3]。
RPO:由于不了解两个响应的质量差距,DPO 努力最大化所选响应和拒绝响应的隐性奖励差距,会导致过拟合和不必要的“忘记”高质量拒绝响应。为了克服这个问题,提出奖励感知偏好优化(RPO),它使用策略网络定义的隐式奖励来近似奖励差距。新的损失函数如下:
$\mathcal{L}{rpo}(x, y_c, y_l) = \mathbb{D} \left[ \beta \log \frac{\pi(y_c \mid x)}{\pi{\text{ref}}(y_c \mid x)} - \beta \log \frac{\pi(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)} , // , \eta(r^(x, y_c) - r^(x, y_l)) \right] $
其中 $\pi$ 是要训练的策略网络;$ _{ref}$ 是参考策略;$( , _ , _ )$ 分别对应提示、选择响应、拒绝响应;$ ^*( , _ ), ^*( , _ )$ 分别是奖励模型选择和拒绝响应的奖励值。与 DPO 相比,RPO 学习近似奖励差距,从而防止过拟合问题。根据距离度量 和奖励模型 $r^*$ 的选择,RPO 与现有方法相关,例如 DNO 、cDPO 、IPO、Distill DPO和 BRAINn。实验中 $ [a// ]:= ( )log\frac{ ( )}{ ( )}+(1− ( ))log\frac{1− ( )}{1− ( )}$ 。使用 DPO 训练的检查点作为初始化和参考策略,再使用 RPO 训练模型。具体来说,使用 30 万的偏好数据集,并对所选响应进行不太严格的质量过滤。再对所选择的SFT loss添加较小的正则化系数 (1e-5) 。实验固定 =1、 =3 -7,KL 系数 调整区间为[1e-3, 1.] 。RPO 一共迭代3次,每次迭代都使用前一次迭代的检查点作为初始化和参考策略。三次迭代后即得到最终的 Nemotron-4-340B-Instruct。
四、AFM
后训练过程包含两个阶段:SFT和RLHF。Apple提出了两种新的后训练算法:(1)带有教师委员会(iTeC)的拒绝采样SFT算法。(2)具有镜像下降策略优化和留一法评估 (MDLOO)的RLHF。
3.1 后训练数据
使用混合数据策略,包含人工注释数据和合成数据。并进行了广泛的数据管理和过滤程序。
人工注释数据。包括演示数据和人类偏好反馈数据。
Demonstration data:从各种来源收集高质量人工注释演示数据集。包括系统级和任务级指令,及其相应的响应。除了针对涵盖 Apple Intelligence 功能的多样化任务分配外,还重点关注关键数据质量标准,包括有用性、无害性、演示和响应准确性。确保删除数据中用户个人身份信息。 Human preference feedback:指导人类注释者对同一提示的两个模型响应进行比较和排名,以收集偏好标签。此外,还使用单面问题指导这个过程。这些问题让评估者对模型响应质量的各个方面进行评分,包括指令遵循、安全性、真实性和演示,并保留这些标签用于模型训练。与演示数据类似,数据质量对于反馈数据至关重要,整个过程联合迭代数据和模型质量。
合成数据
在强大的奖励模型指导下,AFM 能够生成高质量的响应,甚至优于人类注释。因此,使用合成数据扩展提示集以增加多样性。AFM 后训练合成数据包括三个领域:数学、工具使用和编码。
数学。数学合成数据主要涉及两个阶段:生成数学问题并产生相应的解决方案。对于数学问题合成,采用了几种“进化”策略,其中一组提示的种子被转换为更大的一组不同的提示:
Problem rephrase and reversion(问题改写和回归)。遵循[Yu et al.,https://arxiv.org/abs/2309.12284]中的方法,提示 AFM 重新表述种子数学问题,并策划反向问题,以便在提供最终答案时在原始问题陈述中导出特定数字。 Problem evolution(问题进化)。受到指令进化技术的启发[Xu et al.,https://arxiv.org/abs/2304.12244],给定种子问题集 $D_{seed}$ 提示 AFM 生成两组不同的数学问题,即深度演化 $D_{depth}$和广度演化 $D_{breadth}$。深度演化通过增加复杂性来增强指令,而广度演化则提高了主题覆盖范围。对于两个进化数据集,首先使用embedding模型进行重复数据删除,然后提示LLMs确保数学问题的连贯性和可解性。此外,对于 $D_{depth}$ 分配了难度级别,只选择分数高于指定阈值的数学问题。
通过一组增强的数学问题,提示 AFM 针对每个问题合成N个带COT推理的回答。如果初始种子数据具有ground truth label,则它们可以用作“结果奖励信号”过滤合成答案。对于需要较少推理步骤的问题,正确的最终答案通常与正确的中间步骤相关联。如果直接答案检查不成功或无法获得真实答案,将询问LLM评估答案的正确性。将过滤后的答案输入训练数据后,可以大幅提高模型的数学能力。
工具使用。例如function call,code interpreter以及浏览混合数据。模型能力首先通过合成数据进行引导,该数据主要集中于单一工具的使用场景。然后,收集人工注释以改进多工具和多步骤场景的模型功能。通过将原始工具与其他类似工具混合,进一步增强人工策划的函数调用数据,以增加工具选择的难度。此外,我们从人工整理的函数调用数据中合成并行函数调用,以实现新的功能,并基于人工整理的函数调用数据和一般的SFT数据生成工具意图检测数据,从而缓解工具调用过度触发的问题。
代码。合成代码数据集涉及带有拒绝采样的self-instruct方法。这种方法使模型能够自主学习和生成数据。从 71 个不同的编程主题作为种子开始,提示模型生成一个类似于编程面试的初始问题池。对于每个问题,模型都会生成一组单元测试和许多潜在的解决方案。然后,基于 execution 执行拒绝采样方法,选择最佳解决方案。这涉及到通过每个单元测试来编译潜在的解决方案并执行它们。选择成功执行次数最多的解决方案。最终产生(question, test cases, solution)三元组集合。以单元测试的通过数量验证数据集质量,最终产生 12K 高质量sft三元组数据。
3.2 微调 SFT
数据选择。建立一系列数据质量守卫,包括内部人工标记员的评级、基于模型的自动过滤技术以及文本embedding的重复数据删除。还通过各种合成数据生成方法和拒绝抽样来扩大混合数据集。调整混合比。为了调整混合权重,将其视为优化问题。具体来说,给定一组权重 $(w_1,w_2,…,w_n)$ ,其中 $w_i$ 表示混合物中特定成分的比例,用以下方法训练模型 $w_i→w_i±Δw_i$,并根据一组基准评估质量变化。广泛运行此类实验可以有效地识别最佳混合数据集,并删除影响最小的子集。训练超参数。AFM-Server固定lr=5e-6,AFM-Device固定lr=2e-5,dropout=0.1。由于评估指标在不同的 checkpoint 有所波动,基于自动评估基准和奖励模型的best-of-N选择最佳 checkpoint,以测试强化学习的提升空间。
3.3 RLHF
首先训练一个强大的奖励模型 RM 并将其应用到下面的 iTeC 和 MDLOO 两种RLHF算法中。https://arxiv.org/html/2407.21075v1#A5 描述了 RLHF pipeline的更多细节。
3.3.1 奖励模型 RM
使用收集的人类偏好数据训练奖励模型。每个人类偏好数据项包含一个提示和两个响应以及人类标签,内容如下:
首选响应以及偏好水平,偏好水平包括:明显更好、更好、稍好、可忽略不计。 对每个回答进行单方面评分,衡量每个回答的指令遵循性、简洁性、真实性和无害性。
RM训练使用标准流程,并做了两点创新:
设计一个考虑人类偏好水平的soft label loss函数。 将单个回复评分作为RM正则化项。
采用常用的 Bradley-Terry-Luce (BTL) 模型训练RM。在此模型中,两种响应的差异被建模为奖励差异的 sigmoid 函数。soft label loss 函数表明,当偏好水平较高时(例如一个响应明显优于另一个),这种概率就较高,反之亦然。这与 Llama 2[Touvron et al.,https://arxiv.org/html/2407.21075v1#bib.bib51]中 margin-based 的损失函数不同,并且效果更好。单边评分作为正则化项可以有效提高奖励模型的准确性。更多细节参考附录 https://arxiv.org/html/2407.21075v1#A5.SS1。
3.3.2 Iterative teaching committee (iTeC)
该框架结合了各种偏好优化算法,包括拒绝采样RS、直接偏好优化 DPO 及其变体(如https://proceedings.mlr.press/v238/gheshlaghi-azar24a.html 和在线RL)。
Iterative committee。apple在RLHF 中学到的最重要的经验教训之一是使用一组不同的性能最佳模型来刷新在线人类偏好数据收集。具体来说,对于每批人类偏好数据收集,建立一系列从 SFT、RS、DPO/IPO 和 RL 训练的最新有前途的模型,以及之前迭代中的最佳模型,将其称为“model committee”。从最新的“model committee”抽样收集成对的人类偏好响应。在获取每批人类偏好数据后,更新奖励模型,并使用偏好优化算法集合进一步训练一组新模型。然后,使用新的“model committee”继续下一轮迭代 RLHF 数据收集。
Committee distillation。进一步对模型委员会进行拒绝抽样(蒸馏),并使用最新的奖励模型作为重新排序器。在提示级别重新排名模型响应。具体来说,对每个提示,使用委员会中每个模型的多个响应进行采样,并使用最新的RM为每个提示选择最佳响应。这能够结合不同偏好优化算法训练的模型的优点。例如,apple发现利用反例的算法(例如在线 RLHF、DPO、IPO)可以提高数学推理技能,而拒绝采样 RS 可以有效学习指令遵循和写作技能。
Scaling up distillation。对于较大的模型,仔细迭代数据质量和模型质量比数量更重要。对于较小的模型,扩大蒸馏提示数量,可以实现小模型巨大的改进。最终的 AFM-on-device 模型根据模型委员会生成的超过 100 万个高质量响应进行训练。
3.3.3 Online RLHF algorithm: MDLOO
在本节中,我们介绍在线强化学习算法 - 带有留一估计的镜像下降 MDLOO,我们在模型训练期间解码响应并应用 RL 算法来最大化奖励。
使用常规的 RLHF 目标来最大化 KL 惩罚奖励函数[Ouyang et al.,https://arxiv.org/html/2407.21075v1#bib.bib40]。奖励函数如下:
$$R(x, y) = r_{\phi}(x, y) - \beta \log \frac{\pi_{\theta}(y | x)}{\pi_{\text{ref}}(y | x)} \tag{1} $$其中 $r_{\phi}(x, y)$ 表示输入 x 和输出 y 的奖励函数。该公式通过减去加权的对数比值来调整奖励,权重系数为 $β$ ,而对数比值表示策略 $\pi_{\theta}(y|x)$ 与参考策略 $\pi_{\text{ref}}(y|x)$ 的比率。我们考虑将整个回复的生成视为一个动作的bandit设置,并且不使用价值网络(即the critic)来获得每个token的奖励或优势。
与常用的 RLHF 算法(例如 PPO[Schulman et al.,https://arxiv.org/html/2407.21075v1#bib.bib45])类似,使用基于信任域的策略迭代算法。并在在线 RL 算法做出了两点设计:
使用Leave-One-Out(LOO)估计器来估计prompt-response对的优势,类似于最近的工作[Ahmadian et al., https://arxiv.org/html/2407.21075v1#bib.bib3 ] 。 使用镜像下降策略优化(MDPO,Mirror Descent Policy Optimization) [Tomar et al., https://arxiv.org/html/2407.21075v1#bib.bib50 ]来优化策略,这与常用的基于裁剪的 PPO 方法不同。
更具体地,在算法的解码阶段,我们为每个提示解码多个回复,并将每个回复的优势分配为该 (提示,回复) 对的奖励与同一提示生成的其他回复的平均奖励之间的差值。直观上,该估计器旨在衡量响应与典型响应相比好多少。根据经验,这个优势估计器对于稳定 RL 算法并获得良好的结果至关重要。此外,使用基于KL正则化的信任域方法,即MDPO,来控制每次迭代中的策略变化。该算法比 PPO 更有效。更多详细信息参阅https://arxiv.org/html/2407.21075v1#A5.SS2。
五、Yi
微调强调数据质量而不是数量。与 LIMA[https://arxiv.org/html/2403.04652v1#bib.bib94]和 DEITA[https://arxiv.org/html/2403.04652v1#bib.bib48]方法一致,侧重于数据选择而不是规模。由于规模小于10K,能够检查和优化每一条数据。下面讨论数据构建和训练细节。
1 数据预处理
质量控制。微调数据集由不到 10K 的多轮指令-响应对话组成,每条都经过多次迭代和用户反馈完善。
使用以下技术来改进提示分布选择、响应格式、 COT 格式、消除幻觉和重复:
从 WizardLM [ https://arxiv.org/html/2403.04652v1#bib.bib83 ]中汲取灵感,开发了复合指令并逐步改进以增加其复杂性。这种方法显着减小了 SFT 数据的大小; 对于响应格式,从 LIMA [ https://arxiv.org/html/2403.04652v1#bib.bib94 ]扩展默认样式。总体而言,答复采用 “介绍-正文-结论” 的格式,其中正文通常是要点列表; 对于 CoT 数据格式化,使用了“Step-Back”模式,灵感来自Cheng 等人[ https://arxiv.org/html/2403.04652v1#bib.bib92 ] 。先摘要出更高级别的解决方案,再深入推理原始的具体问题。 为了减少幻觉,检查并确保响应中的知识不在模型中,并消除可能导致记忆的响应; 为了减少重复,重写微调数据中容易被忽略的重复数据。
多样性和混合性。收集广泛的开源提示,涵盖问答、创意写作、对话、推理、数学、编码、安全、双语能力等领域。参考 InsTag[https://arxiv.org/html/2403.04652v1#bib.bib49],开发了一个指令标记系统。通过设计注重多样性的采样算法,仔细平衡各个标签之间的指令分布。为了平衡不同能力获得最佳数据比例,使用近似网格搜索确定数据混合。受到董等人的激励 [https://arxiv.org/html/2403.04652v1#bib.bib20],对每种能力的 {1, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64} 比例进行实验。搜索过程使用结果验证和人工评估。
长上下文数据。将短数据与长文档问答数据混合。使用合成数据构建文档QA数据。具体来说,将多个文档随机连接成一个序列,从长序列中采样一个或多个段落,并要求模型根据采样的段落构建QA对。主要是ICL背诵和改写,要求模型先背诵或改写原始段落,再给出答案。这种数据格式鼓励模型检索,从而减少幻觉。
ChatML Format。数据格式极大地影响了模型的最终性能。使用 ChatML 风格的格式[https://arxiv.org/html/2403.04652v1#bib.bib53]。这种结构化方法使模型能够区分各种信息类型,例如系统配置、用户输入和助手响应。
2 训练方法
训练参数。微调使用标准 next-word prediction loss,仅计算响应损失。使用 AdamW 优化器 和β1=0.9,β2= 0.999,ϵ=10−8。seq_length=4096,batch size=64。step=300,constant lr=1e−5、weight decay=0.1、最大阈值 1.0 的梯度裁剪,以及 NEFTune[https://arxiv.org/html/2403.04652v1#bib.bib34](Yi-34B-Chat 的 noise scale=45,Yi-6B-Chat 的 noise scale=5)。
安全对齐。根据[https://arxiv.org/html/2403.04652v1#bib.bib24,https://arxiv.org/html/2403.04652v1#bib.bib35]中的现有研究,首先建立一个全面的安全分类法。该分类法涵盖了广泛的潜在问题,包括环境不和谐、迷信、宗教敏感性、歧视性做法、药物滥用、暴力行为、非法活动、仇恨言论、违反道德行为、侵犯隐私、自残、色情内容、心理健康问题和网络安全威胁。收集此类数据集以实现稳健对齐,并将它们与 SFT 数据混合。还在对齐阶段包含了一组有针对性的模拟攻击场景的提示,这有效提高了模型针对恶意使用的弹性。
长上下文窗口支持。改进了计算通信重叠、序列并行性和通信压缩,以支持高达 200K 上下文长度的持续预训练和微调。改进方法完全基于工程,没有修改模型架构(如sparse, local, or sliding window attention等),即使输入是 200K,模型仍然使用完全注意力。
六、GLM-4
五月底智谱放出了GLM-4的技术报告,开源GLM-4-9B,总结了整个系列从预训练到agent的各个方案。这里简单梳理一下后训练相关技术。
模型结构
No Bias Except QKV:除了QKV之后都不使用bias,这样可以提升训练速度。此外还发现不使用bias在长度外推的能力有微微提升。 使用RMSNorm和SwiGLU。 使用2D的RoPE。 使用GQA,以减少推理的KV cache需求。由于GQA相比MHA有更少的参数,把FFN的大小增加到10/3的hidden size来保持模型总参数基本不变。
Alignment。主要应用了SFT+RLHF技术。在sft中,团队发现真实的人类prompt和交互,比template-based的生成数据和LLM合成数据要好得多。RLHF可以进一步帮助缓解response排斥、安全性、双语混合生成,以及多轮问答一致性等问题。
后训练技术点
LongAlign:参考《Longalign: A recipe for long context alignment of large language models》能把GLM-4的推理长度提升到128k,并且效果达到Claude 2和GPT-4-turbo-1106 的水平。 ChatGLM-Math:参考《Chatglm-math: Improving math problem-solving in large language models with a self-critique pipeline》给出了一套通过self-critique提升数学能力的方法。 ChatGLM-RLHF:参考《Chatglm-rlhf: Practices of aligning large language models with human feedback》总结了PPO和DPO的应用效果。 Self-Contrast:参考《Extensive self-contrast enables feedback-free language model alignment》给出了Self-Contrast的策略,可以让模型自动生成大量正负样本对用于RLHF。 AgentTuning:参考《Agenttuning: Enabling generalized agent abilities for llms》包括agent的训练框架和AgentInstruct 指令数据集(代理和环境之间的高质量交互轨迹)。 APAR:参考《Apar: Llms can do auto-parallel auto-regressive decoding》总结了auto-parallel auto-regressive的并行解码生成策略。训练llm规划它们的(并行)生成过程并执行APAR生成,以提高llm对层次结构响应的推理速度。
GLM-4 All Tools。集成了各种技术,流程如下。
安全对齐。对每个训练样本进行安全性评估,移除任何具有潜在风险的样本。在比较多个模型输出时,无害性也是偏好对齐的重要标准。设计一个红队,持续向模型提出棘手的问题,以引发潜在的不安全回答。收集所有来自GLM-4的有害问答对,并通过人工标注改进它们,以进一步对齐模型。使用 https://arxiv.org/abs/2309.07045 对GLM-4模型进行评估,该评估从七个维度考察每个模型:伦理与道德、非法活动、心理健康、冒犯性、身体健康、隐私和财产、不公平和偏见。
七、Gemma2
1 模型架构
Local Sliding Window and Global Attention。在每个其他层中交替使用局部滑动窗口注意力(Beltagy 等人,https://arxiv.org/html/2408.00118v3#bib.bib11,https://arxiv.org/html/2408.00118v3#bib.bib10)和全局注意力(Luong 等人,https://arxiv.org/html/2408.00118v3#bib.bib33)。局部注意力层的滑动窗口大小设置为4096个token,而全局注意力层的跨度设置为8192个token。
Logit soft-capping。在每个注意力层和最后一层中限制 logits(Bello et al.,https://arxiv.org/html/2408.00118v3#bib.bib9),logits 值保持在 (−soft_cap, +soft_cap)之间。使用此函数限制 logits:logits ← soft_cap ∗ tanh(logits/soft_cap)。
**RMSNorm (包括Post-norm 和 pre-norm)**。为了稳定训练,使用 RMSNorm(Zhang 和 Sennrich,https://arxiv.org/html/2408.00118v3#bib.bib57)对每个 Transformer 子层、注意力层和前馈层的输入和输出进行归一化。
分组查询注意力GQA。GQA设置 num_groups=2,推理速度提高的同时依然能保持下游性能。
2 后训练方案
首先,对纯英文文本的合成数据和人工提示-响应对的组合应用 SFT,再应用 RLHF,其中奖励模型是在标记的纯英语偏好数据上训练的,并且策略基于与 SFT 阶段相同的提示。最后,对每个阶段后获得的模型进行平均,以提高其整体性能。数据混合和后训练方案以提高有用性为基础进行设计,同时最大限度地减少安全和幻觉相关危害。
数据混合。包括内部和外部公共数据,扩展了 https://arxiv.org/abs/2403.08295 的后训练数据。特别是,使用提示,但不使用 LMSYS-chat-1M 的答案(Zheng et al., https://arxiv.org/abs/2309.11998 ) 。所有的数据都会经过如下所述的过滤阶段。
SFT。在合成提示和真实提示上运行行为克隆,回复由较大的教师模型生成。再在学生模型的分布上运行来自教师模型的蒸馏过程(Agarwal et al.,https://openreview.net/forum?id=3zKtaqxLhW;Gu et al.,https://openreview.net/forum?id=5h0qf7IBZZ)。
SFT 补充知识。在SFT的时候,通常的做法是把synthetic data和真实prompt数据喂给teacher模型,获取对应的response,然后用常规蒸馏方式进行训练。Zephyr和OpenHermes就是这样的做法。这样的训练方式虽然有效,但是有可能出现train-inference mismatch的问题,即student model在推理的时候出现和训练时不同的分布。为了解决这个mismatch的问题,Gemma2参考《On-policy distillation of language models: Learning from self-generated mistakes》,使用on-policy distillation的方法。具体来说,就是由student对prompt生成response,然后最小化teacher和student在这个response上的KL divergence。这样就不会出现train-inference mismatch的问题了。https://zhuanlan.zhihu.com/p/706636709。
RLHF。使用与 Gemma 1.1 类似的 RLHF 算法(Gemma Team,https://arxiv.org/abs/2403.08295),但奖励模型不同,奖励模型比策略大一个数量级。新的奖励模型也更注重对话能力,特别是多轮对话能力。
模型合并。通过使用不同的超参数运行pipeline,对获得的不同模型进行平均(Ramé 等人,https://arxiv.org/html/2408.00118v3#bib.bib40)《Warp: On the benefits of weight averaged rewarded policies》。
数据过滤。使用合成数据时,运行多个阶段的过滤,以删除个人信息、不安全或有毒输出、错误的自我识别数据和重复示例。实验发现包含一些数据子集以鼓励更好的上下文归因、保留措辞以及拒绝回答,可以减少幻觉现象,从而提高事实性指标表现,同时不会降低其他指标性能。
对话数据格式。Gemma 2 使用与 Gemma 1 相同的控制 token 进行微调,如表https://arxiv.org/html/2408.00118v3#S3.T4所示,但格式架构不同,参见下图对话示例。请注意,模型显式地以<end_of_turn><eos> 标识结束生成,而之前它仅生成<eos>。有关此格式结构背后的动机,请参阅 Gemma 1。
八、DeepSeek-V2
对齐数据。收集了大约 150 万个中英文的数据实例,涵盖广泛的“有用”和“无害”主题。“有用性”数据 120 万(其中通用语言任务 31.2%,数学问题 46.6%,编码 22.2%)。安全性数据30万,涵盖各种敏感主题。
监督微调。 DeepSeek-V2 微调 2 个 epoch ,学习率 5e-6。
强化学习 RL。借鉴https://arxiv.org/abs/2402.03300,采用组相对策略优化(GRPO)(Shao et al.,https://arxiv.org/html/2405.04434v5#bib.bib45),它放弃了ppo中的 critic model,并以 group scores 估计 baseline。具体来说,对于每个问题q, GRPO 从旧策略 $π_{θ_{old}}$ 采样一组输出 $\{o_1,o_2,⋯,o_G\}$ ,然后优化策略模型 $π_θ$ 以最大化以下目标:
$$\mathcal{J}_{\text{GRPO}}(\theta) = \mathbb{E} \left[ q \sim P(Q), \{ o_i \}_{i=1}^G \sim \pi_{\theta_{\text{old}}}(O \mid q) \right] \frac{1}{G} \sum_{i=1}^G \left( \min \left( \frac{\pi_\theta(o_i \mid q)}{\pi_{\theta_{\text{old}}}(o_i \mid q)} A_i, \, \text{clip} \left( \frac{\pi_\theta(o_i \mid q)}{\pi_{\theta_{\text{old}}}(o_i \mid q)}, \, 1 - \epsilon, \, 1 + \epsilon \right) A_i \right) - \beta \mathbb{D}_{\text{KL}} \left( \pi_\theta \mid \pi_{\text{ref}} \right) \right) \tag{1} $$ $$\mathbb{D}_{\text{KL}} \left( \pi_\theta \mid \pi_{\text{ref}} \right) = \frac{\pi_{\text{ref}}(o_i \mid q)}{\pi_\theta(o_i \mid q)} - \log \frac{\pi_{\text{ref}}(o_i \mid q)}{\pi_\theta(o_i \mid q)} - 1, \tag{2} $$公式中ε和β是超参数, $A_i$ 是对应一组奖励计算的优势 $\{r_1,r_2,…,r_G\}$ :
$$A_i = \frac{r_i - \text{mean}(\{r_1, r_2, \cdots, r_G\})}{\text{std}(\{r_1, r_2, \cdots, r_G\})}.\tag{3} $$实验发现,模型的数学和编码能力可以在较长时期的训练中不断提高。因此,采用两阶段强化学习训练策略,首先进行推理对齐,然后进行人类偏好对齐。第一个推理对齐阶段,训练奖励模型$RM_{reasoning}$用于代码和数学推理任务,并根据$RM_{reasoning}$的反馈优化策略模型:
$$r_i=RM_{reasoning}(o_i) \tag{4} $$第二个人类偏好对齐阶段,采用多重奖励框架,该框架从有用性RM中获取奖励 $RM_{helpful}$ ,安全性RM中获取 $RM_{safety}$ ,以及基于规则的RM中获取 $RM_{rule}$ 。回复的最终奖励 $o_i$ 是:
$$r_i = c_1 \cdot RM_{helpful}(o_i) + c_2 \cdot RM_{safety}(o_i) + c_3 \cdot RM_{rule}(o_i) \tag{5} $$其中,c1, c2和c3是对应的系数。
RM。为了训练奖励模型,仔细收集偏好数据,并精心进行质量过滤和比例调整。根据编译器反馈获得代码偏好数据,并根据真实标签获得数学偏好数据。对于奖励模型训练,我们使用 DeepSeek-V2 Chat (SFT) 初始化奖励模型,并使用逐点或成对损失训练它们。实验中,强化学习训练可以充分挖掘模型潜力,使其能够从可能的响应中选择正确且令人满意的答案。
九、Baichuan2
百川提出了一套综合性的系统对齐方案 Nova Alignment,包括三个阶段:提示增强系统 (PAS)、监督微调 (SFT) 和偏好对齐(PT)。本报告主要关注Nova Alignment的优化、数据、关键能力提升、系统评估四个方面。第https://arxiv.org/html/2410.14940v3#S2节详细讨论了训练、提示论证和模型合并方法。在第https://arxiv.org/html/2410.14940v3#S3节中,强调数据对齐的重要性,重点关注提示选择、响应构建和偏好数据。第https://arxiv.org/html/2410.14940v3#S4节概述关键能力挑战,详细介绍了通过 Nova Alignment 获得的具体方法和见解。最后,第https://arxiv.org/html/2410.14940v3#S5节对Nova Alignment进行了全面评估。Qwen2-Nova-72B 和 Llama3-PBM-Nova-70B 分别是基于 Qwen2-72B[https://arxiv.org/html/2410.14940v3#bib.bib95]和 Llama-3-70B[https://arxiv.org/html/2410.14940v3#bib.bib27]训练的指令模型。
2 优化
2.1 训练
SFT。学习率 1e−5,epoch取值范围[2,6],使用NOVA提出的高效训练方法(包括Packing、Multi-layer Gradient Checkpointing和Sequence Parallel策略),还应用权重衰减防止过拟合。
Reward。传统奖励模型仅保证不同反应的奖励分数的相对顺序,而缺乏绝对感知。例如:拟合奖励分数差为 $S_{perfect}−S_{bad1}$ 可能小于 $S_{bad1}−S_{bad2}$ ,这鼓励模型找到破解奖励的捷径。为了减轻这种影响,添加了point wise MSE loss。奖励模型将最小化以下目标:
$$\mathcal{L}_\theta = E_{(x,y_w,y_l)} \left[ -\log(\sigma(r_\theta(x,y_w) - r_\theta(x,y_l))) \right. \\ \left. + \alpha((r_\theta(x,y_w) - \hat{r}_x^{y_w})^2 + (r_\theta(x,y_l) - \hat{r}_x^{y_l})^2) \right] \tag{1} $$其中,α是一个可调系数, $\hat{r}_x^{y_w}$ 和 $\hat{r}_x^{y_l}$ 是所选数据和拒绝数据的标准化注释绝对分数。另外,偏好数据集中,还混合了一些没有绝对分数的数据集,例如开源 hh-rlhf[https://arxiv.org/html/2410.14940v3#bib.bib7]数据集、SHP[https://arxiv.org/html/2410.14940v3#bib.bib28]数据集。对于这些数据集中的数据,α设置为 0。通过这个目标,拟合的奖励模型更加稳健。RM 根据其大小训练 1~2 个 epoch。
强化学习。选择了GRPO[https://arxiv.org/html/2410.14940v3#bib.bib74]强化学习方法。相比 PPO[https://arxiv.org/html/2410.14940v3#bib.bib73], GRPO没有critic模型,结果与PPO相当,同时节省近一半的训练资源。此外,它比 DPO[https://arxiv.org/html/2410.14940v3#bib.bib68]和 KTO[https://arxiv.org/html/2410.14940v3#bib.bib29]等直接优化方法实现了更好的性能。GRPO优化目标如下:
$$\text{objective}(\theta) = \mathbb{E}_{(x,y) \sim \pi_\theta^{RL}} [r_\theta(x,y) - \beta \mathbb{KL} (\pi_\theta(y|x) \| \pi_{ref}(y|x))] \tag{2} \\ + \gamma \mathbb{KL}_{(x,y) \sim D_{SFT}} [\pi_\theta(y|x) \| \pi_{ref}(y|x)] $$2.3 提示优化
设计了一个提示增强系统(PAS),可以自动生成补充提示。pipeline一般会根据用户提示生成相应的补充内容,并输入到主模型中。PAS通常补充以下几方面内容:1)应用场景响应要求。2)基于用户意图的扩展内容,非强制语气。3)响应格式约束,例如“内容应逻辑清晰、条理清晰、易于用户理解”。
关于LLMs的检索增强生成(RAG),扩展提示内容需要在检索结果范围内;因此,在生成补充提示时,搜索关键词应作为新的约束条件。
2.4 模型合并
通过合并不同下游任务的微调模型,可以显著增强LLM的综合性能,缓解“跷跷板效应”。参考合并算法综述[https://arxiv.org/html/2410.14940v3#bib.bib96]。百川使用模型合并工具包 MergeKit[https://arxiv.org/html/2410.14940v3#bib.bib32],从不同领域选择最佳模型,应用各种合并算法,包括 Linear、Task Arithmetic[https://arxiv.org/html/2410.14940v3#bib.bib38]和 Model Stock[https://arxiv.org/html/2410.14940v3#bib.bib40]。实验表明,合并模型实现了更平衡的性能。在测试的算法中,Model Stock 始终提供最佳整体性能。
3 数据
图https://arxiv.org/html/2410.14940v3#S3.F4描绘了构建 Nova 对齐数据集的流程。最初开发了一个提示系统和一个分类模型(第https://arxiv.org/html/2410.14940v3#S3.SS1.SSS1节),它们构成了数据飞轮的基础。然后详细阐述数据构建的关键步骤,重点关注提示多样性(第https://arxiv.org/html/2410.14940v3#S3.SS1.SSS2节)和提示质量(第https://arxiv.org/html/2410.14940v3#S3.SS1.SSS3节)。此外详细介绍了生成响应的各种技术和最佳实践(第https://arxiv.org/html/2410.14940v3#S3.SS2节)。最后总结构建偏好数据的见解(第https://arxiv.org/html/2410.14940v3#S3.SS3节)。
3.1 Prompt 选择
3.1.1 Prompt系统与Prompt分类
prompt系统在数据管理、增加数据覆盖的广度和平衡性、引导模型性能迭代的可靠性和方向等方面发挥着至关重要的作用。以分类学和统计分析为指导,辅以人类专业知识,经过多次迭代和完善,我们开发出了多维度、多粒度的提示标注系统。随后,在数据生产的各个方面训练和部署自动标签分类模型。
提示系统。策划了一个多样化的 initial prompt pool,结合了来自人类提示和各种开源数据集的真实请求。利用通用模型,为提示分配初步标签。随后,通过同义词合并、长尾剪枝、层次关联等技术开发了初步的提示标注系统。再通过人工注释迭代完善扩展,精心建立了最终版本的标签系统和丰富的标签数据集。系统主要围绕六个维度精心构建:能力、属性、领域、语言、难度和提示约束。这些维度具有交织和分层结构,可以创建数千种组合类型。
能力涵盖LLM完成任务所需的技能,包括知识问答、文本生成、代码和逻辑推理。 属性提供与功能相关的独特上下文信息,例如用于文本生成的文学写作和实用写作。 领域将现实世界与LLM联系起来,赋予其相关性和活力,共同领域包括信息技术、历史和人文学科。 语言定义了表达的媒介,分为中文、外文、编程语言,再细分为简体中文、繁体中文、文言文、英文、法文、Python、C++等。 难度表示提示的复杂程度,分为简单、中级、困难三个级别。 提示约束强调了提示中约束的重要性,根据约束的数量将其分为无约束、简单约束和强约束。
这个集成框架确保了一个全面且适应性强的系统,擅长解决各种指令场景。
分类模型。在上述提示系统的指导下,最初利用先进的LLMs对提示进行分类。通过投票和低置信度样本的人工验证等方法完善这一过程,最终构建了包含数万个样本的训练集。随后,基于Baichuan2-13B[https://arxiv.org/html/2410.14940v3#bib.bib94]和标签数据,微调了专门的自动提示标注模型 (automatic prompt labeling model),在评估集上标注准确率达到 90%。相比之下,经过微调的 BERT[https://arxiv.org/html/2410.14940v3#bib.bib24]仅 81%。提示系统与自动分类模型的集成,实现了提示集的高效管理和迭代。包括评估提示的多样性和覆盖范围、分组以进行挖掘和优化,以及自动将提示与专门的人工注释者进行匹配。训练集中的每条新数据都会经历这个系统过程,确保一致且全面地处理所有与提示相关的任务,如图https://arxiv.org/html/2410.14940v3#S3.F4最左侧所示。
3.1.2 Prompt 多样性
训练了一种任务感知 embedding 模型,该模型可以精确地捕获指令差异,促进多样化。提示通常包括 instructions 和 inputs,通常格式化为与上下文信息连接的任务模板。如图https://arxiv.org/html/2410.14940v3#S3.F4右上部分,通过多粒度聚类方法提取高质量的任务感知训练数据。从粗粒度聚类开始,然后在每个类别内进行细粒度聚类。利用最长公共子序列(LCS)算法和启发式规则,从不同的细粒度簇中,将具有相似任务模板的样本识别为硬正样本,而将不具有相似任务模板的样本识别为硬负样本。然后将这些样本用于对比学习(基于Triplet Loss),以训练高质量的 embedding 模型。此外,通过设置阈值增量序列结合层次聚类原理执行分层聚类,从而增强算法的鲁棒性、效率和稳定性。与原始算法相比,这种组合方法仅使用 50%原始数据量,能够获得显着优越的结果。
3.1.3 Prompt 质量
利用 LLMs 开发了一个自动提示质量评估框架。
训练数据。受到ArenaHard评估系统[ https://arxiv.org/html/2410.14940v3#bib.bib47 ]的启发,利用基于LLM的成对判断机制来构建训练数据集。具体来说,最初采用第https://arxiv.org/html/2410.14940v3#S3.SS1.SSS1节中概述的分类模型将指令分类为 20 个不同的桶。每个桶随机选择 30 条作为数据锚点。随后,桶内的其他数据与锚点配对,并采用多个LLMs作为评估器。评估过程考虑四个维度:清晰度、实用性、复杂性和新颖性(Clarity, Practicality, Complexity, Novelty),使用三级评分系统进行成对比较。最终聚合多个锚点的评分结果为示例分配最终质量标签。
质量评分模型。考虑到性能和效率,使用上述训练数据对Baichuan2-7B [ https://arxiv.org/html/2410.14940v3#bib.bib94 ]基础模型进行微调,以开发最终的提示评分模型Quality-7B。通过对200个评估样本的测试,Quality-7B模型的评分准确性显着超过GPT-4。
3.2 Response 构造
人工注释+拒绝采样。采用不同尺寸模型和不同生成策略,对同一提示的多个响应进行采样。这些响应会根据类型标签自动分配给专门的注释器进行偏好排序。使用奖励模型或LLM作为评估器预过滤响应,形成具有分级质量区别的响应集,以收集足够丰富的偏好顺序。当最佳答案不能满足既定标准时,要求注释者修改答案,从而构建高质量的SFT和偏好数据集。
人机协同标注。使用LLM评估作为辅助信息来提高响应修改速度和质量。有时,要求评估人员根据采样的数据子集编译出一组质量缺陷,然后使用LLM进行缺陷挖掘和自动重写。标注过程积累了很多有用的技术,任何利用LLM提高标注效率的尝试方法都有增益。
指令回译。对于专业知识或创造力任务,受[ https://arxiv.org/html/2410.14940v3#bib.bib49 ]的启发,首先,收集大量高质量的文案、范文和好评帖子,再使用文本质量模型过滤高质量文本,最后,合成高质量的提示-响应对,反向翻译生成相应的创意指令。
个性化。对于同一提示,个人可能会表现出不同的答案风格偏好:有些人喜欢简洁直接的答案,另一些人则喜欢详细而结构化的回答。通过将不同响应风格描述合并到提示中,减轻了风格偏好冲突并增强了模型的风格适应性。此外,有关安全性、及时性、模型功能的提示很容易导致过度拒绝。通过严格控制拒绝比例,并将拒绝约束纳入系统提示解决这个问题。
3.3 偏好数据
高数据质量和多样性对于RLHF数据集也很重要。执行类似于第https://arxiv.org/html/2410.14940v3#S3.SS1节的数据过滤管道,以获得高质量和多样化的提示集合及其偏好数据集的标签。此外,使用分类标签过滤简单、时间敏感、无意义或超出能力的任务提示。由于注释者语言限制,只保留中英文提示。
对于数据标注,参考并改进了 Llama 2[https://arxiv.org/html/2410.14940v3#bib.bib82]的流程管道。使用前 3 个最先进的模型对每个提示抽取 5 个响应样本。模型生成设置 Temperature=1,TopP=0.99,TopK=50。为了进一步增加数据多样性并过滤模型已经很好回答的提示,使用 rouge[https://arxiv.org/html/2410.14940v3#bib.bib54] rule based 过滤器粗略过滤相似响应。对于不同的任务集,开发名为 AutoRator 的LLM-as-Judge[https://arxiv.org/html/2410.14940v3#bib.bib102]提示评估响应分数。综上所述,判断流程中使用的 AutoRator 分为三种类型:
绝对分数:判断开放响应任务(如写作、OpenQA 等)的绝对评估分数。 成对比较:判断两个响应是否具有相似思路,同样的结果。对于有具体答案的任务,如数学、推理。 黄金答案:对于有黄金答案的数据集,判断相对于黄金答案的绝对评估分数。
AutoRator 评估后,所有高分响应或相似评分响应提示都会被删除,剩余数据发送给注释者。对于一些有黄金答案的数学和推理数据,LLM-as-Judge分数已经足够好,可以直接使用。
在进行标注时,对于每组回复,不仅要求标注者打出自己喜欢的顺序,还要求标注者对有用性、书写流畅性和安全性进行绝对感觉评分。为了确保良好的注释质量并供将来使用,要求注释者突出显示错误部分,并在响应存在事实错误或逻辑错误时添加有关错误注释。如果提示的所有响应都获得较低的绝对注释分数,则被发送到https://arxiv.org/html/2410.14940v3#S3.SS2.SSS0.Px1节描述的响应修改过程。
由于大部分标注数据都是中文,增加其他语言的额外开源数据集,包括 hh-rlhf[https://arxiv.org/html/2410.14940v3#bib.bib7]、Helpsteer2[https://arxiv.org/html/2410.14940v3#bib.bib86]、UltraFeedback[https://arxiv.org/html/2410.14940v3#bib.bib21]和 SHP[https://arxiv.org/html/2410.14940v3#bib.bib28]。
4 关键能力
4.1 Instruction Following (IF)
如图https://arxiv.org/html/2410.14940v3#S4.F5所示。指令遵循主要包括复杂系统消息构建、指令约束扩展、响应逆转和教科书学习。
系统消息(System Message)。一方面,从真实用户日志和开源数据收集直接系统消息,进一步将它们分解为任务描述、工作流程、输出规范、约束和初始语句。另一方面,从广泛的多轮对话中提取具有复杂约束和要求的样本,利用LLMs提取并合成相似组件。随后,采用聚类和过滤技术获得各种约束描述和其他组件池。将原始提示与约束无缝集成。同时,精心选择系统消息的其余组成部分,并将约束提示嵌入到合适位置,伴随着进化学习和约束合理化步骤。这个过程会重复多次,经过最后的过滤步骤,消除不合理系统消息,形成一个全面的系统提示数据库(确保系统消息涵盖多种任务类型,例如角色扮演、函数调用和安全性。还确保约束描述和任务描述的紧密集成,以及数据的整体高质量)。
约束指令扩展(Constraint Instruction Expansion)。添加约束构建复杂指令已被证明可以增强IF能力https://arxiv.org/html/2410.14940v3#bib.bib33https://arxiv.org/html/2410.14940v3#bib.bib92https://arxiv.org/html/2410.14940v3#bib.bib76。如图https://arxiv.org/html/2410.14940v3#S4.F5(b)所示。借鉴之前的工作[https://arxiv.org/html/2410.14940v3#bib.bib99],利用LLMs从大量提示中分解、聚类和合成 30 多种约束类型。随机采样验证约束类型覆盖率达到90%,并获得了每种约束对应的丰富描述。随后,采用多个LLMs增加原始提示约束的复杂性。这个过程涉及详细的提示工程指导,以确保LLMs选择与提示相匹配的约束描述,重点关注约束类型的合理性、表达灵活性以及基于提示质量分数的过滤。最后,使用单独的LLM作为验证器选择高质量、约束丰富的指令。
响应逆转(Response Reversal)。复杂指令的对齐提出了两个关键挑战:(1)包含多重约束的高质量提示稀缺且缺乏多样性。(2)难以产生严格遵循这些提示的响应。互联网上存在大量高质量的自然语言文本,利用这些文本的固有属性作为生成指令的约束条件,即可大规模创建具有多重约束的高质量提示-响应对。为了解决这个问题,开发一个响应逆转pipeline,如图https://arxiv.org/html/2410.14940v3#S4.F5(c) 所示。首先,采用质量评分模型进行质量过滤,从知识丰富的网页段落中提取高质量文本。接下来,使用此高质量文本作为响应,并要求LLM生成相应的提示,并将响应的固有属性合并为提示约束。最后, LLM评估生成的提示质量,打分,并提供改进建议。迭代此过程,直到响应中存在的所有约束都完全封装在提示中。
教科书(Textbook)。为了增强模型对复杂指令的理解能力,提出一种教学模仿方法。明确关注学习指令的意图、思维过程、类比推理和对齐原则。具体来说,对于复杂指令,利用LLMs生成与提示高度一致的响应,如图https://arxiv.org/html/2410.14940v3#S4.F5(d) 所示。例如,当任务是理解指令时,可能会提示模型 “解释如何理解指令,从专业性、复杂性和输出限制等多个维度分析其细节和挑战。”或者,引导LLMs阐明解决方案背后的思维过程(例如,详细阐述解决方案背后的推理过程,包括相关领域知识、推理方法和常见陷阱,特别关注错误的推理路径和容易被忽视的输出约束,如格式、风格、语气、长度和字数限制。)另外,诸如 “你需要从给定的例子xx中学习推理技巧和背景知识。”这些提示输入LLM,可以赋予LLM泛化和适应不同任务场景的能力。还教授了一些对齐原则(如“尽可能避免使用技术术语或复杂表达方式”、“考虑用户的情绪状态”)。这些方法确保了LLM对复杂指令的更深入理解和稳健应用,从而增强了模型概括和适应不同教学要求的能力。
4.2 Math
Prompt Collection。平衡各难度级别的数学指令,如在小学、初中、高中和大学各个级别进行均匀抽样。此外,使用更细粒度标准 - “知识点”,在每个级别选择问题以均匀覆盖 1,000 多个不同的知识点。优先考虑可以解决问题的样本(通常包含更全面的步骤)。
Response Generation。在许多解决数学问题的数据集中,提供的答案通常缺乏详细的步骤。手动标注是一种常见的方法,但是,一些中间步骤可能会被忽略。尽管如此,这些步骤对于模型训练很重要。通过利用LLM结合提示和标准答案,生成详细的解决方案,并根据参考答案保持一致的风格。这种方法通过详细的步骤合成了大量的数学对齐数据,显着增强了模型的数学能力。直接生成的答案通常很难匹配正确答案,因此提供参考答案和步骤有助于模型将其丰富为连贯的推理链。实验发现参考答案可以显着提高生成答案质量。然而,由于参考答案可能包含错误,指示模型参考答案正确率只有 95% 。这种方法减少了基于潜在错误参考的错误推论。最后,进行后处理以控制响应生成质量(如确保未明确提及参考答案的存在)。
4.3 Reasoning
收集的推理数据类别如下:
常识推理:涉及时间换算、时区计算、排序、路线规划、日期推理、几何空间推理、家庭关系判断等; 命题假设:包括演绎推理、归纳推理、反证陈述; 关系判断:涵盖包含/蕴涵关系、因果关系、对立关系、中立关系、类比推理等; 多步推理:包括并行推理、串行推理、链式推理、树推理以及推理链攻击。 博弈论:囚徒困境、鹰鸽博弈等经典问题; 破坏性问题:涉及引入破坏性条件来测试推理能力; 反事实推理:涉及同一个人的场景,将不相关的个人联系起来,颠倒因果关系,将字面上相关但因果上不相关的事件联系起来,并探索科学上难以置信的情况。
数据收集。开源数据中提供参考答案可以显着提高数据质量。逻辑推理任务对数据质量特别敏感,需要手动检查响应风格和准确性。一些任务(如复杂的数值序列问题)对当前LLM提出了相当大的挑战。这些任务通常涉及探索各种解决方案。如果手动标记的数据仅提供正确的答案,而不包括对不同解决方法的探索,则可能会产生负面影响。
推理CoT。为了增强模型的推理能力,通过思维链提示增强指令调整数据https://arxiv.org/html/2410.14940v3#bib.bib17 https://arxiv.org/html/2410.14940v3#bib.bib88 https://arxiv.org/html/2410.14940v3#bib.bib43 。该技术鼓励模型将复杂问题分解为逐步推理过程。
推理反思。有时LLMs会由于推理缺陷和自我纠正能力有限而产生错误答案。为了增强模型反映和纠正错误的能力,实施一种策略来识别错误响应,提供参考答案让LLMs重写这些数据https://arxiv.org/html/2410.14940v3#bib.bib75https://arxiv.org/html/2410.14940v3#bib.bib60https://arxiv.org/html/2410.14940v3#bib.bib2。
数据分布。逻辑推理训练集中各难度数据应该如何分布?实验得到了一些结论,如减少简单数据比例可以提高模型性能,但如果减少过多则会产生负面影响。
长尾谬误理解。考虑涉及误导性信息、不正确前提和故意模糊的推理问题。现有研究表明,当前的逻辑推理数据集并不能充分覆盖这些长尾问题,这表明“弱智吧”数据可以增强模型的逻辑推理能力[https://arxiv.org/html/2410.14940v3#bib.bib51]。从互联网收集更广泛的“弱智吧”用户问题仔细选择和标记,以创建高质量的逻辑推理数据集。
4.4 Code
代码类指令,类别分类如下:
代码生成,其中查询采用自然语言,响应包含代码; 代码完成,具有带空格的部分代码段; 代码调试,涉及提供代码中的错误识别和纠正; 代码解释,需要总结给定代码的功能或流程; 代码知识问答,涉及常见的编码知识。
代码类指令,难度分类如下:
简单,对于用基础知识即可解决的小代码问题; 中等,针对需要高级知识和分析时间的更复杂问题; 困难,对于需要深入算法理解和大量调试的大型复杂代码; 非常困难,需要专业知识、大量努力,还可能需要深入研究。
代码知识问答本质上是常识性提问,并不能增强编码技能,所以进行了降采样。被归类为“非常困难”的数据通常需要超出模型能力的知识或广泛的上下文才能解决,这使它容易产生幻觉,并且人类难以监督验证,因此丢弃此类数据。最后,平衡不同编程语言的数据比例。
Prompt Collection。最初的代码相关提示来源多样,包括代码相关网站和开源数据集。对于提示回复,根据几个标准验证:
一致性,检查代码块和公式格式,确保正确缩进并包含必要的注释; 正确性,确保响应符合提示要求,例如使用指定的编程语言并提供所需示例,同时还评估解决方案的准确性和完整性,包括边界情况讨论; 质量,评估响应是否提供了详细的问题背景描述、解决方案的清晰解释以及代码后的进一步解释或总结。
Multi-turn。受 WizardCoder [https://arxiv.org/html/2410.14940v3#bib.bib59]启发,利用LLMs在现有单轮问答基础上生成一个新问题。这个新问题:1)以原问题为基础,增加难度和深度,2)确保它具有现实意义,并且与第一轮问答相关。获得新问题后再使用 LLMs推理答案。有趣的是,人类对第二轮问答的评估表明,后续问答通常比最初的答案更有用,这表明多轮对话更有效。
4.5 Tool-using
本节概述增强LLM通用工具使用和代码解释能力的方法。
General Tool-using。模拟不同场景,合成通用的工具使用数据,包括单工具、单回合交互和多工具、多回合交互。在单工具场景中,重点是确定何时调用工具并通过理解上下文和格式化输入以获得所需结果来正确构建参数。在更复杂的多工具场景中,模型必须为用户查询选择最佳工具,管理顺序和并行工具调用,并协调多个工具获得一致结果。这需要了解工具依赖性和功能,根据中间结果动态调整策略,并在输出不符合预期时诊断问题。为了提高模型区分相似工具的能力,生成现有工具的变体,使模型能够学习细微差别,并改进不同环境下选择和使用工具的决策。
Code Interpreter。在开发代码解释器能力时,重点关注编码技能和解释能力。为了提高编码能力,主要利用 Jupyter Notebooks 和开源 Python 代码数据。Jupyter 中的结构化数据(包括文本、代码和执行结果)与多轮编码提问、响应+执行结果场景非常吻合。实验发现,在预训练阶段增加 Jupyter 数据比例可以提高模型在 Python 编码、代码解释和工具使用方面的熟练程度。对于开源Python数据,设置Python Jupyter Notebook沙箱环境执行LLM生成的代码,选择运行无错误的输出。为了构建调试功能,对沙箱执行中发生的错误进行分类,以识别真正的编码问题错误。提示LLM反思完整的错误消息并相应地修改代码,从而教会模型学习调试技能。
对于解读能力,重点关注数据分析和文件阅读能力。为了解决涉及Excel、CSV、JSON和Markdown文件上传的场景问题,使用LLM模拟用户、问题解决者和验证者的角色。使用 Pandas 和 Scikit-learn 等库对主要任务进行分类,例如摘要、统计、图表生成和机器学习。LLM作为用户,将任务随机组合并组织成连贯的请求。然后,问题解决者将这些任务分解为子任务,并在 Jupyter 沙箱中使用 Python 代码解决每个子任务。验证者检查每个执行步骤,如有必要,使用DFS方法恢复到先前的步骤,直到完成。数据集均经过手动验证。任务的多样性带来了广泛的结果,平均对话 12 轮,超过 2000 个tokens。