DPO(Direct Preference Optimization,直接偏好优化)是 RLHF 的重要简化方案。
它的核心思想是:跳过奖励模型和强化学习,直接用偏好数据优化语言模型,把 RLHF 的目标转化为一个简单的分类损失。
RLHF 的流程是:
$$ \text{SFT} \rightarrow \text{RM} \rightarrow \text{PPO} $$
DPO 的流程是:
$$ \text{SFT} \rightarrow \text{DPO} $$
一句话总结:DPO 把 RLHF 的三阶段压缩成两阶段,用数学推导把奖励模型隐式地融入策略模型,训练更简单、更稳定。
| 维度 | PPO | DPO |
|---|---|---|
| 阶段数 | SFT + RM + PPO | SFT + DPO |
| 需要奖励模型 | 是 | 否 |
| 需要 Critic | 是 | 否 |
| 需要采样 | 是,在线采样 | 否,离线数据 |
| 模型数量 | 4 个 | 2 个 |
| 训练方式 | 在线 RL | 离线监督 |
| 稳定性 | 较差 | 较好 |
| 超参数 | 多 | 少 |
| 计算成本 | 高 | 低 |
PPO 需要四个模型:
DPO 只需要两个模型:
PPO:
DPO:
不需要采样,不需要奖励模型,不需要 Critic。
PPO 需要调:
DPO 只需要调:
超参数少很多,调参更容易。
RLHF 的优化目标是:
$$ \max_{\pi_\theta} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_\theta(y|x)} \left[ r_\phi(x, y) \right] - \beta \cdot \text{KL}(\pi_\theta(y|x) | \pi_{\text{ref}}(y|x)) $$
其中:
可以证明,在上述目标下,最优策略为:
$$ \pi^*(y|x) = \frac{1}{Z(x)} \pi_{\text{ref}}(y|x) \exp\left( \frac{1}{\beta} r_\phi(x, y) \right) $$
其中 $Z(x)$ 是归一化因子:
$$ Z(x) = \sum_y \pi_{\text{ref}}(y|x) \exp\left( \frac{1}{\beta} r_\phi(x, y) \right) $$
对上式取对数,可以反解出奖励:
$$ r_\phi(x, y) = \beta \log \frac{\pi^*(y|x)}{\pi_{\text{ref}}(y|x)} + \beta \log Z(x) $$
关键洞察:
奖励可以用策略模型和参考模型的概率比来表示。
Bradley-Terry 偏好模型:
$$ P(y_w \succ y_l | x) = \sigma(r(x, y_w) - r(x, y_l)) $$
把奖励表达式代入:
$$ r(x, y_w) - r(x, y_l) = \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} $$
注意 $Z(x)$ 在相减时消掉了,因为 $Z(x)$ 只依赖 $x$,不依赖 $y$。
$$ \mathcal{L}_{\text{DPO}} = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma\left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right] $$
这就是 DPO 的损失函数。
因为:
一句话总结:DPO 把奖励模型“内化”到了策略模型里,用概率比代替奖励。
$$ \mathcal{L}_{\text{DPO}} = -\log \sigma\left( \beta \left( \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right) $$
定义隐式奖励:
$$ \hat{r}_\theta(x, y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)} $$
则损失为:
$$ \mathcal{L}_{\text{DPO}} = -\log \sigma\left( \hat{r}_\theta(x, y_w) - \hat{r}_\theta(x, y_l) \right) $$
这和奖励模型的 Bradley-Terry 损失形式完全一样。
DPO 的核心直觉是:
提高好回答的概率,降低差回答的概率,但用参考模型做约束。
具体来说:
DPO 的梯度为:
$$ \nabla_\theta \mathcal{L}_{\text{DPO}} = -\beta \sigma\left( \hat{r}_\theta(x, y_l) - \hat{r}_\theta(x, y_w) \right) \left( \nabla_\theta \log \pi_\theta(y_w|x) - \nabla_\theta \log \pi_\theta(y_l|x) \right) $$
直觉:
参考模型 $\pi_{\text{ref}}$ 的作用:
DPO 的隐式奖励:
$$ \hat{r}_\theta(x, y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)} $$
这和 RLHF 中最优策略反解的奖励形式一致。
所以 DPO 本质上是在用策略模型本身作为奖励模型。
(1)离线 vs 在线
(2)奖励模型的作用
(3)KL 控制
(4)训练稳定性
(5)数据质量
这是一道很好的大模型对齐面试题,适合考察候选人对 DPO 和 RLHF 的理解。它既能考察数学推导,也能延伸到实际效果和工程选择。如果候选人能把 DPO 的简化、无需奖励模型的原因、损失函数的直觉以及和 RLHF 的效果差距都讲清楚,基本可以判断其具备大模型对齐的扎实基础。
评论专区
评论加载中...登录后即可发表评论