DPO(直接偏好优化)
一种无需显式奖励模型和强化学习的偏好对齐方法,通过重参数化将 RLHF 目标转化为简单的二元交叉熵损失,仅需几行 PyTorch 代码即可实现。
是什么
DPO 的核心洞察:语言模型本身就隐含了一个奖励函数。利用 RLHF 最优策略的闭式解,可以反解出 r(x,y) = β·log(π/π_ref),代入 Bradley-Terry 偏好模型后归一化项神奇地抵消,最终得到一个稳定的分类损失:
L_DPO = -E[log σ(β·log(π_θ(y_w)/π_ref(y_w)) - β·log(π_θ(y_l)/π_ref(y_l)))]
直观理解:增大好回答的相对概率,减小坏回答的相对概率,梯度自动加权。
为什么重要
- 极简实现:不需要训练独立的 RM、不需要 PPO 采样循环、不需要 Value Function
- 稳定训练:消除了 PPO 中难估计的归一化项(软价值函数),解决了 RLHF 的不稳定性
- 高效:训练期间无需从策略采样(vs PPO 每步都要采样生成)
- 效果优于或持平 PPO:在 TL;DR 摘要和 Anthropic HH 对话上均达到或超越 PPO
工作原理
- 从 RLHF 的最优策略闭式解出发:
π*(y|x) ∝ π_ref(y|x)·exp(r(x,y)/β) - 反解奖励:
r(x,y) = β·log(π/π_ref) + β·log Z(x)— 语言模型本身隐含了奖励模型 - 代入 Bradley-Terry:Z(x) 抵消,得到 DPO loss
- 梯度效应:增大 preferred 回答似然、减小 dispreferred 似然,错得越多梯度越大
历史与演进
| 时间 | 里程碑 |
|---|---|
| 2023.05 | DPO 论文发布(NeurIPS 2023),RL-free 对齐范式确立 |
| 2023.07 | Llama 2 仍使用 PPO,但学界开始大量采用 DPO |
| 2024.01 | Mixtral Instruct 使用 DPO |
| 2024.07 | Llama 3 后训练采用迭代 SFT + DPO + Rejection Sampling(弃用 PPO) |
与相邻概念的区别
- DPO vs RLHF/PPO:DPO 不需要显式 RM 和 RL 采样,直接优化偏好;PPO 需要 RM→采样→PPO 更新循环
- DPO vs IPO:IPO(Identity Preference Optimization)是 DPO 的变体,用二次损失替代 sigmoid,对过拟合更鲁棒
- DPO vs KTO:KTO 不需要偏好对,仅需单一样本的”好/坏”标签
- DPO vs ORPO:ORPO 将 SFT loss 和偏好优化 loss 合并,不需要参考模型
常见误解
- “DPO 不需要偏好数据” — DPO 仍然需要人类偏好对比数据,只是不需要单独训练 RM
- “DPO 完全替代了 RLHF” — 更高温度、多轮交互等场景下 PPO 仍有优势