RLHF 的完整流程是什么?三个阶段各做什么?
简化版
RLHF(基于人类反馈的强化学习)分三个阶段:① SFT(监督微调)——用「指令→优质回答」示范数据微调 base 模型,让它学会听指令、当助手;② 训练奖励模型(RM)——让人对模型产出的多个回答排序,用这些偏好数据训一个能给回答「打分」的奖励模型;③ 强化学习(PPO)——用奖励模型当「裁判」给分,用 PPO 优化模型,让它产出得分更高(更被人类偏好)的回答,同时用 KL 惩罚约束它别偏离 SFT 模型太远。三步下来,模型从「续写机」变成「贴合人类偏好的助手」。
详细版
三阶段全景
Base 模型
│ 阶段①:SFT(示范数据,监督学习)
▼
SFT 模型 ──────────┐
│ 阶段②:偏好数据 → 训练奖励模型 RM
▼ │
│ 阶段③:PPO(策略=SFT初始化,RM给分,KL约束到SFT)
▼
对齐后的模型
阶段① SFT(Supervised Fine-Tuning)
- 数据:人工编写/精选的「指令 + 高质量回答」示范。
- 做法:标准监督微调(交叉熵),让模型模仿优质回答。
- 产出:一个会遵循指令、以助手口吻回答的 SFT 模型(也是后两阶段的起点)。
阶段② 训练奖励模型(Reward Model)
- 数据:同一提示下让模型生成多个回答,人类对它们排序/两两比较(偏好数据)。
- 做法:用 SFT 模型初始化,把语言建模头换成输出标量分数的奖励头,用 pairwise 排序损失训练它「给人类更偏好的回答更高分」。
- 产出:一个能对任意 (提示, 回答) 打分的奖励模型。
阶段③ 强化学习(PPO)
- 目标:优化策略模型,让 RM 给的分更高。
- 四个模型参与:策略(actor,在训)、参考模型(frozen SFT,算 KL)、奖励模型(frozen,打分)、价值模型(critic,估计优势)。
- 奖励 = RM 分数 − β·KL(策略‖参考):KL 惩罚防止模型为了刷高分而跑偏(reward hacking)、丢失语言能力。
完整版教学
一、为什么要三阶段而不是一步到位
对齐要解决两个层层递进的问题:先让模型”会当助手”,再让它”当得更好”。这两件事性质不同,所以拆成三阶段:
- SFT 解决「从续写机到助手」——用模仿学习把模型拉进「对话助手」的行为模式。
- RM + PPO 解决「从能用到好用」——用人类偏好这种相对信号,优化 SFT 学不到的细腻维度(更礼貌、更准确、更安全)。
之所以要 RM 和 PPO 分开,是因为强化学习需要一个能实时打分的奖励函数,而人类没法对训练中产生的海量回答逐条打分——于是先把人类偏好「蒸馏」进一个奖励模型(阶段②),再让它在 RL 里当自动裁判(阶段③)。
二、阶段①:SFT 打好”听话”的底子
SFT 用高质量的「指令-回答」示范数据做标准监督微调。要点:
- 数据质量 > 数量:几千到几万条精心编写的优质示范,往往胜过海量低质数据。示范要覆盖多样任务、体现期望的风格和边界。
- 产出双重角色:SFT 模型既是最终 RL 的起点(策略初始化),也是 RL 的参考锚点(reference,用于 KL 约束)。
- 局限:SFT 只能「照着答」,无法表达「A 比 B 好」,也难穷举所有边界情形——这正是需要后两阶段的原因。
三、阶段②:把人类偏好”蒸馏”成奖励模型
这一阶段的核心是收集偏好数据并训练奖励模型:
- 采样:对同一个提示,用 SFT 模型采样出多个不同回答。
- 人类标注:让标注者比较/排序这些回答(如「A 比 B 好」)。用两两比较而非「打绝对分」,因为人对「哪个更好」的判断远比「打几分」一致、可靠。
- 训练 RM:奖励模型通常用 SFT 模型初始化,把输出层换成一个标量分数头。训练目标是让「被偏好回答的分数」高于「被拒绝回答的分数」,用 Bradley-Terry 的 pairwise 损失:
L = − log σ( r(x, y_优) − r(x, y_劣) )
训练好的 RM 就是一个「人类偏好的代理」——它能对任意回答给出一个分数,近似「人类会有多喜欢」。它让 RL 阶段有了可自动查询的奖励信号。
四、阶段③:PPO 把模型推向高奖励,但用 KL 拴住
有了会打分的 RM,就能做强化学习。这一阶段有四个模型协同(高频考点):
- 策略模型(Actor):正在被训练的模型,产出回答,用 SFT 初始化。
- 参考模型(Reference):冻结的 SFT 模型,用来算 KL 散度,防止策略跑太远。
- 奖励模型(Reward Model):冻结,给回答打分。
- 价值模型(Critic/Value):估计状态价值,用于算优势函数(PPO 需要)。
训练循环:策略对提示生成回答 → RM 打分 → 用 PPO 更新策略去最大化奖励。关键在奖励的构造:
最终奖励 = RM分数(x, y) − β · KL( π_策略(y|x) ‖ π_参考(y|x) )
为什么要减 KL 惩罚:如果只追求 RM 分数最高,策略会钻奖励模型的空子(reward hacking)——产出一些 RM 误判为高分、但实际胡言乱语的内容,还会偏离语言分布、丧失流畅性。KL 惩罚像一根「橡皮筋」,把策略拴在 SFT 模型附近:既允许它为讨好人类偏好而调整,又不许它跑偏到面目全非。β 控制这根橡皮筋的松紧。
记忆钩子:PPO 阶段 = “RM 给分往前拉、KL 惩罚往回拽”,在两个力的平衡里逼近既高质量又不跑偏的策略。
五、整条流水线的数据与模型账
把三阶段串起来看「谁产生谁」:
- SFT 数据(示范)→ 训出 SFT 模型。
- SFT 模型采样 + 人类偏好标注 → 偏好数据 → 训出 奖励模型。
- SFT 模型作策略/参考起点 + 奖励模型作裁判 → PPO → 对齐模型。
可以看到 SFT 模型是整条链的枢纽:它既是 RM 的初始化、又是策略的初始化、还是 KL 的参考。这也说明 SFT 质量差会拖累后面所有阶段。RLHF 工程复杂、成本高(四模型、人类标注、RL 不稳定),正是 DPO 等「跳过 RM 和 RL」方案出现的动因(见 DPO 相关题)。
六、面试拆解算例
对齐题可以用一个偏好训练小实验来拆。假设有 20,000 条提示,每条采样 2 个回答,标注员选出更好的一个,就得到 20,000 对偏好样本。奖励模型不是学习“绝对正确答案”,而是学习 chosen 比 rejected 更符合规范的概率;如果样本里大量偏好“更长、更像解释”的回答,奖励模型就可能把啰嗦误学成高质量。
preference_pair = (prompt, chosen, rejected)
loss = -log sigmoid(r(prompt, chosen) - r(prompt, rejected))
KL_penalty = beta * KL(policy || reference_policy)
| 环节 | 关键输入 | 常见风险 | 检查办法 |
|---|---|---|---|
| 偏好采集 | prompt 与候选回答 | 标注偏见、覆盖不足 | 一致性抽检 |
| 奖励建模 | chosen/rejected 对 | 奖励作弊、长度偏置 | 分桶评估 |
| 策略优化 | 奖励 + KL 约束 | 过优化、能力掉点 | 回归集对比 |
| 安全评估 | 红队与拒答样本 | 过拒或漏拒 | 人工审查 |
SFT 模型 -> 采样回答 -> 人类/AI 偏好 -> 奖励信号 -> 策略优化
| | | | |
基础能力 多样候选 规范边界 代理目标 行为改变
因此回答「RLHF 的完整流程是什么?三个阶段各做什么?」时,要把“偏好从哪里来、奖励学到了什么、优化怎样被约束、上线怎么防奖励作弊”串起来。对齐不是单个算法名,而是一条把人类规范变成模型行为的工程链路。
七、常见误区与追问
- 误区:RLHF 就是用 PPO。 PPO 只是第三阶段;完整 RLHF 是 SFT + RM + PPO 三阶段。
- 误区:奖励模型给绝对分让人标。 人标的是相对偏好(两两比较),RM 从比较里学打分;绝对分一致性差。
- 追问:PPO 阶段有几个模型,各是什么? 四个——策略(actor)、参考(frozen SFT,算KL)、奖励模型(frozen)、价值模型(critic)。
- 追问:为什么要 KL 惩罚? 防止 reward hacking 和偏离语言分布,把策略拴在 SFT 附近。
- 追问:奖励模型怎么初始化? 常用 SFT 模型初始化,换成标量奖励头,用 pairwise 排序损失训练。
- 追问:SFT 模型在后续扮演几个角色? 策略初始化 + KL 参考 + RM 初始化,是整条链的枢纽。
- 追问:RLHF 有什么痛点? 四模型显存大、人类标注贵、PPO 训练不稳定——催生了 DPO 等简化方案。
八、加强记忆
RLHF 记三阶段「学会听话 → 蒸馏偏好 → RL 优化」:① SFT(示范数据监督微调,从续写机变助手);② 奖励模型(人类两两比较偏好数据,用 L=−logσ(r_优−r_劣) 训一个会打分的裁判);③ PPO(策略/参考/奖励/价值四模型,奖励=RM分−β·KL,往高分拉、用 KL 往 SFT 拽以防作弊)。核心记忆锚:SFT 模型是枢纽(策略+参考+RM 初始化都靠它)、KL 惩罚防 reward hacking、人标相对偏好而非绝对分。三步简要说——把人类偏好蒸进 RM,再用 RL 把模型往偏好方向推、用 KL 拴住不跑偏。