返回首页
笔记2026-02-2220 min

后 DPO 时代的百家争鸣:如何优雅地给大模型“立规矩

各大顶级实验室爆改 DPO出了一套极其华丽的招式表

后 DPO 时代的百家争鸣:如何优雅地给大模型“立规矩”?

在探讨今天的主角们之前,如果你对大模型对齐的“上古时代”(PPO)以及“白银时代”(DPO 和 GRPO)的底层数学推导还不太熟悉,我强烈推荐你先花几分钟阅读这篇极其硬核且通透的博客:👉 人类偏好的刻度:PPO、DPO 与 GRPO 极简拆解

正如那篇博客中所极其优雅地推导的那样,DPO(Direct Preference Optimization,直接偏好优化) 是大模型对齐史上的一次“降维打击”。它通过 Bradley-Terry 偏好模型,巧妙地将极其复杂的强化学习(RL)奖励函数,反向重参数化为了语言模型的隐含概率分布。简单来说,DPO 让我们彻底扔掉了 PPO 那一套沉重的架构,只需要拿着数据对跑分类损失,就能让模型学会人类的偏好。

但当把 DPO 真正投入到生产环境的炼丹炉后,算法工程师们遭遇了严重的“水土不服”:模型严重过拟合、疯狂水字数(Length Hack)、吃显存、以及真实场景下凑不齐“配对数据”。为了解决这些痛点,各大顶级实验室爆改出了一套极其华丽的招式表。

今天就来硬核拆解DPO的各大改法,看看它们是在什么动机下诞生的,又在数学上动了什么手脚。

贯穿全文的直观比喻: 假设 Prompt 是“什么是黑洞?”

ywy_w (好回答 / Win):“黑洞是时空展现出极端引力的区域,其引力强大到连光都无法逃逸。”(科学、准确、简练)

yly_l (坏回答 / Lose):“它是宇宙里一个黑乎乎的、非常可怕的超级大洞,会把周围所有的行星和小行星都吃掉……”(不严谨、废话连篇)


1. IPO (Identity Preference Optimization):专治“钻牛角尖”与过拟合

  • Motivation (核心动机):DPO 使用的 Sigmoid 交叉熵损失具有“贪婪”的特性——只要好回答的概率没有达到 100%,坏回答的概率没有降到 0%,梯度就会一直推着模型走。这会导致模型在有限的偏好数据上严重过拟合,最终生成高度确定性的文本,丧失了语言模型本该有的创造力和多样性。

解法:IPO 极其硬核地抛弃了 Sigmoid,换成了均方误差(MSE)

LIPO=(logπθ(ywx)πref(ywx)logπθ(ylx)πref(ylx)12τ)2\mathcal{L}_{\text{IPO}} = \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\tau} \right)^2

深度解析: 公式最后的常数项 12τ\frac{1}{2\tau} 是神来之笔。IPO 在告诉模型:“对于‘黑洞’这个问题,你不需要把 ywy_w 的概率推到无限大,只要好坏回答的隐含奖励差值刚好等于 12τ\frac{1}{2\tau},损失就降为 0,梯度就停止更新了!” 这种“知足常乐”的策略硬性停止了过度优化,保住了模型的生成多样性。


2. KTO (Kahneman-Tversky Optimization):行为经济学的跨界降维打击

  • Motivation (核心动机):DPO 及其大多数变种,都死死绑定了一个工程前提——数据必须是严格配对的(Paired)。但在真实的业务日志里,我们往往只能收集到孤立的反馈:用户给严谨的回答点了个赞 👍,或者给废话连篇的回答踩了一脚 👎。为了打破“凑不齐 (yw,yl)(y_w, y_l) 对就没法训练”的僵局,KTO 应运而生。

解法:KTO 引入了诺贝尔经济学奖得主提出的前景理论(Prospect Theory)(即人类对损失比对获得更敏感),把成对的损失函数直接拆成了独立的两半。

LKTO=λwσ(βlogπθ(ywx)πref(ywx)zref)+λlσ(zrefβlogπθ(ylx)πref(ylx))\mathcal{L}_{\text{KTO}} = -\lambda_w \sigma \left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - z_{\text{ref}} \right) + \lambda_l \sigma \left( z_{\text{ref}} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) (其中动态基线 zref=E(x,y)D[βKL(πθ(yx)πref(yx))]z_{\text{ref}} = \mathbb{E}_{(x,y)\sim \mathcal{D}} \left[ \beta \text{KL} (\pi_\theta(y|x) \parallel \pi_{\text{ref}}(y|x)) \right])

