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

基本信息

研究问题

RLHF 的标准链路过重

经典 RLHF 通常包括三阶段:

SFT:
  pretrained LM -> π_SFT
 
Reward modeling:
  π_SFT samples responses
  human ranks chosen / rejected
  -> explicit reward model r_φ
 
RL fine-tuning:
  policy samples new responses
  r_φ scores responses
  PPO optimizes policy with KL regularization

这条路线很有表现力,但在大模型上包含多个难点:

  • 需要训练和部署独立的 reward model;
  • policy rollout 与 training loop 需要反复交互;
  • 离散 token generation 使 reward objective 不容易直接求导;
  • PPO 需要 old logprob、advantage、value function 和 policy update control;
  • reward model 会被 policy 过度优化,可能产生 reward hacking;
  • reference policy 的 KL 约束和 reward scale 需要额外调节。

论文不否认 RLHF 的有效性,而是问:在 preference data 已经给定时,是否可以直接训练 policy,使其达到 KL-constrained reward objective 的最优 policy,而不显式执行 RL?

Naive Preference Fine-tuning 的问题

最直接的离线方法是提高 chosen response 的 likelihood,或者同时降低 rejected response 的 likelihood。这类方法容易产生两个问题:

  1. 它没有明确控制 policy 相对 reference model 的偏移;
  2. 它没有根据当前 policy 对 preference pair 的错误程度调整样本权重。

如果所有 pair 都被同等力度训练,模型可能过度拟合容易样本,也可能快速降低 rejected response 的概率,导致分布退化。DPO 希望保留 preference learning 的直接性,同时引入由 KL-regularized RL 推导出的动态权重和 reference constraint。

核心主张

论文的核心主张可以概括为以下几条:

  1. 可以从 KL-constrained reward maximization 得到最优 policy 的闭式表达。
  2. Bradley-Terry preference model 中的 partition function 会在 reward difference 中抵消。 因此不需要显式计算不可 tractable 的 。
  3. 通过变量替换,可以直接对 policy 优化 preference likelihood。 得到的 DPO loss 是一个 binary cross-entropy / logistic classification loss。
  4. DPO 不需要显式 reward model、在线 RL rollout 或 value model。 训练阶段只需要 preference pairs、policy 和冻结的 reference policy。
  5. DPO 的 policy 隐式定义了一个 reward model。 这个 implicit reward 是 policy 相对于 reference policy 的 log-probability ratio。
  6. 实验中 DPO 的 reward-KL frontier 优于 PPO 和其他 baseline。 在 summarization 和 dialogue 上,DPO 达到与 PPO 相当或更好的效果,同时对 sampling temperature 更稳健。

论文也给出了重要限定:DPO 的理论等价性建立在特定 KL-regularized RL objective、preference model 和 policy support 假设上;DPO 并没有消除 preference data 的偏差、offline distribution shift、reference model 依赖或 reward over-optimization。

RLHF 形式化基础

Preference Dataset

每条 preference sample 包含:

其中:

  • :prompt;
  • :preferred / winner completion;
  • :dispreferred / loser completion。

数据集记为:

传统 reward modeling 假设存在 latent reward ,人类偏好服从 Bradley-Terry model:

给定显式 reward model ,可以用:

训练它。

KL-Regularized Reward Maximization

RLHF 希望在提高 reward 的同时不要让 policy 偏离 reference policy 太远:

其中:

  • :需要训练的 policy;
  • :reference policy,通常是 SFT model;
  • :response reward;
  • :KL regularization strength。

KL 项有三个作用:

  1. 防止 policy 过度偏离 reward model 训练分布;
  2. 维持原始 language modeling 能力和生成多样性;
  3. 降低 policy collapse 到少数高 reward response 的风险。

在传统 RLHF 中,reward model 和 policy 通过 PPO 连接;DPO 的关键是先分析这个目标的最优 policy,再把 preference loss 直接写成 policy 参数的函数。

DPO 的核心推导

KL-Regularized Objective 的闭式最优解

对固定的 prompt ,将目标展开为:

定义 partition function:

则最优 policy 为:

这个结果也可以通过 KL divergence 看出来:原始目标等价于最小化 加一个与 policy 无关的常数,因此当 时达到最优。

它表达了一个重要关系:reward 越高的 response,最优 policy 相对 reference 的概率越高; 越大,policy 越保守,越接近 reference。

用 Policy 表示 Reward

对闭式解取 logarithm 并整理:

因此,对于一个对应于最优 policy 的 reward,除了只依赖 prompt 的 normalization term 外,它就是 policy/reference 的 log-prob ratio。

