DPO 是什么:不经过奖励模型,直接利用偏好调整模型
从偏好数据中的‘更好回答’与‘较差回答’出发,理解 DPO 如何绕开独立奖励模型和 PPO,直接把模型调向人们更认可的输出。
相关工具
DPO 关注的是回答之间的偏好差别
在上一篇文章里,RLHF 的思路可以概括成三步:让模型生成多个回答,收集人类对这些回答的比较结果,训练奖励模型,再用 PPO 等方法根据奖励继续调整语言模型。DPO 也使用偏好数据,但它把训练流程压缩了一层:不单独训练一个奖励模型,也不把模型放进完整的强化学习循环,而是直接利用偏好对优化语言模型。
DPO 的全称是 Direct Preference Optimization,通常翻译为直接偏好优化。这里的‘偏好’不是一句抽象的口号,而是一条具体的比较记录:同一个问题对应两个回答,其中一个被标为更好,另一个被标为较差。模型要学的就是,在类似问题上提高前者出现的相对可能性,降低后者出现的相对可能性。
这让 DPO 更容易与数据对应起来。SFT 的样本告诉模型‘参考答案长什么样’,DPO 的偏好对则告诉模型‘两个答案放在一起比较时,哪一个更值得保留’。它们都在改变模型行为,但监督信号的形状不同。

同一个问题对应一个更好的回答和一个较差的回答,DPO 直接使用这个偏好对调整语言模型。
为什么不直接给每个回答打一个绝对分数
判断一个回答是不是好,往往离不开问题本身和对照对象。单独看一句话,标注者可能会觉得它‘还可以’;把它和另一句放在一起,就能看出后一条更清楚、更符合限制条件。偏好数据把这种相对判断保留下来,常见记录就是 prompt、chosen answer 和 rejected answer。
相对比较还有一个实际好处:人不必先定义一个跨任务通用的分数标准。技术问答、客服回复、文本改写和安全拒答,好的样子并不完全一样,但标注者通常可以在同一个问题下判断两个结果谁更合适。DPO 直接学习这种差异,而不是要求所有任务都共用一把绝对的尺子。
当然,偏好对也不是天然可靠。标注者如果忽略事实错误,只偏爱更流畅的表达,数据就会把模型往‘听起来像对的’方向推。一个回答被选中,也只代表它在当前比较中更好,不代表它在所有场景都正确。因此偏好数据仍然需要清洗、复核和覆盖不同任务,不能只追求数量。
DPO 和 RLHF 的训练路径差在哪里
RLHF 的经典路径里,偏好数据先用来训练奖励模型。奖励模型学会给候选回答排序后,再由 PPO 驱动语言模型反复生成、评分和更新。DPO 则直接把偏好数据放进优化目标里,让策略模型在同一个问题下更偏向 chosen answer,同时压低 rejected answer 的相对倾向。
所以两条路径的共同起点是偏好数据,区别在中间是否显式建立奖励模型并运行强化学习。RLHF 的中间环节更多,能够把奖励看作独立信号,但训练稳定性、参数设置和奖励模型准确性都会带来额外难度。DPO 的流程更短,训练形式也更接近常规的监督式优化,因此在很多场景中更容易落地和调试。
这里的‘更简单’不等于‘任何情况下都更好’。DPO 依然依赖偏好数据的质量,也需要选择合适的参考模型、损失权重和评测方式。它只是把原本需要单独估计的奖励关系,直接写进了偏好优化过程,减少了显式奖励模型与在线策略更新这两层工程复杂度。

两者共享偏好数据,RLHF 经过奖励模型和 PPO,DPO 则直接进行偏好优化。
参考模型在 DPO 里做什么
DPO 并不是让模型无条件地追逐 chosen answer 的概率。训练时通常会保留一个参考模型,用它来衡量当前策略相对于原始模型的变化。参考模型可以理解为一条基线:模型需要学会偏向更好的回答,但不能为了追求训练数据中的偏好,把原有的语言能力和分布改得面目全非。
从直观上看,DPO 比较的是两个模型对偏好回答和拒绝回答的相对倾向。若策略模型相对于参考模型更愿意生成 chosen answer,同时减少 rejected answer 的相对倾向,就会得到更符合偏好数据的更新方向。参考模型的作用,是给这个变化加上一条参照线。
这种设计和 RLHF 中用 KL 散度约束策略不要偏离参考模型太远,有相似的出发点。二者的具体公式和优化实现不同,但都在处理同一个风险:如果只看奖励或偏好,模型可能会过度迎合训练信号,最后出现能力退化、表达变窄,甚至学会利用评估漏洞的情况。