深度解析: 拿到点赞(ywy_w),走左边公式:只需让当前回答的隐式奖励超越大盘的平均表现(zrefz_{\text{ref}})即可。拿到踩(yly_l),走右边公式:配合人类的“损失厌恶”,权重 λl\lambda_l 设得比较大,狠狠打压这个不严谨回答的生成概率。这彻底解放了数据收集的门槛。


3. ORPO (Odds Ratio Preference Optimization):“指令微调+偏好对齐”一勺烩

  • Motivation (核心动机):标准的大模型生产流水线极度繁琐:必须先做 SFT(指令微调),再做 DPO(偏好对齐),分为两步。此外,DPO 必须在显存里额外挂载一个冻结的 Reference 模型(πref\pi_{\text{ref}}),这吃掉了海量显存,极大地限制了训练的 Batch Size 和效率。ORPO 的动机就是极简——能不能一次性把两步干完,且不需要 Reference 模型?

解法:ORPO 直接把偏好对齐融合到 SFT 阶段,并且一脚踢开了 Reference 模型

LORPO=logpθ(ywx)λlogσ(logpθ(ywx)1pθ(ywx)logpθ(ylx)1pθ(ylx))\mathcal{L}_{\text{ORPO}} = -\log p_\theta(y_w|x) - \lambda \log \sigma \left( \log \frac{p_\theta(y_w|x)}{1 - p_\theta(y_w|x)} - \log \frac{p_\theta(y_l|x)}{1 - p_\theta(y_l|x)} \right) (注:pθ(yx)p_\theta(y|x) 是按长度归一化后的概率)

深度解析: 左半边的 logpθ(ywx)-\log p_\theta(y_w|x) 是标准的 SFT 负对数似然损失,保证模型学会基本的科普表达;右半边则使用统计学中的比值比(Odds Ratio),通过对比好坏回答的发生几率,直接在模型内部拉开概率鸿沟,将显存和时间成本压缩到了极致。


4. R-DPO 与 SimPO:绞杀“废话文学”

  • Motivation (核心动机):自回归语言模型存在天然的 长度偏置(Length Bias)——生成的句子越长,积累的隐式 Reward 往往越高。这就导致模型在解释“黑洞”时,极其容易为了迎合 DPO 拿高分,而瞎编出 500 字毫无信息量的科幻废话。我们需要一种机制来惩罚啰嗦。

解法 1:R-DPO (Length-Regularized DPO) 简单粗暴,在隐式奖励的差值最后,硬扣掉一个“长度差”惩罚。 LR-DPO=logσ(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx)(αywαyl))\mathcal{L}_{\text{R-DPO}} = -\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)} - (\alpha|y_w| - \alpha|y_l|) \right) 你敢比科学定义多写 100 个字的废话,我就敢在你的奖励里扣掉 α×100\alpha \times 100 的税。

解法 2:SimPO (Simple Preference Optimization) 除了防啰嗦,SimPO 进一步继承了 ORPO 的动机,干掉了 Reference 模型,并引入了长度归一化和硬性间隔(Margin γ\gamma)。 LSimPO=logσ(βywlogπθ(ywx)βyllogπθ(ylx)γ)\mathcal{L}_{\text{SimPO}} = -\log \sigma \left( \frac{\beta}{|y_w|} \log \pi_\theta(y_w|x) - \frac{\beta}{|y_l|} \log \pi_\theta(y_l|x) - \gamma \right) 除以 y|y| 计算出平均每个 Token 的对数概率,彻底抹平长句子的天然优势。


5. P3O (Pairwise PPO):重塑 Online RL 的相对评价体系

P3O 训练流程图

在离线(Offline)对齐算法神仙打架的同时,伯克利 BAIR 实验室在 2023 年提出了一项直击 PPO 灵魂的在线强化学习算法:P3O (Pairwise Proximal Policy Optimization)

  • Motivation (核心动机):PPO 存在一个致命的逻辑割裂:奖励模型(RM)是通过“比较”数据(A 比 B 好)训练出来的,但 PPO 却强行要求 RM 在强化学习阶段给出“绝对分数”(A 得 5 分,B 得 2 分)。一旦 RM 发生平移偏移(比如给所有回答无脑加 100 分),即便相对好坏没变,PPO 的梯度也会彻底崩溃,盲目推高所有生成概率。既然 RM 是比出来的,那 RL 为什么不直接用**相对反馈(Relative Feedback)**来训练?

