DPO:跳过奖励模型的直接偏好优化
DPO(Direct Preference Optimization)证明了一个惊人的结论:不需要单独训练奖励模型,也不需要用 PPO 做强化学习,一个简单的分类损失就能完成偏好对齐。
RLHF 的复杂性
回顾标准 RLHF 流程,它有三个独立阶段:
标准 RLHF 流程:
阶段 1: SFT(监督微调)
阶段 2: 训练奖励模型(需要大量偏好数据 + 反复迭代)
阶段 3: PPO 训练(需要同时加载 4 个模型:策略、参考、奖励、价值)
问题:
- 训练流程复杂,需要多个模型同时在显存中
- PPO 超参数敏感,训练不稳定
- 奖励模型本身可能有偏差
DPO 的核心洞察:奖励函数可以用策略本身来隐式表示,从而跳过整个奖励模型训练和 PPO 阶段。
Bradley-Terry 偏好模型
DPO 的理论基础是 Bradley-Terry 模型,它描述了人类如何做偏好选择:
Bradley-Terry 模型:
人类更喜欢回答 y_w 而非 y_l 的概率:
P(y_w ≻ y_l | x) = σ(r(x, y_w) - r(x, y_l))
其中:
σ 是 sigmoid 函数
r(x, y) 是"真实"的奖励函数(未知)
y_w 是被偏好的回答(winner)
y_l 是不被偏好的回答(loser)
关键性质:奖励函数 r(x,y) 可以用最优策略的对数概率来表示:
数学推导(简化版):
最优策略: π*(y|x) = (1/Z) · exp(r(x,y) / β)
反解奖励函数:
r(x,y) = β · log(π*(y|x)) + β · log(Z)
代入 Bradley-Terry 模型,Z 项消掉:
P(y_w ≻ y_l | x) = σ(β · log(π*(y_w|x)/π_ref(y_w|x))
- β · log(π*(y_l|x)/π_ref(y_l|x)))
DPO 的损失函数
基于上述推导,DPO 的损失函数异常简洁:
import torch
import torch.nn.functional as F
def dpo_loss(policy_chosen, policy_rejected, reference_chosen, reference_rejected, beta=0.1):
"""
DPO 损失函数
policy_chosen: 策略模型对偏好回答的对数概率
policy_rejected: 策略模型对拒绝回答的对数概率
reference_chosen: 参考模型对偏好回答的对数概率
reference_rejected: 参考模型对拒绝回答的对数概率
beta: 温度参数
"""
# 计算隐式奖励差异
reward_chosen = beta * (policy_chosen - reference_chosen)
reward_rejected = beta * (policy_rejected - reference_rejected)
# DPO 损失
loss = -F.logsigmoid(reward_chosen - reward_rejected)
return loss.mean()
直觉理解:让策略模型在偏好回答上的"相对优势"越来越大。
RLHF vs DPO 对比
| 特性 | RLHF (PPO) | DPO |
|---|---|---|
| 需要奖励模型 | ✅ 需要单独训练 | ❌ 不需要 |
| 强化学习 | ✅ PPO 算法 | ❌ 纯分类损失 |
| 同时加载模型数 | 4 个 | 2 个(策略 + 参考) |
| 训练稳定性 | 较差,超参数敏感 | 较好,类似 SFT |
| 显存占用 | 高 | 低 |
| 实现复杂度 | 高 | 低 |
| 效果 | 上限可能更高 | 接近或持平 |
DPO 的实际训练流程
DPO 训练只需要 3 步:
1. 准备偏好数据:
人类标注 (问题, 好回答, 差回答) 三元组
2. 计算对数概率:
策略模型 π_θ 和参考模型 π_ref 分别计算:
log π_θ(y_w|x), log π_θ(y_l|x)
log π_ref(y_w|x), log π_ref(y_l|x)
3. 最小化 DPO 损失:
梯度下降更新 π_θ,直到收敛
DPO 的局限性
- 离线数据:DPO 使用固定数据集,不能像 PPO 那样在线生成新样本
- 分布偏移:随着策略更新,训练数据的分布可能与当前策略不匹配
- 过度优化:在某些任务上,DPO 可能过度拟合偏好数据中的噪声
总结
DPO 通过数学上的巧妙推导,将复杂的 RLHF 流程简化为一个标准的分类问题。它不需要训练奖励模型,不需要 PPO 强化学习,训练稳定且易于实现。虽然在某些高难度任务上 PPO 仍有优势,但 DPO 凭借其简洁性和稳定性,已经成为对齐训练的主流选择之一。