年份与会议
2023 · arXiv
把偏好对齐从“奖励模型 + PPO”压缩成更直接的优化目标,显著降低了 RLHF 流程的复杂度。
年份与会议
2023 · arXiv
作者
Rafael Rafailov、Archit Sharma、Eric Mitchell、Stefano Ermon、Christopher D. Manning、Chelsea Finn
主题
DPO
阅读时长
约 3 分钟
收录时间
2023/05/30
InstructGPT 证明了 RLHF 非常有效,但它也让很多团队意识到一个现实问题:这套流程太重了。
传统 RLHF 通常需要:
对于资源充足的大团队,这条链路可以成立;但对很多研究者和工程团队来说,它的实现复杂度、调参成本和稳定性负担都很高。DPO 的吸引力就在这里:
能不能不显式训练奖励模型,也不进入完整强化学习环节,而是直接从偏好对里优化语言模型?
DPO 给出的答案是:可以,而且往往很好用。
传统 RLHF 的困难不是单点算法,而是整条系统链路:
所以很多团队并不是不想做偏好优化,而是希望找到更接近监督学习、更容易复现的替代方案。
DPO 最核心的贡献,不在于“发明新的偏好数据”,而在于重新整理了目标函数。
直观上,它利用了这样一个事实:
因此,DPO 不再显式训练一个独立奖励模型,而是把“偏好对 + 参考模型 + 当前策略模型”合并进一个更直接的损失函数里。
从训练感受上看,它更像是在做一类结构化的监督学习,而不是完整强化学习。
如果把 DPO 和传统 RLHF 摆在一起看,它为什么会被认为“更轻”就会非常明显:
<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 论文的标题非常巧妙:“Your Language Model is Secretly a Reward Model”。它想表达的是:
在合适的推导下,语言模型本身就可以承载与奖励相关的相对偏好信息。也就是说,我们并不总需要把“偏好打分器”单独拆成另一个模型再去优化。
这并不是说奖励模型彻底没意义,而是说:
这也是为什么 DPO 让很多团队感到“终于可以把对齐训练做得更像常规训练”。
DPO 使用的数据通常是偏好对,也就是同一个 prompt 下有一条 chosen 回答和一条 rejected 回答。
例如:
模型训练时的核心目标,就是学会在这两个回答之间把概率质量更多地给到人类偏好的那个。
因此,DPO 的数据接口和很多现有偏好标注流程天然兼容。这也是它落地快的重要原因之一。
从工程角度看,DPO 的优势可以概括成四点:
不需要单独维护奖励模型训练与部署链路。
很多训练基础设施本来就擅长处理监督式 loss,DPO 更容易复用现有栈。
相比 PPO 这类强化学习方法,DPO 在很多实践中更容易跑通、复现和调参。
当你需要频繁尝试不同偏好数据、不同风格目标时,DPO 的实验周转通常更轻。
这也是为什么今天很多开源对齐项目会优先从 SFT + DPO 起步,而不是直接上完整 RLHF。
更准确地说,DPO 不是“否定 RLHF”,而是对 RLHF 工程复杂度的一次重构。
你可以这样理解两者关系:
因此,DPO 的成功并不削弱 RLHF 的历史地位,反而说明 RLHF 把问题提对了,只是后来的方法在实现上变得更轻、更实用。
DPO 论文最打动人的地方,是它不是只给出一个“理论上可行”的目标,而是在多个常见设置里展示了和 RLHF 相当甚至更好的效果。
对读者最重要的结论其实是:
这使得“对齐训练”不再是少数大团队专属能力,而开始进入更广泛的社区实践。
虽然 DPO 很好用,但它并没有让偏好学习变得轻而易举。它仍然依赖:
如果偏好数据本身不可靠,或者目标风格定义模糊,DPO 也会学到混乱甚至有害的行为模式。
此外,某些复杂目标可能仍然更适合更显式、更可控的奖励建模方式。DPO 的价值在于大幅降低门槛,而不是宣布偏好优化从此没有难题。
开源社区最需要的,不一定是理论上最强的方法,而是:
DPO 几乎完美符合这几个条件。因此它很快成为很多开源对齐项目的首选,也推动了“偏好优化工程化”的普及。
如果说 LoRA 降低了微调门槛,那么 DPO 则显著降低了对齐门槛。
如果你不想陷入推导细节,最该抓住的是:
理解这三点,你再回头看 RLHF、Constitutional AI 或其他偏好学习工作时,就能更容易判断它们各自想优化的是哪一层成本。
沿着相近主题继续阅读,加深对方法边界与实践场景的理解。