DPO 把 RLHF 变成一个离线分类损失,工程上非常诱人。
但 DPO 也带来一组清晰的假设:需要成对偏好,需要 reference model,通常用整段序列 log-prob,且把 SFT 和偏好优化分成阶段。
IPO、KTO、ORPO、SimPO 这些名字看起来像一串“新方法”,本质上是在改 DPO 的不同假设。
这篇文章不按论文发布时间堆概念,而是按四个问题来比较:数据是什么形态、是否需要 reference、如何处理长度偏置、是否要额外训练阶段。
读完你应该能根据手里的数据和工程约束选方法,而不是把方法名当排行榜。
一、先把 DPO 的四个假设摆出来
上一篇 10|DPO 推导过 DPO loss:
\[ \mathcal{L}_{DPO}(\theta)= -\log\sigma\left( \beta\log\frac{\pi_\theta(y_w\mid x)}{\pi_{ref}(y_w\mid x)} - \beta\log\frac{\pi_\theta(y_l\mid x)}{\pi_{ref}(y_l\mid x)} \right) \]
这个式子背后至少有四个工程假设。
第一,数据是成对偏好。
同一个 prompt 下要有 winner \(y_w\) 和 loser \(y_l\)。
如果你只有“这条回答好”或“这条回答坏”的单点标签,DPO 原式没有直接入口。
第二,需要 reference model。
\(\pi_{ref}\) 通常是 SFT 模型的冻结副本。
它把隐式奖励定义为相对 SFT 的 log-ratio。
第三,默认使用序列 log-prob 求和。
长回答因为 token 更多,总 log-prob 往往更负。
这会和偏好标注中的长度偏好纠缠。
第四,训练阶段通常是 SFT 后再做 DPO。
先用正例教模型基本会话格式,再用偏好对调整 winner / loser 边界。
DPO 家族的多数方法都在改这四点中的一两点。
IPO 改的是偏好目标的统计性质。
KTO 改的是数据形态。
ORPO 改的是 reference 与阶段划分。
SimPO 改的是 reference、长度口径和 margin。
二、IPO:把确定性偏好下的过拟合拉回来
IPO 来自 Azar et al. 2023 的 A General Theoretical Paradigm to Understand Learning from Human Preferences。
论文讨论了从偏好学习到策略优化的一般理论框架,并提出 IPO(Identity Preference Optimization)。
DPO 使用的是 logistic / Bradley-Terry 形式。
当偏好标签近似确定性时,logistic loss 会持续推动 margin 变大。
这可能导致模型过度拉开 winner 与 loser 的 log-ratio,即使偏好数据本身含有噪声或有限覆盖。
直观说,DPO 会问:“winner 的隐式奖励是否高于 loser?”
如果高得还不够,就继续推。
IPO 更像问:“winner 与 loser 的差距是否接近一个由偏好强度决定的目标?”
它用平方损失约束 preference gap,而不是让 logistic margin 无限增大。
简化写法可以理解为:
\[ \mathcal{L}_{IPO} = \left(h_\theta(x,y_w,y_l) - c\right)^2 \]
其中 \(htheta\) 是类似 DPO 的 log-ratio 差,\(c\) 是由理论推导给出的目标间隔或偏好变换结果。
不同实现会有不同归一化和常数写法,但核心是“把间隔拉到目标附近”,而不是“只要方向对就继续增大”。
IPO 的适用场景是:偏好数据噪声明显、winner/loser 差距不应被无限放大、或者训练中观察到 DPO 过拟合偏好对。
它的代价是少了一点 DPO 的简单直觉。
你需要更关心目标间隔、数据噪声和 loss scale。
如果偏好数据本来就很干净、负例足够强,DPO 可能已经够用。
如果数据来自自动生成的偏好,IPO 的保守性会更有价值。
三、KTO:没有成对偏好时怎么办
KTO 来自 Ethayarajh et al. 2024 的 KTO: Model Alignment as Prospect Theoretic Optimization。
它解决的现实问题很直接:很多反馈数据不是成对的。
线上用户可能只点了赞或踩。
审核员可能只标了“可接受 / 不可接受”。
日志里可能只有某条回答被采用,而没有同 prompt 下的 rejected answer。
DPO 需要 \((x,y_w,y_l)\)。
KTO 接受的是 \((x,y,z)\),其中 \(z\) 表示这条回答是 desirable 还是 undesirable。
它借用前景理论(prospect theory)的价值函数,把“好样本”和“坏样本”放到相对参考点的收益/损失框架中。
直观上,好样本应该让 policy 相对 reference 更愿意生成。
坏样本应该让 policy 相对 reference 更不愿意生成。
它仍然会用到类似 log-ratio 的量:
\[ \log\frac{\pi_\theta(y\mid x)}{\pi_{ref}(y\mid x)} \]
但训练信号不再来自 winner-loser 的成对差,而来自单条样本的好坏标签和一个价值函数。
这使 KTO 适合反馈稀疏、难以构造成对比较的数据。
例如客服场景里,用户只留下“解决了 / 没解决”。
例如安全审核里,某条回答被标为 harmful,但没有同 prompt 的 harmless 对照。
例如产品日志里,某条回答被复制或继续追问,可以作为弱正/弱负信号。
KTO 的代价也很明显。
单点标签的信息量低于成对偏好。
“好”与“坏”的阈值可能随任务、用户、上下文变化。
如果标签噪声很大,模型会学到混乱的偏好边界。
KTO 不是 DPO 的无条件替代,而是数据形态不满足 DPO 时的工具。
四、ORPO:把 SFT 和偏好惩罚合成一阶段
ORPO 来自 Hong et al. 2024 的 ORPO: Monolithic Preference Optimization without Reference Model。
它观察到常规流程通常是两阶段:先 SFT,再 DPO。
SFT 让模型学会模仿 chosen response。
DPO 再拿 chosen / rejected 做偏好优化。
ORPO 试图把这两件事合到一个目标里。
它的核心由两部分组成。
第一部分是普通的 SFT negative log-likelihood,推高 chosen response 的概率。
第二部分是 odds-ratio preference penalty,拉开 chosen 和 rejected 的 odds。
简化理解:
\[ \mathcal{L}_{ORPO}=\mathcal{L}_{SFT}+\lambda\mathcal{L}_{OR} \]
ORPO 的一个卖点是 reference-free。
它不需要常驻一个冻结的 SFT reference 来计算 log-ratio。
这降低了显存和实现复杂度。
它也把“学会回答格式”和“偏好 chosen”放在同一阶段。
这种设计适合资源有限、希望减少训练阶段、且偏好数据本身就包含高质量 chosen answer 的场景。
但 reference-free 也意味着少了一个清晰的 KL 锚点。
DPO 的 reference 明确告诉模型:相对 SFT 偏移多少。
ORPO 更依赖目标函数本身和 SFT 项维持语言质量。
如果 rejected answer 很弱,ORPO 可能主要退化成 SFT。
如果 chosen answer 风格单一,合并阶段可能强化模板化。
如果你需要严格控制偏离 SFT 的程度,vanilla DPO 的 reference 反而更容易监控。
五、SimPO:参考自由、长度归一化与目标 margin
SimPO 来自 Meng et al. 2024 的 SimPO: Simple Preference Optimization with a Reference-Free Reward。
它针对 DPO 的两个痛点:reference model 成本和序列长度偏置。
DPO 的隐式奖励是:
\[ r_\theta(x,y)=\beta\log\frac{\pi_\theta(y\mid x)}{\pi_{ref}(y\mid x)} \]
SimPO 改成 reference-free 的长度归一化 reward。
直观写法是使用平均 log-prob:
\[ r_\theta(x,y)=\frac{\beta}{|y|}\log\pi_\theta(y\mid x) \]
然后在 winner 与 loser 之间加入目标 reward margin。
简化 loss 可以写成:
\[ \mathcal{L}_{SimPO}=-\log\sigma\left(r_\theta(x,y_w)-r_\theta(x,y_l)-\gamma\right) \]
其中 \(\gamma\) 是目标间隔。
长度归一化试图避免“回答越长,总 log-prob 越低”的机械偏置。
reference-free 则省掉一份冻结模型前向。
目标 margin 让训练不只要求 winner 高于 loser,还要求高出一定距离。
SimPO 的适用场景是:reference 计算成本敏感、数据长度差异明显、希望简化 DPO 训练栈。
它的边界也很清楚。
平均 log-prob 不等于真实质量。
reference-free 失去了相对 SFT 的显式锚点。
margin 需要调参。
如果数据里 winner 系统性更长或更短,长度归一化会缓解但不一定完全消除偏置。
如果模型需要保持强安全边界,缺少 reference KL 的方法要配合更严格评测。
六、四种方法放到同一张表
| 方法 | 数据形态 | 需要 reference model | 长度偏置处理 | 额外阶段 | 主要目标 |
|---|---|---|---|---|---|
| DPO | 成对偏好 \((x,y_w,y_l)\) | 是 | 默认序列 log-prob,需额外处理 | 通常 SFT 后再训 | 用隐式奖励拟合偏好 |
| IPO | 成对偏好 | 是 | 与 DPO 类似,取决于实现 | 通常 SFT 后再训 | 控制 preference gap,缓解确定性偏好过拟合 |
| KTO | 单条 good/bad 标签 | 通常是 | 取决于实现 | 可接在 SFT 后 | 用前景理论式价值函数学习非成对反馈 |
| ORPO | 成对偏好,chosen 可作 SFT | 否 | odds-ratio 项本身不等于长度归一化 | 合并 SFT 与偏好 | 单阶段训练,减少 reference 成本 |
| SimPO | 成对偏好 | 否 | 使用长度归一化隐式奖励 | 通常 SFT 后再训 | reference-free,加入目标 margin |
表里最值得看的不是“谁更先进”,而是哪一列符合你的约束。
如果你没有成对偏好,DPO/IPO/ORPO/SimPO 都要先构造 pair,KTO 更自然。
如果你没有足够显存放 reference,ORPO 或 SimPO 更有吸引力。
如果你的数据长短差异很大,SimPO 的长度归一化值得优先考虑。
如果你担心 DPO 把偏好间隔推得过大,IPO 更值得试。
如果你需要最标准、最容易解释、最接近论文基线的方法,DPO 仍然是起点。
七、按数据条件选方法
第一种情况:你有高质量成对偏好。
例如每个 prompt 都有人工挑选的 chosen 和 rejected,负例来自同等强度模型,长度差异可控。
这时先跑 DPO 是合理基线。
它简单、实现成熟、指标容易解释。
如果 DPO 训练后出现过拟合、偏好 margin 过大或评测回退,再考虑 IPO。
第二种情况:你只有单点反馈。
例如用户点赞、踩、采纳、举报。
强行构造成对数据会引入额外假设:谁和谁配对?同 prompt 是否可比?时间和用户偏好是否一致?
这时 KTO 的数据接口更自然。
但要重视标签校准,因为单点 good/bad 的阈值比 pairwise preference 更不稳定。
第三种情况:你做的是轻量 chat alignment。
数据里 chosen answer 质量高,rejected answer 主要是明显错误或风格差。
工程上希望少一个阶段,少一份 reference 前向。
ORPO 可以作为候选。
但如果需要严格复用已有 SFT 模型做 reference 约束,DPO 更稳。
第四种情况:回答长度差异很明显。
例如长解释与短答案混在一起,或者偏好数据来自不同模板。
DPO 的序列 log-prob 求和会和长度纠缠。
SimPO 的平均 log-prob reward 更贴近“每 token 平均质量”。
但长度归一化不是万能药;仍要监控输出长度分布和任务正确率。
八、按工程约束选方法
如果显存最紧,优先考虑 reference-free 方法。
ORPO 和 SimPO 都能少跑 reference model。
但你要用评测补上 reference 缺失带来的稳定性风险。
如果训练代码要尽量接近 SFT,DPO 和 ORPO 都容易接入。
DPO 需要同时前向 chosen/rejected 的 policy 和 reference。
ORPO 更像在 SFT loss 旁边加一个偏好项。
如果你已经有成熟 DPO pipeline,IPO 的改动通常比切到 KTO/ORPO/SimPO 小。
如果你已经有大量线上二元反馈,KTO 的数据接入成本可能最低。
如果你正在做 RLVR 或在线采样,DPO 家族未必是主线。
这类方法主要利用离线偏好数据。
当奖励可验证且能在线采样时,GRPO/PPO/RLOO 通常更贴近在线任务目标。
九、长度偏置要单独审计
偏好优化里的长度问题很常见。
人类标注员可能偏好更完整的回答。
奖励模型可能把冗长解释当成“更有帮助”。
序列 log-prob 求和又会天然惩罚长文本。
这几个效应方向不一定一致。
DPO 里,winner 如果更长,\(\log\pi_\theta(y_w\mid x)\) 可能因为 token 多而更负。
训练会同时受到偏好标签和概率长度效应拉扯。
ORPO 使用 odds-ratio,也不能自动消除所有长度影响。
SimPO 显式平均化,能处理一部分“总 log-prob 随长度下降”的问题。
但平均 log-prob 可能偏好短而高置信的回答。
所以无论选哪种方法,都应记录:
- chosen / rejected 的长度分布;
- 训练前后输出长度分布;
- 按长度桶切分的 win-rate;
- 不同任务上的简洁性与正确性;
- 拒答、安全类样本的长度变化。
没有这些切分,只看总体偏好分,很容易把长度偏置当成对齐成功。
十、参考模型不是成本问题这么简单
reference model 的直接成本是显存和前向计算。
DPO/IPO/KTO 这类使用 reference 的方法,需要至少计算 reference log-prob。
如果模型很大,这是一笔实在的开销。
但 reference 的价值也不只是“多一个模型”。
它提供了可解释的相对坐标系。
训练后你可以看 policy 相对 SFT 在 chosen 和 rejected 上偏移多少。
你可以把这个偏移和 KL、长度、评测结果联系起来。
reference-free 方法省掉了这个坐标系。
这不一定坏。
如果 SFT 本身质量一般,reference 也可能把模型绑在不理想区域。
如果数据足够好,reference-free 方法可以少一层相对坐标系,更贴近当前偏好目标。
但如果上线要求保守,reference 是重要安全带。
所以“是否需要 reference”不是简单的资源选择,也是风险偏好选择。
十一、一个务实的选择流程
可以按下面顺序做决策。
第一,确认数据形态。
有 pair,先 DPO/IPO/ORPO/SimPO。
没有 pair,优先 KTO,或谨慎构造 pair。
第二,确认 reference 成本。
能承受 reference 前向,DPO 是强基线。
不能承受,考虑 ORPO 或 SimPO。
第三,检查长度差异。
长度差异大,SimPO 或 DPO 加长度控制更值得试。
长度差异小,DPO 的简单性更有优势。
第四,检查偏好噪声。
噪声大或偏好近似确定性但覆盖有限,IPO 可以降低过拟合风险。
噪声小且负例强,DPO 往往足够。
第五,决定是否需要单阶段。
如果 SFT 和偏好数据来自同一批 chosen/rejected,ORPO 的单阶段目标很方便。
如果已有稳定 SFT checkpoint,分阶段 DPO 更容易做消融。
第六,用评测闭环确认。
方法选择不能只看训练 loss。
至少要看偏好评测、任务能力、安全回归、长度分布和人工抽检。
十二、和 GRPO、RLVR 的边界
DPO 家族主要是离线偏好优化。
它擅长从已有偏好数据中学习“哪些回答更像人类想要的”。
它不擅长自己发现新策略。
当任务奖励可验证时,比如数学答案对错、代码单测通过、格式严格判定,在线采样通常更能发挥作用。
这就是下一篇 GRPO 和后续 RLVR 的场景。
GRPO 不训练 critic,而是在同一 prompt 下采样一组回答,用组内相对奖励估计优势。
它保留在线探索,同时降低 PPO 的 critic 成本。
如果你的目标是训练推理模型,而不是只做偏好对齐,DPO 家族通常只是前置或辅助。
例如可以先用 DPO/SimPO 做对话偏好,再用 GRPO/RLVR 训练数学和代码推理。
不要把“免 RL 对齐”误解成“RL 不再需要”。
它们解决的是不同阶段的训练问题。
参考资料
- Mohammad Gheshlaghi Azar, Zhaohan Daniel Guo, Bilal Piot, Remi Munos, Mohammad Rowland, Michal Valko, Daniele Calandriello. 2023. A General Theoretical Paradigm to Understand Learning from Human Preferences. arXiv:2310.12036.
- Kawin Ethayarajh, Winnie Xu, Niklas Muennighoff, Dan Jurafsky, Douwe Kiela. 2024. KTO: Model Alignment as Prospect Theoretic Optimization. arXiv:2402.01306.
- Jiwoo Hong, Noah Lee, James Thorne. 2024. ORPO: Monolithic Preference Optimization without Reference Model. arXiv:2403.07691.
- Yu Meng, Mengzhou Xia, Danqi Chen. 2024. SimPO: Simple Preference Optimization with a Reference-Free Reward. arXiv:2405.14734.
- Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, Chelsea Finn. 2023. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. NeurIPS 2023.
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【强化学习与大模型后训练】10|DPO:把 RLHF 变成一个分类损失
从 KL 正则 RLHF 目标推导 DPO,解释隐式奖励、Bradley-Terry 替换、梯度含义,以及它省掉在线 PPO 的代价。
【强化学习与大模型后训练】01|系列总览:从 RL 到 LLM 后训练的地图
把强化学习到大模型后训练的主线压成一张可阅读地图,区分风格对齐与能力激发,并说明 20 篇文章的依赖关系。
强化学习与大模型后训练
从 MDP、策略梯度、PPO 等强化学习最小必要集出发,系统讲清现代大模型后训练:SFT、奖励模型、RLHF,到 DPO/IPO/KTO/ORPO/SimPO 免 RL 对齐、GRPO,再到 RLVR 可验证奖励、推理模型(o1/R1 范式)、过程奖励、奖励黑客、RL 训练基础设施与评测。全 20 篇深度博客。
【强化学习与大模型后训练】06|后训练全景:SFT → RM → RLHF → 评测
把现代后训练拆成数据、目标函数、采样、奖励和评测组成的系统流水线,说明每一阶段改变模型的哪一部分。