解法:成对策略梯度(Pairwise Policy Gradient) P3O 在线对同一个 Prompt 生成两个回答(y1,y2y_1, y_2),并将传统 PPO 的目标替换为基于奖励差值 r(y1)r(y2)r(y_1) - r(y_2) 的更新。

它完美结合了:

  1. 相对反馈:只看差值,彻底免疫 RM 分数的无脑平移。
  2. PPO 的安全带:保留了重要性采样(Importance Sampling)和截断(Clipping)机制,保证在线更新不崩溃。

结果:在 KL-Reward 前沿边界(同等偏离度下榨取更高奖励)上,P3O 远超 PPO。更重要的是,它克服了 DPO 极易因为过拟合导致的 GPT-4 盲测胜率滑铁卢,展现了 Online RL 强大的真实对齐与探索能力。


6. Step-DPO:多轮对话的“立规矩”

深入长逻辑推理链的“外科手术”Motivation (核心动机):当我们让大模型做复杂的数学题或长逻辑推理时,传统的 DPO 显得极其粗暴。假设模型写了 10 步推导,前 9 步都完美无缺,仅仅在最后一步算错了一个小数点。传统的 DPO 会把这整段回答直接打上 yly_l(坏回答)的标签。这导致模型根本不知道自己究竟错在哪,甚至可能会“矫枉过正”,把原本正确的前 9 步推理思路也给忘掉。面对这种场景,我们需要一种细粒度的过程监督(Process Supervision)。

解法:Step-DPO 放弃了对完整回答的“整体打包”评估,而是将对齐的颗粒度下沉到了中间推理步骤(Step)。它专门揪出大模型犯错的“第一个错误步骤”,进行步骤级别的局部偏好优化。 LStep-DPO=logσ(βlogπθ(swx,s<k)πref(swx,s<k)βlogπθ(slx,s<k)πref(slx,s<k))\mathcal{L}_{\text{Step-DPO}} = -\log \sigma \left( \beta \log \frac{\pi_\theta(s_w|x, s_{<k})}{\pi_{\text{ref}}(s_w|x, s_{<k})} - \beta \log \frac{\pi_\theta(s_l|x, s_{<k})}{\pi_{\text{ref}}(s_l|x, s_{<k})} \right)

其中 xx 是用户问题,s<ks_{<k} 是前面 k1k-1 步完全正确的推理前缀,sws_w 是当前步骤的正确推导,sls_l 是当前步骤的错误推导

深度解析 :我们继续用“黑洞”举例。假设 Prompt 变成了硬核的物理计算:“计算一个质量为太阳 10 倍的黑洞的史瓦西半径。”前面的步骤 s<ks_{<k}(写出公式 R=2GM/c2R = 2GM/c^2、解析引力常数)模型都写对了。突然到了代入数据的第 3 步:sws_w (好步骤 / Win):“将数据代入,得到 R=2×6.67×1011×(10×1.989×1030)/(3×108)229.5 kmR = 2 \times 6.67 \times 10^{-11} \times (10 \times 1.989 \times 10^{30}) / (3 \times 10^8)^2 \approx 29.5 \text{ km}sls_l (坏步骤 / Lose):“将数据代入,得到 R=2×6.67×1011×10/(3×108)2R = 2 \times 6.67 \times 10^{-11} \times 10 / (3 \times 10^8)^2 \dots”(漏掉了太阳质量的转换)Step-DPO 的逻辑是告诉模型:“前面两步你做得很好,保持住(将它们作为 Context 条件),但我现在要专门针对第 3 步给你立规矩——在这个上下文中,生成 sws_w 的概率必须远大于生成 sls_l 的概率。” 这种精准的外科手术式打击,不误伤正确的逻辑链,极大地提升了模型在复杂数学推理上的上限。


7. NCA (Noise Contrastive Alignment):“从相对比烂”到“绝对求真”Motivation

标准 DPO 有一个巨大的盲区——它只在乎相对好坏,而忽略了绝对质量。假设面对“什么是黑洞?”这个问题,模型生成的 ywy_wyly_l 都是彻头彻尾的废话(比如一个是“黑洞是黑色的”,另一个是“黑洞是洞”)。DPO 依然会强行拉高前者的概率,踩低后者的概率。这种“相对比烂”的逻辑会导致模型整体的生成概率分布发生畸变(Likelihood Underdetermination)。,我们需要引入真实标量奖励,或者干脆引入大量的“噪声”来做对比。

