← 返回题目列表

PPO 在 RLHF 里是怎么工作的?为什么需要参考模型和 KL 惩罚?

高频 困难 第 13 / 25 题 更新于 2026/07/28
PPORLHFKL惩罚参考模型优势函数

简化版

PPO(近端策略优化)是 RLHF 第三阶段用的强化学习算法。它把「生成回答」看成一个决策过程:策略模型产出回答,奖励模型打分作为回报,PPO 更新策略让期望回报更高。它需要 KL 惩罚参考模型:参考模型是冻结的 SFT 模型,PPO 在奖励里减去「策略与参考的 KL 散度」,防止策略为了刷高分而偏离 SFT 太远(否则会 reward hacking、丢失语言能力)。PPO 还用价值模型(critic) 估计优势、用裁剪(clip) 限制每步更新幅度,保证训练稳定。RLHF 的 PPO 阶段通常同时加载策略、参考、奖励、价值四个模型

详细版

把文本生成建模成 RL

  • 状态:当前已生成的 token 序列(提示 + 已生成部分)。
  • 动作:生成下一个 token。
  • 策略 π_θ:模型本身,给出下一个 token 的分布。
  • 回报:整段回答生成完后,由奖励模型给一个分数(序列级奖励)。

PPO 的四个模型

模型作用是否训练
策略(Actor)生成回答,被优化训练
参考(Reference)冻结 SFT,算 KL 约束冻结
奖励(Reward Model)给回答打分冻结
价值(Critic/Value)估计状态价值,算优势训练

奖励的构造:RM 分数 − KL 惩罚

r_total(x, y) = r_RM(x, y) − β · KL( π_θ(·|x) ‖ π_ref(·|x) )
  • r_RM:奖励模型给的分(要最大化)。
  • β·KL:策略偏离参考模型的惩罚(要最小化偏离)。

PPO 的稳定性机制

  • 优势函数:用价值模型估计 baseline,算「这个动作比平均好多少」,降低方差。
  • 裁剪目标(clipped objective):限制新旧策略的概率比在 [1−ε, 1+ε]防止单步更新过猛导致策略崩溃。

完整版教学

一、为什么对齐这一步要用强化学习

到了第三阶段,我们有了一个能打分的奖励模型,目标是「让模型产出 RM 分数更高的回答」。为什么不直接监督学习?因为奖励是对”整段生成结果”的评价,而不是对每个 token 的标准答案——我们不知道「第 5 个 token 该是什么」,只知道「整段回答好不好」。这种「只有最终结果有反馈、没有逐步标准答案」的问题,正是强化学习的用武之地:通过试错 + 回报信号来优化策略。

PPO 是 RL 里稳定、鲁棒、易调的主流算法,因此成为 RLHF 的默认选择。

二、把生成过程翻译成强化学习语言

理解 PPO 前,先把文本生成映射到 RL 框架:

  • 策略(policy) 就是语言模型 π_θ,它在每个位置输出下一个 token 的概率分布。
  • 生成一整段回答 = 策略做了一连串「选下一个 token」的动作。
  • 回答生成完毕,奖励模型给整段一个分数,作为这次「轨迹」的回报。
  • PPO 的任务:调整 π_θ 的参数,让它更倾向于生成「能拿高回报」的回答。

这里的奖励是稀疏的、序列级的(只在结尾给一个分),这也是 RLHF 的 PPO 需要价值模型来估计中间「优势」的原因。

三、KL 惩罚与参考模型:本阶段的灵魂

如果 PPO 只盯着「最大化 RM 分数」,会发生灾难:策略会不择手段地钻 RM 的空子——找到一些 RM 误判为高分、但实际语无伦次或重复堆砌的输出(reward hacking),同时偏离正常语言分布,丧失流畅性和多样性(模式坍缩)。

解决办法是引入**参考模型 π_ref(冻结的 SFT 模型)**和 KL 惩罚。在奖励里减去策略与参考的 KL 散度:

r_total = r_RM − β · KL( π_θ ‖ π_ref )
  • KL 衡量「策略偏离 SFT 有多远」,偏得越远惩罚越大。
  • 它像一根橡皮筋,一头拴在 SFT 模型上:允许策略为讨好人类偏好而调整,但不许它跑到「面目全非、不再像正常语言」的地方。
  • β 控制橡皮筋松紧:β 太大,策略被拽得太死、学不到偏好改进;β 太小,约束不住、容易 reward hacking 和坍缩。

