Cliff 阅读笔记:只找第一个错误就够了——用教师模型给 RLVR 做过程监督

笔记日期: 2026-09-08 · 作者: Zhongzhu Zhou 阅读论文: Cliff: Learning Process Rewards from the First Mistake 论文作者: Peixuan Han, Runhui Wang, Ketan Ramaneti, Jie Hao, Gerald Friedland, Chris Kong(亚马逊云科技 AWS;伊利诺伊大学香槟分校) arXiv: 2609.02817 · 状态: arXiv 预印本,2026 年 9 月 2 日提交

为什么要读这篇论文

如果你用 GRPO 或 PPO 在数学/代码任务上训练过 LLM,你大概已经体会过结果导向奖励(outcome reward)最让人恼火的一个特性:一个 20 步推理里对了 19 步、最后一行符号写反的 rollout,和一个从第一个 token 就完全错误的 rollout,得到的分数是完全一样的——都是零。两者的每一个 token,无论对错,都被同样力度地往下压。策略梯度根本区分不了”这个模型不擅长算术”和”这个模型什么都不擅长”。这是巨大的信号浪费,也正是这篇论文的切入点。

Cliff 的答案出人意料地简单:用一个教师 LLM 找出一个 rollout 第一次出错的地方(论文称为 Pitfall Step,“陷阱步”),给这个点之前的 token 一个不那么严厉(甚至略微正向)的 advantage,给这个点之后的 token 维持原本的惩罚。不需要训练新的奖励模型,不需要逐步打分,每个 rollout 只需要一个二元切分点。论文的核心主张是:这一刀已经够了——你不需要密集的、逐 token 的过程奖励,就能拿到过程监督带来的大部分好处。

为什么值得再读一篇 RLVR 奖励塑形论文?因为这篇论文的框架异常干净。大多数过程监督工作要么 (a) 训练一个完全独立的模型专门给推理步骤打分,代价高昂且容易脆弱,要么 (b) 要求教师和学生是近亲(共享分词器、推理风格相近),这就排除了最自然的应用场景——“便宜的开源模型向昂贵的前沿模型学习”。Cliff 同时绕开了这两个限制,只向教师索要它能可靠提供的、成本最低的一条信息——不是分数,不是分布,只是”这里从哪开始错的”——并证明这个极简信号,只要被正确转化成 advantage,就能捕捉到密集过程监督本应带来的大部分好处。

前置知识

在深入方法之前,先把背景铺垫扎实,因为 Cliff 就是直接建立在这些概念之上的。

一页讲清 RLVR 和 GRPO

可验证奖励强化学习(RLVR) 是目前教 LLM 做推理的默认方案:从策略采样一个 rollout,用真实答案的自动验证器检查最终结果(框中的数字对不对?代码是否通过全部测试用例?),用这个二元或近似二元的奖励更新策略。它之所以能规模化,是因为不需要人工打分——但代价是:每一个中间推理步骤,对奖励函数来说都是不可见的。论文在引言里就点出了这个问题,并给出一个让人印象深刻的例子:一个”几乎完整、只有一个小错误”的解答,会被”和一个彻头彻尾错误的尝试一模一样地惩罚”。

组相对策略优化(GRPO) 解决了 PPO”需要一个价值函数”的问题——它利用了 RLVR 天然提供的结构:为同一个问题 qq 采样 NN 个 rollout a1,,aNa_1, \ldots, a_N,用它们奖励的经验均值和标准差作为 baseline 和缩放系数,而不用去学一个 critic。这正是论文公式(2)计算的内容:

Ai,j=R(q,ai)mean[R(q,a1),,R(q,aN)]std[R(q,a1),,R(q,aN)].A_{i,j} = \frac{R(q, a_i) - \text{mean}[R(q, a_1), \ldots, R(q, a_N)]}{\text{std}[R(q, a_1), \ldots, R(q, a_N)]}.

请注意一个关键细节:Ai,jA_{i,j} 不依赖 jj(token 位置)——rollout aia_i 里的每一个 token 都拿到同样的 advantage。GRPO 的完整目标函数(论文公式 1)是:

JGRPO(πθ)=E[1i=1Naii=1Nj=0ai1min{ri,jAi,j,clip(ri,j,1ϵ,1+ϵ)Ai,j}βDKL[πθπref]i,j],\mathcal{J}_{\text{GRPO}}(\pi_\theta) = \mathbb{E}\Big[\frac{1}{\sum_{i=1}^N |a_i|}\sum_{i=1}^N\sum_{j=0}^{|a_i|-1} \min\{r_{i,j}A_{i,j}, \text{clip}(r_{i,j}, 1-\epsilon, 1+\epsilon)A_{i,j}\} - \beta\, D_{KL}[\pi_\theta\|\pi_{\text{ref}}]_{i,j}\Big],

其中 ri,j=πθ(ai,jq,ai,<j)πθold(ai,jq,ai,<j)r_{i,j} = \frac{\pi_\theta(a_{i,j}|q,a_{i,<j})}{\pi_{\theta_{\text{old}}}(a_{i,j}|q,a_{i,<j})} 是标准 PPO 式重要性比。如果你读过我们之前关于 DAPO 或 GSPO 的笔记,这个公式应该很眼熟——Cliff 直接沿用了 DAPO 的 token 级损失聚合方式(用 1iai\frac{1}{\sum_i |a_i|} 归一化,而不是按序列平均)作为自己的基础损失,只改变了 Ai,jA_{i,j} 的计算方式。

为什么过程监督很难,前人试过什么

有两个方向尝试超越这种粗粒度信号:

  1. 过程奖励模型(PRM)。 训练一个独立模型给每一步推理打分。有效,但需要自己的训练数据,容易被奖励攻击(模型学会取悦 PRM 的怪癖而不是真正推理正确),而且换领域就要重新训练。
  2. 在线策略蒸馏(OPD)。 不用结果奖励,而是用教师模型对学生自己 rollout 的逐 token 对数概率作为密集监督信号(本质上是”教师对学生产出的每个 token 有多惊讶”)。这只有在教师和学生共享分词器、且推理风格相近时才好用——这就排除了用一个大得多的前沿模型作为小型开源学生模型的教师这类场景,除非再做额外的跨分词器对齐工作。

Cliff 的卖点是绕开这两个限制:不需要训练奖励模型(直接用提示词让一个现成的 LLM 当裁判),也不依赖共享分词器或推理模式(重要的是教师的判决,而不是它的 logits)。

“空真值蕴含”的直觉

论文用一段颇有形式逻辑风味的话来motivat自己的设计:在实质条件句”A → B”中,如果 A 为假,那么整个陈述无论 B 是什么都为真——这是教科书式的”空真”(vacuous truth)例子。翻译到推理链上:一旦某条思维链已经出错,之后的一切都是建立在一个虚假前提之上的,所以细致评估它”提供的额外信息有限”。作者明确说这不是一个严格证明,只是一个直觉性的引导——但在读第 3 节之前,把这个直觉记在心里是对的。

Figure 1(原文 Fig.1):Cliff 概览。左侧——陷阱识别:教师自己先解一遍题,然后逐句判断学生的 rollout,把第一个出错的句子标记为 Pitfall Step p(a)。右侧——advantage 分配:GRPO 给整个 rollout 里的每个 token 同样的 advantage(全部是 -1.41);Cliff 则在 p(a) 处切开 rollout,给有效前缀一个比错误后缀更高(更不负)的 advantage。

3. 方法:Cliff 到底怎么计算 advantage

3.1 第一步——用闭式解还原 GRPO 的两个 advantage 值

在 Cliff 能做任何修改之前,我们需要先把 GRPO 的基线 advantage 写成一种可以操作的形式。论文做了一个简化(对 RLVR 来说也现实)的假设:奖励是二元的,R(q,a){0,1}R(q,a) \in \{0,1\}。如果一组 NN 个 rollout 的经验成功率是 μ=1NiR(q,ai)\mu = \frac{1}{N}\sum_i R(q,a_i),那么每个 rollout 的奖励只能是 0 或 1,整组的奖励只有两个不同的取值,这意味着公式(2)会坍缩成只有两个可能的 advantage 值:一个给所有正确的 rollout,一个给所有错误的 rollout。因为奖励服从 Bernoulli(μ\mu) 分布,它在组内的标准差有闭式解 σ=μ(1μ)\sigma = \sqrt{\mu(1-\mu)}(这就是 Bernoulli 随机变量标准差的标准公式——方差 =μ(1μ)= \mu(1-\mu),所以 σ=μ(1μ)\sigma = \sqrt{\mu(1-\mu)})。把 R=1R=1R=0R=0 代入带有这个 σ\sigma 的公式(2),就得到论文的公式(3):

Acor=1μσ,Ainc=0μσ=μσ.(3)A_{\text{cor}} = \frac{1-\mu}{\sigma}, \qquad A_{\text{inc}} = \frac{0-\mu}{\sigma} = -\frac{\mu}{\sigma}. \tag{3}

