Direct Preference Optimization: Your Language Model is Secretly a Reward Model

把偏好对齐从“奖励模型 + PPO”压缩成更直接的优化目标,显著降低了 RLHF 流程的复杂度。

年份与会议

2023 · arXiv

作者

Rafael Rafailov、Archit Sharma、Eric Mitchell、Stefano Ermon、Christopher D. Manning、Chelsea Finn

主题

DPO

阅读时长

约 3 分钟

收录时间

2023/05/30

标签

原文链接

https://arxiv.org/abs/2305.18290

DPO 为什么会迅速流行

InstructGPT 证明了 RLHF 非常有效,但它也让很多团队意识到一个现实问题:这套流程太重了。

传统 RLHF 通常需要:

  • 先做 SFT
  • 再收集偏好比较数据
  • 再训练奖励模型
  • 最后用 PPO 之类的强化学习方法优化主模型

对于资源充足的大团队,这条链路可以成立;但对很多研究者和工程团队来说,它的实现复杂度、调参成本和稳定性负担都很高。DPO 的吸引力就在这里:

能不能不显式训练奖励模型,也不进入完整强化学习环节,而是直接从偏好对里优化语言模型?

DPO 给出的答案是:可以,而且往往很好用。

背景:传统 RLHF 到底“重”在哪里

传统 RLHF 的困难不是单点算法,而是整条系统链路:

  1. 奖励模型本身要训练、评估和校准。
  2. PPO 这类策略优化方法训练不稳定,超参数敏感。
  3. 主模型如果偏离参考模型太远,容易出现行为漂移。
  4. 数据、奖励、策略三者一旦耦合,调试成本很高。

所以很多团队并不是不想做偏好优化,而是希望找到更接近监督学习、更容易复现的替代方案。

核心思想:把偏好优化写成一个更直接的目标

DPO 最核心的贡献,不在于“发明新的偏好数据”,而在于重新整理了目标函数。

直观上,它利用了这样一个事实:

  • 如果一个回答比另一个回答更受人类偏好,那么优化目标就应该直接让模型提升前者概率、压低后者概率。
  • 同时,这个过程还应该参考一个基线模型,避免主模型在优化时漂得太远。

因此,DPO 不再显式训练一个独立奖励模型,而是把“偏好对 + 参考模型 + 当前策略模型”合并进一个更直接的损失函数里。

从训练感受上看,它更像是在做一类结构化的监督学习,而不是完整强化学习。

如果把 DPO 和传统 RLHF 摆在一起看,它为什么会被认为“更轻”就会非常明显:

DPO 与传统 RLHF 的链路对比图 左侧是 SFT、奖励模型、PPO 的传统 RLHF 长链路;右侧是 DPO 直接用偏好对和参考模型优化主模型,省去了显式奖励模型和 PPO。 传统 RLHF DPO
  <g>
    <rect x="66" y="108" width="126" height="54" rx="16" fill="#eef6e8" stroke="#a8c48e" />
    <text x="129" y="140" text-anchor="middle" font-size="18" font-weight="700">SFT 模型</text>
    <rect x="210" y="108" width="126" height="54" rx="16" fill="#fff4dc" stroke="#e2c36f" />
    <text x="273" y="140" text-anchor="middle" font-size="18" font-weight="700">奖励模型</text>
    <rect x="354" y="108" width="64" height="54" rx="16" fill="#fce7ef" stroke="#e2a8bd" />
    <text x="386" y="140" text-anchor="middle" font-size="18" font-weight="700">PPO</text>
  </g>
  <line x1="192" y1="135" x2="210" y2="135" stroke="#5b6b7f" stroke-width="3" marker-end="url(#dpo-arrow)" />
  <line x1="336" y1="135" x2="354" y2="135" stroke="#5b6b7f" stroke-width="3" marker-end="url(#dpo-arrow)" />
  <text x="242" y="212" text-anchor="middle" font-size="15" fill="#8b4b4b">链路长,模型多,调参与稳定性成本高</text>

  <g>
    <rect x="572" y="98" width="150" height="72" rx="18" fill="#e8f1ff" stroke="#98b7e1" />
    <text x="647" y="128" text-anchor="middle" font-size="18" font-weight="700">偏好对数据</text>
    <text x="647" y="151" text-anchor="middle" font-size="13" fill="#4b5563">chosen / rejected</text>
  </g>
  <g>
    <rect x="752" y="98" width="148" height="72" rx="18" fill="#eef6e8" stroke="#a8c48e" />
    <text x="826" y="128" text-anchor="middle" font-size="18" font-weight="700">参考模型</text>
    <text x="826" y="151" text-anchor="middle" font-size="13" fill="#4b5563">限制行为漂移</text>
  </g>
  <g>
    <rect x="632" y="214" width="208" height="64" rx="18" fill="#dff4f0" stroke="#8dc7bd" />
    <text x="736" y="244" text-anchor="middle" font-size="19" font-weight="700">直接优化主模型</text>
    <text x="736" y="267" text-anchor="middle" font-size="13" fill="#4b5563">更像监督学习,不显式训练奖励模型</text>
  </g>
  <line x1="647" y1="170" x2="704" y2="214" stroke="#5b6b7f" stroke-width="3" marker-end="url(#dpo-arrow)" />
  <line x1="826" y1="170" x2="768" y2="214" stroke="#5b6b7f" stroke-width="3" marker-end="url(#dpo-arrow)" />
  <text x="738" y="306" text-anchor="middle" font-size="15" fill="#355c52">重点:把偏好学习重新写回普通训练框架</text>
