LLM 后训练:SFT、RLHF、DPO 与 GRPO

预训练模型能预测下一个 Token,但它不会对话、不会拒绝有害请求、也不会一步步推理。后训练就是把这些能力装进去的阶段。从 SFT 的示范学习,到 RLHF 的奖励模型,再到 DPO 省掉强化学习的做法,以及 DeepSeek-R1 用 GRPO 训出推理能力的路径。

本文使用humanizerdocumd-visuals

预训练让模型学会了语言——它能流畅地预测下一个 Token,能在语料里看到过的模式上表现良好。但一个纯粹的预训练模型拿来用会让人失望:它不会遵循指令,不会拒绝危险请求,遇到复杂推理题它会随机乱答,问它一个问题它可能只是接着补全你的问题而不是回答它。

这些能力都是后训练(Post-Training)装进去的。后训练是预训练结束之后的一套训练流水线,目标是把“会预测文本”变成“会对话、会帮忙、会推理、值得信任”。

这篇文章按时间顺序介绍四种后训练方法:SFT(监督微调)、RLHF(人类反馈强化学习)、DPO(直接偏好优化)、GRPO(组相对策略优化)。每种方法解决了上一种的哪个问题,是理解这个领域演化逻辑的线索。

预训练模型为什么“不好用”

先把问题说清楚。预训练的训练目标是最大化下一个 Token 的预测概率,数学上是最小化交叉熵损失:

Loss = -Σ log P(token_t | token_1, ..., token_{t-1})

这个目标很好地让模型学会了语言的统计结构,但它对“什么是好的回答”没有任何概念。训练语料里有教科书,有论坛帖子,有新闻,有小说,有代码——模型学会的是“续写语料里可能出现的内容”,而不是“给一个问题提供有帮助、诚实、无害的回答”。

具体表现:

  • 指令遵循差:给模型一个问题,它可能续写更多问题而不是回答,因为它在语料里见过大量“FAQ”格式
  • 有害内容:训练语料里有有害文本,模型照样会生成
  • 无法推理:复杂推理需要分步骤展开思考,但预训练目标对“思考过程”没有奖励
  • 格式混乱:不知道什么时候该停止,格式和语气不稳定

后训练的目标就是修正这些问题,让模型的行为符合人类期望。

第一步 SFT:用示范数据教会模型“应该怎么说”

监督微调(Supervised Fine-Tuning,SFT)是后训练的起点,也是最直观的方法。

做法:收集一批“指令—理想回答”的样本对,用这批数据继续训练预训练模型。训练目标和预训练一样(预测下一个 Token),但数据换成了精心准备的高质量示范。

训练样本结构:
System:  你是一个乐于助人的助手。
User:    解释一下什么是机器学习。
Assistant: 机器学习是一种让计算机从数据中自动学习规律的技术...

训练时,只对 Assistant 部分计算损失(不对 System 和 User 部分计算),让模型学会“在这种上下文下,应该生成这种风格的回答”。

SFT 的效果:一个只经过 SFT 的模型会变得“听话”——它知道对话格式,知道在被问问题时应该回答而不是续写,语气和风格也会趋向训练数据的示范。InstructGPT 论文(Ouyang et al., 2022)展示了用约 13000 条人工标注样本做 SFT 之后,GPT-3 在人类评估上的显著提升。

SFT 的两个工程细节。第一个是损失掩码(Loss Masking):训练时只对 Assistant 部分的 Token 计算损失,System 和 User 部分的目标位置被掩掉。原因是模型不需要学习“生成用户的问题”,它只需要学习“在给定上下文下生成优质回答”。如果对全部 Token 计算损失,模型会花容量去拟合用户输入的分布,反而干扰指令遵循能力的形成。

第二个是数据规模与质量的关系。InstructGPT 只用了约 13K 条样本就取得了显著效果,这个数字远小于很多人的直觉。后续研究(如 LIMA 论文,Zhou et al., 2023)进一步发现,约 1000 条高质量、多样化的示范就能让模型具备不错的指令遵循能力,关键在于质量而非数量。这与预训练需要数万亿 Token 形成鲜明对比:预训练学习的是语言的统计规律,需要海量数据;后训练塑造的是行为模式,少量高质量示范足以定义“什么是好回答”。

