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