第18回 不打擂台也能对齐——DPO / IPO / KTO

不必上台先动拳,纸上胜负也分明。
一张偏好当尺子,几行损失定人心。

上回我们把 RLHF 全流水线摆了出来:
SFT 学人话,RM 立尺子,PPO 调脾气,还拴着 KL 的绳别跑飞。
看官此刻心里多半冒出一个念头:

这也太麻烦了。能不能不练擂台(不跑 PPO),
直接拿偏好数据,把模型“训乖”?

于是江湖近年兴起一支“省事派”:
把 RLHF 里的某些环节折叠掉,把“偏好”更直接地写进参数更新。

本回讲三位代表:

  • DPO:把“奖励+KL 约束”的最优策略,化成一个分类损失
  • IPO:在更一般的理论框架里,选“恒等变换”得到另一种稳定的偏好优化
  • KTO:连“成对偏好”都不要,只要“好/不好”的二值信号

一、先把大图记牢:它们都在做“离参考别太远的偏好对齐”

不论名字多花,骨头都很像:

  • 你有一个参考模型 πref\pi_{\text{ref}}(通常是 SFT 后)
  • 你想学到一个新模型 πθ\pi_\theta,更符合人类偏好
  • 但你又不许它乱跑,所以要“靠住参考”

第17回我们用 PPO + KL 约束实现这件事。
本回这三位,则更偏“离线(offline)”:
主要在偏好数据上做优化,不用在训练环里反复采样、跑价值网络、调一堆 PPO 超参。

好处是省事、稳定、便宜;
代价是:你更依赖数据分布本身(数据怎么来,影响就更大)。


二、DPO:把“打擂台”折成“做选择题”

DPO 的主张可以用一句说书话讲明白:

既然 RLHF 的目标是“奖励最大 + 别离参考太远”,
那我就直接让模型在偏好对里更偏向赢家,
同时用参考模型的概率作锚点,别让它漂移。

在一条偏好样本里,我们有:

  • 提示词 xx
  • 赢的回答 ywy_w 与输的回答 yly_l

DPO 的训练损失是一个“二分类式”的形状:
把“更喜欢赢家”写成一个 sigmoid 目标。核心差异项是:

Δ=[logπθ(ywx)logπθ(ylx)][logπref(ywx)logπref(ylx)]\Delta = \left[\log \pi_\theta(y_w\mid x) - \log \pi_\theta(y_l\mid x)\right] - \left[\log \pi_{\text{ref}}(y_w\mid x) - \log \pi_{\text{ref}}(y_l\mid x)\right]

你可以把 Δ\Delta 当作:

  • 第一括号:新模型更偏向赢家多少
  • 第二括号:参考模型本来就偏向赢家多少
  • 相减:只学习“相对参考的改进”,避免把策略推到怪地方

然后把它喂给 sigmoid 做分类损失(常见还乘一个温度/尺度 β\beta 控制力度)。
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、也不需要显式价值网络。


六、什么时候用谁:三句江湖口诀

给你三句够用的判断:

  1. 你能收集到稳定的成对偏好:优先考虑 DPO/IPO 一类
  2. 你只能拿到“好/不好”标签:KTO 这种二值方法更合适
  3. 你需要在训练中不断探索、不断改数据分布:还是要回到在线方法(PPO 或其替代)

换句话说:

  • 离线法像“读题库”:稳定、便宜,但题库偏了就学偏
  • 在线法像“上考场”:能适应新题,但成本高、也更难稳

七、小结:省事派不是偷懒,是把复杂度挪了位置

本回收束成四句话:

  1. DPO/IPO/KTO 都在做“对齐 + 不离参考太远”的权衡
  2. DPO 把 RLHF 的一部分折成分类损失:省掉 PPO 的擂台成本
  3. IPO 提供更一般理论视角下的另一种离线偏好优化选择
  4. 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

  1. 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

  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

  3. Ethayarajh, K., et al. KTO: Model Alignment as Prospect Theoretic Optimization arXiv:2402.01306 (2024) https://arxiv.org/abs/2402.01306 2