DPO

DPO 直接用 (prompt, chosen, rejected) 偏好对优化策略相对参考模型的偏好,不需要显式训练 reward model 再执行在线 rollout。

适合回答的比较

  • 相比 PPO:流程更简单、离线,但不执行同样的在线策略探索。
  • 相比 SFT:使用成对偏好信号,而非只最大化一个目标回答的似然。
  • beta 控制偏好优化与参考策略约束的尺度,但具体定义以目标函数和实现为准。

目标函数与因果链

常见形式为:

$$
L=-\log\sigma\left(\beta\left[(\log\pi_\theta(y_w|x)-\log\pi_{ref}(y_w|x))-(\log\pi_\theta(y_l|x)-\log\pi_{ref}(y_l|x))\right]\right)
$$

1
2
3
4
chosen/rejected 对
→ 比较策略相对 reference 的 log-prob 增益
→ 提高 chosen、压低 rejected
→ 偏好胜率变化,同时受 beta/KL 约束

DPO 的离线边界很重要:数据里的偏好对决定探索范围,模型不会像 PPO 那样持续生成新轨迹。若 chosen 质量不稳定、长度差异过大或数据与当前模型分布偏离,loss 下降仍可能对应泛化变差。验收要同时看偏好集、通用回归集、长度和拒答行为。

相关节点:SFTPPOReward Model。参考:DPO 论文

DPO 学的是相对偏好,不是绝对正确

在同一个 prompt 下,chosen 只需比 rejected 更符合标注偏好;它并不保证 chosen 本身事实正确、长度合理或可执行。若所有 chosen 都比 rejected 长很多,DPO 可能学到“写得更长”这个捷径;若偏好集中在礼貌语气,模型未必获得领域知识。训练前应按长度、格式、事实正确性和任务类别分层检查偏好对,不能只看 pair count。

reference policy 的作用是提供相对基线:模型被鼓励提高 chosen 相对 reference 的 log-prob,同时抑制整体漂移。beta 过小会让策略快速偏离 reference,过大则几乎学不到偏好;但 beta 的数值不能跨实现直接比较,因为 reduction、长度归一和 KL 定义可能不同。记录 chosen/rejected 的平均 token log-prob、margin 和长度,比单独追踪 DPO loss 更能解释训练动态。

DPO 的离线边界

DPO 不会主动发现训练数据之外的错误答案。若部署分布出现新工具、长上下文或新语言,loss 下降仍可能只是记住偏好对的表面模式。可以用 SFT checkpoint 作为对照,固定采样参数做离线胜率、真实成功率、拒答和长度回归;如果偏好胜率升而真实成功率不升,优先检查标注信号是否和目标错位,而不是继续调 beta。