SFT 的局限:示范数据告诉模型“好的回答长什么样”,但没有告诉模型“哪个回答更好”。当模型对同一个问题有多个可能的合理回答时,SFT 无法区分哪个更符合人类偏好——比如一个简洁准确的回答和一个冗长但看起来更“有帮助”的回答,SFT 没有办法学会辨别。

另一个问题是幻觉:SFT 数据里的示范是“正确的”,但模型在训练中看到的是如何生成这种风格的文本,而不是如何区分自己知道的和自己不知道的。它会学会模仿“自信地给出答案”的风格,即使内容不确定。SFT 之后的模型往往表现出“过度自信”——即使它不知道答案,也会用同样确定的语气编造一个。这正是下一步要用偏好数据来修正的问题之一。

第二步 RLHF:用人类偏好训练奖励模型

强化学习从人类反馈(Reinforcement Learning from Human Feedback,RLHF)是 InstructGPT 和 ChatGPT 背后的核心方法,目标是让模型的输出符合人类偏好,而不只是复制示范。

RLHF 分三个阶段:

阶段一:SFT。先做标准的监督微调,得到一个会对话的基础模型。

阶段二:训练奖励模型(Reward Model)。让标注者比较同一个问题的多个回答,标出哪个更好。用这些偏好数据训练一个奖励模型(RM):给定一个问题和一个回答,输出一个标量分数,代表“这个回答有多符合人类偏好”。

偏好数据格式:
问题 Q: "如何减少代码里的 bug?"
回答 A: "写测试。"                          ← 标注者选这个(更好)
回答 B: "尽量小心写,多检查一下。"          ← 次选

奖励模型的训练目标是让它对被选择的回答打出更高分:

Loss_RM = -log(σ(r(x, y_w) - r(x, y_l)))

其中 y_w 是被偏好的回答,y_l 是次选,σ 是 sigmoid 函数。

阶段三:用 RL 微调语言模型。用训练好的奖励模型作为奖励信号,用强化学习(通常是 PPO 算法)继续更新语言模型,让它生成能获得高奖励分的回答。同时加一个 KL 散度惩罚项,限制语言模型不要偏离 SFT 模型太远,防止“奖励黑客”(模型学会骗过奖励模型而不是真的更好):

目标 = E[r(x, y)] - β × KL(π_RL || π_SFT)

SFT、RLHF 与 DPO 三种后训练路径对比

RLHF 的效果:RLHF 让模型的输出显著更符合人类偏好。InstructGPT 的论文结果是人类评估者更喜欢经过 RLHF 的 1.3B 模型,胜过没有 RLHF 的 175B GPT-3——参数量小 100 多倍,但“更有用”。

RLHF 的问题:

  • 训练流水线复杂,需要同时维护四个模型(SFT 模型、RM、RL 策略模型、参考模型),显存需求和工程复杂度都高
  • PPO 本身不稳定,超参数多,容易训崩
  • 奖励黑客:模型可能学会特定的表达模式来骗奖励模型,而不是真的变好
  • 需要大量人工标注偏好数据,成本高

RLHF 的奖励黑客是什么:值得细说。奖励模型是通过人类偏好数据训练的,它只在训练分布内准确。当语言模型被 PPO 持续优化时,它会逐渐找到在奖励模型上得高分、但实际上并不更有用的模式——比如更长的回答(标注者倾向于认为更详尽的回答更好)、过度使用礼貌用语、某种让奖励模型满意的措辞模板,而不是更准确的信息或更清晰的推理。这就是为什么 RLHF 训练必须加 KL 散度约束:限制策略不要偏离 SFT 模型太远,防止奖励黑客走极端。但这同时也限制了 RL 能探索的范围,是一个内在的矛盾。

