53

DPO——从成对偏好中学习

阅读约 3 分钟第 53/60 课

DPO(Direct Preference Optimization,直接偏好优化)是一种让模型从偏好数据中学习的算法。

DPO 的核心思想

给定一个问题和两个回答(一个更好、一个更差),DPO 同时做两件事:

  1. 增大模型生成更好回答的概率
  2. 减小模型生成更差回答的概率

这比只看正例的 SFT 多了一半信息——不仅知道什么是好的,还知道什么是应该避免的。

DPO 的损失函数

DPO 的 loss 公式看起来比交叉熵复杂一些,但核心直觉很简单:

loss = −log(σ(β × (log π(好回答) − log π(坏回答) − log π_ref(好回答) + log π_ref(坏回答))))

σ 是 sigmoid 函数,π 是当前模型,π_ref 是参考模型(通常是 SFT 之后、DPO 之前的模型),β 是一个控制强度的超参数。

用自然语言翻译这个公式:当前模型对好回答和坏回答的偏好程度,应该比参考模型更强。 如果当前模型已经更偏好好回答了,loss 就低;如果它还分不清好坏,loss 就高。

参考模型 π_ref 的作用是锚定——确保 DPO 不会让模型偏离太远。没有锚定的话,模型可能走极端:为了增大好回答的概率,它可能扭曲整体的语言分布,导致在其他问题上的表现变差。

β 的作用

β 是 DPO 中最重要的超参数。它控制了模型被允许偏离参考模型多远:

  • β 大(比如 0.5):模型被严格锚定,只能做微小的调整。偏好学习的效果弱,但安全。
  • β 小(比如 0.01):模型被允许大幅偏离参考模型。偏好学习的效果强,但容易过度优化。

Sophia 使用 β = 0.1,训练 500 步——这是一个相对保守的设定,确保 DPO 改善了偏好行为但不破坏预训练和 SFT 建立的基础能力。

为什么 DPO 而不是 RLHF

在 DPO 出现之前,偏好优化的标准方法是 RLHF(Reinforcement Learning from Human Feedback)——先训练一个奖励模型,然后用强化学习让语言模型最大化奖励模型的评分。

DPO 的论文证明了:RLHF 的目标函数可以被等价地转化为一个直接在偏好数据上优化的 loss 函数——不需要单独训练奖励模型,也不需要复杂的强化学习算法。

DPO 更简单、更稳定、更容易实现,效果与 RLHF 相当。因此迅速成为偏好优化的主流方法。

下一章节来看其他偏好优化方法——RFT 和 GRPO——以及为什么它们在 Sophia 的训练中没有起到预期的效果。