🏠 总目录📚 本教程 13 · DPO 与免 RL 对齐
📑 本页目录(点开跳转)

13 · DPO 与免 RL 对齐

26 分钟 | ⭐ "能不能不用 RL"


🎯 一句话

RLHF 又贵又难调(四个模型、超参敏感、奖励攻击)。 DPO 证明了一件让人意外的事:那个"训奖励模型 + 跑 PPO"的两步流程, 在数学上等价于一个可以直接做的监督学习损失。


💡 一、核心洞察

   RLHF 的目标(第 11、12 章):

   max E[r(x,y)] − β·KL(π ‖ π_ref)
        ↑ 奖励高      ↑ 别离参考模型太远

这个带 KL 约束的优化问题,有一个闭式最优解

$$\pi^*(y|x) = \frac{1}{Z(x)}\,\pi_{ref}(y|x)\,\exp\Big(\frac{1}{\beta}r(x,y)\Big)$$

🔗 这个闭式解不是变出来的,它是 KL 的定义直接推出来的数学原理 01b · KL 散度。 ⭐ 值得专门去一趟,因为整章 DPO 的推导都站在「$\text{KL}$ 里那个 $\log\frac{\pi}{\pi_{ref}}$」上—— 你看到的 $\beta\log\frac{\pi^*}{\pi_{ref}}$ 就是 KL 被积分号里那一项原样搬出来的, 知道这一点之后「奖励 = 对数比」就从「一个巧合」变成「本来就该这样」。 那一章还会告诉你这里的 $\text{KL}(\pi\|\pi_{ref})$ 是反向 KL($\pi$ 在分子,罚的是「跑出 $\pi_{ref}$ 的支撑集」), 所以它约束的是「别乱说」,不约束「别变单调」——这是 DPO 和 RLHF 共享的一个盲区。

把它反过来解出 r

$$r(x,y) = \beta\log\frac{\pi^*(y|x)}{\pi_{ref}(y|x)} + \beta\log Z(x)$$

   ⭐⭐ 这一步是全部的关键:

   「奖励函数」可以用「最优策略和参考策略的对数比」表示出来

   → 也就是说,【策略本身就隐含了一个奖励模型】
   → 那还训练什么奖励模型?直接优化策略就行了 ⭐

代入 Bradley–Terry 损失第 12 章),那个讨厌的 $Z(x)$ 正好抵消

$$L_{DPO} = -\log\sigma\Big(\beta\log\frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta\log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}\Big)$$

💡 人话翻译

提高"好回答相对参考模型的概率", 同时压低"差回答相对参考模型的概率"。 就这一个损失,不需要奖励模型,不需要采样,不需要 PPO。


🔨 二、实现有多简单

# DPO 的全部核心
import torch.nn.functional as F
def dpo_loss(policy_logps, ref_logps, beta=0.1):
    # 每个都是 (chosen, rejected) 两项
    pi_logratio  = policy_logps.chosen - policy_logps.rejected
    ref_logratio = ref_logps.chosen    - ref_logps.rejected
    return -F.logsigmoid(beta * (pi_logratio - ref_logratio)).mean()

对比一下工程复杂度

RLHF (PPO) DPO
需要的模型 4 个(策略/参考/RM/Critic) 2 个(策略/参考)⭐
需要在线采样 ✅ 要 不用
训练稳定性 差,超参敏感 好,就是监督学习
显存 约一半
实现难度 几十行

🔑 DPO 之所以影响巨大,是因为它把"需要 RL 专家才能调通"的东西 变成了"会写监督学习就能跑"的东西。


⚠️ 三、但 DPO 不是免费的

局限 说明
离线 只能用固定的偏好数据集;PPO 能在训练中探索新回答并获得反馈
分布依赖 数据必须来自和当前模型接近的分布,否则效果差
容易过优化 β 太小会让模型剧烈偏离参考模型 ⭐
概率下降现象 训练中 chosen 的绝对概率常常也在下降——它只保证"相对差距"拉大
对噪声敏感 标注错误会被直接学进去(没有 RM 做平滑)