DPO 比较策略模型和参考模型对偏好回答、拒绝回答的相对倾向,并控制更新幅度。
DPO 能带来什么,代价又在哪里
DPO 最直接的优点是训练链路短。偏好数据准备好之后,不必先把它变成一个独立的奖励模型,再搭建生成、打分、策略更新的强化学习循环。对于需要频繁试验数据和模型的团队,流程少一层,通常意味着更容易定位问题,也更容易复现一次训练结果。
它还保留了偏好比较的表达力。很多任务并没有一个简单的标准答案,用户更关心的是语气是否合适、解释是否到位、拒答是否有边界。DPO 可以用这些相对偏好作为训练依据,不必把所有判断强行写成规则或绝对分数。
另一方面,DPO 解决不了数据本身的问题。偏好对如果大量重复,模型可能只记住固定句式;如果回答质量差距太大,模型学到的只是很容易的区分;如果标注标准前后不一致,模型会收到相互矛盾的信号。训练后还需要用未参与训练的任务、人工抽查和事实性测试检查模型是否真的变好。
DPO 也可能把模型推向更单一的表达。如果数据总偏爱一种长度、一种语气或一种格式,模型会逐渐减少其他合理表达。偏好优化的目标不是让所有回答看起来一样,而是让模型在重要质量标准上更稳定,同时保留足够的语言弹性。
从 SFT 到 DPO,应该怎样安排
如果基础模型还不会稳定完成任务,先做 SFT 通常更合适。准备指令和参考回答,让模型知道任务边界、输入结构和基本输出方式。等模型能够生成一批可比较的候选结果之后,再收集 chosen answer 与 rejected answer,DPO 才有清晰的优化对象。
偏好数据不必只覆盖‘最好回答’。边界案例同样重要:事实不完整时如何表达不确定性,用户要求过高时如何说明限制,遇到危险请求时怎样拒绝,长文本里怎样避免漏掉约束。这些数据能让偏好优化关注真实使用中的差异,而不是只在整齐的演示样本上取得好看结果。
训练前还要留出一套评测集,至少检查任务完成度、事实准确性、格式遵循、拒答边界和表达多样性。只看训练损失或偏好命中率,很难判断模型是否真的更可靠;它也可能只是学会了偏好数据的表面风格。
可以这样记住 DPO
DPO 使用的是偏好对:同一个问题下,一个回答被选中,另一个回答被放弃。它不先训练一个独立奖励模型,也不需要像经典 RLHF 那样用 PPO 做在线策略更新,而是直接调整语言模型,让它更偏向 chosen answer,同时参考原模型控制变化幅度。
一句话区分三者:SFT 教模型‘怎样完成任务’,RLHF 通过奖励模型和强化学习让它‘更符合偏好’,DPO 则把偏好比较直接放进优化过程。知道这条关系,就能看懂很多对齐训练方案为什么选择不同的训练路径。
常见问题
DPO 是不是完全不需要奖励模型?
在常见的 DPO 流程中,不需要单独训练一个奖励模型来给回答打分,偏好对会直接参与语言模型优化。但训练仍然需要高质量的偏好数据和独立评测。
DPO 和 RLHF 是互相替代的关系吗?
它们解决的问题相近,但训练路径不同。RLHF 通常经过奖励模型和 PPO,DPO 直接利用偏好数据优化模型,具体选哪种方法要看数据、资源和训练目标。
为什么 DPO 还要参考模型?
参考模型提供一条基线,帮助限制策略模型的变化幅度。这样模型可以学习偏好,又不至于为了迎合训练数据而过度偏离原有能力。