ArcLibrary

DPO(直接偏好优化)

RLHF 的简化替代 —— 不需要 reward model 和 PPO,照样对齐人类偏好。

AlignmentDPORLHF
核心 · Key Idea

一句话:DPO 把「学奖励 → PPO 优化」两步合一步,用一个分类损失直接拟合「chosen 比 rejected 更好」的偏好对。实现简单 + 训练稳定,是 RLHF 之后最受欢迎的对齐方法。

是什么#

数据集长这样:

{
  "prompt": "解释什么是 GFW",
  "chosen": "GFW 是 ...(中立、详尽、客观)",
  "rejected": "GFW 是 ...(带情绪、片面)"
}

DPO 直接训:「让 chosen 在 model 上的概率比在 reference model 上高,比 rejected 高得越多越好」。

打个比方#

打个比方 · Analogy

RLHF 像先训一个评委 → 再让选手反复试 → 评委打分 → 改进:步骤多、容易跑飞。
DPO 像直接给选手成对的范例:「这两份哪一份更好」,省掉评委,少很多麻烦。

关键概念#

Reference Model参考模型
通常是 SFT 完的版本,固定不动。DPO 让模型偏向 chosen 但**不要偏离 ref 太远**。
βKL 系数
控制偏离 reference 的强度。大 β = 保守、小 β = 激进,调出有点像 RLHF 里的 KL coef。
Pairwise成对偏好
需要 chosen / rejected 对,**不需要绝对分数**。
IPO / KTO / SimPODPO 衍生
对 DPO 损失的不同改进;KTO 不需要成对数据,只要 thumbs up / down。
Iterative DPO迭代 DPO
上一轮模型生成 → 评分 → 当下一轮偏好对 → 再 DPO,类似 RLHF 但更稳。

怎么工作#

数学上等价于在隐式 reward r = β log(π/π_ref) 上做最大似然。

实操要点#

  • 数据质量 > 数据量:1k 对高质量偏好优于 10k 对噪声数据。GPT-4 / Claude judge 可以拿来做自动比较。
  • 从 SFT 开始:DPO 在没 SFT 的 base 模型上效果差。先 SFT,再 DPO 是标配。
  • β 调参:常见 0.1 ~ 0.5。先小步训 1 epoch,看 reward margin(chosen vs rejected)变化。
  • 过拟合警告:偏好对小数据集训太多 epoch → 模型过激,容易崩出怪话。
  • 生产组合:SFT → DPO → 安全 prompt 评测 → 推上线 / 再次迭代。
  • 小模型也能 DPO:LoRA + DPO 在 7B 模型 + 单卡 24GB 跑得起来,TRL / axolotl 框架开箱即用。

易混点#

RLHF (PPO)
Reward Model + PPO。
强大但训练不稳。
DPO
一个分类损失。
简单稳定,效果接近 PPO。

延伸阅读#