AI 基建
0%
第三部分 · 后训练 · 第 20 章

直接偏好优化及其变体

作者Changkun Ou
阅读时长约 9 分钟

对齐流水线里有这样一个反复出现的场景:一支团队有一份静态的偏好样本对文件,每个提示词配一个胜出回复与一个被拒回复,并希望用它训练出一个对齐好的模型。传统做法是 RLHF,而 RLHF 成本高。直接偏好这一条线追问这份成本是否必要,并把整套机制化约为一个分类损失;随后,一组变体在这个损失之上展开。受控比较给出的结果是:没有哪个变体能可靠地胜过它们共同继承的基础 DPO 损失。

一份静态的偏好文件

RLHF(见 第 19 章)分三阶段对齐一个模型:监督微调、拟合人类偏好的奖励模型,然后用 近端策略优化(PPO) 做一次策略梯度训练 (Schulman et al. 2017),在对参考模型的Kullback-Leibler 散度(KL)约束下针对该奖励优化策略。这套机制成本高。PPO 要同时驻留四个模型:策略、一个冻结的参考、奖励模型与评论家;结果又对奖励模型质量以及少数几个脆弱超参数都很敏感。对一份静态偏好样本对而言,问题在于:这整套机制是否必要,偏好信号能不能被直接优化。

关键化简:语言模型隐式地就是一个奖励模型

这一化简依赖关于 RLHF 目标的一个事实。在对参考策略的 KL 惩罚下最大化奖励,

maxπθ  Ex,yπθ[r(x,y)]    βKL ⁣(πθ(x)πref(x)),\max_{\pi_\theta}\; \mathbb{E}_{x,\,y\sim\pi_\theta}\big[r(x,y)\big] \;-\; \beta\, \mathrm{KL}\!\left(\pi_\theta(\cdot\mid x)\,\|\,\pi_{\text{ref}}(\cdot\mid x)\right),

这里 πθ\pi_\theta 是要优化的策略,r(x,y)r(x,y) 是奖励,第一项让策略偏向高奖励回复,KL 项则把它拉回参考策略 πref\pi_{\text{ref}} 附近,β\beta 调节约束强度。这个目标的设计直觉是:奖励会拉着模型改变行为,但 KL 约束防止它为了奖励跑到语言模型分布之外。它存在一个闭式最优策略(也就是说,这个目标所隐含的那个唯一最优策略可以直接写成一个公式,而不必靠搜索去找):它是被指数化奖励重新加权的参考策略,π(yx)πref(yx)exp(r(x,y)/β)\pi^*(y\mid x) \propto \pi_{\text{ref}}(y\mid x)\exp(r(x,y)/\beta)。Rafailov 等把这个关系反转了过来 (Rafailov et al. 2023):用最优策略反解奖励,rr 就写成了一个对数比值,于是任一策略所隐含的奖励为

rθ(x,y)  =  βlogπθ(yx)πref(yx)  +  βlogZ(x).r_\theta(x,y) \;=\; \beta\,\log\frac{\pi_\theta(y\mid x)}{\pi_{\text{ref}}(y\mid x)} \;+\; \beta\log Z(x).

这里 πref\pi_{\text{ref}} 是冻结参考策略,β\beta 是 KL 约束强度,Z(x)Z(x) 是配分项,也就是对模型可能产生的每一个回复求和、把重新加权后的参考策略归一化回一个概率分布的那个量;它只依赖提示词,却难以处理,因为这个和要遍历所有可能的序列,数量太大,根本算不出来。把这个隐式奖励代入成对偏好的 Bradley-Terry 模型,Z(x)Z(x) 会在胜出回复 ywy_w 与被拒回复 yly_l 之间相消。剩下的,是偏好样本对上的一个监督损失,

LDPO=E(x,yw,yl)logσ ⁣(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx)).\mathcal{L}_{\text{DPO}} = -\,\mathbb{E}_{(x,y_w,y_l)}\,\log \sigma\!\left( \beta\log\frac{\pi_\theta(y_w\mid x)}{\pi_{\text{ref}}(y_w\mid x)} - \beta\log\frac{\pi_\theta(y_l\mid x)}{\pi_{\text{ref}}(y_l\mid x)}\right).

这个式子只比较胜出回复与被拒回复各自相对参考策略的对数比值,因此不再需要单独训练奖励模型。