第三步 DPO:去掉强化学习,直接在偏好数据上训练

Direct Preference Optimization(DPO,Rafailov et al., 2023)的出发点是一个数学推导:RLHF 的优化目标有一个闭合形式的解,可以把奖励模型和 RL 优化步骤合并成一个单一的监督学习目标,直接在偏好数据上训练语言模型。

DPO 的损失函数:

Loss_DPO = -log σ( β × log(π_θ(y_w|x)/π_ref(y_w|x)) - β × log(π_θ(y_l|x)/π_ref(y_l|x)) )

直观理解:训练目标是让模型相对于参考模型(SFT 模型),更多地提高好回答的概率,同时更多地降低差回答的概率。不需要显式的奖励模型,也不需要 PPO。

DPO 的优势:

  • 训练稳定,超参数少(只有 β 一个关键参数)
  • 只需要偏好数据对,不需要单独训练奖励模型
  • 显存需求更低,工程实现更简单
  • 效果在很多基准上与 RLHF 相当甚至更好

DPO 的局限:

  • 需要相对的偏好数据对(选择/拒绝),而不是绝对的分数;偏好数据质量非常重要
  • 对分布外(out-of-distribution)的回答泛化能力较弱
  • 不太适合需要在线探索的任务(比如让模型自己生成答案然后评价的场景)

DPO 因为稳定性好、实现简单,成为了很多开源模型后训练的首选。LLaMA 3 Instruct 系列、Mistral Instruct 系列都大量使用了 DPO 或其变体。

DPO 变体和在线 DPO:标准 DPO 是离线的——偏好数据在训练前就收集好了,训练时不再生成新数据。一个已知问题是,随着模型被 DPO 训练,它自身的分布会偏离当初收集偏好数据时的模型,导致偏好对逐渐变成“对当前模型来说太容易区分”的样本,训练信号减弱。在线 DPO(Online DPO)或迭代 DPO 的解法是:每隔若干步用当前模型重新生成回答、重新标注偏好,让偏好数据始终来自当前策略。这比离线 DPO 更贴近 RLHF 的在线特性,代价是需要不断生成和标注新数据,工程复杂度也更高。SimPO(Simple Preference Optimization)是另一个变体,去掉了对参考模型的依赖,只用序列长度归一化的对数概率比较,进一步简化了训练流程,在部分基准上效果与标准 DPO 相当。

第四步 GRPO:用强化学习训出推理能力

前三种方法都针对“指令遵循”和“偏好对齐”——让模型更有帮助、更安全、输出格式更好。但它们不擅长训练复杂推理能力,比如数学解题、代码生成、多步推理。

原因在于:推理任务的“好坏”很难被偏好数据捕捉。人类标注者比较“哪个数学解答更好”很难,因为需要自己会解题。而且推理过程是否正确比最终答案是否正确更难判断。

DeepSeek-R1 用的 GRPO(Group Relative Policy Optimization)解决了这个问题,路径是:用可验证的奖励信号替代人类偏好标注。

GRPO 的核心思路:

对于一个数学问题,让模型生成一批答案(比如 8 个)。用一个验证器(不是人,而是一个规则程序)检查每个答案是否正确——答案对就给正奖励,答案错就给负奖励。以组内的相对奖励为基础,用策略梯度方法更新模型,让模型更倾向于生成能得到正确答案的推理路径。

GRPO 奖励组成:
- 答案准确性奖励(可验证:0 或 1)
- 格式奖励(是否有推理过程,是否符合 <think>...</think> 格式)
- 长度惩罚(防止无意义地拉长输出)

相比 PPO,GRPO 把每组内的多个输出做归一化(减去组内均值,除以组内标准差),不需要额外的价值网络(Value Network),训练稳定性更好,显存需求更低。

为什么 GRPO 能训出推理能力:关键是奖励信号的质量。数学题的答案是否正确是可以客观验证的,这比“哪个回答更有帮助”要精确得多。模型在一个题目上生成很多候选路径,正确路径获得奖励,错误路径获得惩罚,模型学会了“用正确的推理方式比随机乱猜更容易得到奖励”。