这一步是 DPO 的 change of variables:

explicit reward r(x, y)
  <->
optimal policy π(y | x) relative to π_ref(y | x)

Partition Function 为什么消失

Bradley-Terry model 只依赖两个 response 的 reward difference:

代入上面的 policy parameterization:

因为 对同一个 prompt 的两个 response 相同,所以相减后完全抵消。这意味着 DPO 不需要计算 response space 上昂贵的 partition function,也不需要训练一个单独的 model 去估计它。

DPO Loss

将 policy 代入 Bradley-Terry preference model,得到:

定义:

则:

当 policy 相对于 reference 更偏向 chosen, 变大,loss 降低;当 policy 仍然更偏向 rejected, 较小,loss 会产生更强的更新信号。

Sequence Log-probability

对于自回归 language model:

因此 DPO 需要对 chosen 和 rejected completion 分别计算 response token 的 log-prob,再与冻结 reference model 的 log-prob 做差。prompt tokens 通常不参与 response score,实际实现还需要正确处理 padding、EOS、attention mask 和 response truncation。

DPO 的梯度与动态样本权重

论文将 DPO 梯度写成:

其中 implicit reward 为:

梯度包含两层含义:

  1. 提高 chosen completion 的 log-prob;
  2. 降低 rejected completion 的 log-prob。

前面的 sigmoid 权重会根据当前 implicit reward 的排序错误程度动态变化。当 policy 给 rejected 的 implicit reward 仍然很高、或者还没有正确拉开 chosen/rejected 时,样本权重较大;当当前 policy 已经把 pair 排序得很正确时,权重变小。

因此 DPO 不只是固定权重的 chosen SFT,也不是简单的 chosen/rejected unlikelihood。它会优先修正当前 policy 仍然判断错误的 preference pairs。

Reference Policy 与

reference policy 通常是产生 preference data 的 SFT model。它同时承担两个作用:

  • 提供 policy shift 的参照点;
  • 通过 implicit reward 的 log-ratio 定义 preference optimization 的尺度。

是 RL objective 中 KL penalty 的系数,也是 DPO loss 中 log-ratio difference 的缩放因子。它不能简单解释成“越大更新越激进”:增大 会改变 KL-regularized optimum 的保守程度,也会改变 sigmoid 的饱和和梯度尺度。实际使用时应结合 validation preference、policy/reference KL、response length 和生成质量一起调节。

如果 preference dataset 是由某个 SFT model 采样的,使用该 SFT model 作为 reference 可以减少 distribution mismatch。如果只有公开 preference pairs、没有原始 SFT model,论文建议先对 chosen responses 做 maximum likelihood,构造一个近似 reference,以减小数据分布差异。

Theoretical Analysis

Reward Equivalence Class

Preference model 只能识别 reward differences。若两个 reward 满足:

其中 只依赖 prompt,那么它们对同一 prompt 下 response 的 preference distribution 完全相同。

论文称这类 reward 属于同一个 equivalence class,并证明:

  1. 同一 reward class 诱导相同的 Plackett-Luce / Bradley-Terry preference distribution;
  2. 同一 reward class 在 KL-constrained RL 中诱导相同的 optimal policy;
  3. 在 reference policy support 足够且 等条件下,每一个 reward equivalence class 都可以写成:

这解释了 DPO 为什么没有因为固定 reward parameterization 而损失理论上的 reward class 表达能力:DPO 只需要恢复能决定 preference 和 optimal policy 的那一类 reward,而不需要恢复一个唯一的绝对 reward。

为什么不需要 Value Baseline

在传统 actor-critic RLHF 中,使用显式 reward model 后,reward objective 中的 normalization / soft value term 可能带来高方差,通常需要 value function 或其他 baseline 估计。

论文指出,直接使用一个未归一化的 reward model 在 PPO 中可能不稳定;过去的方法会用 value model 或 human completion baseline 近似这个 normalization。DPO 的 reparameterization 将 reward 直接写成 policy/reference log-ratio,绕过了单独拟合这个 baseline 的需要。

这不代表 DPO 没有任何 variance 或 optimization 问题,而是它不需要在训练流程中维护 PPO 式 learned value model。

对 PPO Instability 的解释

论文进一步分析:如果显式 reward model 先被拟合,再用 PPO 优化对应 policy,actor-critic 实际上还要处理 reward normalization、value estimation、rollout distribution 和 policy drift。DPO 将这些关系写进一个 supervised-style objective,减少了 RL loop 中的中间估计环节。

