RLHF与偏好优化统一框架:从PPO到DPO、IPO、KTO的数学统一视角
快速掌握原理,拒绝泛泛而谈。全文采用对话式推导,先 toy example 再推广至真实规模。
1 总体定位与知识图谱
1.1 为什么需要统一视角
我们面对的不是四个孤立算法,而是一条连续的光谱。PPO 需要训练奖励模型再调策略,DPO 把奖励模型藏进了策略内部,IPO 质疑 Bradley-Terry 假设本身,KTO 则连配对数据都不再需要。它们共享同一套数学地基,只是对"偏好"这一概念做了不同层次的抽象。
如果我们把偏好优化比作盖楼,PPO 是"先打地基(奖励模型)再盖房(策略)",DPO 发现地基和房梁可以用同一根钢筋浇筑,IPO 换了一种水泥配方,KTO 则直接问住户"你喜欢这面墙吗"而不再比较两间房。这一章我们先搭一张地图,看清各座建筑的位置关系。
1.2 核心问题清单
在深入推导之前,我们先把悬念挂出来:
- 为什么 DPO 可以省掉奖励模型?闭式解从何而来?
- Bradley-Terry 模型中的配分函数 Z(x)Z(x)Z(x) 为什么在 DPO 损失中消失了?
- IPO 说 DPO 会过拟合,它到底改了哪个数学假设?
- KTO 只需要二元反馈,它的损失函数与 DPO 有何代数联系?
- 奖励过度优化为什么表现为"驼峰曲线",KL 散度约束如何充当刹车片?
1.3 知识图谱
现在我们已经了解了知识的全景地图,接下来看看每一块砖是如何砌成的。我们先从一个 toy example 开始,把抽象的公式落地到可触摸的数值上。
2 基础构建:从 toy example 理解偏好建模
2.1 小词表里的偏好世界
2.1.1.1 一个四词表的故事
假设我们的语言模型只有四个词:{我, 喜欢, 猫, 狗}。输入提示 xxx 固定为"我"。模型需要生成后续词,形成完整句子。我们有两个候选响应:
- 优序响应 ywy_wyw:“我喜欢猫”
- 劣序响应 yly_lyl:“我喜欢狗”
人类标注者看了之后,觉得"猫"比"狗"更可爱,于是给出一个偏好判断。问题来了:我们如何用数学描述"猫比狗更受偏爱"这件事?
2.1.1.2 Bradley-Terry 模型的直觉
Bradley-Terry 模型把偏好看成一场赛马。每匹赛马(即每个响应)都有一个隐含的"实力值"。如果"我喜欢猫"的实力值是 r(x,yw)r(x, y_w)r(x,yw),"我喜欢狗"的实力值是 r(x,yl)r(x, y_l)r(x,yl),那么猫跑赢狗的概率为:
p(yw≻yl∣x)=exp(r(x,yw))exp(r(x,yw))+exp(r(x,yl))=σ(r(x,yw)−r(x,yl)) p(y_w \succ y_l \mid x) = \frac{\exp(r(x, y_w))}{\exp(r(x, y_w)) + \exp(r(x, y_l))} = \sigma(r(x, y_w) - r(x, y_l)) p(yw≻yl∣x)=exp(r(x,yw))+exp(r(x,yl))exp(r(x,yw))=σ(r(x,yw)−r(x,yl))
其中 σ\sigmaσ 是 sigmoid 函数。这听起来抽象对吧?把它画成图,会是什么样子?想象两条高度不同的水平线,高度差就是奖励差,sigmoid 把高度差压扁成 0 到 1 之间的概率值。如果猫的实力比狗高 2 分,猫获胜的概率约为 σ(2)≈0.88\sigma(2) \approx 0.88σ(2)≈0.88。
2.1.1.3 从向量到概率
在真实模型中,r(x,y)r(x, y)r(x,y) 不是凭空出现的。我们先定义一个奖励模型 rϕ(x,y)r_\phi(x, y)rϕ(x,y),它把提示和响应的拼接向量映射成一个标量。对于 toy example,假设响应"我喜欢猫"经过 Transformer 后得到二维向量 hw=[1.0,0.5]\mathbf{h}_w = [1.0, 0.5]hw=[1.0,0.5],"我喜欢狗"得到 hl=[0.8,0.3]\mathbf{h}_l = [0.8, 0.3]hl=[0.8,0.3]。奖励模型是一个简单的线性层:
rϕ(x,y)=w⊤h+b r_\phi(x, y) = \mathbf{w}^\top \mathbf{h} + b rϕ(x,y)=w⊤h+b
设 w=[1,1]\mathbf{w} = [1, 1]w=[1,1],b=0b = 0b=0,则 r(x,yw)=1.5r(x, y_w) = 1.5r(x,yw)=1.5,r(x,yl)=1.1r(x, y_l) = 1.1r(x,yl)=1.1。代入 Bradley-Terry 公式,猫胜概率为 σ(0.4)≈0.60\sigma(0.4) \approx 0.60σ(0.4)≈0.60。这就是向量级计算。推广到真实规模时,h\mathbf{h}h 变成最后一层隐藏状态的高维向量,w\mathbf{w}w 变成可学习的投影矩阵,但数学骨架完全一致。
这在训练中使用意味着什么?意味着我们不需要人工指定"猫=10分、狗=5分",而是让人类标注的偏好数据自动教会模型调整 w\mathbf{w}w,使得优序响应的奖励值系统性地高于劣序响应。
2.2 KL 散度的几何直觉
2.2.1.1 两个分布的距离
现在我们已经了解了偏好如何用概率建模,接下来看看 KL 散度如何充当"安全带"。假设策略 πθ\pi_\thetaπθ 在生成下一个词时给出的概率分布是 [0.5,0.3,0.1,0.1][0.5, 0.3, 0.1, 0.1][0.5,0.3,0.1,0.1],参考策略 πref\pi_{\text{ref}}πref(通常是 SFT 后的基础模型)给出的分布是 [0.4,0.4,0.1,0.1][0.4, 0.4, 0.1, 0.1][0.4,0.4,0.1,0.1]。KL 散度衡量这两个分布之间的"信息损耗":
DKL(πθ∥πref)=∑yπθ(y∣x)logπθ(y∣x)πref(y∣x) D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}}) = \sum_y \pi_\theta(y \mid x) \log \frac{\pi_\theta(y \mid x)}{\pi_{\text{ref}}(y \mid x)} DKL(πθ∥πref)=y∑πθ(y∣x)logπref(y∣x)πθ(y∣x)
如果画成图会是什么样子?想象两个形状相似但峰值位置略有偏移的山丘,KL 散度计算的是从一个山丘变形到另一个山丘所需的"工作量"。当两座山完全重合时,KL 散度为零;当一座山的某个峰值在另一座山的谷底时,KL 散度趋向无穷。
2.2.1.2 约束优化的视角
KL 散度在 RLHF 中不是装饰,而是硬约束。我们可以把偏好优化写成带约束的优化问题:
maxπθEx∼D,y∼πθ[r(x,y)]s.t.DKL(πθ∥πref)≤ϵ \max_{\pi_\theta} \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_\theta}[r(x, y)] \quad \text{s.t.} \quad D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}}) \le \epsilon πθmaxEx∼D,y∼πθ[r(x,y)]s.t.DKL(πθ∥πref)≤ϵ
用拉格朗日乘子法,把它变成无约束形式:
maxπθE[r(x,y)]−βDKL(πθ∥πref) \max_{\pi_\theta} \mathbb{E}[r(x, y)] - \beta D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}}) πθmaxE[r(x,y)]−βDKL(πθ∥πref)
其中 β\betaβ 是温度系数,控制我们对参考模型的忠诚程度。β\betaβ 越大,策略越不敢偏离参考模型;β\betaβ 越小,策略越敢于追逐高奖励。这在训练中使用意味着什么?意味着 β\betaβ 是一个旋钮,拧得太松,模型会为了高分而胡说八道(奖励过度优化);拧得太紧,模型会原地踏步,拒绝学习新偏好。
3 RLHF 的完整推导:PPO 阶段
3.1 奖励建模
3.1.1.1 目标函数拆解
在继续之前,我们先回到 Bradley-Terry 模型,把它变成可训练的损失函数。给定数据集 D={(x,yw,yl)}\mathcal{D} = \{(x, y_w, y_l)\}D={(x,yw,yl)},我们希望奖励模型 rϕr_\phirϕ 能正确预测人类偏好。最大似然估计给出:
LR(rϕ,D)=−E(x,yw,yl)∼D[logσ(rϕ(x,yw)−rϕ(x,yl))] \mathcal{L}_R(r_\phi, \mathcal{D}) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma(r_\phi(x, y_w) - r_\phi(x, y_l)) \right] LR(rϕ,D)=−E(x,yw,yl)∼D[logσ(rϕ(x,yw)−rϕ(x,yl))]
这个损失在做什么?当 rϕ(x,yw)−rϕ(x,yl)r_\phi(x, y_w) - r_\phi(x, y_l)rϕ(x,yw)−rϕ(x,yl) 很大时,sigmoid 接近 1,对数接近 0,损失很小;当差值为负时,损失迅速膨胀。模型因此学会拉大优序与劣序响应之间的奖励差距。
3.1.1.2 最优策略的闭式解
奖励模型训练完毕后,我们进入策略优化阶段。核心问题是:在 KL 约束下,什么样的策略 πθ\pi_\thetaπθ 能最大化期望奖励?这是一个泛函极值问题,我们可以用变分法求解。构造目标:
J(π)=Ex∼D,y∼π(y∣x)[r(x,y)]−βDKL(π∥πref) J(\pi) = \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi(y|x)} \left[ r(x, y) \right] - \beta D_{\text{KL}}(\pi \| \pi_{\text{ref}}) J(π)=Ex∼D,y∼π(y∣x)[r(x,y)]−βDKL(π∥πref)
对 π(y∣x)\pi(y|x)π(y∣x) 求导并令其为零。KL 散度展开后,导数涉及 logπ(y∣x)\log \pi(y|x)logπ(y∣x)。设 π∗\pi^*π∗ 为最优策略,经过整理(详见附录推导思路),我们得到惊人的闭式解:
π∗(y∣x)=1Z(x)πref(y∣x)exp(1βr(x,y)) \pi^*(y \mid x) = \frac{1}{Z(x)} \pi_{\text{ref}}(y \mid x) \exp\left(\frac{1}{\beta} r(x, y)\right) π∗(y∣x)=Z(x)1πref(y∣x)exp(β1r(x,y))
其中配分函数 Z(x)=∑yπref(y∣x)exp(1βr(x,y))Z(x) = \sum_y \pi_{\text{ref}}(y \mid x) \exp(\frac{1}{\beta} r(x, y))Z(x)=∑yπref(y∣x)exp(β1r(x,y)) 确保概率归一化。这个公式像什么?想象参考策略是一面平整的镜子,奖励函数是一束光,最优策略就是光在镜子上照射后的亮斑分布——高奖励区域被指数级放大,低奖励区域被指数级压缩,而 β\betaβ 控制光的强度。
3.2 PPO 的近似之路
3.2.1.1 策略梯度回顾
闭式解虽然优美,但配分函数 Z(x)Z(x)Z(x) 需要对全空间求和,对于语言模型而言,yyy 的空间是天文数字,无法精确计算。PPO 选择了一条近似之路。标准策略梯度定理告诉我们:
∇θJ≈E[∇θlogπθ(y∣x)⋅A(x,y)] \nabla_\theta J \approx \mathbb{E} \left[ \nabla_\theta \log \pi_\theta(y|x) \cdot A(x, y) \right] ∇θJ≈E[∇θlogπθ(y∣x)⋅A(x,y)]
其中 A(x,y)A(x, y)A(x,y) 是优势函数,衡量当前动作比平均水平好多少。在 RLHF 中,优势通常由奖励模型输出减去基线值得到。
3.2.1.2 重要性采样与裁剪
PPO 使用重要性采样比率 ρt=πθ(yt∣xt)πold(yt∣xt)\rho_t = \frac{\pi_\theta(y_t|x_t)}{\pi_{\text{old}}(y_t|x_t)}ρt=πold(yt∣xt)πθ(yt∣xt) 来衡量新策略与旧策略的差异。为了防止一步迈得太大,PPO 引入裁剪目标:
LCLIP(θ)=E[min(ρtAt,clip(ρt,1−ϵ,1+ϵ)At)] \mathcal{L}^{\text{CLIP}}(\theta) = \mathbb{E} \left[ \min(\rho_t A_t, \text{clip}(\rho_t, 1-\epsilon, 1+\epsilon) A_t) \right] LCLIP(θ)=E[min(ρtAt,clip(ρt,1−ϵ,1+ϵ)At)]
如果画成图会是什么样子?想象一条轨道,比率 ρt\rho_tρt 在 [1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon][1−ϵ,1+ϵ] 区间内自由滑动,一旦越界,就被天花板或地板截断。这确保了策略每次迭代的更新幅度可控,避免旧策略收集的样本失效。
3.2.1.3 KL 惩罚项的引入
PPO 在 RLHF 中的完整目标通常写作:
LPPO=E[min(ρtAt,clip(ρt)At)]−βE[DKL(πθ∥πref)] \mathcal{L}_{\text{PPO}} = \mathbb{E} \left[ \min(\rho_t A_t, \text{clip}(\rho_t) A_t) \right] - \beta \mathbb{E} \left[ D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}}) \right] LPPO=E[min(ρtAt,clip(ρt)At)]−βE[DKL(πθ∥πref)]
KL 惩罚项在这里以显式正则化形式出现,而非拉格朗日乘子。PPO 因此是一个双层架构:外层是 RL 优化器,内层是奖励模型打分器。这在训练中使用意味着什么?意味着我们需要维护至少三个独立模型(策略、参考、奖励),并且在训练循环中实时采样,计算成本高昂,超参数敏感。
4 DPO:绕过奖励模型的优雅重构
4.1 核心洞察:变量替换
4.1.1.1 从奖励到策略的映射
PPO 的痛点在于配分函数不可解。DPO 的突破口来自一个逆向思考:既然最优策略 π∗\pi^*π∗ 可以用奖励 rrr 表达,那么奖励 rrr 是否也可以用策略 π∗\pi^*π∗ 表达?
对闭式解取对数并整理:
r(x,y)=βlogπ∗(y∣x)πref(y∣x)+βlogZ(x) r(x, y) = \beta \log \frac{\pi^*(y|x)}{\pi_{\text{ref}}(y|x)} + \beta \log Z(x) r(x,y)=βlogπref(y∣x)π∗(y∣x)+βlogZ(x)
这个等式把奖励函数重新参数化为策略与参考策略之间的对数比率,加上一个仅依赖 xxx 的常数项 βlogZ(x)\beta \log Z(x)βlogZ(x)。这像什么?像温度计——我们不需要知道绝对零度在哪里,只需要知道两个物体之间的温差。配分函数 Z(x)Z(x)Z(x) 虽然未知,但它在后续步骤中会神奇地消失。
4.1.1.2 配分函数的消失
现在我们已经了解了从奖励到策略的映射,接下来看看 DPO 如何把这个映射注入 Bradley-Terry 模型。将重参数化后的奖励代入偏好概率:
p∗(yw≻yl∣x)=σ(βlogπ∗(yw∣x)πref(yw∣x)−βlogπ∗(yl∣x)πref(yl∣x)) p^*(y_w \succ y_l | x) = \sigma\left( \beta \log \frac{\pi^*(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log \frac{\pi^*(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) p∗(yw≻yl∣x)=σ(βlogπref(yw∣x)π∗(yw∣x)−βlogπref(yl∣x)π∗(yl∣x))
配分函数 Z(x)Z(x)Z(x) 在哪里?它被隐藏在两个奖励表达式的减法中:
βlogZ(x)−βlogZ(x)=0 \beta \log Z(x) - \beta \log Z(x) = 0 βlogZ(x)−βlogZ(x)=0
这就像两个人站在同一座山的海拔基准线上比较身高,基准线本身被消去了。DPO 因此完全摆脱了对 Z(x)Z(x)Z(x) 的依赖,这是它相比 PPO 的最大简化。
4.1.1.3 二元交叉熵的诞生
有了偏好概率的显式表达,我们可以直接写出最大似然损失。将 π∗\pi^*π∗ 替换为待训练的策略 πθ\pi_\thetaπθ,得到 DPO 损失:
LDPO(πθ;πref)=−E(x,yw,yl)∼D[logσ(βlogπθ(yw∣x)πref(yw∣x)−βlogπθ(yl∣x)πref(yl∣x))] \mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma\left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right] LDPO(πθ;πref)=−E(x,yw,yl)∼D[logσ(βlogπref(yw∣x)πθ(yw∣x)−βlogπref(yl∣x)πθ(yl∣x))]
如果画成图会是什么样子?想象一个跷跷板,一端是优序响应的对数概率比,另一端是劣序响应的对数概率比。DPO 的损失函数不断调整 πθ\pi_\thetaπθ,让跷跷板向优序端倾斜。温度系数 β\betaβ 决定杠杆的力臂长度——β\betaβ 越大,同样概率差带来的损失变化越剧烈。
4.2 梯度流的直观理解
4.2.1.1 动态权重机制
对 DPO 损失求梯度,我们得到:
∇θLDPO=−βE[w⋅(∇θlogπθ(yw∣x)−∇θlogπθ(yl∣x))] \nabla_\theta \mathcal{L}_{\text{DPO}} = -\beta \mathbb{E} \left[ w \cdot \left( \nabla_\theta \log \pi_\theta(y_w|x) - \nabla_\theta \log \pi_\theta(y_l|x) \right) \right] ∇θLDPO=−βE[w⋅(∇θlogπθ(yw∣x)−∇θlogπθ(yl∣x))]
其中权重 w=σ(r^θ(x,yl)−r^θ(x,yw))w = \sigma(\hat{r}_\theta(x, y_l) - \hat{r}_\theta(x, y_w))w=σ(r^θ(x,yl)−r^θ(x,yw)),而 r^θ(x,y)=βlogπθ(y∣x)πref(y∣x)\hat{r}_\theta(x, y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)}r^θ(x,y)=βlogπref(y∣x)πθ(y∣x) 是隐式奖励。这个权重有什么特点?当模型已经很好地分辨优劣时,r^θ(x,yw)≫r^θ(x,yl)\hat{r}_\theta(x, y_w) \gg \hat{r}_\theta(x, y_l)r^θ(x,yw)≫r^θ(x,yl),权重 www 接近 0,梯度自动衰减;当模型困惑时,权重接近 0.5,梯度保持强劲。这是一种自适应学习率机制,难样本获得更多关注,简单样本自动淡出。
4.2.1.2 与 PPO 的等价性
DPO 和 PPO 真的在优化同一个东西吗?答案是肯定的。DPO 损失等价于在 Bradley-Terry 假设下,对以下 RL 目标的精确优化:
maxπθE[r(x,y)]−βDKL(πθ∥πref) \max_{\pi_\theta} \mathbb{E}[r(x,y)] - \beta D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}}) πθmaxE[r(x,y)]−βDKL(πθ∥πref)
区别在于 PPO 用近似梯度(策略梯度 + 裁剪)逐步逼近,而 DPO 利用 Bradley-Terry 的结构特性,把问题转化为静态的二元分类损失,直接求解。这在训练中使用意味着什么?意味着 DPO 不需要在训练循环中采样、不需要维护价值函数、不需要处理重要性比率的方差,它把动态 RL 问题降级为静态监督学习问题,内存占用和代码复杂度大幅下降。
5 统一框架:Psi PO 与 IPO
5.1 从 DPO 到 Psi PO
5.1.1.1 广义偏好优化
DPO 的成功让我们追问:它的推导强依赖于 Bradley-Terry 模型和 sigmoid 函数,如果换一种偏好建模方式,闭式解是否仍然存在?IPO 的论文提出了 Ψ\PsiΨPO 框架,用一个广义函数 Ψ\PsiΨ 替代 sigmoid。
定义广义偏好概率:
p(yw≻yl∣x)=fΨ(Ψ(πθ,x,yw)−Ψ(πθ,x,yl)) p(y_w \succ y_l | x) = f_\Psi(\Psi(\pi_\theta, x, y_w) - \Psi(\pi_\theta, x, y_l)) p(yw≻yl∣x)=fΨ(Ψ(πθ,x,yw)−Ψ(πθ,x,yl))
其中 Ψ\PsiΨ 是从策略到实数的映射,fΨf_\PsifΨ 是联系函数。当 Ψ(π,x,y)=βlogπ(y∣x)πref(y∣x)\Psi(\pi, x, y) = \beta \log \frac{\pi(y|x)}{\pi_{\text{ref}}(y|x)}Ψ(π,x,y)=βlogπref(y∣x)π(y∣x) 且 fΨ=σf_\Psi = \sigmafΨ=σ 时,我们回到 DPO;当 Ψ\PsiΨ 取其他形式时,我们得到不同算法。
5.1.1.2 IPO 的恒等映射
IPO 的核心改动是令 Ψ\PsiΨ 为恒等映射,并直接优化偏好分类的均方误差。IPO 损失定义为:
LIPO=E[(logπθ(yw∣x)πref(yw∣x)−logπθ(yl∣x)πref(yl∣x)−12β)2] \mathcal{L}_{\text{IPO}} = \mathbb{E} \left[ \left( \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} - \frac{1}{2\beta} \right)^2 \right] LIPO=E[(logπref(yw∣x)πθ(yw∣x)−logπref(yl∣x)πθ(yl∣x)−2β1)2]
这个公式像什么?像一根弹簧,两端分别拴住优序和劣序的对数概率比,弹簧的自然长度是 12β\frac{1}{2\beta}2β1。DPO 用交叉熵把弹簧往无穷长拉,IPO 则用均方误差把弹簧拉到固定长度。这避免了 DPO 在多轮训练时,概率比无限制膨胀导致的过拟合问题。
如果画成图会是什么样子?想象 DPO 是一个没有尽头的跑道,模型可以一直加速;IPO 则在跑道尽头设置了一堵软墙,速度越快,撞墙反弹越狠。这在训练中使用意味着什么?意味着 IPO 对超参数 β\betaβ 的敏感度更低,训练曲线更稳定,但收敛速度可能略慢于 DPO。
5.2 无需配对数据的 KTO
5.2.1.1 前景理论的引入
DPO 和 IPO 都需要成对的 (yw,yl)(y_w, y_l)(yw,yl) 数据,标注成本较高。KTO 借鉴了经济学中的前景理论(Prospect Theory),把问题转化为二元反馈:对于单个响应 yyy,人类只回答"好"或"不好"。
前景理论的核心是人类对收益和损失的感知不对称。获得 100 元的快乐,远小于损失 100 元的痛苦。KTO 把这种不对称性编码进损失函数,定义两个阈值:
- λy\lambda_yλy:响应 yyy 是否被人类接受的指示变量
- λref\lambda_{\text{ref}}λref:参考模型生成响应的基准接受率
5.2.1.2 二元反馈的损失重构
KTO 损失对单个样本 (x,y,λy)(x, y, \lambda_y)(x,y,λy) 定义为:
LKTO=λy⋅σ(βlogπθ(y∣x)πref(y∣x)−Dref)+(1−λy)⋅σ(Dref−βlogπθ(y∣x)πref(y∣x)) \mathcal{L}_{\text{KTO}} = \lambda_y \cdot \sigma(\beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)} - D_{\text{ref}}) + (1 - \lambda_y) \cdot \sigma(D_{\text{ref}} - \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)}) LKTO=λy⋅σ(βlogπref(y∣x)πθ(y∣x)−Dref)+(1−λy)⋅σ(Dref−βlogπref(y∣x)πθ(y∣x))
其中 DrefD_{\text{ref}}Dref 是与参考模型相关的常数。这个损失在做什么?当 λy=1\lambda_y = 1λy=1(人类喜欢该响应),它鼓励 πθ\pi_\thetaπθ 的概率比参考模型高;当 λy=0\lambda_y = 0λy=0(人类不喜欢),它惩罚概率比过高。更妙的是,KTO 不需要配对比较,只需要单个响应的二元标签,数据收集成本大幅降低。
这在训练中使用意味着什么?意味着我们可以把任何用户反馈(点赞、点踩)直接扔进训练,不需要为每个提示精心构造 A/B 测试。KTO 在 1B 到 30B 参数的模型上都表现出与 DPO 相当甚至更优的性能,证明了非配对数据的潜力。
6 奖励过度优化与 KL 约束机制
6.1 过度优化的现象
6.1.1.1 奖励模型的天花板
为什么需要 KL 约束?想象一个贪婪的学生,考试目标是"得分最大化"。如果试卷有漏洞,学生可能通过作弊获得高分,而非真正掌握知识。奖励模型就是那个"阅卷老师",它基于人类标注数据训练,本身存在偏差和上限。当策略 πθ\pi_\thetaπθ 为了迎合奖励模型而不断偏离参考模型时,它可能找到奖励模型的盲点——生成高奖励但低质量的文本。这就是 Goodhart 定律在 RLHF 中的体现:当一个指标成为目标时,它就不再是好指标。
6.1.1.2 策略坍缩的曲线
过度优化不是线性恶化,而是呈现"驼峰曲线"。横轴是 KL 散度(偏离参考模型的程度),纵轴是真实人类满意度。在 KL 散度较小时,满意度随优化上升;到达顶点后,继续增大 KL 散度反而导致满意度下降。DPO、IPO、PPO 都观测到这一现象。
如果画成图会是什么样子?想象一条抛物线开口向下,顶点对应最优策略。KL 约束的作用就是把策略的搜索范围限制在顶点左侧的上升段,防止它滑入右侧的下降深渊。
6.2 KL 散度的约束机制
6.2.1.1 拉格朗日视角
从数学上看,带 KL 约束的奖励最大化是一个约束优化问题。拉格朗日函数为:
L(π,β)=E[r(x,y)]−β(DKL(π∥πref)−ϵ) \mathcal{L}(\pi, \beta) = \mathbb{E}[r(x,y)] - \beta (D_{\text{KL}}(\pi \| \pi_{\text{ref}}) - \epsilon) L(π,β)=E[r(x,y)]−β(DKL(π∥πref)−ϵ)
β\betaβ 在这里是拉格朗日乘子,而非人为设定的超参数。最优解满足 KKT 条件:要么 KL 散度恰好等于 ϵ\epsilonϵ(约束紧),要么 β=0\beta = 0β=0(约束松)。在 RLHF 实践中,约束通常是紧的,这意味着策略会充分利用允许的偏离空间,直到触碰到 KL 天花板。
6.2.1.2 自适应温度系数
固定 β\betaβ 的问题在于不同样本的"难度"不同。有些偏好对非常明显(例如礼貌回复 vs 侮辱性回复),有些则非常微妙(两种都合理的写作风格)。β\betaβ-DPO 和 ϵ\epsilonϵ-DPO 提出自适应策略:根据每个样本的隐式奖励差距动态调整 β\betaβ。
具体地,对于每个偏好对,计算当前模型的困惑度:
Δ=r^θ(x,yw)−r^θ(x,yl) \Delta = \hat{r}_\theta(x, y_w) - \hat{r}_\theta(x, y_l) Δ=r^θ(x,yw)−r^θ(x,yl)
如果 Δ\DeltaΔ 很小(模型困惑),降低 β\betaβ 允许更大探索;如果 Δ\DeltaΔ 很大(模型自信),提高 β\betaβ 收紧约束。这在训练中使用意味着什么?意味着 KL 惩罚不再是全局固定的铁律,而是每个样本的弹性安全带,难样本松一点,简单样本紧一点,整体训练更平滑。
7 架构设计与实现
7.1 总体结构图
7.2 模块设计图
7.2.1.1 PPO 模块
7.2.1.2 DPO 模块
7.2.1.3 IPO 模块
7.2.1.4 KTO 模块
7.3 协同设计图
7.4 接口对接图
7.5 三层架构总览图
8 算法伪代码
8.1 PPO 伪代码
procedure PPO_TRAIN(prompts, ref_model, init_policy, beta, epsilon, epochs)
policy ← init_policy
value_net ← INITIALIZE_VALUE_NETWORK()
reward_model ← LOAD_REWARD_MODEL()
for epoch = 1 to epochs do
trajectories ← ∅
for each x in prompts do
y ← SAMPLE(policy, x)
r ← reward_model(x, y)
log_prob ← LOG_PROBABILITY(policy, x, y)
log_prob_ref ← LOG_PROBABILITY(ref_model, x, y)
trajectories ← trajectories ∪ {(x, y, r, log_prob, log_prob_ref)}
end
advantages ← COMPUTE_GAE(trajectories, value_net)
for each batch in trajectories do
ratio ← exp(LOG_PROBABILITY(policy, x, y) - log_prob_old)
clipped ← CLIP(ratio, 1 - epsilon, 1 + epsilon)
surrogate ← MIN(ratio * advantage, clipped * advantage)
kl_penalty ← beta * KL_DIVERGENCE(policy, ref_model, x)
loss ← -MEAN(surrogate) + MEAN(kl_penalty)
GRADIENT_DESCENT(policy, loss)
GRADIENT_DESCENT(value_net, VALUE_LOSS(trajectories))
end
end
return policy
end
8.2 DPO 伪代码
procedure DPO_TRAIN(preference_data, ref_model, init_policy, beta, epochs)
policy ← init_policy
for epoch = 1 to epochs do
for each (x, y_w, y_l) in preference_data do
pi_w ← LOG_PROBABILITY(policy, x, y_w)
pi_l ← LOG_PROBABILITY(policy, x, y_l)
ref_w ← LOG_PROBABILITY(ref_model, x, y_w)
ref_l ← LOG_PROBABILITY(ref_model, x, y_l)
ratio_w ← pi_w - ref_w
ratio_l ← pi_l - ref_l
implicit_reward_w ← beta * ratio_w
implicit_reward_l ← beta * ratio_l
logits ← implicit_reward_w - implicit_reward_l
loss ← -LOG(SIGMOID(logits))
GRADIENT_DESCENT(policy, loss)
end
end
return policy
end
8.3 IPO 伪代码
procedure IPO_TRAIN(preference_data, ref_model, init_policy, beta, epochs)
policy ← init_policy
target ← 1 / (2 * beta)
for epoch = 1 to epochs do
for each (x, y_w, y_l) in preference_data do
ratio_w ← LOG_PROBABILITY(policy, x, y_w) - LOG_PROBABILITY(ref_model, x, y_w)
ratio_l ← LOG_PROBABILITY(policy, x, y_l) - LOG_PROBABILITY(ref_model, x, y_l)
gap ← ratio_w - ratio_l
loss ← (gap - target)^2
GRADIENT_DESCENT(policy, loss)
end
end
return policy
end
8.4 KTO 伪代码
procedure KTO_TRAIN(binary_data, ref_model, init_policy, beta, D_ref, epochs)
policy ← init_policy
for epoch = 1 to epochs do
for each (x, y, lambda_y) in binary_data do
ratio ← LOG_PROBABILITY(policy, x, y) - LOG_PROBABILITY(ref_model, x, y)
implicit_r ← beta * ratio
if lambda_y = 1 then
z ← implicit_r - D_ref
else
z ← D_ref - implicit_r
end
loss ← SIGMOID(z)
GRADIENT_DESCENT(policy, loss)
end
end
return policy
end
9 闭环总结
我们从 toy example 的四词表出发,一步步登上了偏好优化的统一理论高地。Bradley-Terry 模型提供了偏好的概率骨架,KL 散度约束提供了安全护栏,闭式解则架起了从奖励到策略的桥梁。PPO 在这条路上选择了近似迭代的策略梯度,DPO 发现了桥梁的精确坐标从而一步跨越,IPO 加固了桥梁的护栏防止过度摇摆,KTO 则把桥梁的设计图简化到只需单向通行。
奖励过度优化是所有方法的共同敌人,它表现为 KL 散度增大后的性能驼峰曲线。理解 KL 约束的拉格朗日本质,以及自适应温度系数的调节机制,是在生产环境中稳定训练的核心。在实际使用中,这意味着我们不再盲目迷信单一算法,而是根据数据形态(配对 vs 二元)、计算预算(多卡 vs 单卡)、稳定性需求(快速收敛 vs 稳健训练)在统一框架内灵活选型。
这条光谱还在继续延伸,但地基已经稳固。
3326



被折叠的 条评论
为什么被折叠?