</g>
DPO 的核心吸引力不只是“效果不错”,而是它把偏好优化从一条复杂系统链路压缩成了更像常规训练的目标。

怎样理解它和奖励模型的关系

DPO 论文的标题非常巧妙:“Your Language Model is Secretly a Reward Model”。它想表达的是:

在合适的推导下,语言模型本身就可以承载与奖励相关的相对偏好信息。也就是说,我们并不总需要把“偏好打分器”单独拆成另一个模型再去优化。

这并不是说奖励模型彻底没意义,而是说:

  • 在很多常见偏好学习场景里,单独训练奖励模型未必是唯一必要路径。
  • 对工程目标而言,直接优化偏好排序关系往往已经足够。

这也是为什么 DPO 让很多团队感到“终于可以把对齐训练做得更像常规训练”。

训练数据长什么样

DPO 使用的数据通常是偏好对,也就是同一个 prompt 下有一条 chosen 回答和一条 rejected 回答。

例如:

  • 用户问题相同
  • 一个回答更清晰、更准确、更安全
  • 另一个回答较差、较啰嗦或更冒险

模型训练时的核心目标,就是学会在这两个回答之间把概率质量更多地给到人类偏好的那个。

因此,DPO 的数据接口和很多现有偏好标注流程天然兼容。这也是它落地快的重要原因之一。

为什么工程团队会偏爱 DPO

从工程角度看,DPO 的优势可以概括成四点:

1. 训练链路更短

不需要单独维护奖励模型训练与部署链路。

2. 实现更接近监督学习

很多训练基础设施本来就擅长处理监督式 loss,DPO 更容易复用现有栈。

3. 稳定性通常更好

相比 PPO 这类强化学习方法,DPO 在很多实践中更容易跑通、复现和调参。

4. 迭代速度更快

当你需要频繁尝试不同偏好数据、不同风格目标时,DPO 的实验周转通常更轻。

这也是为什么今天很多开源对齐项目会优先从 SFT + DPO 起步,而不是直接上完整 RLHF。

它和 RLHF 是替代关系还是继承关系

更准确地说,DPO 不是“否定 RLHF”,而是对 RLHF 工程复杂度的一次重构。

你可以这样理解两者关系:

  • InstructGPT / RLHF 证明了人类偏好优化非常有效。
  • DPO 则在这个基础上追问:有没有更简单的实现路径?

因此,DPO 的成功并不削弱 RLHF 的历史地位,反而说明 RLHF 把问题提对了,只是后来的方法在实现上变得更轻、更实用。

实验结果说明了什么

DPO 论文最打动人的地方,是它不是只给出一个“理论上可行”的目标,而是在多个常见设置里展示了和 RLHF 相当甚至更好的效果。

对读者最重要的结论其实是:

  1. 偏好优化未必必须借助完整强化学习闭环。
  2. 简化训练链路并不一定意味着明显降级。
  3. 对很多团队而言,DPO 是一个更可执行的默认起点。

这使得“对齐训练”不再是少数大团队专属能力,而开始进入更广泛的社区实践。

局限:DPO 不是对齐问题的万能钥匙

虽然 DPO 很好用,但它并没有让偏好学习变得轻而易举。它仍然依赖:

  • 高质量偏好对数据
  • 合理的参考模型
  • 明确的产品目标
  • 足够好的评测体系

如果偏好数据本身不可靠,或者目标风格定义模糊,DPO 也会学到混乱甚至有害的行为模式。

此外,某些复杂目标可能仍然更适合更显式、更可控的奖励建模方式。DPO 的价值在于大幅降低门槛,而不是宣布偏好优化从此没有难题。

为什么 DPO 对开源社区特别重要

开源社区最需要的,不一定是理论上最强的方法,而是:

  • 容易复现
  • 容易解释
  • 容易接到现有训练框架
  • 容易快速迭代

DPO 几乎完美符合这几个条件。因此它很快成为很多开源对齐项目的首选,也推动了“偏好优化工程化”的普及。

如果说 LoRA 降低了微调门槛,那么 DPO 则显著降低了对齐门槛。

读这篇论文时最该抓住什么

如果你不想陷入推导细节,最该抓住的是:

  1. DPO 想解决的是 RLHF 太重的问题。
  2. 它把偏好学习重新写成了更直接的优化目标。
  3. 它让“做对齐训练”更像“做普通训练”,从而更适合大多数团队。

理解这三点,你再回头看 RLHF、Constitutional AI 或其他偏好学习工作时,就能更容易判断它们各自想优化的是哪一层成本。

延伸阅读

相关内容

沿着相近主题继续阅读,加深对方法边界与实践场景的理解。