💡 "概率下降"是 DPO 一个反直觉的真实现象: 损失只约束 chosen 和 rejected 的相对对数比, 完全允许两个都下降,只要 rejected 降得更多。 后果是模型可能变得整体不自信、输出退化。 这催生了一批加正则项的变体。


🌿 四、DPO 的变体家族

方法 改了什么
IPO 换损失形式,缓解 DPO 的过拟合到确定性策略
KTO 不需要成对偏好,只要"这个回答好/不好"的二元标注 → 数据便宜得多
ORPO 把 SFT 和对齐合成一步不需要参考模型
SimPO 长度归一化的对数概率,去掉参考模型且缓解长度偏好 ⭐
cDPO / rDPO 显式建模标注噪声

💡 注意这些变体的共同方向越来越少的依赖 —— 去掉 RM、去掉 Critic、去掉在线采样、去掉参考模型、去掉成对数据。


⚖️ 五、DPO vs PPO:到底该用哪个

   ✅ 选 DPO:
   ├─ 已经有高质量的成对偏好数据
   ├─ 算力/显存有限
   ├─ 团队没有 RL 调参经验
   └─ 想快速迭代

   ✅ 选 PPO(或 GRPO):
   ├─ 需要【在线探索】(模型要发现训练数据里没有的好回答)⭐
   ├─ 奖励是【可验证的】(代码跑通、数学正确)⭐⭐
   ├─ 追求最高上限
   └─ 有算力和 RL 经验

🔑 一个当前的实践共识偏好对齐(有帮助、无害、风格)→ DPO 类方法已经够好且便宜得多。 推理能力提升(数学、代码)→ 必须用在线 RL, 因为模型需要自己探索出正确的推理路径,这是离线数据里没有的

🔗 这就是第 12 章提到的 RLVR / GRPO 路线 —— 近年推理模型的训练主力。


🧭 六、还有哪些"免 RL"的路线

路线 做法
拒绝采样 / Best-of-N 蒸馏 采样 N 个回答,用 RM 挑最好的,再拿去做 SFT → 极简单且有效
Constitutional AI 用一套书面原则让 AI 自我批评并修改
上下文蒸馏 把长系统提示的效果蒸馏进权重
条件化训练 训练时给数据打质量标签,推理时要求"高质量"

💡 拒绝采样值得特别提:它简单到几乎不需要新知识 (采样 → 打分 → 挑最好的 → SFT),却经常能拿到 RLHF 大部分的收益很多团队的实际做法是:先做拒绝采样,不够再上 DPO,最后才考虑 PPO。


🔗 和站内其他章的关系

相关的地方 这里的位置
第 11 章 KL 惩罚 DPO 推导的出发点
数学原理 01b · KL 散度 出发点的出发点。整章推导都建在 $\log\frac{\pi}{\pi_{ref}}$ 上,而那一项就是 KL 积分号里的东西——KL 在本教程被引用了六次却从没定义过,那一章补的就是这个 ⭐
第 12 章 Bradley–Terry 损失 DPO 直接用了它
第 12 章 奖励攻击 DPO 没有 RM,但仍可能过优化
第 12 章 RLVR DPO 替代不了的那部分 ⭐
全景导论第 12 章 对齐的全景
全景导论 04 训练三阶段 那一章把「RLHF → DPO → GRPO 三代方法」压成了一段缩写版,本章和第 12 章就是它承诺的展开版。想先看清 DPO 在整条训练链上的位置,回那里

