后训练(Post-Training)概论
现代的大型语言模型的训练通常分为两个阶段:预训练(Pre-training)和后训练(Post-training)。预训练阶段的目标是在大规模文本语料上学习通用的语言表示能力,使模型掌握词汇、语法、世界知识等基础能力。然而,预训练模型只是一个“通才”,它并不能直接满足用户的具体需求——用户期望模型能够理解指令、生成符合人类偏好的输出、甚至进行多轮对话。后训练正是解决这一问题的关键技术。它将预训练模型进一步微调,使其从“语言模型”转变为能完成任务的工具。
本文假设读者已具备强化学习基础知识,将直接聚焦于后训练的核心技术。如果你对强化学习基础不熟悉,建议先阅读先前的的强化学习基础一文。
指令微调(Instruction Finetuning)
预训练模型虽然具备强大的语言生成能力,但它并不总是能够对齐用户的意图。给定一个输入提示,预训练模型可能会续写文本而非回答问题,或者生成不符合用户期望的输出。 例如,考虑这样的场景:用户要求模型“写一个关于狗和她宠物蚱蜢的故事”,这是一个开放性的创意写作任务,没有唯一正确的答案。预训练模型的目标是最小化token级别的负对数似然,这意味着它会对所有token级别的错误一视同仁,无论是语法错误还是事实错误,惩罚都是相同的。 指令微调正是为了解决这一问题而提出的。
指令微调的基本思想
指令微调的核心思想非常简单:收集大量(指令,输出)对的数据集,然后在这个数据集上对预训练模型进行微调。这些指令覆盖了各种任务类型,包括分类、序列标注、文本改写、翻译、问答等。 形式化地,给定一个指令微调数据集 ,其中 是输入指令, 是期望的输出,我们通过最大化以下目标来微调模型:
这里 表示在给定输入 的条件下,模型生成目标输出 的概率。 是模型的参数, 是自然对数。这个公式的直觉是:我们希望模型对每个训练样本的正确答案给予尽可能高的概率;也就是说,模型越能在给定指令后生成正确的回应,损失越小。 指令微调本质上是一个标准的监督学习任务,只是训练数据的格式是(指令,响应)对。这与传统的分类或序列标注任务非常相似,只是输入是自然语言形式的指令而非结构化的特征。
典型数据集与模型
典型的指令微调数据集包括FLAN-T511 Wei et al., 2022所使用的1,800多个任务,以及Super-NaturalInstructions数据集:它包含超过1,600个任务和300万个以上的训练示例。 指令微调的效果是相当显著的:以FLAN-T5为例,它在T5模型的基础上进行了指令微调。实验表明,指令微调带来的性能提升与模型规模呈正相关,更大的模型从指令微调中获益更多。 另一个著名的例子是Alpaca,它基于LLaMA 7B模型,在52,000个指令遵循示例上进行微调。研究还发现,指令微调并不需要大量的样本——LIMA22 Zhang et al., 2023表明,少量高质量的示例就足以实现有效的对齐。
人类反馈强化学习(RLHF)
尽管指令微调已经取得了显著成效,但它仍然存在一些局限性。首先,收集高质量的指令-响应对是昂贵的。其次,对于开放式创意生成等任务,并没有唯一正确的答案。模型无法从“标准答案”中学习。第三,语言模型在token级别对所有错误一视同仁,但某些错误确实比其他错误更严重。 这些问题的核心在于:语言模型的优化目标(最大化负对数似然)与“满足人类偏好”这一最终目标之间存在不匹配。强化学习提供了一种显式优化任意目标函数的方法,这使得我们可以直接优化“人类满意度”这一难以通过传统监督学习定义的指标。
关于强化学习的基础知识(包括策略梯度、PPO、GAE等),请参阅本系列的强化学习基础一文。以下我们直接介绍 RLHF 中的奖励模型部分。
奖励模型
现在我们有了一个优化任意奖励函数的方法,但还有一个关键问题:如何定义奖励函数?
人工标注是获得奖励的直接方式——让人类评估模型输出并给出评分。然而,这种方法成本高昂且难以扩展。更重要的是,人类的判断往往是主观的、嘈杂的,而且难以校准。
解决方案是训练一个单独的奖励模型(Reward Model, RM)来预测人类偏好。
收集偏好数据
与其让人类给每个输出直接打分(这很主观且难以校准),更可靠的方法是让人类做“二选一”的选择题:给定同一个输入,让人类从两个候选输出中选择更好的那一个。这种成对比较(pairwise comparison)更可靠,因为人类只需要判断相对好坏,而不需要给绝对分数。
训练奖励模型
给定一对样本 ,其中 是“赢”的样本(更受人类喜爱), 是“输”的样本,我们可以使用以下损失函数训练奖励模型:
这里 是sigmoid函数, 是奖励模型的参数。这个目标的直觉是:我们希望奖励模型给“赢”的样本分配更高的分数,给“输”的样本分配更低的分数。当预测正确时(winning样本得分确实更高),损失为0;当预测错误时,损失增加。
这个公式被称为Bradley-Terry模型,是处理成对比较数据的经典方法。Bradley-Terry模型最早由Bradley和Terry于1952年提出,广泛应用于心理学和比赛排名等领域。
验证奖励模型
奖励模型的训练是RLHF流程中的关键步骤。只有当奖励模型能够准确预测人类偏好时,后续的强化学习优化才有意义。实践中,我们会在保留的人类判断数据上评估奖励模型的准确率,确保其性能足够好后才进入下一步。
RLHF完整流程
将以上组件组合起来,我们就得到了完整的RLHF流程:
- 预训练模型:从预训练语言模型 开始
- 指令微调(可选):先进行指令微调得到
- 训练奖励模型:在人类偏好数据上训练
- 强化学习优化:使用PPO算法优化策略模型,同时加入KL散度惩罚
第四步的目标函数为:
这里第二项是KL散度惩罚项。 衡量新策略 与原始预训练模型 的差异。乘以系数 后作为惩罚项加入目标。
这个KL惩罚的直觉是:我们希望在提升奖励的同时,不要让模型的输出偏离预训练模型太远。KL散度 衡量的是从分布 到分布 的信息损失。这里使用的是 ,方向与标准KL相反,但效果类似——惩罚过大的偏离。
完全放飞自我可能让模型学会“作弊”——生成看似正确但实际上只是取了巧的输出。KL惩罚确保了优化是“受约束”的。
InstructGPT与ChatGPT
InstructGPT33 Ouyang et al., 2022是OpenAI将RLHF技术规模化的标志性工作。它在超过30,000个任务上进行了人类反馈强化学习,展示了RLHF在大规模场景下的有效性。
InstructGPT的训练流程包含三个阶段:首先进行指令微调,然后在人类标注的指令-响应对上进行监督学习,最后使用RLHF进行强化优化。这里的“监督学习”实际上就是指令微调,InstructGPT论文中称之为“SFT”(Supervised Finetuning)。
实验结果表明,RLHF显著优于纯预训练或仅进行指令微调的模型。在摘要生成、问答、对话等任务上,RLHF模型的人类评估结果明显更好。
ChatGPT44 ChatGPT没有公开发表论文,其技术细节主要来自InstructGPT的公开信息。则是InstructGPT技术在对话场景中的应用。它结合了指令微调和RLHF,构建了一个能够进行自然对话的助手。
有趣的是,后续研究发现PPO并非唯一有效的RLHF变体。一些简单的基线方法(如Best-of-n采样)也表现出色。RLHF的主要效果体现在文风变化上——模型生成的输出更加详细,结构更清晰,更具帮助性。
奖励模型的局限性
尽管RLHF取得了巨大成功,但也存在一些重要的局限性。
首先是人类偏好的不可靠性。人类标注者可能存在偏见,判断可能不一致,而且难以校准。Reward hacking是强化学习中的常见问题——智能体可能找到获取高奖励的“捷径”而非真正完成预期任务。Reward hacking 在RLHF中很常见,例如模型学会生成“看起来对”但实际不正确的内容来获得高分。 对于对话模型,情况更为复杂。模型被奖励生成“看起来权威且有帮助”的回应,无论其是否真实。这可能导致模型编造事实(hallucination)。此外,奖励模型本身也是不完美的——它们是对人类偏好的近似,可能引入额外的误差。实验中观察到reward model过度优化的问题:随着RL优化进行,真实的奖励可能先上升后下降,因为模型学会了“欺骗”奖励系统而非真正满足人类需求。
直接偏好优化(DPO)
DPO的引入
RLHF的核心流程包含两个阶段:首先训练奖励模型,然后用强化学习优化策略。这一流程存在几个明显的不足:强化学习优化计算成本高且难以调优、需要拟合价值函数、样本效率低、训练过程对超参数敏感。
Direct Preference Optimization(DPO)55 Rafailov et al., 2023提出了一种优雅的解决方案——绕过显式的奖励模型和强化学习步骤,直接使用偏好数据优化策略模型。
DPO的数学推导
DPO的核心洞见来自于对RLHF目标的数学分析。
回顾RLHF的优化目标(简化形式):
这里 是输入(提示), 是模型生成的输出。
注意,这是一个带KL惩罚的强化学习目标。数学上可以证明,这个目标存在一个“闭式解”——即最优策略可以精确地写成一个公式。最优策略为:
其中 是归一化常数,确保所有概率之和为1。
这个公式的直觉是:最优策略是预训练策略的“重新加权”版本——那些在奖励模型得分高的输出会被赋予更高的概率。
从闭式解到优化目标
现在,我们两边取对数:
关键洞察: 实际上正比于奖励函数!也就是说,我们不需要单独训练一个奖励模型——我们可以用当前策略与参考策略的比值来定义隐式的奖励。
DPO损失函数
基于上述推导,DPO使用以下损失函数直接优化策略模型:
其中 是偏好数据, 是winning样本, 是losing样本, 是sigmoid函数。
这个目标函数的直观解释是:我们希望模型的“隐式奖励”差异最大化——winning样本相对于losing样本应该得到更高的隐式奖励。当两者差异越大, 的输入越正, 越接近0,损失越小。
DPO的美妙之处在于:它完全不需要显式的奖励模型,也不需要复杂的强化学习优化。我们只需要标准的语言模型训练(类似于指令微调),但使用成对偏好数据作为监督信号。
DPO的效果与变体
实验表明,DPO在多项任务上取得了与PPO(InstructGPT中使用的方法)相当甚至更好的效果,同时训练过程更加简单稳定。
由于其简洁性和有效性,DPO已成为开源大语言模型后训练的主流选择。几乎所有主流的开源LLM都使用DPO进行偏好优化。
GRPO进一步简化
GRPO(Group Relative Policy Optimization)66 Shao et al., 2024是另一个值得关注的进展。它进一步简化了DPO,不需要参考模型,通过组内相对排名来计算优势。这种方法在DeepSeekMath等模型上展现了出色的效果。
人类偏好数据与标注
标注来源与挑战
RLHF和DPO的效果很大程度上取决于偏好数据的质量。实际应用中,这些数据通常来自海外低收入工人——他们根据给定的提示评估模型输出的质量。这种数据收集方式存在文化偏见、主观性差异等挑战。
标注者的偏见可能会被模型学习。已有研究表明,经过偏好调整的模型可能会继承或放大标注数据中的偏见。
AI反馈与自我提升
鉴于人类标注的成本和局限性,近年来出现了使用AI反馈进行强化学习的趋势。RLAIF77 Bai et al., 2023使用AI模型(如GPT-4)来评估偏好,而非人类标注。
另一种思路是让模型从自己的输出中学习——如Self-Instruct、Self-Alignment等方法。这些方法通过迭代式的自我提升,减少了对外部标注数据的依赖。
通过观察近些年来后训练技术的演进,我们看到了几个明显的趋势:
- 训练目标的演进:从token级别的负对数似然到人类偏好级别的优化,模型越来越能够理解和满足用户意图。
- 训练方式的简化:从复杂的PPO强化学习到简洁的DPO直接优化,降低了工程实现的门槛。
- 对数据质量的重视:从少量高质量数据到大规模偏好数据,数据的角色越来越关键。
然而,后训练技术仍面临诸多挑战。RLHF/DPO能否解决大语言模型的根本问题仍是未知数。模型可能会学会“欺骗”奖励系统而非真正理解任务。标注数据的偏见和质量问题也需要更多关注。