DPO(Direct Preference Optimization,直接偏好优化)是一种简化的偏好对齐方法,无需训练独立的奖励模型,直接用偏好数据优化语言模型。

核心思想

RLHF 的奖励建模和强化学习两步合并为一步,直接从偏好数据中学习。

与 RLHF 的对比

维度RLHFDPO
训练阶段3 阶段(SFT → RM → PPO)2 阶段(SFT → DPO)
奖励模型需要单独训练不需要
训练复杂度高(多个模型交互)低(单模型优化)
稳定性PPO 训练不稳定更稳定
计算成本较低
效果成熟,效果好接近 RLHF,某些场景更优

数学原理

DPO 的核心洞察:RLHF 的最优策略可以用封闭形式表示为奖励函数的函数,因此可以反过来把奖励函数用策略表示出来。

损失函数

其中:

  • :要训练的策略模型
  • :参考模型(通常是 SFT 后的模型)
  • :偏好的回答(winner)
  • :不偏好的回答(loser)
  • :温度参数,控制偏离参考模型的程度

直观理解

DPO 做的事情:

  1. 增大偏好回答 相对于参考模型的概率
  2. 减小不偏好回答 相对于参考模型的概率
  3. 通过 控制偏离程度,防止模型变化过大

训练流程

SFT 模型(作为 π_ref)
    ↓
偏好数据集:[(prompt, chosen, rejected), ...]
    ↓
DPO 损失优化
    ↓
对齐后的模型

优点

  1. 简单:无需奖励模型和 PPO,代码实现更简单
  2. 稳定:避免了 RL 训练的不稳定性
  3. 高效:计算成本更低
  4. 效果好:在多个基准上与 RLHF 效果相当或更优

缺点

  1. 对偏好数据质量要求高
  2. 没有显式奖励模型,难以做奖励分析和调试
  3. 可能在某些复杂对齐任务上不如 RLHF 灵活

变体

  • IPO(Identity Preference Optimization):解决 DPO 过拟合问题
  • KTO(Kahneman-Tversky Optimization):只需要好/坏标签,不需要成对偏好
  • ORPO:将 SFT 和偏好优化合并为一步

代表工作

相关概念