解法:NCA(及其多样本变种 InfoNCA)借鉴了经典的**噪声对比估计(NCE)**思想。它不再拘泥于“一对一”的单挑,而是把对齐变成了一个“大海捞针”的多分类任务:在 1 个绝对的好回答和 K1K-1 个来自预训练模型的“次优噪声”中,精准识别出那个“真理”。LNCA=logexp(βlogπθ(ywx)πref(ywx))i=1Kexp(βlogπθ(yix)πref(yix))\mathcal{L}_{\text{NCA}} = - \log \frac{\exp\left(\beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)}\right)}{\sum_{i=1}^K \exp\left(\beta \log \frac{\pi_\theta(y_i|x)}{\pi_{\text{ref}}(y_i|x)}\right)}(其中 y1yKy_1 \dots y_K 是包含完美回答 ywy_w 和多个次优噪声样本 ynoisey_{\text{noise}} 的集合)

深度解析:想象一下,对于“黑洞”的定义,我们放进 1 个完美的科学解释,外加 4 个预训练模型瞎编的废话。NCA 的公式本质上是一个 Softmax 交叉熵。它强制要求模型:你不仅要觉得完美解释比某一句废话好,你给完美解释分配的隐式奖励(即 πθ/πref\pi_\theta / \pi_{\text{ref}} 的比值),必须在所有候选样本中占据绝对的统治地位。这种全局对比的视角,极大地缓解了 DPO 盲目打压绝对概率的顽疾。


8. PRO (Preference Ranking Optimization):榨干每一滴排序数据的价值Motivation

在真实的大厂业务中,数据标注团队往往不会只给出一个 Win/Lose 对,而是会对模型生成的 4 个或 8 个回答给出一个完整的排序(Rankings):y1y2y3y4y_1 \succ y_2 \succ y_3 \succ y_4。传统的 DPO 遇到这种数据简直是暴殄天物——它通常只能掐头去尾,拿最好的 y1y_1 和最差的 y4y_4 凑一对来训练,中间花大价钱标注的细微排序信息全扔了。如何能把一整条 Ranking 链条吃干榨净?

解法:PRO 硬核地将成对的 Bradley-Terry 模型,推广到了任意长度的序列排序模型(Plackett-Luce 模型)。它的逻辑是**“降维打击+逐级擂台”**。LPRO=k=1n1logexp(rθ(x,yk))i=knexp(rθ(x,yi))\mathcal{L}_{\text{PRO}} = \sum_{k=1}^{n-1} -\log \frac{\exp(r_\theta(x, y_k))}{\sum_{i=k}^n \exp(r_\theta(x, y_i))}(其中隐式奖励 rθ(x,y)=βlogπθ(yx)πref(yx)r_\theta(x, y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)},且 y1y2yny_1 \succ y_2 \succ \dots \succ y_n)

深度解析:还是以“黑洞”为例,标注员给出了 4 个梯队的回答:y1y_1 (专家级) y2\succ y_2 (维基百科级) y3\succ y_3 (口水话) y4\succ y_4 (严重幻觉)。PRO 会在内部打三场擂台赛:

  • 第一场 (k=1k=1):让 y1y_1 去单挑 {y1,y2,y3,y4}\{y_1, y_2, y_3, y_4\} 整个集合,要求 y1y_1 的奖励占比最大。
  • 第二场 (k=2k=2):把第一名拿走,让 y2y_2 去单挑剩下的 {y2,y3,y4}\{y_2, y_3, y_4\}
  • 第三场 (k=3k=3):让 y3y_3 单挑 {y3,y4}\{y_3, y_4\}。所有的对数损失加起来求和。 PRO 就像一个极其严苛的导师,逼着模型不仅要知道满分长什么样,还要清楚 80 分比 60 分好在哪,60 分又比 20 分好在哪,实现了对偏好空间极高分辨率的建模。

终极速查表:Objective Functions 大赏

为了方便算法工程师们对照推导,我将上述算法的优化目标(Objective)与核心优势整理成了如下表格:

MethodObjective核心优势
DPOlogσ(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx))- \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)基石算法:将强化学习降维为分类任务,稳定高效。
IPO(logπθ(ywx)πref(ywx)logπθ(ylx)πref(ylx)12τ)2\left( \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\text{ref}}(y_w \mid x)} - \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)} - \frac{1}{2\tau} \right)^2防过拟合:改用 MSE 损失,防止概率推向极端,保有多样性。
KTOλwσ(βlogπθ(ywx)πref(ywx)zref)+λlσ(zrefβlogπθ(ylx)πref(ylx))-\lambda_w \sigma \left( \beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\text{ref}}(y_w \mid x)} - z_{\text{ref}} \right) + \lambda_l \sigma \left( z_{\text{ref}} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)} \right) <br> (其中 zref=E[βKL(πθ(yx)πref(yx))]z_{\text{ref}} = \mathbb{E} \left[ \beta \text{KL} (\pi_\theta(y \mid x) \parallel \pi_{\text{ref}}(y \mid x)) \right])数据解放:好坏样本解耦计算,支持使用不成对(孤立的赞/踩)数据。
ORPOlogpθ(ywx)λlogσ(logpθ(ywx)1pθ(ywx)logpθ(ylx)1pθ(ylx))-\log p_\theta(y_w \mid x) - \lambda \log \sigma \left( \log \frac{p_\theta(y_w \mid x)}{1 - p_\theta(y_w \mid x)} - \log \frac{p_\theta(y_l \mid x)}{1 - p_\theta(y_l \mid x)} \right) <br> (其中 pθ(yx)=exp(1ylogπθ(yx))p_\theta(y \mid x) = \exp \left( \frac{1}{\vert y \vert} \log \pi_\theta(y \mid x) \right))极致轻量:无 Reference 模型,SFT 与偏好对齐一次性搞定。
R-DPOlogσ(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx)(αywαyl))- \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)} - (\alpha \vert y_w \vert - \alpha \vert y_l \vert) \right)防废话:直接在目标函数中对“长度差”进行收税。
SimPOlogσ(βywlogπθ(ywx)βyllogπθ(ylx)γ)- \log \sigma \left( \frac{\beta}{\vert y_w \vert} \log \pi_\theta(y_w \mid x) - \frac{\beta}{\vert y_l \vert} \log \pi_\theta(y_l \mid x) - \gamma \right)省显存+防废话:无 Reference 模型,引入长度归一化与硬性 Margin。
P3OGradient(r(y1x)r(y2x))(logπθ(y1x)πθ(y2x))/2\text{Gradient} \propto \left(r(y_1 \mid x)-r(y_2 \mid x)\right)\nabla\left(\log\frac{\pi_\theta(y_1 \mid x)}{\pi_\theta(y_2 \mid x)}\right)/2免疫平移+在线探索:解决绝对奖励带来的尺度平移问题,保留探索上限。
Step-DPOlogσ(βlogπθ(swx,s<k)πref(swx,s<k)βlogπθ(slx,s<k)πref(slx,s<k))-\log \sigma \left( \beta \log \frac{\pi_\theta(s_w \mid x, s_{<k})}{\pi_{\text{ref}}(s_w \mid x, s_{<k})} - \beta \log \frac{\pi_\theta(s_l \mid x, s_{<k})}{\pi_{\text{ref}}(s_l \mid x, s_{<k})} \right)多轮对话:支持多轮对话,引入对话历史 s<ks_{<k}
NCAlogexp(βlogπθ(ywx)πref(ywx))i=1Kexp(βlogπθ(yix)πref(yix))-\log \frac{\exp\left(\beta \log \frac{\pi_\theta(y_w \mid x)}{\pi_{\text{ref}}(y_w \mid x)}\right)}{\sum_{i=1}^K \exp\left(\beta \log \frac{\pi_\theta(y_i \mid x)}{\pi_{\text{ref}}(y_i \mid x)}\right)}绝对质量感知:基于噪声对比估计,突破成对比较的局限,缓解模型整体似然概率下降的问题。
PROk=1n1logexp(rθ(x,yk))i=knexp(rθ(x,yi))\sum_{k=1}^{n-1} -\log \frac{\exp(r_\theta(x, y_k))}{\sum_{i=k}^n \exp(r_\theta(x, y_i))}榨干排序数据:将成对偏好推广至任意长度的序列排序,通过逐级对比,充分利用中间梯度的质量标注信息。

大模型对齐的算法没有银弹,只有最适合你当前算力预算、数据质量与任务类型的“趁手兵器”。

评论区

0 条评论

仅订阅用户可发表评论。使用订阅邮箱登录后可评论。

还没有评论,来抢沙发。