但这不是“DPO 在任何情形都比 PPO 稳定”的定理。DPO 仍然依赖静态 preference data、reference model、beta、长度处理和 policy support;如果数据覆盖不足,DPO 也无法通过在线探索发现新的高质量 response。

Plackett-Luce Ranking 扩展

论文不只推导二元 Bradley-Terry pair,还说明如果一个 prompt 有完整的 个 response ranking,可以使用 Plackett-Luce model。对 ranking :

把 reward 替换为 policy/reference log-ratio 后,prompt-level partition function 同样抵消,可以直接最大似然训练 policy。Bradley-Terry 是 时的特例。

DPO 训练流程

标准离线流程

1. 准备 preference dataset
   (prompt, chosen, rejected)
 
2. 固定 reference policy
   通常是生成 preference data 的 SFT model
 
3. 对 chosen / rejected 分别计算
   policy sequence log-prob
   reference sequence log-prob
 
4. 计算两个 response 的 log-ratio
   policy log-prob - reference log-prob
 
5. 计算 DPO logistic loss
   -log sigmoid(beta * (chosen_ratio - rejected_ratio))
 
6. 只更新 policy
   reference 保持 frozen

与 PPO-RLHF 相比,训练阶段不需要:

  • policy rollout;
  • 显式 reward model;
  • value model / critic;
  • advantage estimation;
  • PPO epochs 上的 old-policy ratio。

但数据生产阶段仍可能需要模型采样和人工/AI ranking。DPO 去掉的是 policy optimization 阶段的 online RL loop,不是整个 preference data collection 的成本。

论文提供的实现形式

论文实现的核心可以简化为:

def dpo_loss(pi_logps, ref_logps, chosen_idx, rejected_idx, beta):
    pi_chosen = pi_logps[chosen_idx]
    pi_rejected = pi_logps[rejected_idx]
    ref_chosen = ref_logps[chosen_idx]
    ref_rejected = ref_logps[rejected_idx]
 
    pi_logratio = pi_chosen - pi_rejected
    ref_logratio = ref_chosen - ref_rejected
    losses = -log_sigmoid(beta * (pi_logratio - ref_logratio))
    rewards = beta * (pi_logps - ref_logps).detach()
    return losses, rewards

其中 pi_logps 和 ref_logps 是完整 completion 的 sequence log-prob;rewards 是用于观察 implicit reward 的 detached value,不是额外训练的 reward model 输出。

实验设计

论文使用三个 open-ended text generation task:controlled sentiment generation、Reddit TL;DR summarization 和 single-turn dialogue。所有方法都从 preference data 学习,比较 DPO、PPO、Preferred-FT、Unlikelihood、Best of N 和其他 baseline。

Controlled Sentiment Generation

prompt 是 IMDb review 的 2 到 8 个 token prefix,目标是生成 positive sentiment continuation。为了获得可计算的 ground-truth reward,论文使用预训练 sentiment classifier;对同一个 prefix 采样 4 个 completion,并按 classifier 的 positive probability 产生 6 个 preference pairs。

使用 GPT-2-large 作为 base model,先在 IMDb train split 上做 SFT,再训练 preference reward model。这个 setting 的优势是可以同时观察:

  • expected reward;
  • 与 reference policy 的 KL;
  • reward-KL trade-off frontier。

论文对 PPO、DPO、Unlikelihood 等方法进行多组保守程度设置,共 22 次训练运行;PPO 使用不同 target KL,DPO 使用不同 ,然后在测试 prompt 上计算真实 sentiment reward 与 sequence-level KL。

结果显示,DPO 在几乎所有 KL 水平上都取得最高 reward,reward-KL frontier 严格优于 PPO;即使 PPO 使用 ground-truth reward,DPO 仍然表现出更高的优化效率。这支持论文的核心判断:DPO 并非只是因为 reward model 训练得更好,而是在同一个 KL-regularized preference objective 上优化得更直接。

TL;DR Summarization

输入是 Reddit forum post,输出是 TL;DR summary。论文使用已有的人类 preference dataset 和 GPT-J SFT model,比较 DPO、PPO、Preferred-FT、Best of N 和 SFT。

主要结果:

  • DPO 在 sampling temperature 0.0 时约达到 61% win rate;
  • PPO 的最佳结果约为 57%,也出现在 temperature 0.0;
  • DPO 超过 Best of N baseline 的最高表现;
  • DPO 对 sampling temperature 更鲁棒,高温下性能下降没有 PPO 那么明显;
  • DPO 的 没有进行充分调参,因此论文认为这个结果可能低估 DPO 的潜力。