✅ 检查点

  1. DPO 的核心洞察是什么?用一句话说。
  2. 那个闭式最优解反过来说明了什么?
  3. DPO 损失里那个讨厌的 Z(x) 去哪了?
  4. DPO 相比 PPO 省掉了哪些东西?
  5. "概率下降现象"是什么?为什么会发生?
  6. KTO、ORPO、SimPO 各去掉了什么依赖?
  7. 什么情况下必须用 PPO/GRPO 而不能用 DPO?为什么?
  8. 拒绝采样为什么值得先试?
👀 答案
  1. 策略本身就隐含了一个奖励模型——所以不需要单独训 RM,直接优化策略即可。
  2. 带 KL 约束的 RLHF 目标有闭式解 π ∝ π_ref·exp(r/β),反解出 r = β·log(π/π_ref) + β·logZ(x),即奖励函数可以用"最优策略和参考策略的对数比"表示**。
  3. 代入 Bradley–Terry 损失(只关心两个回答的分数)时,Z(x) 只依赖 x,在相减时正好抵消
  4. 省掉了奖励模型、Critic、在线采样、PPO 的全部超参。模型从 4 个降到 2 个,显存约一半,实现只要几十行。
  5. 训练中 chosen 的绝对概率常常也在下降。因为损失只约束 chosen 和 rejected 的相对对数比,完全允许两个都降,只要 rejected 降得更多。后果是模型整体不自信、输出退化。
  6. KTO 去掉成对偏好(只要二元的好/不好标注);ORPO 去掉参考模型(并把 SFT 和对齐合成一步);SimPO 去掉参考模型并用长度归一化缓解长度偏好。
  7. 当需要在线探索、或奖励是可验证的(代码跑通、数学正确)时。因为模型需要自己探索出正确的推理路径,而这在离线偏好数据里根本不存在
  8. 因为它简单到几乎不需要新知识(采样 N 个 → RM 打分 → 挑最好的 → SFT),却经常能拿到 RLHF 大部分的收益。实践顺序通常是:拒绝采样 → 不够再上 DPO → 最后才考虑 PPO。

🛑 可以停在这里

走神救援

⭐⭐DPO 的核心洞察:策略本身就隐含了一个奖励模型——带 KL 约束的 RLHF 目标有闭式解 π* ∝ π_ref·exp(r/β),反解出 r = β·log(π*/π_ref) + β·logZ(x);代入 Bradley-Terry 损失时 Z(x) 正好抵消,得到 L = −logσ(β[log(π/π_ref)_chosen − log(π/π_ref)_rejected])。💡人话:提高好回答相对参考模型的概率,压低差回答的——不要 RM、不要采样、不要 PPO。⭐工程对比:PPO 要 4 个模型,DPO 只要 2 个,显存约一半,实现几十行——它把"需要 RL 专家才能调通"变成了"会写监督学习就能跑"。⚠️但不是免费的离线(不能探索新回答)、分布依赖、容易过优化、⭐概率下降现象chosen 的绝对概率常常也在降,因为损失只管相对差距,允许两个都降只要 rejected 降更多 → 模型整体不自信、输出退化)、对标注噪声敏感。变体的共同方向是越来越少的依赖:⭐KTO 去掉成对偏好(只要二元好/不好)、⭐ORPO 去掉参考模型(SFT 和对齐合一步)、⭐SimPO 去掉参考模型 + 长度归一化、IPO、cDPO。⭐选型共识偏好对齐(有帮助/无害/风格)→ DPO 类够好且便宜;⭐⭐推理能力提升(数学、代码)→ 必须在线 RL,因为模型要自己探索出正确的推理路径,这在离线数据里根本不存在 → 这就是 RLVR / GRPO 路线。其他免 RL 路线:⭐拒绝采样/Best-of-N 蒸馏(采样→RM打分→挑最好→SFT,简单到几乎不需要新知识却常拿到 RLHF 大部分收益;实践顺序常是拒绝采样 → DPO → 最后才 PPO)、Constitutional AI、上下文蒸馏。

下一节 👉 14-RL在推荐与智能体里.md

打卡记录保存在你的浏览器里,首页能看到总进度