记忆钩子:RM 分数是”往前拉”的力,KL 惩罚是”往回拽”到 SFT 的力,PPO 在两力平衡中找到既高质量又不跑偏的策略。参考模型就是那个”回拽的锚点”。

四、价值模型与优势:让更新更稳

PPO 属于「Actor-Critic」方法,除了策略(Actor),还有一个价值模型(Critic)

  • 它估计「从当前状态出发,预期能拿多少回报」(状态价值)。
  • 用它算优势函数(advantage)优势 = 实际回报 − 价值基线,表示「这个动作比平均预期好多少」。
  • 用优势代替原始回报来更新策略,能大幅降低梯度方差,训练更稳。

所以 RLHF 的 PPO 阶段要同时加载四个模型(策略、参考、奖励、价值),其中策略和价值在训练、参考和奖励冻结。这也是 PPO 阶段显存开销巨大、工程复杂的原因——四份模型同时在显存里。

五、裁剪目标:PPO 稳定的关键设计

PPO 的名字「近端(Proximal)」来自它的核心技巧——限制每步策略更新的幅度,别一步迈太大把策略搞崩。它用新旧策略的概率比 ratio = π_new / π_old,配合裁剪:

L = min( ratio · A ,  clip(ratio, 1−ε, 1+ε) · A )
  • 当优势 A>0(好动作)时,鼓励提高其概率,但概率比超过 1+ε 就截断,不许一次涨太多。
  • 当 A<0(坏动作)时,压低其概率,但也限制在 1−ε,不许一次降太狠。

这个「裁剪」让 PPO 在「利用奖励改进」和「不偏离旧策略太远」之间取得平衡,避免了朴素策略梯度那种「一步更新过猛导致训练崩溃」的问题,是 PPO 又稳又好用的原因。

六、面试拆解算例

对齐题可以用一个偏好训练小实验来拆。假设有 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 偏好 -> 奖励信号 -> 策略优化
    |          |             |              |             |
  基础能力    多样候选       规范边界        代理目标       行为改变

因此回答「PPO 在 RLHF 里是怎么工作的?为什么需要参考模型和 KL 惩罚?」时,要把“偏好从哪里来、奖励学到了什么、优化怎样被约束、上线怎么防奖励作弊”串起来。对齐不是单个算法名,而是一条把人类规范变成模型行为的工程链路。

七、常见误区与追问

  • 误区:PPO 阶段只有策略一个模型。 有四个——策略、参考、奖励、价值;参考和奖励冻结,策略和价值训练。
  • 误区:KL 惩罚是为了正则化过拟合。 主要是防止 reward hacking 和偏离语言分布,把策略拴在 SFT 附近。
  • 追问:为什么对齐用 RL 而非监督学习? 奖励是对整段结果的评价、没有逐 token 标准答案,适合 RL 的试错优化。
  • 追问:参考模型是什么,为什么要它? 冻结的 SFT 模型,作为 KL 约束的锚点,防策略跑偏。
  • 追问:β 太大/太小分别怎样? 太大约束过死学不到改进;太小约束不住、易 reward hacking 和坍缩。
  • 追问:价值模型干什么? 估计价值基线算优势,降低策略梯度方差,让训练更稳。
  • 追问:PPO 的 clip 有什么用? 限制每步策略更新幅度(近端),防止一步更新过猛导致崩溃。
  • 追问:PPO 阶段为什么显存吃紧? 四个模型同时驻留显存,加上生成采样,开销大——这也是 DPO 想省掉 RL 的动因。

八、加强记忆

PPO in RLHF 记「四模型、两个力、稳三招」:四模型——策略(训)、参考(冻结SFT算KL)、奖励(冻结打分)、价值(训,算优势)两个力——奖励 r=r_RM−β·KL(π‖π_ref),RM 分往前拉、KL 往 SFT 拽(防 reward hacking 与坍缩),β 调松紧稳定三招——优势函数降方差、裁剪(clip)限更新幅度、参考锚点约束。为什么用 RL?因为奖励是序列级、没有逐 token 答案。抓住「往前拉 vs 往回拽的平衡」这个画面,PPO 阶段就通了。