直觉上:如果组里几乎每个 rollout 都成功了(μ1\mu \to 1),AcorA_{\text{cor}} 会缩小趋近于 0(当所有人都成功时,一个正确 rollout 提供的信息量不大),而 Ainc|A_{\text{inc}}| 会变大(罕见的失败会格外显眼,被狠狠惩罚)。对称地,如果几乎所有 rollout 都失败了(μ0\mu \to 0),AcorA_{\text{cor}} 会变大(罕见的成功被高度奖励),AincA_{\text{inc}} 会趋近于 0。这正是大家已经熟悉的 GRPO 基线行为,只是被写成闭式解,方便我们在此基础上继续构建。

3.2 第二步——在 Pitfall Step 处切分一个错误的 rollout

这里是 Cliff 真正的改动,也就是论文的公式(4)。对于一个正确的 rollout,什么都不变——每个 token 依然拿 AcorA_{\text{cor}}(减去一个重新居中的偏移量 bb,稍后解释)。对于一个错误的 rollout,不再是每个 token 拿同样的 AincA_{\text{inc}},而是在 Pitfall Step p(a)p(a) 处把 token 分成两段:

Ai,j={Acorb,R(q,ai)=1λAcorb,R(q,ai)=0 且 j<p(ai)Aincb,R(q,ai)=0 且 jp(ai)(4)A_{i,j} = \begin{cases} A_{\text{cor}} - b, & R(q,a_i)=1 \\ \lambda A_{\text{cor}} - b, & R(q,a_i)=0 \text{ 且 } j < p(a_i) \\ A_{\text{inc}} - b, & R(q,a_i)=0 \text{ 且 } j \ge p(a_i) \end{cases} \tag{4}

逐行解读:第一种情况是正确 rollout 的 GRPO 原样保留。第二种情况是Cliff 全部的贡献所在——错误 rollout 有效前缀里的 token 拿到 λAcor\lambda A_{\text{cor}} 而不是 AincA_{\text{inc}},其中 λ0\lambda \ge 0 是一个可调旋钮,控制这段有效推理能获得多少信用。第三种情况说明,错误的后缀维持原本(严厉的)GRPO 式错误 rollout advantage,不做任何改动。论文自己的核心实验结论(第 6.2 节,下文详述)是:最优设置是 λ=0\lambda = 0——也就是说,有效前缀(在重新居中之前)拿到的是advantage,而不是正向强化。这是一个真正重要、也略微反直觉的设计选择,我们会在第 3.4 节回来详细讨论。

3.3 第三步——重新居中的偏移量 bb,以及它为什么必须存在

GRPO 的 advantage,按照构造,在组内是零均值的(这一点已经内嵌在公式 2 的减去 μ\mu 这一步里)。Cliff 在公式(4)里的逐 token 切分打破了这个性质,因为现在组内所有 token 的平均 advantage,取决于每个错误 rollout 的 Pitfall Step 恰好落在多深的位置——有些组的有效前缀天然就长,有些天然就短,纯属偶然。如果不加纠正,这会以一种不受控、依赖具体数据的方式,悄悄改变策略梯度更新的有效学习率/尺度。解决方法是公式(5):精确计算未重新居中的组均 advantage,然后从每个 token 里减去它,让组均值精确回到零,与 GRPO 自身的归一化约定保持一致:

b=Acor[i:R(q,ai)=1ai]+i:R(q,ai)=0[λAcorp(ai)+Ainc(aip(ai))]i=1Nai.(5)b = \frac{A_{\text{cor}}\Big[\sum_{i:R(q,a_i)=1}|a_i|\Big] + \sum_{i:R(q,a_i)=0}\big[\lambda A_{\text{cor}}\,p(a_i) + A_{\text{inc}}\big(|a_i|-p(a_i)\big)\big]}{\sum_{i=1}^N |a_i|}. \tag{5}

这个式子看起来吓人,但其实只是一个加权平均:分子是对每个 rollout 求和(advantage 值)× (拿这个值的 token 数),分母是整组的总 token 数——一个普通的加权均值,分别对公式(4)里三种情况计算再加总。Token 位置从 0 开始计数,所以有效前缀 {j<p(ai)}\{j < p(a_i)\} 恰好包含 p(ai)p(a_i) 个 token,错误后缀包含剩下的 aip(ai)|a_i| - p(a_i) 个 token,这就是这些精确计数作为乘数出现的原因。

3.4 设计选择:为什么是 λ=0\lambda = 0,另一种选择错在哪里

很自然地会假设:奖励一个错误 rollout 的有效前缀(即 λ>0\lambda > 0)应该总是有帮助的——毕竟那段前缀确实是好的推理,为什么不正向强化它,而要给零信用呢?论文第 6.2 节的实验(表 4,下文第 7 节详述)表明,这个直觉在实践中是错的:λ=0\lambda=0 给出最好的准确率,λ=0.5\lambda=0.5 紧随其后,λ=1.0\lambda=1.0 则明显更差,响应长度从 λ=0\lambda=0 时的 1506 个 token 膨胀到 λ=1.0\lambda=1.0 时的 1959 个 token。这个机制,在论文附录 C 中被形式化(本文第 8 节会给出完整推导),是因为正向奖励一个”有效但不完整”的前缀恰好制造了错误的激励:策略学会了只要在最终搞砸之前多产出一些”看起来有效”的推理 token,就能拿到部分信用,而不是被推着真正把推理做对。这是一个教科书式的长度攻击(length-hacking)失败模式,论文选择默认 λ=0\lambda=0——即完全不给有效前缀正向信用,只是比彻底错误的情况惩罚轻一些——是一个针对”部分信用该给多慷慨”这个问题、有证据支撑的具体答案,而非随意的默认值。

4. 一个数值实例(把公式 3-5 具体化)

抽象公式最容易让人相信的方式,是亲手把真实数字代进去算一遍。假设一组 N=4N=4 个 rollout 对应同一个问题,奖励是 [1,0,0,0][1, 0, 0, 0](一个正确,三个错误),那么 μ=1/4=0.25\mu = 1/4 = 0.25。于是 σ=0.25×0.75=0.18750.433\sigma = \sqrt{0.25 \times 0.75} = \sqrt{0.1875} \approx 0.433。代入公式(3):Acor=(10.25)/0.4331.732A_{\text{cor}} = (1-0.25)/0.433 \approx 1.732Ainc=0.25/0.4330.577A_{\text{inc}} = -0.25/0.433 \approx -0.577。在原版 GRPO 下,那一个正确 rollout 的所有 token 都拿 +1.732+1.732,其余三个错误 rollout 里的每一个 token 都拿 0.577-0.577,不管每个错误 rollout 里实际上有多少推理是有效的。

现在假设这三个错误 rollout 长度分别是 a2=20,a3=16,a4=10|a_2|=20, |a_3|=16, |a_4|=10 个 token,Pitfall Step 分别在 p(a2)=12,p(a3)=4,p(a4)=0p(a_2)=12, p(a_3)=4, p(a_4)=0(也就是说 rollout 4 从第一个 token 起就错了——可能是读错了题)。用 λ=0\lambda=0(论文的默认选择),Cliff 未重新居中的逐 token advantage 是:rollout 1(正确):全部 token 拿 1.7321.732。rollout 2:token 0–11(有效前缀,因为 λAcor=0×1.732=0\lambda A_{\text{cor}} = 0 \times 1.732 = 0)拿 00,token 12–19 拿 0.577-0.577。rollout 3:token 0–3 拿 00,token 4–15 拿 0.577-0.577。rollout 4:全部 10 个 token 都拿 0.577-0.577(因为 p(a4)=0p(a_4)=0,根本没有有效前缀)。

要通过公式(5)求出重新居中的偏移量 bb,假设 rollout 1 有 15 个 token。分子是 Acor×15A_{\text{cor}} \times 15(rollout 1 的贡献)+[λAcor×12+Ainc×8]+\, [\lambda A_{\text{cor}} \times 12 + A_{\text{inc}} \times 8](rollout 2)+[λAcor×4+Ainc×12]+\, [\lambda A_{\text{cor}} \times 4 + A_{\text{inc}} \times 12](rollout 3)+[λAcor×0+Ainc×10]+\, [\lambda A_{\text{cor}} \times 0 + A_{\text{inc}} \times 10](rollout 4)。λ=0\lambda=0 时每一项 λAcor\lambda A_{\text{cor}} 都消失,剩下分子 =1.732(15)+(0.577)(8+12+10)=25.9817.31=8.67= 1.732(15) + (-0.577)(8+12+10) = 25.98 - 17.31 = 8.67。分母是总 token 数 15+20+16+10=6115+20+16+10=61。所以 b=8.67/610.142b = 8.67/61 \approx 0.142。上面算出的每一个 advantage 都要再减去这同一个 0.1420.142:rollout 1 的 token 变成 1.7320.142=1.5901.732-0.142=1.590;rollout 2 的有效前缀变成 00.142=0.1420-0.142=-0.142(微负,不是零——这是重新居中的副作用,是预期之内的);rollout 2 的错误后缀变成 0.5770.142=0.719-0.577-0.142=-0.719;rollout 3、4 同理。

这个具体例子给出的定性结论是:即便是一个彻底错误的 rollout,它的有效前缀(rollout 2 的前 12 个 token,或 rollout 3 的前 4 个 token)最终 advantage 也在 0.142-0.142 附近——微负,但比它自己的错误后缀拿到的 0.719-0.719 温和得多,也远比原版 GRPO 给这些同样 rollout 里每一个 token 分配的统一 0.577-0.577(未居中)或 0.719-0.719(居中后)要温和得多。这个差距——好但不完整的推理拿到一个小负数,真正的错误拿到大得多的负数——正是 Cliff 用来教模型区分”我推理正确但没想完”和”我从这里开始推理错误”的全部机制。

5. 完整训练流程的伪代码

把第 3.1-3.3 节合在一起,下面是 Cliff 每个训练步的完整流程,用带编号的伪代码表示:

算法 1:Cliff 训练步骤
输入:策略 pi_theta_old,问题 q ~ D,教师模型 T,验证器 V,超参数 lambda
1.  从 pi_theta_old(q) 采样 N 个 rollout a_1, ..., a_N
2.  教师 T 为 q 生成自己的参考解答 ref
3.  如果 V(ref) 不正确:
4.      本组回退为原版 GRPO(用公式 2 计算 A_i,结束)
5.  否则:
6.      对每个 rollout a_i:
7.          如果 V(a_i) 与组内其他所有 rollout 的判断一致(全对或全错):
8.              跳过教师判断(奖励方差为零,advantage 反正也是零)
9.          否则:
10.             让教师 T 逐句将 a_i 与 ref 比对判断
11.             如果 T 判断 a_i 正确:R(q, a_i) = 1
12.             否则:
13.                 R(q, a_i) = 0
14.                 p(a_i) = T 标记为第一个错误的句子索引
15.                 如果 a_i 在 L_max 处被截断(超长):p(a_i) = 0  // 硬性上限,见 3.4 节/附录 C
16.     用步骤 7-15 得到的 R(q, a_i) 值,通过公式(3)计算 mu、sigma、A_cor、A_inc
17.     用公式(5)计算偏移量 b
18.     对每个 rollout a_i 和每个 token 位置 j:
19.         用公式(4)分配 A_{i,j},再减去 b(公式 5)
20. 用这些 A_{i,j} 值,通过 token 级 GRPO/DAPO 损失(公式 1)更新 pi_theta

有几个实现层面的细节值得特别指出,因为它们对精确复现这个方法很重要:第 7-8 步(跳过判断一致的组)纯粹是节省算力的优化——论文指出这些组在 GRPO 自身的归一化下奖励方差为零,因此无论教师会怎么判断,advantage 都是零,所以跳过对它们的教师调用不会丢失任何真实信号,除了极罕见的情况——教师会与组内每一个 rollout 的自动验证结果都不一致。第 15 步(超长硬性上限)则完全不是优化,而是一个正确性要求——第 3.4 节已经预告过原因:如果没有这一步,一个超长(被截断)的 rollout 可能会从教师那里拿到一段很长的”看起来有效”的前缀(因为它确实没做错什么,只是预算用完了),而论文自己附录 C 的数学推导(本文第 8 节复现)表明,这恰恰是长度攻击会重新溜进来的具体缺口。

Figure 2(自绘图):Cliff 完整训练流程,从采样 rollout 到教师判断,再到重新居中的 token 级 advantage,最终喂给 GRPO/DAPO 策略梯度更新。

6. 教师真的能找到 Pitfall Step 吗?(判断质量)

以上所有内容都假设教师对”这个 rollout 从哪里开始出错”的判断是可信的。论文第 4 节在正式进入 RL 训练之前,直接用一份人工标注数据集测试了这一点:从 DAPO-Math 里抽取 50 个正确和 50 个错误的 rollout,人类专家用与 LLM 裁判完全相同的指令独立标注每个错误 rollout 的 Pitfall Step(这样比较才是同一起跑线)。论文定义一致性为:

p-dis(a)=phuman(a)pLLM(a),(6)\text{p-dis}(a) = |p_{\text{human}}(a) - p_{\text{LLM}}(a)|, \tag{6}

即人类和 LLM 标记的 Pitfall Step 在句子索引上的绝对差——零表示完全一致,数字越大说明 LLM 标记的句子和人类不一样。

教师模型参考解答来源参考准确率判断准确率假阳性假阴性平均 p-disp-dis ≤ 1
Qwen3-32B教师自己提供65881113.0068
Gemma3-27B教师自己提供67860144.5239
SOTA教师自己提供9391091.2382
Qwen3-32B真实答案10091093.3057
Gemma3-27B真实答案10093073.7752
SOTA真实答案10092081.2180

(论文表 1,为节省篇幅只保留了两组最重要的行:教师自己的参考解答 vs. 经过验证的真实答案参考。“参考准确率”是教师自己独立生成的解答本身正确的频率;“判断准确率”是教师对学生 rollout 的对/错判决与自动验证器一致的频率;“p-dis ≤ 1”是在判断为错误的案例中,LLM 标记的 Pitfall Step 与人类专家相差不超过一句的百分比。)

三个发现值得注意,它们决定了这个方法是否可信:(1) 判断比解题容易。 即便 Qwen3-32B 和 Gemma3-27B 自己解题的准确率(生成自己的参考解答时是 65-67%)远远落后于 SOTA 教师,它们在拿到经过验证的真实参考答案后,判断准确率依然能达到 80-90% 以上——正确识别别人的错误,比从零开始解题要容易得多,这对使用廉价教师是个好消息。(2) 参考质量非常重要。 对比”教师自己提供”(用教师自己、可能是错的解答作参考)和”真实答案”(用经过验证正确的参考)两组,判断准确率和 p-dis 在使用经过验证的参考时都有改善——这正是为什么 Cliff 的流程(第 3 节,算法 1 第 3-4 步)会丢弃教师自身参考解答未通过验证的那些组,而不是拿一个可能本身就错的参考去判断学生。(3) 大多数分歧来自假阴性,而非假阳性——教师几乎从不会错误地否定一个真正正确的学生解答(假阳性列全是 0-1),但确实会漏掉大约 10% 应该标记为错误的情况(假阴性列在 7-14 之间)——论文指出,其中一些表面上的”漏判”实际上可能是自动验证器本身被一个蒙对的答案骗过了,而不是教师判断真的失败了。

Figure 3(原文表 1,渲染图):教师判断质量结果。较强的解题能力(SOTA 行)与更可靠的 Pitfall Step 定位(更低的平均 p-dis)相关;较弱的开源教师(Qwen3-32B、Gemma3-27B)在拿到经过验证的真实参考解答后,依然能达到可用的判断准确率,支持了 Cliff 不需要近乎完美教师的主张。

7. 主要实验结果

判断质量确立之后,论文第 5 节跑了真正的 RL 实验:两个学生模型(Qwen3-4B-Base,在 RL 之前先用 OpenThoughts 做 SFT 预热出指令跟随能力;以及 Phi-4-mini-Instruct),三个教师(一个前沿 SOTA 模型,加上开源的 Qwen3-32B 和 Gemma3-27B),两个领域(数学:GSM8k/MATH-500/DAPO-math/AIME;代码:CodeContests/LiveCodeBench/DeepCoder),四个基线方法:原版 GRPO、带教师的 GRPO(教师判断对错,但整个 rollout 依然拿一个统一的 advantage——用来隔离出”仅仅有教师”和”Cliff 的前后缀切分”各自贡献了多少)、SFT 式蒸馏,以及在线策略蒸馏(OPD,只在开源教师上跑,因为它需要访问逐 token 对数概率,而闭源前沿模型通常不会开放这个)。

设置教师GSM8kMATH-500DAPOAIME数学平均CodeContestsLiveCodeDeepCoder代码平均
Qwen3-4B(基座)84.5371.0029.4017.6950.6614.2520.2910.6015.05
+ GRPO92.8079.0042.9032.0161.6823.7527.6621.2024.20
+ GRPOSOTA92.0480.0044.0033.4462.3723.2528.6422.6024.83
+ CliffSOTA93.1783.2049.3036.9865.6626.2527.8223.8025.96
+ GRPOQwen3-32B92.1278.4044.9029.3761.2025.5027.6623.4025.52
+ OPDQwen3-32B91.2177.2037.9026.3758.1719.2525.7016.2020.38
+ CliffQwen3-32B92.1280.8048.9036.6564.6226.5028.1523.4026.02

(论文表 2,为节省篇幅只保留了 Qwen3-4B 相关行——Phi-4-Mini 在所有教师/领域组合下呈现相同的定性模式;完整的 28 行表格见论文第 5.2 节。加粗标记 Cliff 相对对应 GRPO 基线在数学/代码平均列上的提升。)

Figure 4(原文表 2,渲染图):两个学生模型、三个教师、两个领域下的完整主结果表——Cliff(加粗行)在每一行都超过了所有 GRPO 和带教师 GRPO 基线。

Figure 5(自绘可视化):左——一个错误 rollout 下的逐 token advantage 分配,对比 GRPO(平坦、均一为负)与 Cliff(阶跃函数,在 Pitfall Step 之前的有效前缀拿到明显比之后错误后缀更不那么负的 advantage)。右——表 4 中 \lambda 的影响:随着 \lambda 从 0 升到 1,平均准确率下降,平均响应长度显著上升,这正是第 8 节推导的长度攻击机制在实证上的体现。

从这张表里,有四个发现比”Cliff 赢了”更重要:

(1) 增益不是仅仅来自有教师——而是具体来自前后缀切分本身。 这是论文最重要的一个消融实验,也是最容易被读得快的人忽略的一个。带教师的 GRPO(教师判断对错,但整个 rollout 依然拿一个统一的 advantage,本质上只是把基于规则的验证器换成了 LLM 来重新计算同一个结果奖励)相对原版 GRPO 只有边际提升(例如用 SOTA 教师时,数学平均是 62.37 vs. 61.68——只涨了 0.69)。Cliff 用同一个教师、同样的判断,但额外在 Pitfall Step 处切分了 token 级 advantage,达到了 65.66——在带教师 GRPO 已经不多的 0.69 增益之上,又多涨了 3.29。这清晰地隔离出:真正的收益具体来自信用被分配在 rollout 内部的哪个位置,而不仅仅是有一个 LLM 重新核实了正确性。

(2) Cliff 不依赖近乎前沿水平的教师。 对比 SOTA 教师那一行(65.66 数学平均)和开源 Qwen3-32B 教师那一行(64.62),差距真实存在但不大(约 1 分),尽管 Qwen3-32B 自己解题的准确率远远落后于 SOTA(回忆表 1:65% vs. 93% 的参考解答准确率)。这与第 4 节判断质量的发现一致:判断比解题容易得多——一个解题能力平庸的教师,依然可以是一个足够好的裁判,贡献 Cliff 的大部分收益。

(3) OPD 在这里表现不如 GRPO 和 Cliff,尽管它是一个合理、正在被积极研究的替代方案——在同样的 Qwen3-32B 教师下,数学平均 58.17,比 GRPO 的 61.20 和 Cliff 的 64.62 都要低。论文将其归因于 OPD 的核心要求(教师和学生共享分词器/推理风格)在这里只是部分满足——这恰好是 Cliff 从设计之初就想要避免依赖的那个限制。

(4) 这个模式在数学和代码上都成立,这一点值得关注,因为本文里代码的奖励是单元测试通过/不通过(不是部分测试通过的部分信用)——第 3.1 节里的二元奖励假设原样适用,而 Pitfall Step 的概念(“教师读完整条思维链后,判断推理第一次出错的那一句”,而不只是检查最终代码输出)也顺利迁移到了一个用运行代码而不是检查框中数字来判定成功的领域。

8. 设计选择深挖:长度攻击的数学(为什么 λ=0\lambda=0 是可证明安全的)

第 3.4 节已经描述了 λ\lambda 增大时实证上发生了什么(响应变长,准确率变差)。论文附录 C 推导了为什么,这值得逐步走一遍,因为这是一段真正精妙、能推广到本文之外的奖励攻击分析。

一般性问题。 自回归生成的长度完全由模型选择何时发出 EOS token 决定。如果某个训练信号让非 EOS token 在某个模型本可以停下的位置看起来相对更有吸引力,响应就会变长;反之则变短。所以判断”这个方法是否激励长度攻击”的正确方式是:一个 rollout 的平均 advantage 是否与它的长度相关,且这种相关性是否能与”这个 rollout 是否真的正确”分离开来。

GRPO 的基线情形。 论文定义一组的”长度质量”Φ=ij(AijAi,ai1)\Phi = \sum_i \sum_j (A_{ij} - A_{i,|a_i|-1})(大致上:所有非末位 token 携带的总 advantage 质量,因为末位 EOS token 本身的 advantage,驱动变长的方式和内部 token 不一样)。因为 GRPO 的 advantage 在一个 rollout 内是常数,这会望远镜式地坍缩成 Φ=iAiai2iAi\Phi = \sum_i A_i |a_i| - 2\sum_i A_i(用到组内零均值这个性质),代入公式(3)的 Acor,AincA_{\text{cor}}, A_{\text{inc}} 并化简后,论文得到 Φ=Nσ(LcorLinc)\Phi = N\sigma(L_{\text{cor}} - L_{\text{inc}}),其中 Lcor,LincL_{\text{cor}}, L_{\text{inc}} 分别是正确和错误 rollout 的平均长度。结论(论文公式 7-8)是:Φ\Phi 的符号精确追踪”正确的 rollout 是否恰好比错误的更长”这一点,在策略当前自己采样出的数据里——GRPO 是对数据中已存在的”长度-正确性”相关性的忠实放大器,本身不构成独立的长度压力来源。如果更长的响应实际上并不更常正确,GRPO 就不会给模型任何为了变长而变长的激励。这正是 Cliff 需要保留的安全性质。

Cliff 的情形。 因为 Cliff 也把均值重新居中到零(公式 5),同样的望远镜式化简也适用,但现在 Ai,ai1A_{i,|a_i|-1}(末位 token 的 advantage)永远精确等于 AcorbA_{\text{cor}}-bAincbA_{\text{inc}}-b(永远不会是有效前缀的值 λAcorb\lambda A_{\text{cor}}-b,因为一个错误 rollout 的最后一个 token 按定义属于错误后缀,不属于有效前缀)。用 sˉ\bar{s} 表示错误 rollout 长度中落在有效前缀里的平均比例,经过代数运算(论文公式 9-10),论文推导出变长条件:

Φ>0    ρ>1sˉ(1+λ1μμ),ρ:=Lcor/Linc.(11)\Phi > 0 \iff \rho > 1 - \bar{s}\left(1 + \lambda\frac{1-\mu}{\mu}\right), \qquad \rho := L_{\text{cor}}/L_{\text{inc}}. \tag{11}

这样理解:当 sˉ=0\bar{s}=0(永远没有有效前缀,即每个错误 rollout 从 token 0 就错了)时,Cliff 的变长条件退化成和 GRPO 完全一样(ρ>1\rho > 1)——没有东西可切分时,Cliff 安全地退化回 GRPO 的行为。但当 sˉ>0\bar{s} > 0(错误 rollout 通常确实有一些有效前缀,这是正常的、预期中的情况)时,不等式右边会缩小到小于 1,意味着Cliff”变长开始变得划算”这个门槛,比 GRPO 更容易跨过——而且关键是,λ\lambda 越大,这个门槛就越容易跨过,因为 λ\lambda 在被减去的那一项里带正系数。这正是实证表 4 结果的形式化版本:λ=0\lambda=0 让变长门槛尽可能贴近 Cliff 设计所能允许的 GRPO 安全基线,而更大的 λ\lambda 会主动降低通过长度进行奖励攻击的门槛。

为什么超长硬性上限(截断时 p(a)=0p(a)=0)是一个正确性要求,而不只是优化。 还有一个微妙之处:上面整个推导都假设每个 rollout 最终都会发出 EOS token。如果一个 rollout 在完成之前就在最大长度 LmaxL_{\max} 处被截断了,GRPO 的结果验证器几乎总会判它失败(这是对的——一个没写完的答案通常无法被验证为正确),所以 GRPO 会自然抑制被截断 rollout 的变长趋势。但 Cliff 的教师判断的是推理有效性,不是任务完成度——一个一直推理正确、只是预算用完了的被截断 rollout,会从教师那里拿到一段很长的、看起来有效的前缀,而完全没有错误后缀去惩罚它。如果不加干预,这会白白给策略一条安全的免费通道,只要一直生成到长度上限、永远不完成,就能获得长有效前缀的信用。这正是为什么第 3.2 节算法 1 的第 15 步硬编码了对任何超长 rollout 都设 p(a)=0p(a)=0——把整个被截断的 rollout 当作从一开始就错误来处理,用硬性规定关闭这个特定缺口,而不是依赖一般性的 λ=0\lambda=0 论证去覆盖它(一般性论证覆盖不了这个边界情况,因为一个被截断 rollout 的 sˉ\bar{s} 本来会被推向接近 1)。

论文实际上推导出了两个独立的、足以保证完全安全(不被长度攻击)的充分条件(论文公式 12-13):(C1) 一个正确 rollout 的总 advantage 必须始终超过一个错误 rollout 的,即便在错误 rollout被拉长到最大长度 LmaxL_{\max} 的最坏情况下——推导下来是 λ<Lcor/Lmax\lambda < L_{\text{cor}}/L_{\max},而经验上 Lcor0.3LmaxL_{\text{cor}} \approx 0.3 L_{\max},所以 λ<0.3\lambda < 0.3 满足这个条件。(C2) 一个错误 rollout 绝不能仅靠延长自己的有效前缀就提高自己的总 advantage——这归结为 λb/Acor\lambda \le b/A_{\text{cor}},经验上 b0.05b \approx 0.05,这就要求 λ\lambda 必须非常小。设 λ=0\lambda=0 无论经验常数在具体某次实验里取什么值,都能自动满足这两个条件,这比挑一个只在本文测得的 Lcor/LmaxL_{\text{cor}}/L_{\max}bb 值下才恰好安全的小正数 λ\lambda 更干净。论文还补充了一个真正有意思的细节:条件 (C2) 在完全一般的意义上其实不是安全训练的必要条件——延长有效前缀只有在多出来的 token 是填充、重复或其他无实质内容时才算”攻击”;如果更长的前缀确实反映了在最终出错之前更多的、真正正确的推理,奖励它正是 Cliff 该做的事。真正区分合法奖励和奖励攻击的,是教师的判断本身,而不是 advantage 函数的数学形状——这个数学推导保证的是最坏情况是安全的,不代表任何正的 λ\lambda 都自动是坏的。

9. 值得了解的实现细节

论文附录 B/D 里几个具体的工程选择值得指出,因为它们影响这个方法能被多忠实地复现:训练基于 veRL 构建,用 DAPO 的 token 级损失聚合方式(论文脚注 1,第 3 节已提到)而不是按序列平均的 GRPO。Cliff 和 GRPO 共用一套超参数(批量大小 64,每组 12 个 rollout,200 个训练步,actor 学习率 1e-6,rollout 温度 1.0,advantage 裁剪 0.2,KL 惩罚为零),这样表 2 的对比就只隔离出 advantage 计算方式的改动,不会被不同的优化设置混淆。教师的 rollout 温度固定为 0.6(比学生自己的 1.0 更低,倾向于更确定、更可靠的教师判断)。裁判提示词(附录 D,数学和代码各一份)经过精心设计,带有明确的反过度惩罚规则——例如”如果学生的最终答案与参考答案一致,除非某一步含有一个具体、无可辩驳的错误,否则应标记为正确”,以及一份明确列出的永远不要标记的清单:不同但有效的方法、代数等价的改写、啰嗦但正确的步骤,或不影响最终结果的小失误。这个提示词工程细节比看上去更重要:一个过于急于把风格差异标记为”错误”的裁判,会给 Pitfall Step 信号注入噪声,而且很可能重新制造出论文原本想通过不使用训练出来的 PRM 来避免的那种奖励攻击风险。代码领域的裁判提示词还额外指示教师把有 bug 的代码行追溯回决定它的那个推理步骤(“一行有 bug 的代码通常是学生在上面推理里已经陈述过的某个决定的忠实实现……那应该报告那一行推理,而不是代码行”)——这是一个具体、不那么显而易见的设计选择,确保 Pitfall Step 落在错误真正的源头,而不是它下游的表现症状。

论文附录 E 的案例研究也值得用初学者友好的方式提一下,因为它们以一种很有启发性的方式展示了裁判并非完美无缺。在一个案例里,学生对一道周期性问题的解答得出了错误的最终答案,教师(经人类审核确认)准确地把 Pitfall Step 定位在学生错误地假设”周期 20 已经足够”、而没有检查它是否与整个 268 个位置的环形排列相容的那句话上。但在另一个案例里(一个真正棘手的情形,涉及排成一圈的数字,其中一个线性序列内的周期 20,并不意味着在环上也是周期 20,除非 20 能整除环的大小),人类标注者明确不认同教师选择的 Pitfall Step:教师标记了一句较早的话为错误,但人类指出那句话其实是一个真实(虽然不完整)的陈述,真正的错误发生在好几句之后。这是作者一次相当坦诚的收录——它说明即便是一个能力不错的教师,在微妙的多步推导中,也可能把”到底哪一句才是第一个错误”归因错。这正是第 6 节表 1 里非零的平均 p-dis 所度量的那类噪声,只是在汇总统计里体现,而不是被消除了。

10. 局限性(作者自述,并加以展开)

论文自己的未来工作部分很简短,但指出了几个真实、尚未解决的范围限制,值得展开:(1) Cliff 目前只在数学和单轮代码生成上得到验证,两者都是有干净、可自动检查最终答案的领域。论文明确表示计划”把方法扩展到 agentic 场景”——也就是说多轮工具调用、反馈延迟或不完整的环境,或者”正确性”根本不是一个干净二元值的任务,目前都未经测试。一个真实的开放问题是:一个教师 LLM 能否在一条长、有分支的 agentic 轨迹里,像在一条线性思维链里那样可靠地定位出唯一的”第一个错误”。(2) 这个方法依赖一个可用且负担得起的 LLM 裁判,对每一个不属于判断一致组的训练 rollout 都要调用一次——对于有数百万 rollout 的大规模 RL 训练,这是叠加在 RL 训练算力之上的一笔真实、持续的推理成本,和训练一个专用 PRM 一次性的成本不同(虽然通常更小)。**(3) 论文明确提到计划”探索基于规则的 Pitfall Step 检测器”**作为未来工作——这暗含着一层承认:目前基于 LLM 裁判的方法,虽然在第 4-5 节已被证明效果不错,但未必是唯一或最终的设计,一个更便宜的非 LLM 检测器(至少对某些领域,比如代码,语法/类型错误是可以机械检查的)可能是一个可行的补充或替代方案。

11. 批判性分析

(a) 论文本身的具体弱点。 表 2 的主结果每个单元格只报告了单个数字,没有跨随机种子的方差/置信区间,尽管 RL 训练众所周知具有很强的运行间随机性——单凭这张表,读者无法判断 Cliff 相对带教师 GRPO 通常 1-4 分的提升,能否经得起种子方差的检验,尤其是那些较小的差距(例如某一行 GSM8k 上 92.12 vs. 92.04,这个幅度对 RL 训练来说完全可能只是噪声)。第 4 节的裁判质量研究(表 1)使用的手工标注集也相当小(50 个正确 + 50 个错误 rollout),作为初步校准检查是合理的,但作为”判断能力能在实际 RL 训练中用到的、规模大得多、种类多得多的 rollout 群体上可靠泛化”这个较强主张的证据基础,略显单薄(200 个训练步、跨越数千个 rollout)。

(b) 作者低估或忽略的局限性。 论文对附录 E 案例研究里出现教师选择的 Pitfall Step 与人类专家不一致的情况(第 9 节讨论过的第 3 个案例)是坦诚的——但没有讨论这种具体的失败模式(正确判断出”这里有问题”,但把它归到了错误的句子上)相对于彻底漏判的发生频率,也没有讨论它是否对训练有可测量的、与漏判不同的影响。一个”错了但存在”的 Pitfall Step(在错误的位置切分了 rollout)看起来可能会注入一种不同、甚至更隐蔽的噪声,而不像漏判那样——漏判只是退化为把整个 rollout 当作一个整体处理,即普通的 GRPO 行为——然而论文的判断质量指标(表 1)只报告了一个汇总的距离(p-dis),并没有拆解出像圆周期性那个案例那样”错得很自信”的判断到底有多常见。另一个未被充分讨论的地方:第 6.1 节显示真实答案过滤只对较弱的开源教师有明显帮助,SOTA 有没有过滤表现几乎一样——但这引出一个论文没有回答的自然追问:对于(未过滤时)连 SOTA 教师自己的参考解答都无法通过验证的那部分案例,有多少训练信号被悄悄丢弃了?这个比例是否会随问题难度系统性变化,从而以某种方式影响模型最终擅长解决哪类问题?

(c) 具体、可操作的改进建议。 第一,对表 2 的核心结果至少跑 2-3 个随机种子并报告方差,尤其是那些较小的提升,这样读者才能区分真实效应和 RL 训练噪声——考虑到论文已经跑了很多(教师、学生、领域)组合,这是一个相对便宜的标准补充。第二,把判断质量评测(第 4 节)拆解出”判断为错误、但 Pitfall Step 标错了位置”这一具体失败类别(而不只是整体 p-dis),因为这种失败模式很可能有着与简单漏判不同的训练动态,而附录 E 自己的案例研究也表明它并不罕见。第三,鉴于论文自己已经明确表达了对 agentic 场景的兴趣,一个自然且相对低成本的下一步实验,是先在一个”多轮但结果依然可验证”的中间设置上测试 Cliff(比如一个只有几次工具调用的、带工具增强的数学或代码任务),再跳到完全开放式的 agentic 环境——这能验证”找到第一个错误、切成两段”这个核心想法,能否经受住从单条线性思维链跳到一条穿插了外部工具输出的轨迹这个结构性变化的考验,对教师来说,这是一个明显不同的判断结构。

11b. Cliff 在更广 RLVR 文献中的位置

值得把 Cliff 明确放到它自己定位相对的两个前人方向旁边对比,这个对比能清楚地看出到底哪里是真正新的,哪里是借鉴而来的。

相比过程奖励模型(PRM)。 一个 PRM(例如 Math-Shepherd,以及一系列“逐步验证”的工作)是一个训练出来的打分函数:收集每一步的正误标签(往往靠昂贵的人工标注或自动化 MC rollout),训练一个模型预测每一步的标量分数,再用这个分数作为密集奖励信号。这确实能提供真正细粒度、逐步的信用——比 Cliff 单一的二元切分要丰富得多。但代价也真实存在:PRM 自己需要足够的训练数据,才能泛化到 RL 过程中它将被要求打分的那个学生 rollout 分布上,如果泛化不好,策略就会学会利用 PRM 的盲点(经典的奖励攻击)而不是真正提高推理能力。Cliff 用一个不需要任何额外训练数据、也难得多被系统性利用的评分机制(一个现成的 LLM 裁判)换取了这种细粒度——正因为每个 rollout 只有三种可能的逐 token advantage 取值,开发一个狭窄、可学习的攻击面难度很大,不像一个可微、连续打分的 PRM 那样容易被洞惉。

相比在线策略蒸馏(OPD)。 OPD 直接用教师自己对学生 rollout 的逐 token 对数概率作为密集信号,绕开了训练单独奖励模型——本质上是在问“对学生写下的每个 token,教师有多惊讶?”。当它能用时效果很好,但它从根本上需要教师和学生在 token 级别对齐:如果它们用不同的分词器,教师的逐 token 对数概率根本不对应学生自己的 token 边界,即便分词器相同,教师学生也可能在推理风格(而不仅仅是能力)上差异大到让教师的“惊讶程度”无法干净地追踪学生的正误。表 2 中 OPD 表现较弱的结果与这个解释一致:它只在开源、家族相近的教师(Qwen3-32B、Gemma3-27B)上评测过,即便如此仍然同时输给了原版 GRPO 和 Cliff。Cliff 完全不需要这种对齐,因为它只需要教师对整句话对错给出一个判决——这个判断根本不需要匹配分词器或相似的推理风格,只需要对问题领域有足够的共同理解,让教师能识别出一个错误。

值得具体讲清楚当教师与学生差异较大时,OPD 内部到底会出什么问题,因为“共享分词器和推理风格”听起来像一个次要的注意事项,实际上却是一个真正坠定整个方法能不能用的硬约束。OPD 全部的监督信号,是教师在学生自己的每一个 token 位置上的对数概率——具体地说,对学生 rollout 的第 jj 个 token,OPD 问的是:“在这个确切的前缀下,教师会给这个确切的 token、在这个确切的位置上,分配多大的概率?”这要求教师和学生分词完全一致(这样“这个确切的 token”对两个模型来说才是同一个子词单位),更微妙的是,还要求教师自己学到的下一个 token 分布,对判断学生的选择来说是一个有意义的参考点——如果教师即便在推理正确的时候也从不会用这种措辞或记号(一种风格上的不匹配,而非正确性上的),那么它对学生那个 token 的对数概率,反映的更多是风格上的距离,而不是推理质量。Cliff 的设计则彻底舍弃了这一切:教师根本不会看到学生逐 token 的生成过程,只会看到每一句话最终渲染出来的文本,并整体地判断其正误。这正是为什么 Cliff 能把一个前沿闭源教师和一个架构、分词器完全不同的开源学生搭在一起——这种组合对 OPD 来说在结构上就不可能成立,除非额外引入跨分词器对齐机制(论文引用了专门针对这个问题的先前工作,例如 Niu 等人 2026 年的工作——这类机制 Cliff 根本不需要)。

相比 GRPO-with-Teacher,论文自己的内部消融。 值得精确地说明为什么这个基线存在,因为第 7 节对它的讨论,可能是整篇论文里对“到底是什么带来了 Cliff 的提升”这个问题最重要的一个结果。GRPO-with-Teacher 只用教师 LLM 的对/错判断替换了自动验证器的对/错判断,但 rollout 里的每个 token 依然拿到同一个、不切分的 advantage——公式(2)保持不变。如果 Cliff 的收益主要来自“一个更聪明、更细致的裁判去判定正确性”,而不是来自“在 rollout 内部分解信用”,那么 GRPO-with-Teacher 就应该已经拿到了大部分这个好处,因为它用的是完全相同的教师和完全相同的对错判决。事实是,GRPO-with-Teacher 相对原版 GRPO 只有边际提升,而 Cliff 额外的逐 token 切分却能再多换好几分——这是论文最强有力的一项证据,说明真正的贡献是信用分配机制本身,而不仅仅是把验证工作外包给了一个更强的裁判。

一条主线:PRM 用一套训练流程和奖励攻击风险换得细粒度;OPD 用分词器/风格对齐的代价换得密集度;Cliff 既不要细粒度也不要逐 token 密度,但作为交换,它不需要任何训练,也没有任何对齐约束——这是成本/丰富度权衡曲线上一个真正不同的位置,而不只是“更便宜的 OPD 或 PRM”。

11c. 代码领域结果的一个细节

数学和代码在表 2 里大致对称地处理,但对主要在代码上工作的读者来说,有一点差异值得指出:代码领域的奖励是严格二元、严格通过/不通过隐藏测试套件(每个题 10 个测试用例,5 秒时间限制,只有全部通过才算满分),在沙盒环境(附录 A 中提到的火山引擎 sandbox)中执行。从某种意义上讲,这比数学领域更严苛——没有人类阅卷人可能给一个“90% 正确”的数学证明部分分那种“几乎正确”的代码部分分,这让代码领域成为一个真正严苛的测试,看 Cliff 的过程级信号能否弥补“结果层面奖励最不宽容”这个事实。结果(表 2 中的代码平均列)显示 Cliff 相对 GRPO 的优势真实存在,但经常在绝对百分点上比数学领域小(在不少行里,代码平均大约提升 1-2 分,数学平均则提升 3-4 分)——一个可能的解释是,代码中的推理错误往往更“局部”(一个单一的差 1 错误就可能拖垃一个否则完全正确的算法),不像数学多步证明中的错误,这让“单一干净 Pitfall Step”这个概念对代码来说,比对散文式的数学推理稍微不那么自然契合。论文没有明确讨论这个领域不对称性,但它直接体现在数字里,对于判断 Cliff 的核心思想在你自己的不是数学证明式领域上应该预期多好地迁移,是一个合理的记忆点。

11d. 读懂训练动态图

Figure 6(原文图 2,渲染图):200 个训练步中跟踪的训练动态曲线——GRPO 与 Cliff 下响应长度的变化、不同教师模型的教师判断/自动验证器一致性、以及错误 rollout 中 Pitfall Step 相对位置 \bar{s} 随训练的演化。

论文第 6.3 节(原文图 2,如上所示)在整个训练过程中跟踪了三个指标,而不只是给一个最终数字,这对任何想自己复现 Cliff 的人都很有用。第一,无论 GRPO 还是 Cliff,响应长度都会随着训练稳步增长(两者都在学习在回答之前多推理一点),但 Cliff 在训练初期有一个明显的长度尖峰,之后才逐渐稳定下来——论文的解读是,模型初期在探索更长的推理轨迹,而不是失控长度攻击的迹象(第 8 节的数学分析已经在 λ=0\lambda=0 下排除了后者)。第二,论文跟踪了训练过程中教师判断与自动验证器的一致性(通常在 85%-90%),并指出 Gemma 较低的一致性反映了它相对 SOTA 和 Qwen3-32B 教师相对较弱的判断可靠性——这是一个有用的健康度检查,确认裁判质量(本文第 6 节)不会随着被判断的策略在训练中不断演化而悔悔无声地退化。第三,也是最有意思的一点:论文跟踪了错误 rollout 中 Pitfall Step 的相对位置(即第 8 节数学里的 sˉ\bar{s})随训练的变化,发现它在大约前 50 步里陣烈上升到大约 0.5,然后稳定下来。作者的解读是,模型先学会即便在难题上也把早期推理步骤做对(拉长平均有效前缀),然后建立起一套稳定的推理流程,而不是持续地去骗裁判——这是一个实证、训练曲线层面的证据,与第 8 节静态的最坏情况安全性论证互为补充,说明实际训练出来的模型,在整个 200 步的训练过程里,并没有漂向“有效前缀无限变长”这种退化行为。

还有一点值得向不熟悉 RLVR 流程的读者讲清楚:为什么 10%-15% 的裁判-验证器分歧率能够被容忍,而不是一个致命缺陷,这回到算法 1 中的“判断一致就跳过”优化(第 5 节伪代码的第 7-8 行)。分歧只在验证器和教师会得出不同 Pitfall Step 计算结果的那些组里才重要——对于(很可能占大比例的)那些自动验证器的二元对/错划分已经与教师会说的一致的组来说,对中间推理步骤的任何残余分歧都无关紧要,因为 Cliff 自己的优化意味着对一致的组,根本不会去询问教师关于结果正确性的判断。这是一个微妙但重要的点:85%-90% 这个一致性数字,描述的是那些更难避开的情况上的一致性(混合组,即组里有些 rollout 成功、些失败),而这恰恰是 Pitfall Step 判对与否真正影响最终策略梯度的那个群体。

11e. 为什么偏偏选二元奖励

有一个小但容易被忽略的建模选择值得单独拿出来说:论文对公式(3)的脚注指出,即便对于奖励非二元的领域(比如代码领域那种部分分测试套件),论文自己的建议也是对奖励设阈值、或者再一次与组均值比较,并引用了最新的工作,指出二元奖励对可验证任务普遍“更稳定、噪声更少”,而不仅仅是 Cliff 专属的方便选择。这一点对上面第 3.1 节的闭式推导很关键:从公式(3)开始的一切(两个取值的 Acor/AincA_{\text{cor}}/A_{\text{inc}} 结构、公式(5)干净的重新居中偏移量,以及最关键的,第 8 节整个长度攻击安全性证明)都依赖于奖励在组内只能取两个不同的值。如果硬要把 Cliff 这套精确的代数套到一个真正连续、多取值的奖励上(比如分级的部分分数),整套闭式推导就得从头重来,用一个不同、更乱的表达式去重新推 Acor,AincA_{\text{cor}}, A_{\text{inc}},因为奖励分布不再能块块地块成两组。这是 Cliff 的数学能直接推广到二元奖励以外的 RLVR 场景的一个真实(虽然较窄)范围边界,与第 10 节已经讨论过的更广泛的 agentic/多轮范围局限不同。

11f. “同家族”到底给 OPD 买来了什么,Cliff 为什么不需要

值得具体讲清楚当教师与学生差异较大时,OPD 内部到底会出什么问题,因为“共享分词器和推理风格”听起来像一个次要的注意事项,实际上却是一个真正坠定整个方法能不能用的硬约束。回想一下前面提到过的:OPD 全部的监督信号,是教师在学生自己的每一个 token 位置上的对数概率。这就要求教师和学生分词完全一致,而且更微妙的是,还需要教师自己学到的下一个 token 分布,对判断学生的选择来说是一个有意义的参考点。如果教师自己即便在推理正确的时候也从不会产生这种措辞或记号风格(一种风格上的不匹配,而非正确性上的不匹配),那么它对学生那个 token 的对数概率,反映的就更多是风格上的距离,而不是推理质量本身。表 2 中 OPD 表现较弱的结果与这个解释一致:它只在开源、家族相近的教师(Qwen3-32B、Gemma3-27B)上评测过,即便如此,它仍然同时输给了原版 GRPO 和 Cliff。Cliff 完全不需要这种对齐,因为它只需要教师对整句话对错给出一个判决——这个判断根本不需要匹配分词器或相似的推理风格,只需要对问题领域有足够的共同理解。正因为这样,Cliff 才能把一个前沿闭源教师和一个完全不同架构、不同分词器家族的开源学生搭在一起,这种组合 OPD 在结构上就不可能支持,除非额外引入跨分词器对齐机制(论文引用了专门针对这个跨分词器 OPD 问题的先前工作,例如 Niu 等人 2026 年的工作——这类机制 Cliff 根本不需要)。

11g. 关于奖励攻击的一个更广的视角

值得后退一步,把 Cliff 具体的长度攻击分析(第 8 节)和这篇论文暗含回应的更广泛的奖励攻击文献联系起来,因为这个角度能解释为什么论文会用整个附录去讨论一个看起来很狭隘的技术问题。在 RLVR 语境下,奖励攻击一般指:策略找到了某种方法,能提高自己被测量到的奖励,但并不对应任务能力的真实提升——因为长度与奖励存在伪相关而产出更长的响应,通过产出表面上像好推理却不真正正确的文本来利用 PRM 的盲点,或者(在 OPD 中)漂向任何能最小化教师惊讶程度的表面风格,而不管这种风格是否真的有助于解题。使 Cliff 自己的攻击风险(通过过大的 λ\lambda 导致的长度攻击)能够被严谨地分析清楚,而 PRM 的奖励攻击一般做不到这一点,正是因为论文坚持的简洁性:因为 Cliff 的 advantage 函数在每个 rollout 上只有三个可能的逐 token 取值(公式 4),整个可能的攻击策略空间就被压缩到了一个单一标量量(rollout 长度)上,并且有一个闭式的安全性条件(公式 11-13),而不需要对一个任意复杂的、学习出来的奖励模型做事后的经验性审计。这可能是这篇论文最可迁移的方法论教训,独立于它具体在 RLVR 推理任务上的应用:一个简单到足以容纳闭式最坏情况分析的奖励塑形机制,和一个需要事后经验性攻击审计的机制,是真正不同的两类产物——而这种可分析性上的差异,本身就应该被当作一个值得主动优化的设计目标,而不仅仅是选择简单机制的一个附带好处。

11h. 裁判定位误差如何传进策略梯度

前面的批判性分析指出,教师可能把 Pitfall Step 标早或标晚。这里进一步把这种误差写成策略更新里的量,才能看清它究竟破坏什么。设真实切分点为 pp^*,教师输出为 p^=p+δ\hat p=p^*+\delta。在 λ=0\lambda=0 时,有效前缀和错误后缀在重新居中前的 advantage 差为

ΔA=0Ainc=μμ(1μ)=μ1μ.(14)\Delta A = 0-A_{\text{inc}} = \frac{\mu}{\sqrt{\mu(1-\mu)}} = \sqrt{\frac{\mu}{1-\mu}}. \tag{14}

第一步来自公式(4):前缀值是零,后缀值是 AincA_{\text{inc}};第二步代入公式(3);第三步把分子分母同时约去 μ\sqrt{\mu}。注意偏移 bb 在两段中都会被减去,因此做差时完全抵消。于是,切分错一格并不是给整个 rollout 加一份均匀噪声,而是把切分点附近一个句子覆盖的 token 从一档 advantage 错放到另一档。

若平均每个推理句含 mm 个 token,则一次偏移 δ|\delta| 个句子的错误,会误分配大约 mδm|\delta| 个 token。把每个 token 的 PPO 梯度记为 gj=θlogπθ(aja<j,q)g_j=\nabla_\theta\log\pi_\theta(a_j|a_{<j},q),忽略 clipping 后,错误切分与真实切分之间的一阶梯度差近似为

ΔgΔAjB(p,p^)gj,(15)\Delta g \approx \Delta A\sum_{j\in B(p^*,\hat p)} g_j, \tag{15}

其中 B(p,p^)B(p^*,\hat p) 是两个切分点之间被错分的 token 集合。这个表达式是逐步得到的:策略梯度对每个 token 都是 advantage 乘以对数概率梯度;切分点以外两种标注完全相同,所以相减后消失;只剩边界区间,每项的系数差都等于公式(14)的 ΔA\Delta A

这揭示了一个重要的不对称性。若 δ<0\delta<0,教师把错误标得过早,一些本来正确的 token 被放入严厉的错误后缀,训练会错误压低好推理;若 δ>0\delta>0,教师标得过晚,一些已经错误的 token 被当成有效前缀而逃过主要惩罚。前者偏保守,可能降低样本效率;后者偏乐观,可能固化错误推理。论文用平均 p-dis 衡量距离,却没有分别报告这两种方向,这也是我认为下一版实验应补充“有符号定位误差”直方图的原因。

一个具体的误差量级例子

沿用第 4 节的组成功率 μ=0.25\mu=0.25,公式(14)给出 ΔA=0.25/0.750.577\Delta A=\sqrt{0.25/0.75}\approx0.577。若一句话平均 18 个 token,教师把 Pitfall Step 标晚两句,就有约 36 个已经处于错误链条中的 token 少受到 0.5770.577 的负向 advantage。其总“漏罚质量”约为 36×0.577=20.7736\times0.577=20.77 个 advantage-token 单位。这个量不能直接等同于参数变化,因为各 token 的 gjg_j 方向不同、PPO clipping 也会截断一部分更新,但它说明 p-dis 从 0 增加到 2 并非无关紧要的标注细节。

为什么这种噪声没有让 Cliff 实验崩掉?有三层缓冲。第一,误差局限在两个切分点之间,不像错误的 outcome 标签那样翻转整条 rollout。第二,组内重新居中会稳定总体尺度,虽然它不能修复局部错分。第三,模型在很多训练样本上取期望;只要定位误差不是系统性偏早或偏晚,方向不同的局部梯度扰动会部分抵消。明显的替代方案是让多个教师投票取中位切分点,它能降低方差,但把教师推理成本乘以裁判数;更实际的改进是只在教师置信度低、或教师与验证器不一致时触发第二次判断。

一个可操作的边界条件是:当平均 δ|\delta| 随 rollout 长度近似线性增长时,局部噪声就不再“局部”。例如长链推理中教师只能大致指出错误发生在哪一段,mδm|\delta| 可能占总序列相当大比例,此时 Cliff 会逐渐退化成一个带噪声的粗粒度奖励塑形器。面向 agent 轨迹扩展时,应把“句子索引”改成有语义边界的事件索引(思考、工具调用、工具返回、状态变更),并分别测量每种事件边界上的有符号误差。

11i. 教师调用成本:什么时候 Cliff 真比 PRM 便宜

论文强调“不需要训练奖励模型”,但这不等于裁判成本为零。设一次更新有 BB 个问题,每题采样 NN 条 rollout;判断一致而跳过教师的组占比为 uu;每条被判断 rollout 的输入与输出 token 成本分别为 cinc_{\text{in}}coutc_{\text{out}}。若每个混合组都判断全部 rollout,则单次更新的教师 token 成本近似为

Cstep=B(1u)N(cin+cout).(16)C_{\text{step}} = B(1-u)N(c_{\text{in}}+c_{\text{out}}). \tag{16}

推导很直接:BB 个组中只有 B(1u)B(1-u) 个需要教师;每个这样的组含 NN 条轨迹;每条轨迹需要读入题目、参考解和学生答案,再输出判断。训练 SS 步的总成本就是 SCstepSC_{\text{step}}。论文设置 B=64B=64N=12N=12S=200S=200;即使先不代入具体 token 长度,最坏情况下也有 64×12×200=153,60064\times12\times200=153{,}600 次 rollout 级判断。这里真正控制账单的不是“有没有 PRM”,而是 uu 有多大、提示词上下文有多长、教师能否批量推理。

降低成本有三种设计。批量裁判把同一问题的多条 rollout 放进一个请求,复用题目与参考解,优点是减少重复输入,缺点是长上下文可能让教师混淆样本边界。级联裁判先用便宜模型定位,只有低置信度案例交给强模型,优点是平均成本低,缺点是必须校准置信度,否则便宜模型的系统性偏差会被保留下来。规则检测器与 LLM 混合先抓编译错误、断言失败和可定位的代数矛盾,剩余语义错误再交给教师;它对代码尤其合适,但规则覆盖率会随领域变化,不能假设一次实现到处适用。

与 PRM 比较时还要区分固定成本和边际成本。PRM 先承担标注与训练成本 CtrainC_{\text{train}},之后每条 rollout 的打分成本较低;Cliff 几乎没有专用训练固定成本,但每轮都支付教师推理成本。若 PRM 每条轨迹成本为 cprmc_{\text{prm}},Cliff 每条有效判断成本为 cjudgec_{\text{judge}},两者在训练轨迹数 MM 上的粗略盈亏平衡点满足

M=Ctrain(1u)cjudgecprm.(17)M^* = \frac{C_{\text{train}}}{(1-u)c_{\text{judge}}-c_{\text{prm}}}. \tag{17}

这是从 Ctrain+Mcprm=M(1u)cjudgeC_{\text{train}}+Mc_{\text{prm}}=M(1-u)c_{\text{judge}} 移项得到的。若分母不为正,说明经过一致组跳过后,Cliff 的边际成本已经不高于 PRM,单从计算账面看不会出现 PRM 反超点;若分母为正,则训练规模超过 MM^* 后,预训练好的 PRM 可能更便宜。这里尚未计入 PRM 分布漂移后再标注、再训练的维护成本,也未计入 Cliff 使用闭源教师时的调用延迟和隐私约束,所以公式(17)是规划工具,不是论文结果。

11j. 实现前的最小审计算法

下面的检查不是论文另一个训练算法,而是依据论文公式和附录细节整理出的复现前审计。它把最容易出错的边界条件变成可执行顺序。

算法 2:Cliff 批次审计与安全回退
输入:同题 rollout 组 G,验证器 V,教师 T,最大长度 L_max
1.  用 V 检查每条 rollout 的最终答案,并记录是否因 L_max 截断
2.  若整组奖励全相同:返回零 advantage,不调用教师
3.  让 T 先独立生成参考解;若 V 拒绝参考解:回退到普通 GRPO
4.  对每条错误 rollout,让 T 返回第一个错误句子 p_hat
5.  若 rollout 被截断:强制令 p_hat = 0
6.  检查 0 <= p_hat < 序列句子数;越界则回退该条为 p_hat = 0
7.  将句子边界映射到 token 边界,记录映射后的索引
8.  用公式(3)计算 A_cor、A_inc;若组方差为零,返回零 advantage
9.  用公式(5)计算 b,再用公式(4)生成逐 token advantage
10. 数值检查整组 token advantage 均值接近 0
11. 记录教师-验证器分歧、有符号 delta 代理量、截断率与教师调用率
12. 把通过检查的 advantage 交给 PPO/GRPO clipped objective

第 3 步的替代方案是无条件相信教师自己的参考解,成本更低,但弱教师答错时会让后续定位失去锚点;论文实验明确显示 ground-truth filtering 对弱教师更重要。第 6 步选择 p=0p=0 而不是序列末尾,是保守回退:它会失去部分过程信用,却不会错误保护可能已错的 token。第 10 步之所以必要,是因为一个 off-by-one 的句子到 token 映射错误,或者公式(5)漏算某段长度,都会让重新居中失效;这个错误在 loss 仍能下降时也可能长期潜伏。

建议至少监控四条曲线:教师调用率 1u1-u、教师与验证器的一致率、平均相对切分位置 sˉ\bar{s}、截断率。调用率突然升高通常表示任务难度或策略分布变化;一致率持续下降提示裁判失配;sˉ\bar{s} 逼近 1 且响应长度同时增长,提示有效前缀激励可能被利用;截断率上升则说明 p=0p=0 的硬回退正在吞掉大量过程信号。把这些信号合起来看,比只盯最终准确率更早暴露训练问题。

12. 可复现性说明

论文明确给出了自己的 RL 框架(veRL)、四种对比方法的精确超参数(表 6,本文第 9 节复现),以及精确的基准数据集来源和许可证信息(表 5:GSM8k、MATH-500、DAPO-math、AIME、CodeContests、LiveCodeBench、DeepCoder、OpenThoughts,均为 MIT/Apache-2.0/CC-BY-4.0),这为独立复现提供了扎实的基础。数学和代码两个领域完整的裁判系统提示词都逐字收录在附录 D 里,也就是说给教师的确切指令——包括第 9 节讨论过的具体反过度惩罚规则——都是公开的,任何人想复现判断流程都不需要靠观察行为反推。一个值得指出的可复现性注意事项:论文正文通篇只用”SOTA”这个标签指代其中一个教师模型,没有在正文里给出具体的模型名称/版本(具体身份需要对照任何代码发布物才能确认,而本次审阅提取到的论文正文中并未链接代码仓库)——想具体复现 SOTA 教师那一组结果,需要先确认当时用的究竟是哪个前沿模型,因为”SOTA”这个说法在论文写作时指的模型,六个月后对读者来说未必还是同一个。

12b. 写给工程师的一句话总结

如果你现在手上正在跑一个 GRPO/DAPO 风格的 RLVR 训练流程,并且觉得自己的结果奖励太粗糙,想引入一点过程监督,但又不想承受训练一个 PRM 的完整工程代价,Cliff 提供了一个值得优先尝试的最小实现:找一个能用提示词驱动的现成 LLM、让它逐句判断学生解答的对错、在错误时标记第一个错误句子,然后把公式(3)-(5)直接接到你现有的 GRPO 实现里,就能拿到一个有数学安全性保障的两段式奖励信号。这个实现成本相对于收益来说非常低,但前提是你的任务确实有一个干净的自动验证器,且现有一个评判能力不需要太强的现成 LLM 可以当裁判。

13. 总结

Cliff 回答了一个提得很好的问题——“过程监督到底需要多细粒度?”——给出了一个出人意料地简洁的答案:每个 rollout 只需要一个二元切分点,由一个现成的 LLM 教师(而不是训练出来的奖励模型)定位,就足以在 12 组测试过的(学生、教师、领域)组合上,有意义地超越纯结果导向的 GRPO 和在线策略蒸馏。这个方法的吸引力在于它的简洁:不需要训练新模型,不依赖教师和学生共享分词器,而且默认设置(λ=0\lambda=0)有一个真正的最坏情况安全性证明背书,而不只是一个经验性的默认值。论文诚实地收录了一个教师自身判断与人类专家不一致的案例(附录 E,案例 3),这是科学坦诚的一个好迹象,论文对自己尚未测试过的领域也保持了恰当的谦逊——agentic、多轮场景仍是未来工作。如果”空真值蕴含”这个直觉在这个方法扩展到更难、更长、更开放式的推理任务时依然成立,“只找第一个错误”或许会证明自己是一个出人意料地经久耐用的过程监督设计原则,而且工程成本只是训练一个专用过程奖励模型的一小部分。