把方向判别换回"原配":LLM 强化学习里被忽略的一致性漏洞
你有没有过这种感觉:明明改了 A,结果 A 跟 B 还在用同一套"默契"在工作?这种"半新半旧"的改造在工程里特别常见,LLM 强化学习的信任域(trust region)就是个典型。
PPO 在 2017 年提出时,信任域是用采样 token 的重要性比(importance ratio)来定义的——简单说就是"新策略在这个 token 上比旧策略的概率大了还是小了"。这套机制里有两个判断: - proximity(距离):新策略离旧策略够不够近? - direction(方向):这一步会把它推得更远还是拉回来?
两个判断都是看那个重要性比。
后来大家发现,光看一个 token 的比值根本代表不了 LLM 的整体分布漂移,于是 DPPO(Qi et al., 2026)就改了一刀:把 proximity 判据从单 token 重要性比换成了整个分布的散度(用 top-K KL 估计)。这一步是对的,因为信任域本来就是一个"分布层面的距离"。
但问题来了——direction 判据还停留在 PPO 那一套。它继续看着那个单 token 的重要性比。
这就是这篇论文(arXiv:2607.10848)要戳穿的漏洞:当你把信任域的"距离"换成了散度,那"方向"也应该用散度来量,不能再用单 token 比值混搭着用了。
核心摘要
痛点:DPPO 把信任域的距离判据升级成了散度(top-K KL),但方向判据仍然沿用 PPO 的单 token 重要性比。两个判据不再来自同一个"尺子",会出现符号打架的情况——单 token 比值告诉你"往外推",但散度实际在"往回收"。
方案:用散度自身的一阶方向导数(directional derivative)作为方向判据,作者称之为 predictive divergence mask(PDM)。对于 softmax 策略,这个一阶变化有干净的闭式解,而且可以拆成一个"局部项"(恰好就是 PPO 的比值判据)和一个"全局项"(softmax 归一化耦合产生的,单 token 看不到)。再加上两个轻量的 top-K 估计器(aggregated-tail 和 uniform-tail)来适配线上推理只暴露 top-K 概率的现实。
关键效果:在 Qwen3-4B/8B/30B-A3B 三个 base 模型、FP8 E2E 和 FP8 Rollout 两种精度设置下,PDM 全面稳定优于 DPPO-TopK-KL 和 GRPO clip-higher。50 个种子的 token 级分析显示:方向判别与真实散度变化的对齐度更好(不安全保留率 36.9% → 34.2%,收敛更新占比 62.9% → 65.1%)。
评价:方法本身不大——一阶展开加两个轻量估计器,没有新的超参,没有额外的反向传播——但定位精准。它把"戴在信任域上的方向眼镜"换成了和信任域同源的那副,其实就是补上了 DPPO 没做完的一致性收尾。如果你正在做 LLM RL 的工程,这是一篇值得花 30 分钟读细节的论文。
论文信息
- 标题:Predictive Divergence Masks for LLM RL
- 作者:Xiangxin Zhou, Jiarui Yao, Penghui Qi, Bowen Ping, Jiaqi Tang, Haonan Wang, Tianyu Pang
- 机构:Tencent Hunyuan / UIUC / NUS
- 链接:https://arxiv.org/abs/2607.10848
- 日期:2026 年 7 月 12 日 v1
信任域的两副"眼镜"是怎么分工的
在 PPO 里,mask 决定一个 token 的梯度该不该被砍掉。它其实是两个判断的合取:
| 判据 | 问的问题 | PPO 的回答 | DPPO 的回答 |
|---|---|---|---|
| Proximity(距离) | 这个 token 离旧策略"够近"吗? | 重要性比 \(r = \pi_\theta(a)/\pi_{\text{old}}(a)\) 是否在 \([1-\epsilon, 1+\epsilon]\) | top-K KL 散度 \(D_{\text{KL}}\) 是否超过阈值 \(\delta\) |
| Direction(方向) | 这步更新会把它推得更远还是拉回来? | \(r\) 是不是在远离 1(\(\text{sign}(r-1) \cdot A\)) | 跟 PPO 一样,沿用 \(r\) |
PPO 时代,这两副眼镜用的是同一面镜子(重要性比),所以结论一致:重要性比远离 1,说明既超出了信任域,又会被推得更远。
但 DPPO 把 proximity 换成了散度。这个散度是聚合整个词表的分布差异算出来的,它跟单 token 的重要性比不再是一回事。举个最直觉的例子:
假设当前 token 重要性比 \(r = 1.1\)(略微上升),但因为 softmax 的归一化效应,模型把概率从其他 200 个 token 大量转移到了这个采样 token 上——整个 top-K KL 散度其实在下降。这时候: - PPO 的方向判据会说"往外推,mask 掉" - 但真实的散度其实在收缩,根本不需要 mask
这就是不一致的具体场景。在 LLM 这种词表动辄 10 万+的场景下,softmax 归一化的"全局耦合"效应是不能忽略的。
DPPO 的做法在直觉上有点别扭:一边用散度这种分布层面的统计量来定义信任域,一边又用单 token 采样来判方向。这就像你量体温用额温枪,决定要不要吃药却用手指头感觉——两套度量不在一个体系里。
怎么修:散度的方向导数自己回答自己
作者的思路非常干脆:方向判据应该和 proximity 用同一把尺子。既然 proximity 已经在用散度了,那方向就用散度的一阶方向导数来回答"下一步会让散度涨还是跌"。
具体来说,对一个 softmax 策略 \(\pi_\theta\),token 处的 surrogate 梯度(对 logits)是:
其中 \(a\) 是采样 token,\(A\) 是 advantage。沿这个方向走一小步,\(\pi_\theta\) 会变成 \(\pi_{\theta'}\)。把这个代进 top-K KL 散度,做一阶泰勒展开,符号由第一项决定。
关键命题(Proposition 1):对于 softmax 策略,散度沿策略梯度方向的方向导数可以写成
这个公式最值钱的地方在于它能拆成两项:
- local term:就是 \((\pi_\theta(a) - \pi_{\text{old}}(a))^2\),跟 PPO 的方向判据的符号一致——重要性比离 1 越远,它的绝对值越大。
- global term:聚合 top-K 词表里所有 token 的"概率加权差"。这一项单 token 采样根本看不到,因为它体现的是 softmax 归一化让其他 token 概率如何变化。
如果只看 local term,就是 PPO/DPPO 现在的做法。PDM 把两项都算上,得到的方向判据是 \(\text{sign}(\Delta D)\)。
作者还指出一个有意思的视角:global term 改变了判据的决策只在特定情况下发生——当"当前策略的概率加权平均 gap"和"采样 token 的 gap"方向相反时,中心化会跨过零线。论文的 Eq. (15) 给出了精确条件:
这个不对等集合就是 PDM 和 PPO 方向判据唯一分歧的地方。其他大多数 token 上,两种判据是同意的。
现实约束:推理引擎只给你 top-K 概率
工程上的现实是:线上 rollout 引擎(vLLM、SGLang 这类)通常只保留 top-K 个 token 的概率和尾部累积质量,不会把 10 万 + 的词表全推回训练端。PDM 要在闭式解里算全局项,必须想办法估计没看到的那部分。
作者给了两个轻量估计器:
Aggregated-tail(聚合尾):把 top-K 之外的所有 token 概率全部聚合成一个"伪 token",质量等于尾部累积质量 \(m_{\text{tail}}\)。简单粗暴,但可能会高估尾部对 global term 的贡献。
Uniform-tail(均匀尾):把尾部质量平均摊到 \(V - K\) 个未观察 token 上(\(V\) 是词表大小)。尾部项会被 \(\frac{1}{V-K}\) 抑制,因为 \(V - K\) 通常是 \(10^5\) 量级,这部分贡献基本可以忽略。
两者的差是:
因为 \(V - K\) 通常很大(10 万+),这个差距主要取决于 top-K 捕获了多少概率质量。当 top-K 抓住了大部分 mass 时,两个估计器基本等价。这也解释了为什么 Figure 1 里红色和紫色两条曲线在训练过程中基本重叠——估计器的选择对结果不敏感。
更妙的是,这两个估计器都不需要额外的 forward/backward pass,只要 rollout 返回的 top-K 概率和尾部质量就够了。论文里特别强调:不需要做有限差分近似,不需要二阶信息,只是对已经手头的数字做一次简单聚合。这个工程友好度对实际部署很重要。
主实验:4 个模型 × 2 个精度,PDM 全面稳定
实验设置: - 训练数据:DAPO-Math-17k 过滤版(约 13k 样本) - 评测:AIME24 + AIME25,avg@16 - 模型:Qwen3-4B-Base / Qwen3-8B-Base / Qwen3-30B-A3B-Base - 30B 模型额外跑两种精度:FP8 E2E(全程 FP8)和 FP8 Rollout(只 rollout 用 FP8) - 框架:VeRL,4 节点 × 8 卡 H20(共 32 卡) - 主设置 \(K = 20\)、\(\delta = 0.5\);阈值敏感度测试 \(\delta = 0.05\)

图 1:四个模型设置下的评测准确率(avg@16,AIME24 与 AIME25 平均)。灰色 GRPO clip-higher 在 30B 上直接崩盘;绿色 DPPO-TopK-KL 稳定但被红/紫(PDM 的两个估计器)持续压一头。
Figure 1 里的几条信息很清晰:
- GRPO clip-higher 不稳定:在 Qwen3-4B/8B 上波动大,在两个 30B-A3B 设置里直接掉到接近 0 准确率。这跟 30B 模型的 MoE 架构和 FP8 数值噪声放大有关——ratio clipping 对数值扰动太敏感了。
- DPPO-TopK-KL 稳但有改进空间:作为 baseline,它在所有 4 个设置里都稳住了,但提升曲线在 200 步之后趋于平缓。
- PDM(红、紫)持续领先:在 4B 上 PDM 把 DPPO 从 ~0.21 拉到 ~0.23(+2 pp);在 8B 上从 ~0.27 拉到 ~0.30(+3 pp);30B 的两个精度设置里提升也更稳定,没有出现 ratio-based 方法容易看到的训练中段塌陷。
- aggregated-tail 和 uniform-tail 几乎一致:红紫两条曲线全程纠缠,符合公式 (12) 的预测。
作者还特别强调,主对比的消融面其实只有方向判据一项——proximity 判据(top-K KL,\(\delta=0.5\))对所有 divergence-based 方法都相同。所以 Figure 1 的差距可以干净地归因到"用 ratio 还是用散度来判断方向"。
在更紧的阈值 \(\delta=0.05\) 下,所有方法都变差(信任域太紧),但 PDM 仍然比 DPPO-TopK-KL 稳——这说明它对 trust region 超参的选择更鲁棒。
机制分析:方向判据到底和散度变化有多对齐?
主实验是端到端的训练曲线,但作者还做了一组token 级别的因果性分析——这是这篇论文最值得细看的地方。
设定:在 50 个独立 seed 上,每个 seed 跑 50 步更新,对每个已经超出信任域的 token,比较"两种方向判据做出相反决策"的那一小撮 token(disagreement tokens),然后看在真实一步更新之后,散度到底涨了还是跌了。
如果判据说"mask 掉",但散度其实跌了——这是好的 mask 决策(避免误杀)。 如果判据说"保留",但散度涨了——这是 unsafe keep,错的决策。 如果判据说"保留",散度确实跌了——这是 corrective keep,对的决策。

图 3:左边 (a) 平均不安全保留率——比值判据 36.9%,散度判据 34.2%,差 2.7 个百分点。右边 (b) 每个 seed 的配对比较,蓝线(散度判据更好)数量明显多于红线(比值判据更好),平均值线呈现下降趋势。
具体数字: - 不安全保留率(unsafe-keep rate):比值判据 36.9% vs 散度判据 34.2%,降 2.7 个百分点。 - 50 个 seed 中,大多数 seed 上散度判据的 unsafe-keep rate 更低(Figure 3b 的蓝线明显多于红线)。

图 4:左边 (a) 保留的 disagreement token 的实际 ΔKL 累积分布函数,绿色阴影区是散度真正收缩的部分。右边 (b) 收敛占比——比值判据 62.9%,散度判据 65.1%,+2.7 个百分点。
Figure 4 给出的是另一个角度的证据:在保留的更新里,散度判据让散度真正收缩的比例(65.1%)比比值判据(62.9%)高 2.7 个百分点。
这两个 2.7 pp 是同一个硬币的两面——unsafe-keep 率降多少,corrective-keep 率就涨多少。作者强调:Figure 3 是 per-seed 平均,Figure 4 是把所有 seed 的 token 合并后再算比例,所以数字上不会严格互补,是互补的视角。
我读到这一段时反复确认了一下,PDO 的方向判据真的和散度的真实变化更对齐——这不是一个有水分的"指标博弈",而是有清晰的因果机制在背后。
不过我得诚实说一句:这个差距虽然方向正确、机制清楚,但绝对值只有 2.7 pp。这是个"小而美"的改进,不是一个"暴力提升"。对于已经在生产环境里跑 LLM RL 的同学,预期应该是"在已稳定的训练上加一点点稳健性"而不是"突然把所有问题都解决"。
一些冷静的批判
读完之后我有几个保留意见:
1. "first-order 近似"是个真实限制
论文自己也在 Remark 3 里点出了:预测的散度变化是一阶展开,但真实的参数更新会聚合 batch 里所有 token 的梯度,一个 token 感受到的实际更新可能受到其他 token 梯度的相互影响。论文的 mask 是token 局部的——只看这个 token 自己的 ΔD,不看其他 token。所以理论上仍然有不一致的可能。
实际影响大不大?作者没明确给数据,但 4 个主实验里训练曲线一直稳定,没有出现"理论上应该炸但实际没炸"的怪异行为。个人判断是:batch 内的 token 交互在 LLM RL 训练里大概率是个二阶效应,但严谨地说,作者应该至少在附录里给个估计。
2. "direction criterion 很重要"这件事的工程意义
论文的隐含命题是:"方向判据的 2.7 pp 提升会反映在端到端训练上。" 这个连接其实没有那么强。Figure 1 里的 PDM 提升幅度,看起来比 2.7 pp 大一些(在 8B 上接近 +3 pp,在 30B 上曲线更平滑但最终分差不多),但没有一篇论文给每个数据点的具体数字。这让"方向判据的改进直接驱动端到端提升"这个 claim 显得有点跳。
更稳的做法是:跑一组"只换方向判据"的端到端对比,把端到端的提升幅度量化出来,附上 error bar。现在 Figure 1 的曲线没看到 confidence band——是不是因为只跑了一个 seed?还是跑了多个但没画出来?这个有点疑问。
3. "DPPO 的方向判据真的不行"这件事,因果链没那么直接
论文的论证是:DPPO 的方向判据是单 token 比值,理论上和散度变化可能符号不一致 → 50 个 seed 上确实观察到 2.7 pp 的不对齐 → 端到端训练里 PDM 略好。
这个链条每一步都是对的,但每一步的强度都不算夸张。理论上不对齐的概率是多少?论文里没明确给数字。2.7 pp 是不小还是不大?取决于你想干什么。端到端的提升能不能反复稳定复现?还需要更多工作来证实。
4. K=20 的设置是不是最优点?
\(K=20\) 是 LLM RL 训练里常用的 top-K 设置(很多论文就这么设),但作者没做 K 的敏感度扫描。如果 \(K=50\) 或 \(K=100\) 时 PDM 的优势消失,那"PDM 在 truncated 场景下特别有用"这个 claim 就要打折扣。
这篇论文适合谁读?
直接相关的同学:在做 LLM RL 训练的工程师,特别是用 PPO/GRPO/DPPO 框架调过训练的。这篇论文给你一个drop-in replacement——你只要把方向判据从 ratio-based 换成 PDM 就行,没有新超参,没有额外前反向,理论上能在你已有的 pipeline 上即插即用。先在你的小模型上验证一下,看看训练稳定性有没有提升,再决定要不要上 30B 跑。
关心方法论的同学:这篇论文展示了一个"小切口一致性修复"如何变成实际的训练改进。核心 insight 是:当一个组件升级了(如 proximity 从 ratio 换到 divergence),依赖它的另一个组件(direction)也要跟着升级,否则会出现隐性的不一致。这种"修一致性"的工作其实在很多 RL 框架里都还有空间。
不那么相关的同学:如果你不在做 LLM RL 后训练,这篇论文的方法可以略读——重点看 Eq. (8) 的 local + global 分解,那个分解本身是个相当漂亮的几何解释。
我自己的判断
这是我最近读到的一篇"小而美"论文的代表。方法精巧、工程负担小、机制讲得清楚,这是它的优点。
但也要承认:
- 主实验没看到 confidence band,对一个宣称 2.7 pp 改进的工作来说,多 seed 复现的证据不够硬。
- token 级分析有 50 个 seed,但端到端训练曲线没标明 seed 数——这两块的统计严格度不太对等。
- "方向判据和散度变化不一致"这个机制虽然漂亮,但实际造成的训练损失到底多大?这个问题论文没正面回答。
如果你让我给一个推荐意见:值得读、值得在小模型上复现、值得放进你的 LLM RL toolbox 作为备选方案。但别把它当成 PPO/GRPO 那种绕不开的工作——它解决的是一个真实但相对小的问题。
收尾
回头看,PPO 时代那两个判据共用同一把尺子的设计其实是合理的——因为它们本来就是同一个量的两个切面。DPPO 把其中一个切面换成了散度,但另一个切面还停留在旧的尺子上,于是就出现了"半个新系统"的尴尬。
PDM 的工作就是把这"半个新系统"补完整。这种一致性收尾的工程价值,往往比它看起来的创新度更高——因为它消除的是隐性的、容易在 scale up 时被 FP8、MoE 之类放大出来的不一致。
下次你再看到某个 RL 框架"半新半旧"的改造,先想想它依赖的组件有没有同步升级。很多时候,论文里没显式讨论的一致性漏洞,正是训练出问题的根因。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我。