在 KL 惩罚下最大化奖励,让策略贴近一个冻结的参考模型。
这个目标有唯一的闭式最优策略,即被指数化奖励重新加权的参考策略,π* ∝ π_ref · exp(r/β)。
把这个关系反转过来解奖励,奖励就写成 β 乘以策略对参考的对数比值,再加上一项 β log Z(x)。
把这个隐式奖励代入判断哪个回复更被偏好的 Bradley-Terry 模型。
β log Z(x) 这一项对两个回复都一样,于是在胜出回复与被拒回复之间相消,只剩下两者对数比值之差上的一个 log-σ。
奖励模型、评论家、PPO 这套 RLHF 机制都没了,剩下的是一个损失。
图 20.1. 这次化简是从 RLHF 目标到单个分类损失的六步代数变换。可以逐行步进,也可以让它自动播放。

奖励模型与 RL 回路都没了。策略被训练为给被偏好的回复赋予更高的隐式奖励,而隐式奖励就是策略相对于一个冻结参考模型的对数比值,也就是微调后的模型把这个回答变得比冻结的初始模型更可能多少。论文的标题道出了这一点:语言模型隐式地就是一个奖励模型。图 20.2 展示了这次代入所删去的那套机制。

cluster_rlhf RLHF(PPO) cluster_dpo DPO pref1 偏好样本对 rm 奖励模型 拟合偏好 pref1->rm ppo PPO 回路 rm->ppo aligned1 对齐后的策略 ppo->aligned1 pol1 策略 pol1->ppo ref1 冻结参考 ref1->ppo crit 评论家 crit->ppo pref2 偏好样本对 aligned1->pref2 隐式奖励 Z(x) 相消 loss 在隐式奖励差距上的 log-sigmoid 损失 pref2->loss aligned2 对齐后的策略 loss->aligned2 pol2 策略 pol2->loss ref2 冻结参考 ref2->loss
图 20.2. RLHF 在四个模型上运行一个奖励模型与一个 PPO 回路;DPO 把隐式奖励代入 Bradley-Terry 模型,配分项相消,剩下的是偏好样本对上的一个分类损失。据 Rafailov et al.(2023)。

对一个损失的四处改动

有了这个损失之后,后来的每个方法都是对它的一次改动。每个变体都移除原始 DPO 损失中的一个假设,或删掉其中一块机制。图 20.3 列出了每个变体改动了哪一部分。

dpo DPO 对数比值奖励上的 log-sigmoid 成对数据,冻结参考 ipo IPO 有界平方损失 将奖励差距回归 到一个固定目标 dpo->ipo 使目标 有界 kto KTO 非成对好/坏标签 前景理论效用 dpo->kto 去掉 成对数据 orpo ORPO 优势比惩罚 加入 SFT 无参考模型 dpo->orpo 并入 SFT, 去掉参考 simpo SimPO 无参考奖励 按长度归一化 目标边际 dpo->simpo 去掉参考, 归一化长度
图 20.3. 每个变体改动 DPO 损失的某一部分。IPO 把目标变得有界;KTO 去掉成对数据要求;ORPO 把对齐折叠进 SFT 并移除参考;SimPO 移除参考并按长度归一化。

恒等偏好优化(IPO)用平方目标让奖励差距有界。 Azar 等瞄准推导中的一个弱点 (Azar et al. 2023):Bradley-Terry 代入假定偏好能被很好地建模为一个确定性排序,而在有限、近乎确定的数据下,log-sigmoid 损失会驱使策略把隐式奖励差距推向无穷,从而对偏好集过拟合。IPO 用一个有界的平方目标替换 log-sigmoid,把隐式奖励差距回归到一个固定目标,于是即便偏好很干净,最优解也保持有限。图 20.4 对照了这两种损失的形状。

2026-06-22T14:10:27.940976 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ -2 0 2 4 6 8 隐式奖励差(选中减被拒) 0 2 4 6 8 单样本损失 IPO 最优点 保持有限 DPO 继续 拉开奖励差 DPO 对数 S 形损失(无界拉开) IPO 平方损失(目标为 τ)
图 20.4. 有界的 IPO 目标与无界的 DPO log-sigmoid 损失随隐式奖励差距变化的示意图,据 Azar et al.(2023)。log-sigmoid 随差距增大持续下降,故其最优解把差距推向无穷;平方损失在一个固定目标处取得最小值,故其最优解保持有限。

