经典 RLHF 像一条三段式生产线:收集成对偏好,训练一个输出标量的奖励模型,再用 PPO 让语言模型追逐这个分数,同时用 KL 惩罚拴住它。DPO 却说,第二段和第三段都可以拿掉,剩下一个看起来像二分类的损失就够了。
这很容易被压缩成一句不准确的话:DPO“不需要奖励模型”。更精确的说法是,DPO 不训练一个独立、可调用的奖励网络,却仍然假设人类偏好来自潜在奖励;它把这个奖励改写成策略相对参考模型的对数概率变化。 奖励模型没有凭空消失,而是从一项显式资产变成了语言模型内部的一种坐标系。
这次改写为何成立、每个 batch 到底算了什么,以及简化后的代价在哪里,是理解 DPO 的三把钥匙。
它删掉的是训练阶段,不是偏好假设
给定提示 $x$,标注者在两个回答里选择更好的 $y_w$,另一个记为 $y_l$。传统奖励模型通常采用 Bradley–Terry 假设:偏好概率只取决于两个潜在奖励之差,
$$ p(y_w \succ y_l\mid x)=\sigma\big(r(x,y_w)-r(x,y_l)\big). $$先用这个式子拟合奖励网络,再求解一个带 KL 约束的策略优化问题:
$$ \max_\pi\;\mathbb E_{y\sim\pi}[r(x,y)]- \beta D_{\mathrm{KL}}\!\left(\pi(\cdot\mid x)\,\|\,\pi_{\mathrm{ref}}(\cdot\mid x)\right). $$第一项鼓励高奖励回答,第二项阻止策略离参考模型太远。这个约束并非装饰:奖励模型只在有限数据分布附近可靠,策略若专门钻它的空子,分数可能继续上涨,回答质量却下降。
图 1:传统 RLHF 先拟合奖励再用 PPO 优化;DPO 直接用偏好对更新策略
DPO 的关键不是发明另一种偏好标签,而是观察上述优化问题的最优策略具有闭式形式:
$$ \pi_r(y\mid x)=\frac{1}{Z(x)}\pi_{\mathrm{ref}}(y\mid x) \exp\!\left(\frac{r(x,y)}{\beta}\right). $$把它反解,就能用策略表示奖励:
$$ r(x,y)=\beta\log\frac{\pi_r(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)}+\beta\log Z(x). $$麻烦的配分函数 $Z(x)$ 只依赖同一个提示 $x$。代回 Bradley–Terry 模型时,两个回答的奖励相减,$\beta\log Z(x)$ 恰好抵消。于是无需先恢复奖励的绝对值,也能直接拟合“人更可能选哪一个回答”。这不是近似技巧,而是一次变量替换。
一个偏好对,只需要四个对数概率
DPO 对每个样本 $(x,y_w,y_l)$ 计算四个序列级对数概率:当前策略与参考模型各自对 chosen、rejected 回答的概率。定义
$$ a_w=\log\pi_\theta(y_w\mid x)-\log\pi_{\mathrm{ref}}(y_w\mid x), $$$$ a_l=\log\pi_\theta(y_l\mid x)-\log\pi_{\mathrm{ref}}(y_l\mid x). $$这里的 $a$ 可以理解为“当前策略相对出发点,给这个回答增加了多少支持”。DPO 最小化
$$ \mathcal L_{\mathrm{DPO}}=-\log\sigma\big(\beta(a_w-a_l)\big). $$图 2:DPO 用 policy/reference × chosen/rejected 的四个对数概率构造一个相对优势差
这个式子有三个容易忽略的细节。
第一,它优化的不是“chosen 的概率必须变大”这一条孤立规则,而是 chosen 相对 reference 的提升要超过 rejected 相对 reference 的提升。即使两个回答的绝对概率都因参数共享而下降,只要相对差朝正确方向扩大,损失仍会改善。
第二,reference 不是一份普通的旧 checkpoint 标签。它定义了隐式奖励的零点,也承担 KL 锚的角色。原论文在有 SFT 模型时用它初始化 reference 和待训练策略;没有匹配的 SFT 模型时,则先对 preferred completions 做最大似然微调,以减轻偏好数据与 reference 的分布错位。
第三,$\beta$ 控制偏离 reference 的代价,但不同实现对参数含义与缩放的表述可能不同,不能把数值跨代码库机械搬运。论文官方参考实现里,核心计算确实只有:先求 policy 的 chosen/rejected log-ratio,再减去 reference 的对应 log-ratio,最后送入 logsigmoid。不过“损失短”不等于训练只需一份模型:朴素实现仍要对 policy 和冻结的 reference 做前向计算,显存、并行和序列截断依然是工程问题。
简单来自“离线”,也受限于“离线”
DPO 训练期间不需要一边生成新回答、一边让奖励模型打分,再维护 PPO 的 actor、critic 与 rollout 循环。固定的 $(x,y_w,y_l)$ 数据集可以像监督学习一样反复训练,这降低了系统复杂度,也让实验更容易复现。
原论文在三个任务上验证了这点:受控情感生成、Reddit TL;DR 摘要和 Anthropic Helpful and Harmless 单轮对话。实验模型最大到 6B;在其 GPT-4 评估的摘要设置中,DPO 的最佳报告值约为 61% 胜率,PPO 约为 57%,且 DPO 对采样温度更稳健。论文还报告在人类头对头评估中,DPO 样本有 58% 的比较胜过 PPO 样本。
这些结果支持“在论文设置下,DPO 能以更简单的优化达到有竞争力的偏好对齐”,却不支持“DPO 在所有规模、所有偏好数据上都优于在线 RL”。它使用固定数据,看不到当前策略新产生的失败;如果训练把策略推到数据覆盖之外,监督信号不会自动跟上。偏好对来自谁、由哪个模型生成、标注标准是否一致,都会成为算法的一部分。
图 3:DPO 消除了显式奖励与在线 PPO 环,却保留 reference 计算,并把风险集中到偏好数据与分布外推
因此,把 DPO 与 PPO 理解成单纯的“新算法淘汰旧算法”并不合适。更有用的区分是:DPO 是固定偏好数据上的直接策略拟合;在线 RL 则能让当前策略持续探索、获得新反馈。前者适合数据已经准备好、希望训练管线简单稳定的场景;后者更复杂,却能针对模型正在犯的新错误继续收集信号。
隐式奖励照样会被钻空子
没有独立奖励网络,不代表没有 reward hacking。只要偏好数据含有捷径,DPO 就会放大能提高胜率的特征。
一个清楚的例子是长度。Rafailov 等作者的后续研究分析 Anthropic HH 与 TL;DR 数据,发现 preferred 回答只有轻微偏长,但未正则化 DPO 生成的回答平均可变成约两倍长,并跑到反馈数据的长度分布之外。论文将其解释为对长度相关偏好的分布外外推,并提出长度正则项;在控制长度后,报告的胜率最高改善 20%。
这里应避免另一个过度结论:长回答不等于坏回答。问题在于,模型可能把“通常更完整”学成“只要更长就更可能赢”,而自动评审本身也可能偏爱冗长。此时 raw win rate 同时测量内容质量、长度偏见和评审器偏见,不能单独充当真相。
DPO 的二元偏好模型还有更基本的压缩:它只知道 $y_w$ 胜过 $y_l$,不知道胜多少,也不知道两者是否都很差。标注噪声、提示分布变化、答案风格与事实正确性的纠缠,都不会因公式优雅而消失。实际系统仍需要保留独立评测:长度校正、人类抽检、事实性与安全测试,以及对策略偏离 reference 程度的监控。
真正的贡献,是找到了正确的坐标
DPO 最值得记住的,不是“用一个 loss 替代一整套 RLHF”这句口号,而是它找到了一种坐标变换:在 KL 正则化的偏好优化中,奖励差可以写成策略相对 reference 的 log-ratio 差;Bradley–Terry 只关心差值,所以未知的归一化项会消失。
这个视角让一条昂贵管线缩短了,也揭示了一个更普遍的设计原则:有时中间模型只是求解最终对象的一种参数化。如果能把约束直接写进最终对象,就可能减少训练阶段而不改变目标假设。
但被删掉的模块不会带走它原本承载的所有问题。偏好仍可能有偏,reference 仍决定“不要走太远”相对于哪里,离线数据仍划定可学习边界,评测仍可能被表面特征欺骗。DPO 让优化更直接;它没有让“人到底喜欢什么、为什么喜欢”这个问题变简单。
参考资料
- Rafailov et al., Direct Preference Optimization: Your Language Model Is Secretly a Reward Model, NeurIPS 2023.
- Rafailov et al., DPO paper and appendices, 2023.
- Mitchell et al., DPO official reference implementation.
- Park et al., Disentangling Length from Quality in Direct Preference Optimization, Findings of ACL 2024.