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)))]

直观理解:增大好回答的相对概率,减小坏回答的相对概率,梯度自动加权。

为什么重要

  1. 极简实现:不需要训练独立的 RM、不需要 PPO 采样循环、不需要 Value Function
  2. 稳定训练:消除了 PPO 中难估计的归一化项(软价值函数),解决了 RLHF 的不稳定性
  3. 高效:训练期间无需从策略采样(vs PPO 每步都要采样生成)
  4. 效果优于或持平 PPO:在 TL;DR 摘要和 Anthropic HH 对话上均达到或超越 PPO

工作原理

  1. 从 RLHF 的最优策略闭式解出发π*(y|x) ∝ π_ref(y|x)·exp(r(x,y)/β)
  2. 反解奖励r(x,y) = β·log(π/π_ref) + β·log Z(x) — 语言模型本身隐含了奖励模型
  3. 代入 Bradley-Terry:Z(x) 抵消,得到 DPO loss
  4. 梯度效应:增大 preferred 回答似然、减小 dispreferred 似然,错得越多梯度越大

历史与演进

时间里程碑
2023.05DPO 论文发布(NeurIPS 2023),RL-free 对齐范式确立
2023.07Llama 2 仍使用 PPO,但学界开始大量采用 DPO
2024.01Mixtral Instruct 使用 DPO
2024.07Llama 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 仍有优势

相关