DPO(Direct Preference Optimization,直接偏好优化)是一种简化的偏好对齐方法,无需训练独立的奖励模型,直接用偏好数据优化语言模型。
核心思想
将 RLHF 的奖励建模和强化学习两步合并为一步,直接从偏好数据中学习。
与 RLHF 的对比
| 维度 | RLHF | DPO |
|---|---|---|
| 训练阶段 | 3 阶段(SFT → RM → PPO) | 2 阶段(SFT → DPO) |
| 奖励模型 | 需要单独训练 | 不需要 |
| 训练复杂度 | 高(多个模型交互) | 低(单模型优化) |
| 稳定性 | PPO 训练不稳定 | 更稳定 |
| 计算成本 | 高 | 较低 |
| 效果 | 成熟,效果好 | 接近 RLHF,某些场景更优 |
数学原理
DPO 的核心洞察:RLHF 的最优策略可以用封闭形式表示为奖励函数的函数,因此可以反过来把奖励函数用策略表示出来。
损失函数:
其中:
- :要训练的策略模型
- :参考模型(通常是 SFT 后的模型)
- :偏好的回答(winner)
- :不偏好的回答(loser)
- :温度参数,控制偏离参考模型的程度
直观理解
DPO 做的事情:
- 增大偏好回答 相对于参考模型的概率
- 减小不偏好回答 相对于参考模型的概率
- 通过 控制偏离程度,防止模型变化过大
训练流程
SFT 模型(作为 π_ref)
↓
偏好数据集:[(prompt, chosen, rejected), ...]
↓
DPO 损失优化
↓
对齐后的模型
优点
- 简单:无需奖励模型和 PPO,代码实现更简单
- 稳定:避免了 RL 训练的不稳定性
- 高效:计算成本更低
- 效果好:在多个基准上与 RLHF 效果相当或更优
缺点
- 对偏好数据质量要求高
- 没有显式奖励模型,难以做奖励分析和调试
- 可能在某些复杂对齐任务上不如 RLHF 灵活
变体
- IPO(Identity Preference Optimization):解决 DPO 过拟合问题
- KTO(Kahneman-Tversky Optimization):只需要好/坏标签,不需要成对偏好
- ORPO:将 SFT 和偏好优化合并为一步
代表工作
- 原始论文:Direct Preference Optimization: Your Language Model is Secretly a Reward Model(2023,Stanford)
- 应用:Llama 2、Zephyr、许多开源模型的对齐训练