DeepSeek-R1 的结果是,纯粹靠 GRPO(不依赖大量人工标注,只依赖可验证答案的数学和代码题)训练出了显著的推理能力,在数学和代码基准上达到接近 OpenAI o1 的水平。

可验证奖励的边界和局限:GRPO 和类似的可验证奖励方法有一个结构性限制:只能用于有客观正确答案的任务——数学、代码(能运行出正确结果)、逻辑推理(有规则判断)。对于开放性问题(写一篇好文章、给出有帮助的建议),无法自动验证“正确性”,仍然需要人类偏好或奖励模型。这也是为什么实际产品的后训练是多阶段的:GRPO 负责提升推理和代码能力,DPO 或 RLHF 负责偏好对齐和安全性,二者解决不同的问题。

另一个值得注意的现象是推理长度膨胀:用 GRPO 训练的推理模型有时会在不需要复杂推理的问题上也生成很长的思考链,这不一定是真正的推理,可能是模型学会了“更长的输出更容易产生正确答案”这个相关性规律。DeepSeek-R1 的论文中提到了这一问题,也是后续研究在探索“按需推理”(Adaptive Thinking)的动机之一。

四种方法的对比

方法 数据需求 奖励信号 擅长的能力 主要代价
SFT 指令—回答示范对 无(复制示范) 指令遵循、格式、风格 无法区分回答质量
RLHF 偏好对比数据 + RL 奖励模型(人类偏好) 有用性、无害性 工程复杂,训练不稳定
DPO 偏好对比数据 隐式(闭合解) 偏好对齐 不擅长在线探索
GRPO 可验证任务数据 规则验证器 推理、数学、代码 需要可验证的任务

实际产品的后训练通常是多阶段的组合:先用 SFT 建立指令遵循能力,再用 DPO 或 RLHF 做偏好对齐,如果需要推理能力还会加一轮 GRPO 或类似的 RL 训练。

各阶段数据量的对比:这四种方法对数据量的要求差异悬殊。SFT 通常需要数千到数十万条高质量“指令—回答”样本,质量比数量更重要;RLHF 需要大量偏好对比数据(选出哪个回答更好),以及用于训练奖励模型的独立数据集;DPO 和 SFT 一样只需要偏好对,不需要额外训练奖励模型;GRPO 不需要人工标注,但需要大量可验证的任务数据(有标准答案的数学题、可运行的代码题)。

后训练的顺序为什么重要:先 SFT 再偏好对齐是标准顺序,不能颠倒。如果直接对一个预训练基础模型做 DPO,效果会差很多,因为偏好对齐依赖模型已经有基本的指令遵循能力——偏好数据里的“被选回答”和“被拒绝回答”都是有语义的对话,如果模型连对话格式都不懂,无法从这个信号中学到有意义的东西。SFT 先建立起这个基础,后续的偏好阶段才能有效工作。

Chain-of-Thought 和“思维链”从哪里来

一个常见问题:ChatGPT、Claude 这些模型在回答复杂问题时会“一步步推理”,这是怎么训出来的?

有两条路径:

路径一:SFT 数据里有推理示范。如果训练数据里包含大量分步推理的示范(“首先…其次…最后…“的结构),模型会学会模仿这种格式。早期的 Chain-of-Thought 论文(Wei et al., 2022)发现,只要在 few-shot 示例里加入分步骤推理的过程,大模型就会跟着分步推理,效果显著提升。

路径二:RL 奖励推理过程。这是 DeepSeek-R1、OpenAI o1 的路径。用 GRPO 或类似方法,奖励能得到正确答案的完整推理链,模型学会“先想清楚再给答案”比“直接猜一个”更可靠。DeepSeek-R1 的一个有趣发现是,在 RL 训练过程中,模型自发学会了“回溯”(发现当前推理路径不对时主动回到之前的节点)——这不是在训练数据里直接教的,而是通过奖励信号涌现出来的。