在每种损失下对单个奖励差距跑几步梯度,看着 直接偏好优化(DPO) 的差距无界上升,而 IPO 的差距稳定在它的目标上。

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(z): return 1.0 / (1.0 + np.exp(-z))

beta, lr, target, steps = 1.0, 0.5, 5.0, 60
gd, gi = [0.0], [0.0]
for t in range(steps):
    # DPO 在差距上的梯度永不归零,于是差距持续增大
    gd.append(gd[-1] + lr * beta * sigmoid(-beta * gd[-1]))
    # IPO 把差距回归到一个固定目标,于是它在那里稳定下来
    gi.append(gi[-1] - lr * 2.0 * beta * (beta * gi[-1] - target))
print(f"{steps} 步后的 DPO 差距: {gd[-1]:.2f},仍在上升")
print(f"IPO 差距收敛到目标: {gi[-1]:.2f}")
plt.plot(gd, label="DPO log-sigmoid"); plt.plot(gi, label="IPO 有界")
plt.axhline(target, ls="--", c="gray"); plt.xlabel("步数"); plt.ylabel("隐式奖励差距")
plt.legend(); plt.show()

Kahneman-Tversky 优化(KTO)改从好/坏标签学习,去掉成对数据要求。 DPO 需要同一个提示词下的一个胜出回复与一个被拒回复;KTO 则从非成对的二元好/坏标签中学习,用一个前景理论效用把每条回复对照一个参考点打分 (Ethayarajh et al. 2024),正是 Kahneman 与 Tversky 所用的那种「人对收益与损失的价值」形态。这是拿一个效用模型换下成对数据约束,其要紧之处在于:点赞与点踩的日志,远比精选样本对丰富。

优势比偏好优化(ORPO)用优势比惩罚把对齐折叠进 SFT。 它不设带参考模型的单独对齐阶段,而是由 Hong 等给 SFT 交叉熵加上一个优势比惩罚 (Hong et al. 2024)(SFT 阶段本身见 第 17 章),于是一次训练既教会格式,又压低被拒回复的权重。它完全不携带参考模型。

简单偏好优化(SimPO)移除参考,并把奖励按长度归一化。 Meng 等从隐式奖励中去掉参考策略 (Meng et al. 2024),用一条序列的平均对数概率作为奖励,并加上胜出与被拒之间的一个目标边际。长度归一化是其刻意之处:DPO 的对数比值奖励与序列长度相关,这让策略能靠变得更啰嗦来抬高分数,而除以长度便移除了这一路径。图 20.5 展示了两种奖励下,奖励随回复长度的变化。

2026-06-22T14:10:28.303769 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 50 100 150 200 250 300 回答长度(词元) 0 1 2 3 4 5 6 隐式奖励(理想化单位) 冗长会抬高 DPO 分数 DPO 对数比奖励(随长度增长) SimPO 长度归一化奖励(平坦)
图 20.5. SimPO 的长度归一化如何把隐式奖励对回复长度抹平的示意图,据 Meng et al.(2024)。DPO 的对数比值奖励把逐词元项求和,因而随长度增长,策略可借变啰嗦加以利用;按长度归一化的 SimPO 奖励是逐词元平均,保持平直。

受控比较

表面上,这四处改动像一架不断改进的阶梯,每个变体都修补了上一个所遗漏的。一项受控比较瓦解了这种读法。

争议所在

这些变体通常被呈现为一架不断改进的阶梯,但一项受控的多尺度研究(arXiv:2603.19335)发现,一旦校正了混杂因素,没有任何一个变体能可靠地胜过基础 DPO。当调参预算、数据与模型被持平时,各方法之间的差距缩进了噪声之中,而表观排名会随模型尺度发生反转:在某一尺寸领先的变体,到另一尺寸却落后。务实的读法是,一个新目标所报告的胜出,往往反映的是一次调得更好的基线对变体比较,而非该损失的某种属性;这些方法之间该选哪个,应由流水线与数据约束来定,而不是由所声称的精度优势来定。

如果精度无法把这些变体区分开,就要看别的因素;真正起决定作用的,通常是流水线与数据的形状。

真正决定取舍的是什么

