RLHF 的完整流程是什么?三个阶段各做什么?
简化版
经典 InstructGPT 式 RLHF 可概括为三个阶段:① SFT——用指令示范建立基础助手行为;② 奖励模型(RM)——让标注者比较同一提示下的候选,用偏好对训练标量评分代理;③ PPO——对当前策略采样,由 RM 提供序列级奖励,并用参考模型、KL、价值函数和裁剪目标控制更新。三阶段是经典教学框架,不代表所有现代 RLHF 实现都必须采用同一算法或完全独立的模型组件。
详细版
三阶段全景
Base 模型
│ 阶段①:SFT(示范数据,监督学习)
▼
SFT 模型 ──────────┐
│ 阶段②:偏好数据 → 训练奖励模型 RM
▼ │
│ 阶段③:PPO(策略=SFT初始化,RM给分,KL约束到SFT)
▼
对齐后的模型
阶段① SFT(Supervised Fine-Tuning)
- 数据:人工编写/精选的「指令 + 高质量回答」示范。
- 做法:标准监督微调(交叉熵),让模型模仿优质回答。
- 产出:一个会遵循指令、以助手口吻回答的 SFT 模型(也是后两阶段的起点)。
阶段② 训练奖励模型(Reward Model)
- 数据:同一提示下让模型生成多个回答,人类对它们排序/两两比较(偏好数据)。
- 做法:用 SFT 模型初始化,把语言建模头换成输出标量分数的奖励头,用 pairwise 排序损失训练它「给人类更偏好的回答更高分」。
- 产出:一个能对任意 (提示, 回答) 打分的奖励模型。
阶段③ 强化学习(PPO)
- 目标:优化策略模型,让 RM 给的分更高。
- 四个逻辑角色参与:策略、参考、奖励、价值;物理实现可能共享骨干、预计算或分片,不一定是四份同尺寸模型同时驻留。
- 奖励 = RM 分数 − β·KL(策略‖参考):KL 惩罚防止模型为了刷高分而跑偏(reward hacking)、丢失语言能力。
完整版教学
一、为什么要三阶段而不是一步到位
对齐要解决两个层层递进的问题:先让模型”会当助手”,再让它”当得更好”。这两件事性质不同,所以拆成三阶段:
- SFT 用模仿学习建立指令遵循、格式和基础边界;base 模型本身也可能已有一定问答能力,不能把阶段差异绝对化成“续写机/助手”。
- RM + PPO 解决「从能用到好用」——用人类偏好这种相对信号,优化 SFT 学不到的细腻维度(更礼貌、更准确、更安全)。
之所以要 RM 和 PPO 分开,是因为强化学习需要一个能实时打分的奖励函数,而人类没法对训练中产生的海量回答逐条打分——于是先把人类偏好「蒸馏」进一个奖励模型(阶段②),再让它在 RL 里当自动裁判(阶段③)。
二、阶段①:SFT 打好”听话”的底子
SFT 用高质量的「指令-回答」示范数据做标准监督微调。要点:
- 质量与覆盖都重要:高质量示范能减少噪声,但所需规模取决于基座能力、任务跨度与多语言覆盖,不能背固定“几千到几万条”的经验数。
- 产出双重角色:SFT 模型既是最终 RL 的起点(策略初始化),也是 RL 的参考锚点(reference,用于 KL 约束)。
- 局限:单目标示范只展示一个可接受输出,难以直接表达多个候选之间的细粒度相对偏好;SFT 并非只能机械模仿,但其训练信号与成对偏好不同。
三、阶段②:把人类偏好”蒸馏”成奖励模型
这一阶段的核心是收集偏好数据并训练奖励模型:
- 采样:对同一个提示,用 SFT 模型采样出多个不同回答。
- 人类标注:让标注者比较/排序这些回答。两候选共享参照通常比跨样本绝对评分更易统一量尺,但仍要处理平局、维度冲突和顺序偏差。
- 训练 RM:奖励模型通常用 SFT 模型初始化,把输出层换成一个标量分数头。训练目标是让「被偏好回答的分数」高于「被拒绝回答的分数」,用 Bradley-Terry 的 pairwise 损失:
L = − log σ( r(x, y_优) − r(x, y_劣) )
训练好的 RM 是所采标注人群、指南和分布下的偏好代理。它可以批量给输入分布内及邻近回答评分,但对任意分布外回答不保证可靠;策略优化恰恰可能主动找到这些盲区。
四、阶段③: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 checkpoint 常同时充当策略起点和参考模型,RM 也可从相同或其他预训练 checkpoint 初始化。因此它是常见枢纽,但不是不可改变的硬规定。DPO 省去显式 RM 与在线 rollout,正是对经典链路复杂度的一种简化。
六、跟踪一个样本经过三阶段的角色变化
同一条“解释退款规则”的提示,在 SFT 阶段配一个示范答案,监督模型学习基本格式;在奖励模型阶段配 chosen/rejected 两个回答,只学习相对偏好;在 PPO 阶段不再给标准答案,而由当前策略生成回答,RM 打分后形成序列级奖励。三个阶段的数据结构和优化信号不同,不能混成“都在继续训练”。
| 阶段 | 样本形态 | 直接优化目标 | 主要风险 |
|---|---|---|---|
| SFT | prompt + target | token 交叉熵 | 模仿数据缺陷 |
| RM | prompt + chosen/rejected | 排序损失 | 偏好捷径 |
| PPO | 在线生成轨迹 | 奖励减 KL | 奖励作弊、训练不稳 |
若最终模型出现异常,要沿链路定位:先看 SFT 是否具备任务能力,再看 RM 是否正确排序,最后看 PPO 是否过度优化。只调整最后阶段的 KL,无法补救前两阶段缺失的能力或错误标签。
例如 10,000 个提示各采样 4 个候选,会产生 40,000 条回答;若只取每题 3 个独立比较对,则需标注 30,000 对,而不是把全部 C(4,2)=6 对都标完。若 RM 在独立测试的 2,000 对上判对 1,520 对,pair accuracy 为 76%,仍要按安全、语言和长度切片,并用当前策略的新 rollout 复测,不能把 76% 直接解释成“回答质量 76 分”。
七、常见误区与追问
- 误区:RLHF 就是用 PPO。 PPO 只是第三阶段;完整 RLHF 是 SFT + RM + PPO 三阶段。
- 误区:奖励模型给绝对分让人标。 人标的是相对偏好(两两比较),RM 从比较里学打分;绝对分一致性差。
- 追问:PPO 阶段有哪些逻辑组件? 策略、参考、奖励、价值四个角色;实现可共享、分片或卸载,职责不能混淆。
- 追问:为什么要 KL 惩罚? 防止 reward hacking 和偏离语言分布,把策略拴在 SFT 附近。
- 追问:奖励模型怎么初始化? 常用 SFT 模型初始化,换成标量奖励头,用 pairwise 排序损失训练。
- 追问:SFT checkpoint 常扮演什么角色? 常作策略初始化与 KL 参考,RM 也可从它初始化;这是常见实现而非协议硬要求。
- 追问:RLHF 有什么痛点? 四模型显存大、人类标注贵、PPO 训练不稳定——催生了 DPO 等简化方案。
八、加强记忆
RLHF 记经典三阶段「示范 → 偏好代理 → 在线策略优化」:SFT 学基础行为;RM 用成对比较和 L=−logσ(r_优−r_劣) 学相对偏好;PPO 让当前策略 rollout 获得 RM 奖励,并用参考/KL、价值估计和 clip 控制更新。策略、参考、奖励、价值是逻辑角色,不一定对应四份完整常驻模型。RM 是有限数据上的代理而非人类真值,KL 只能限制漂移,最终必须靠独立人评、能力与安全切片验收。