后训练的工程实践:数据飞轮与迭代

了解这四种方法的设计思路之后,还有一个问题:真实的后训练流水线怎么运转?

数据从哪里来:高质量的 SFT 数据本身就是一种资产。早期的 InstructGPT 靠人工标注员写示范回答,这非常昂贵。后来出现了一种更高效的路径——用更强的模型(Teacher)生成回答,人工只做筛选和质量过滤,而不是从零写示范。这个做法叫做合成数据(Synthetic Data),Meta 的 LLaMA 3 技术报告中明确提到用 LLaMA 3 自身生成大量 SFT 数据,再由更强模型打分筛选。这构成了一种数据飞轮:好模型产出好数据,好数据训练更好的模型。

迭代式偏好数据收集:偏好数据同样可以通过模型生成。用当前模型对同一个问题生成多个回答,再用奖励模型或更强的模型对这些回答打分排序,得到“哪个更好”的偏好对,用来做下一轮 DPO。这叫做 Self-Play 或 Iterative DPO,不需要大量人工标注,只需要一个可靠的评分器。问题在于评分器本身的质量——如果打分标准和人类偏好对不齐,飞轮就产生了偏差。

拒绝采样(Rejection Sampling Fine-tuning,RFT):对于可验证任务(如数学题),另一个常见做法是让当前模型对每个问题生成大量候选答案,过滤掉答案错误的,只用答案正确的那些候选路径做 SFT 训练。这样做的好处是训练数据都是模型“能做到但不总能做到”的难题——太容易的(模型总答对)和太难的(模型从不答对)都被自然过滤掉了,剩下的正好是对提升最有帮助的样本。DeepSeek-R1-Zero 在 GRPO 之前就用了大量 RFT 数据作为热身。

多阶段顺序的重要性:后训练的顺序不只是先 SFT 再偏好对齐这一条。在涉及推理的模型中,通常会先做通用 SFT,再做领域 SFT(数学、代码、工具调用),再做 DPO 偏好对齐,最后才是推理 RL(GRPO)——每一步都依赖前一步建立的基础。跳过某个阶段或颠倒顺序往往会让下一阶段的效果变差:在没有任何偏好对齐的情况下直接做推理 RL,模型可能在推理能力上进步,但同时失去了对话格式和安全性的约束。

测试时计算(Test-Time Compute):这是近年的新趋势。传统方法是训练更大的模型来提升质量;Test-Time Compute 则是让模型在推理时做更多计算——生成多个候选答案、用一个验证器选出最好的,或者让模型在给出最终答案之前“思考”更长时间。OpenAI o1、DeepSeek-R1 的推理模式都属于这个路径。GRPO 的后训练让模型学会了“何时以及怎样展开思考链”,而 Test-Time Compute 则决定了推理时允许多少 Token 用于思考过程。这两者是互补的:后训练决定模型的能力上限,Test-Time Compute 决定在推理时用多少算力去接近这个上限。

后训练对安全的影响

后训练也是让模型“拒绝有害请求”的阶段。

RLHF 和 DPO 的偏好数据里会包含“拒绝回答有害请求”的示范,奖励模型会给拒绝适当的有害请求打高分。经过这个阶段,模型学会了在遇到某些类型请求时拒绝。

但安全训练不是万无一失的:

  • 过度拒绝:安全训练有时会让模型过于保守,拒绝无害的请求。这是有意义的 tradeoff,不同产品在有用性和安全性之间选择不同的平衡点。
  • 越狱(Jailbreak):通过特定的提示格式,绕过安全训练的模式匹配。这是安全对齐研究的持续课题。
  • 安全训练不等于价值对齐:让模型拒绝特定的危险请求,和让模型真正理解为什么那些请求是有害的,是不同层次的问题。

Anthropic 的 Constitutional AI(CAI)方法尝试用明确的“宪法”原则来指导 RLHF 的偏好标注,而不是完全依赖人工标注的直觉判断,目标是让安全行为更可解释和更一致。

参考资料