精度优势既已消失,真正起作用的,就是这些变体据以彼此权衡的那些工程维度。其中四条反复出现。

  • 有参考模型与无参考模型。 保留冻结参考(DPO、IPO)会锚定策略,并让 KL 约束有意义,代价是多一个常驻模型与一次前向传播。去掉它(ORPO、SimPO)把对齐阶段的内存减半并简化流水线,但移除了那个限制偏离起始策略的显式锚点。
  • 成对数据与非成对数据。 DPO、IPO、ORPO 与 SimPO 都需要每个提示词一个胜出回复与一个被拒回复。KTO 接受非成对的二元信号,这契合生产环境的反馈日志,却以一个效用模型替换了其余方法所优化的成对比较。
  • 有界目标与无界目标。 IPO 的有界回归抵抗 DPO 的 log-sigmoid 在干净、近乎确定的偏好上所招致的过拟合。代价是损失不再精确匹配 Bradley-Terry,且要设定一个目标边际。
  • 两阶段与单阶段。 ORPO 把对齐并入 SFT,省下一个阶段与一个参考模型,代价是把格式学习与偏好学习纠缠在一起,使它们再也无法被分别调参或审计。

这四条轴线中的第一条,不只是一个建模选择,它是被自下而上地强加的。

下层约束

第 10 章 的内存预算会向上影响损失设计。DPO 与 IPO 让一个冻结参考模型与策略一同常驻,并在每一步对它多付一次前向传播。在大模型尺寸下,这翻倍的占用正是 ORPO(无参考)与 SimPO(无参考)要消除的成本。无参考设计首先并不是一个精度主张,而是对「持有两个模型」这一系统成本的回应。

运行起来

DPO 是这个家族里运行起来最小的:一个损失、一份作为参考的冻结 SFT 模型副本,以及一个静态的偏好三元组文件。其核心是 log-sigmoid 内部的对数比值之差,由策略与参考下胜出与被拒回复的逐词元对数概率算出;损失的推导参见 DPO loss, Rafailov et al. (arXiv:2305.18290), Sec. 4 (Rafailov et al. 2023)。由于参考从不更新,参考前向传播可以一次性预先计算,这是标准的内存优化。

整个家族中唯一要紧的超参数是 β\beta,即同时缩放隐式奖励的那个 KL 约束强度。太小则策略偏离参考并退化;太大则它几乎不动。由于基础 DPO 是离策略(off-policy)的,是在一份固定数据上训练、而非用来自实时策略的样本,它的上限就是那份固定数据,常见的补救是迭代或在线 DPO,在各轮之间用当前模型重新生成样本对。那个同策略变体,以及它所逼近的更广义的 RLHF 机制,都留到 第 19 章 再谈。

延伸阅读

  • Rafailov et al., “Direct Preference Optimization: Your Language Model is Secretly a Reward Model” (DPO), 2023. arXiv:2305.18290
    DPO 用简单的二元交叉熵损失替代基于人类反馈的强化学习(RLHF)中的显式奖励模型与强化学习循环,直接从人类偏好数据中提取最优策略。
  • Azar et al., “A General Theoretical Paradigm to Understand Learning from Human Preferences” (IPO), 2023. arXiv:2310.12036
    本文提出 ΨPO 通用偏好优化目标,将 RLHF 与 DPO 统一为特例,并推导出 IPO 以绕过 Bradley-Terry 假设从而避免过拟合。
  • Ethayarajh et al., “KTO: Model Alignment as Prospect Theoretic Optimization,” 2024. arXiv:2402.01306
    KTO 基于 Kahneman-Tversky 前景理论提出对齐目标,仅需二元可取性信号而非偏好对,在 1B 到 30B 参数规模上与 DPO 持平或更优。
  • Hong et al., “ORPO: Monolithic Preference Optimization without Reference Model,” 2024. arXiv:2403.07691
    ORPO 是一种单体偏好对齐算法,通过在监督微调(SFT)损失中附加优势比惩罚项,将 SFT 与偏好优化合并为单步训练,无需参考模型。
  • Meng et al., “SimPO: Simple Preference Optimization with a Reference-Free Reward,” 2024. arXiv:2405.14734
    SimPO 用长度归一化的平均对数概率替代 DPO 的参考模型奖励,并引入目标奖励间隔,无需参考模型,在 Arena-Hard 上比 DPO 最多提升 7.5 个百分点。
  • Schulman et al., “Proximal Policy Optimization Algorithms” (PPO), 2017. arXiv:1707.06347
    PPO 提出裁剪代理目标函数,使策略梯度强化学习在仅用一阶优化的条件下达到 TRPO 的可靠性,并具备更优的样本复杂度。

评论

登录后评论