论文还做了 DPO 与 PPO 的 head-to-head human evaluation:temperature 0.25 的 DPO summary 相对 temperature 0 的 PPO summary 被偏好约 58%。

这里的 Best of N 很重要:它从 SFT/Preferred-FT policy 采样 N 个 response,再用 reward model 选择最高分的一个,能够得到较强效果,但推理成本随 N 线性增加。DPO 试图把这类 reward-guided selection 的收益固化进单个 policy。

Anthropic Helpful and Harmless Dialogue

输入是 human query,任务是生成 engaging、helpful 的 single-turn response。论文使用 Anthropic Helpful and Harmless dialogue dataset,其中包含约 170k dialogues,每条 transcript 末尾有两个 response 及 human preference label。

由于这个 setting 没有现成的 pretrained SFT model,论文先对 preferred completions 做 Preferred-FT,得到 reference policy,再训练 DPO。

比较结果显示:

  • DPO 在最佳 sampling temperature 下表现与 Best of 128 相当或更好;
  • DPO 是唯一一个能稳定超过 dataset chosen completions 的计算可行方法;
  • PPO baseline 没有找到优于 base Pythia-2.8B 的 prompt/temperature 组合;
  • DPO 的最佳表现较快出现,训练曲线在不同 sampling temperature 下总体稳定。

这里“Best of 128”本身具有很高的 inference cost,因此 DPO 的价值不只是得分更高,而是把多候选筛选的效果压缩进一次 response generation。

Distribution Shift:CNN/DailyMail

为了检验从 Reddit TL;DR 到新闻文章的分布外泛化,论文将 summarization policy 应用到 CNN/DailyMail test split,并与数据集 ground-truth summaries 比较。GPT-4 win rate 如下:

AlgorithmTemperature 0Temperature 0.25
DPO0.360.31
PPO0.260.23

DPO 在新输入分布上仍然超过 PPO。论文将其视为初步证据:DPO 的泛化不一定比 PPO 差,即使 PPO 在原任务中额外使用了未标注的 Reddit TL;DR prompts。

但这个实验仍然有限:只有一个分布迁移方向,使用 ground-truth summary 作为比较对象,不能推出 DPO 对任意 OOD prompt 都有更强泛化。

GPT-4 Judge 与人工判断

论文使用 GPT-4 评估 summarization 和 dialogue 的 win rate,并专门做 human study 验证 GPT-4 judge 是否可靠。研究比较了两个 GPT-4 prompt:

  • GPT-4 (S):哪个 summary 更好地概括重要信息;
  • GPT-4 (C):在概括重要信息之外,也考虑 conciseness。

在人类对比的不同质量样本上,GPT-4 与 human 的 agreement 大致接近 human-human agreement。最终论文采用 GPT-4 (C) 作为主要评测 prompt,但也发现 judge prompt 会改变 win rate:GPT-4 容易偏好比人类更长、更重复的 summary。

这说明 automated judge 不是无条件可靠的 ground truth。DPO 的结果依赖 evaluator prompt,论文因此把 judge validation 本身作为实验的一部分,而不是只报告 GPT-4 分数。

关键结论

DPO 的本质是 Reward-Policy Reparameterization

DPO 的推导链可以压缩为:

KL-regularized reward maximization
  -> closed-form optimal policy
  -> reward = beta * log(policy / reference) + prompt-only constant
  -> Bradley-Terry reward difference cancels the constant
  -> direct policy preference likelihood

所以 DPO 的“Direct”不是把 reward model 预测值直接拿来做 SFT,而是直接在 policy 参数化下最大似然拟合 preference model。

为什么它比 Chosen-only SFT 更有约束

Chosen-only SFT 只增加 ,没有显式 reference-relative rejected signal。DPO 同时关注:

因此它优化的是 chosen 相对 rejected 的 preference margin,同时控制两者相对于 reference 的变化。动态 sigmoid weight 又让当前仍然排序错误的 pair 获得更强梯度。

DPO 与 PPO 的真实差异

维度PPO-based RLHFDPO
Preference datachosen/rejectedchosen/rejected
Explicit reward model需要不需要,policy 隐式表示 reward
Online rollout during optimization需要不需要
Value model / advantage通常需要不需要
Training formpolicy gradient + clipped objectivelogistic classification loss
Exploration可以在线探索受 offline preference data 限制
Engineering cost高相对低
Distribution adaptation可通过新 rollout 更新依赖固定数据覆盖

