第18回 不打擂台也能对齐——DPO / IPO / KTO
不必上台先动拳,纸上胜负也分明。
一张偏好当尺子,几行损失定人心。
上回我们把 RLHF 全流水线摆了出来:
SFT 学人话,RM 立尺子,PPO 调脾气,还拴着 KL 的绳别跑飞。
看官此刻心里多半冒出一个念头:
这也太麻烦了。能不能不练擂台(不跑 PPO),
直接拿偏好数据,把模型“训乖”?
于是江湖近年兴起一支“省事派”:
把 RLHF 里的某些环节折叠掉,把“偏好”更直接地写进参数更新。
本回讲三位代表:
- DPO:把“奖励+KL 约束”的最优策略,化成一个分类损失
- IPO:在更一般的理论框架里,选“恒等变换”得到另一种稳定的偏好优化
- KTO:连“成对偏好”都不要,只要“好/不好”的二值信号
一、先把大图记牢:它们都在做“离参考别太远的偏好对齐”
不论名字多花,骨头都很像:
- 你有一个参考模型 (通常是 SFT 后)
- 你想学到一个新模型 ,更符合人类偏好
- 但你又不许它乱跑,所以要“靠住参考”
第17回我们用 PPO + KL 约束实现这件事。
本回这三位,则更偏“离线(offline)”:
主要在偏好数据上做优化,不用在训练环里反复采样、跑价值网络、调一堆 PPO 超参。
好处是省事、稳定、便宜;
代价是:你更依赖数据分布本身(数据怎么来,影响就更大)。
二、DPO:把“打擂台”折成“做选择题”
DPO 的主张可以用一句说书话讲明白:
既然 RLHF 的目标是“奖励最大 + 别离参考太远”,
那我就直接让模型在偏好对里更偏向赢家,
同时用参考模型的概率作锚点,别让它漂移。
在一条偏好样本里,我们有:
- 提示词
- 赢的回答 与输的回答
DPO 的训练损失是一个“二分类式”的形状:
把“更喜欢赢家”写成一个 sigmoid 目标。核心差异项是:
你可以把 当作:
- 第一括号:新模型更偏向赢家多少
- 第二括号:参考模型本来就偏向赢家多少
- 相减:只学习“相对参考的改进”,避免把策略推到怪地方
然后把它喂给 sigmoid 做分类损失(常见还乘一个温度/尺度 控制力度)。
DPO 的原始论文给出推导:它等价于某类“带 KL 约束的奖励最大化”目标的闭式解形式,从而绕开显式 RM 与 PPO。1
高二视角怎么记?
你就把 DPO 当作:
把“偏好”变成一堆选择题:同一道题里,A 比 B 好,那就提高 A 的对数概率、压低 B 的对数概率;同时用参考模型当作“标准体重”,别增肥过头。
三、IPO:把偏好学习放进更一般的“ΨPO”框架里
Azar 等人的工作提出一个更一般的视角:
许多“从人类偏好学习”的方法,都可以看作某个统一范式下的特例。
在这个范式里,DPO 只是其中一种选择;而把某个变换取成“恒等(identity)”,可以得到 IPO(Identity Preference Optimization)。2
你现在不需要背它的全套理论,只要记住 IPO 出场的动机:
- DPO 虽省事,但它的最优解与数据采样/参考策略之间的关系,会带来一些微妙的失败情形
- 在更一般的推导里,换一种“变换选择”,能得到更稳健或更可解释的偏好优化目标
说书化一句话:
DPO 像一把快刀,切得快也可能割到手;
IPO 像换了刀背的角度,让这刀在某些地形上更稳。
你会在后续更前沿的工作里看到:
不少论文把 DPO、IPO 当作“离线偏好对齐”的两大基线,然后再在上面做改进或统一。
我们后面讲推理缩放、在线对齐时,还会再次碰到这些名字。
四、KTO:连“成对偏好”都不要,只要“好/不好”
KTO(Kahneman‑Tversky Optimization)更“省事”。
它说:很多场景里,你很难收集“谁比谁好”的成对偏好,
但你能相对容易地拿到一个二值信号:
- 这条输出“可取/不可取”(desirable / undesirable)
KTO 借鉴前景理论(prospect theory)里对人类效用的刻画,把对齐写成对“好/不好”反馈的优化。
它的关键卖点是:不需要偏好对(pairwise preferences),只要二值反馈就能训练,并在多种规模上与偏好方法竞争。3
高二视角怎么记?
你可以把它看成:
- DPO:用“胜负”做监督(相对比较)
- KTO:用“及格/不及格”做监督(绝对判断)
前者信息更细,但数据更贵;后者信息更粗,但更容易收集。
五、极简可跑代码:DPO 与 KTO 的“损失长什么样”
下面用极简 PyTorch 代码,把两种损失的核心形状写出来:
不训练大模型,只演示“如何从 logprob 算出 loss”。
import torch
import torch.nn.functional as F
def dpo_loss(logp_pi_w, logp_pi_l, logp_ref_w, logp_ref_l, beta=0.1):
delta = (logp_pi_w - logp_pi_l) - (logp_ref_w - logp_ref_l)
return -F.logsigmoid(beta * delta).mean()
def kto_loss(logp_pi, logp_ref, label, beta=0.1):
z = beta * (logp_pi - logp_ref)
y = label.float()
return F.binary_cross_entropy_with_logits(z, y)
if __name__ == "__main__":
torch.manual_seed(0)
logp_pi_w = torch.tensor([-1.2, -0.3, -2.0])
logp_pi_l = torch.tensor([-2.1, -1.0, -2.2])
logp_ref_w = torch.tensor([-1.5, -0.4, -1.9])
logp_ref_l = torch.tensor([-1.9, -0.9, -2.1])
print("dpo loss:", float(dpo_loss(logp_pi_w, logp_pi_l, logp_ref_w, logp_ref_l)))
logp_pi = torch.tensor([-0.2, -2.0, -0.7, -1.1])
logp_ref = torch.tensor([-0.5, -1.6, -1.0, -0.9])
label = torch.tensor([1, 0, 1, 0])
print("kto loss:", float(kto_loss(logp_pi, logp_ref, label)))
你看懂这两段,就能把它们放回第17回的大图:
- DPO:把“赢家/输家”当监督信号,用参考模型作锚
- KTO:把“好/不好”当监督信号,同样用参考模型作锚
你也能立刻看出它们的工程甜点:
都不需要在训练环里跑 PPO 的 rollout、也不需要显式价值网络。
六、什么时候用谁:三句江湖口诀
给你三句够用的判断:
- 你能收集到稳定的成对偏好:优先考虑 DPO/IPO 一类
- 你只能拿到“好/不好”标签:KTO 这种二值方法更合适
- 你需要在训练中不断探索、不断改数据分布:还是要回到在线方法(PPO 或其替代)
换句话说:
- 离线法像“读题库”:稳定、便宜,但题库偏了就学偏
- 在线法像“上考场”:能适应新题,但成本高、也更难稳
七、小结:省事派不是偷懒,是把复杂度挪了位置
本回收束成四句话:
- DPO/IPO/KTO 都在做“对齐 + 不离参考太远”的权衡
- DPO 把 RLHF 的一部分折成分类损失:省掉 PPO 的擂台成本
- IPO 提供更一般理论视角下的另一种离线偏好优化选择
- KTO 用二值反馈替代成对偏好:数据更易得,但信息更粗
下一回(第19回)我们要把“对齐”与“推理”真正扣上:
推理缩放、测试时计算,以及为什么“多想一会儿”有时比“多训几轮”更有效。
欲知后事如何,且听下回分解。
幻觉核查
- DPO 论文核对:arXiv:2305.18290(v3: 2024-07-29)可核验标题、作者与“用分类损失替代 RLHF”的主张。1
- IPO 来源核对:arXiv:2310.12036 可核验“统一范式”与“identity 特例”的描述。2
- KTO 论文核对:arXiv:2402.01306 可核验“只需二值信号、不需偏好对”的主张。3
- 本回对 IPO 的解释采取“动机与位置”层面的介绍,不展开完整定理与证明。
逻辑审计
- 与第17回承接:第17回给出 RLHF 三段式,本回逐段说明哪些方法把哪段折叠掉。
- 与第19回铺垫:把“对齐训练的复杂度”暂告一段落,下一回转向“推理时的复杂度”与测试时计算。
- 难度控制:只保留 logprob 差分与 sigmoid 直觉,不引入信息几何与最优控制推导。
引用与溯源
Footnotes
-
Rafailov, R., et al. Direct Preference Optimization: Your Language Model is Secretly a Reward Model arXiv:2305.18290 (2023; v3: 2024-07-29) https://arxiv.org/abs/2305.18290 ↩ ↩2
-
Azar, M. G., et al. A General Theoretical Paradigm to Understand Learning from Human Preferences arXiv:2310.12036 (2023) https://arxiv.org/abs/2310.12036 ↩ ↩2
-
Ethayarajh, K., et al. KTO: Model Alignment as Prospect Theoretic Optimization arXiv:2402.01306 (2024) https://arxiv.org/abs/2402.01306 ↩ ↩2