Direct Preference Optimization: Your Language Model is Secretly a Reward Model
基本信息
- 标题:Direct Preference Optimization: Your Language Model is Secretly a Reward Model
- 作者:Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, Chelsea Finn
- 发表:arXiv:2305.18290;NeurIPS 2023
- 日期:2023-05
- 相关主题:DPO、RLHF、Reward Model、PPO、KL Divergence
研究问题
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。这类方法容易产生两个问题:
- 它没有明确控制 policy 相对 reference model 的偏移;
- 它没有根据当前 policy 对 preference pair 的错误程度调整样本权重。
如果所有 pair 都被同等力度训练,模型可能过度拟合容易样本,也可能快速降低 rejected response 的概率,导致分布退化。DPO 希望保留 preference learning 的直接性,同时引入由 KL-regularized RL 推导出的动态权重和 reference constraint。
核心主张
论文的核心主张可以概括为以下几条:
- 可以从 KL-constrained reward maximization 得到最优 policy 的闭式表达。
- Bradley-Terry preference model 中的 partition function 会在 reward difference 中抵消。 因此不需要显式计算不可 tractable 的 。
- 通过变量替换,可以直接对 policy 优化 preference likelihood。 得到的 DPO loss 是一个 binary cross-entropy / logistic classification loss。
- DPO 不需要显式 reward model、在线 RL rollout 或 value model。 训练阶段只需要 preference pairs、policy 和冻结的 reference policy。
- DPO 的 policy 隐式定义了一个 reward model。 这个 implicit reward 是 policy 相对于 reference policy 的 log-probability ratio。
- 实验中 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 项有三个作用:
- 防止 policy 过度偏离 reward model 训练分布;
- 维持原始 language modeling 能力和生成多样性;
- 降低 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 为:
梯度包含两层含义:
- 提高 chosen completion 的 log-prob;
- 降低 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,并证明:
- 同一 reward class 诱导相同的 Plackett-Luce / Bradley-Terry preference distribution;
- 同一 reward class 在 KL-constrained RL 中诱导相同的 optimal policy;
- 在 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 如下:
| Algorithm | Temperature 0 | Temperature 0.25 |
|---|---|---|
| DPO | 0.36 | 0.31 |
| PPO | 0.26 | 0.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 RLHF | DPO |
|---|---|---|
| Preference data | chosen/rejected | chosen/rejected |
| Explicit reward model | 需要 | 不需要,policy 隐式表示 reward |
| Online rollout during optimization | 需要 | 不需要 |
| Value model / advantage | 通常需要 | 不需要 |
| Training form | policy gradient + clipped objective | logistic classification loss |
| Exploration | 可以在线探索 | 受 offline preference data 限制 |
| Engineering cost | 高 | 相对低 |
| Distribution adaptation | 可通过新 rollout 更新 | 依赖固定数据覆盖 |
DPO 简化了 policy optimization,但不是所有 RLHF 场景的替代品。如果目标需要在线探索、环境交互、verifier reward 或持续发现 policy 新错误,PPO/GRPO 等 RL 方法仍有优势。
局限与疑问
- 理论等价性依赖目标形式。 DPO 对应的是特定的 KL-regularized reward maximization;改变 divergence、sequence-level constraint 或 reward structure 后,loss 不一定保持同样的闭式关系。
- Reference model 很重要。 reference 过弱、与 preference data 生成 policy 不匹配,或已经带有不理想偏好,都会影响 implicit reward 和优化结果。
- 离线数据覆盖有限。 DPO 不会像 online PPO 那样主动采样当前 policy 的新错误,无法凭空修正 preference dataset 没覆盖的行为。
- Preference data 仍然可能被过度优化。 DPO 去掉 explicit RM,不等于消除了 reward over-optimization;policy 仍可能过拟合标注模式、长度、格式或数据集偏差。
- Sequence log-prob 有长度和 tokenization 影响。 chosen/rejected 长度差异、EOS 处理、response truncation 和平均/求和方式都会改变 preference margin。
- 不是无关紧要的温度参数。 它同时影响 reference constraint、梯度尺度和 loss saturation,需要结合 KL、胜率和生成质量调节。
- 实验规模有限。 论文主要验证 GPT-2-large、GPT-J(6B)和 Pythia-2.8B 级别模型,没有证明在更大规模 LLM 上必然保持同样优势。
- 自动评估存在 prompt sensitivity。 GPT-4 judge 与人类判断总体一致,但 judge prompt 会影响结果,且可能偏好更长、更重复的输出。
- DPO 不解决 preference aggregation。 多个标注者的冲突、不同用户群体的价值差异、chosen/rejected 的上下文完整性仍需要在数据层解决。
- 对长程 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 的等价表示。
这带来三个直接结果:
- 显式 reward model 不再是 policy optimization 的必要中间层;
- online rollout 和 value model 不再是离线 preference training 的必要组件;
- 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?