DPO 简化了 policy optimization,但不是所有 RLHF 场景的替代品。如果目标需要在线探索、环境交互、verifier reward 或持续发现 policy 新错误,PPO/GRPO 等 RL 方法仍有优势。

局限与疑问

  1. 理论等价性依赖目标形式。 DPO 对应的是特定的 KL-regularized reward maximization;改变 divergence、sequence-level constraint 或 reward structure 后,loss 不一定保持同样的闭式关系。
  2. Reference model 很重要。 reference 过弱、与 preference data 生成 policy 不匹配,或已经带有不理想偏好,都会影响 implicit reward 和优化结果。
  3. 离线数据覆盖有限。 DPO 不会像 online PPO 那样主动采样当前 policy 的新错误,无法凭空修正 preference dataset 没覆盖的行为。
  4. Preference data 仍然可能被过度优化。 DPO 去掉 explicit RM,不等于消除了 reward over-optimization;policy 仍可能过拟合标注模式、长度、格式或数据集偏差。
  5. Sequence log-prob 有长度和 tokenization 影响。 chosen/rejected 长度差异、EOS 处理、response truncation 和平均/求和方式都会改变 preference margin。
  6. 不是无关紧要的温度参数。 它同时影响 reference constraint、梯度尺度和 loss saturation,需要结合 KL、胜率和生成质量调节。
  7. 实验规模有限。 论文主要验证 GPT-2-large、GPT-J(6B)和 Pythia-2.8B 级别模型,没有证明在更大规模 LLM 上必然保持同样优势。
  8. 自动评估存在 prompt sensitivity。 GPT-4 judge 与人类判断总体一致,但 judge prompt 会影响结果,且可能偏好更长、更重复的输出。
  9. DPO 不解决 preference aggregation。 多个标注者的冲突、不同用户群体的价值差异、chosen/rejected 的上下文完整性仍需要在数据层解决。
  10. 对长程 Agent 的适用性需要额外验证。 多轮 tool-use trajectory 中 action、observation、intermediate feedback 和最终 outcome 的边界,比单轮 prompt-response 更复杂,不能直接套用 response-level DPO。

对长轨迹 Agent Training 的启发

DPO 的 preference pair 可以扩展到 Agent 数据,但需要先明确比较单位:

  • 完整 trajectory;
  • 一个 workflow segment;
  • 一个 tool call 与 alternative tool call;
  • 一个 action 前的 reasoning;
  • 最终 outcome 或局部 recovery 结果。

如果使用完整长轨迹,sequence log-prob 可能被大量 observation 或无关文本稀释;如果只比较局部 step,又可能丢失 long-horizon dependency。DPO 的离线形式适合把已有高质量 trajectory 与低质量 trajectory 组成 preference pair,但它本身不提供新的 environment exploration,也不自动完成细粒度 credit assignment。

更稳妥的使用方式是把 DPO 看成现有 Agent trajectory data 的一个 policy preference optimization 选项:

高质量 / 低质量 agent trajectories
  -> 定义可比较的 preference unit
  -> 确保 action、tool argument、observation mask 一致
  -> 选择合适的 reference policy
  -> 计算 action / response token log-prob
  -> 用 DPO 学习偏好差异

对于真正需要 online feedback、环境验证和不断发现新失败模式的任务,DPO 更适合作为 offline warmup 或 preference consolidation,而不是完整的 agent RL pipeline。

分析与判断

DPO 最有价值的地方不是“一个比 PPO 简单的 loss”,而是它改变了 preference optimization 的拆分方式。传统理解是:先找出 reward,再用 RL 找到高 reward policy;DPO 证明,在 KL-regularized objective 和 Bradley-Terry preference model 下,policy 本身就可以承载那个 reward 的等价表示。

这带来三个直接结果:

  1. 显式 reward model 不再是 policy optimization 的必要中间层;
  2. online rollout 和 value model 不再是离线 preference training 的必要组件;
  3. reference policy 与 beta 仍然保留了“不要脱离原始能力分布太远”的约束。

但 DPO 简化的是优化闭环,不是目标本身。它仍然继承 preference data 的覆盖、标注、reference 和评测问题。换句话说:DPO 让已有 preference data 更容易被模型吸收,却不会自动创造新的偏好信息。

对后续阅读 DPO 及其变体,建议持续追问:

preference pair 是如何获得的?
reference policy 与数据生成 policy 是否一致?
sequence log-prob 如何归一化和 mask?
beta 如何解释和调节?
是否真的优化了 KL-regularized objective?
训练过程中有没有 online exploration?
评测是否只依赖同一个 judge?

相关知识链接