CAPO
Paper · arXiv 2025 · 2508.02298

CAPO:请一个更大的模型批改每一步,再把惩罚落到那几步的 token 上

RLVR 只给整条回答一个 0/1,答对但中间算错和答对且步步正确拿到同样的奖励。CAPO 不再预测每一步的「未来价值」——那要额外训练 critic 或 PRM, 既贵又容易被钻空子——而是让现成的 70B 级 LLM 一次前向读完 rollout,列出哪几步错了,只给这几步的 token 扣分,再在 GRPO 的组内归一化上做一次裁剪更新。

Guofu Xie, Yunsheng Shi, Hongtao Tian, Ting Yao, Xiao Zhang, Jun Xu · 中国人民大学高瓴人工智能学院 · 腾讯微信搜索 arXiv 2508.02298 ↗ 代码 andyclsr/CAPO ↗
TL;DR · 30 秒抓住核心

GRPO 把整条回答当成一个动作,同一个 ri 复制给每个 token(§2)。于是「答对但推理有错」和「答对且全程正确」在梯度上没有区别,模型学不会稳定地走对的路。

CAPO 的关键判断是:过程信用不该去估价值,而该去查对错。让 GenPRM 在一次前向里对每个步骤给出确定性的批评(第几步错了),采样 N 份再投票,把索引交出来——没有蒙特卡洛,也没有可被策略反推的概率打分。

然后是非对称的奖励塑形:先给所有 token rv·C,再给错误步骤的 token 扣 P,且 C > P。只要答对,过程再糟也比答错强;在这个前提下才比过程。

代价是每条 rollout 额外若干次 70B 前向(主实验 N=4)和一个会出错的裁判;收益是所有 backbone 的 All Mean 都高于 GRPO-Rule,最明显地出现在难题与 1B 模型上,幅度 0.7–2.9 个百分点。

31.3 → 37.0
Qwen2.5-7B 数学平均 pass@1
GRPO-Rule → CAPO-MajorVote(Table 2)
18.3 → 21.8
Llama-3-1B OOD 平均
GRPO-Rule → CAPO-Intersection(Table 3)
N → 35.0
Qwen2.5-1.5B OOD 平均
批评数 2 / 4 / 8:33.2 / 34.1 / 35.0(Figure 3)
01

一个 0/1 奖励平摊给整条回答,等于放弃信用分配

先建立一个共同认知:结果正确不等于推理正确,而现在的 RLVR 分不出两者的差别。

RLVR 的做法很干净:规则验证器(数学题里是 Math-verify)给出二值奖励,对为 1、错为 0,用 GRPO 在组内做标准化。 论文 §2 把这种做法写成一个式子:Âti = (ri − mean(Ri)) / std(Ri),对这条回答里的每一个 token t 都相同。

问题在于,同一道题的回答质量差别很大,而差别恰恰在回答内部。附录 E 给了四份 rollout:两份都答对,其中一份推演干净直接,另一份绕了弯、走了错路却碰巧算对; 另两份都答错,其中一份只在最后差一个数,另一份从第一步策略就全错。GRPO 会把前两份按同一份正奖励更新,后两份按同一份负奖励更新。

核心代价

正确的步骤没有被强化,个别错误也没有被单独惩罚

§2 的说法是:缺少细粒度反馈,模型无法区分「部分正确」和「完全错误」的推理,也难以强化对的步骤、惩罚个别的错。从 RL 的角度看,这相当于把序列决策简化成一个 contextual dueling bandit——整条回答是一个动作,信用分配这一步被跳过了。

所以真正要回答的问题不是「怎么把奖励变密」,而是:能不能在不引入新训练模型、又不被策略钻空子的前提下,指出一条回答里哪几步错了? 论文的答案几乎是字面意义上的——找一个大得多的模型,让它读一遍并给出步骤编号。

02

细粒度信用有两条老路,一条靠估计、一条靠标注,都不够可靠

论文把它们和自己的方法放进 Table 1 的五个维度里对照:数据、调用次数、可靠性、测试时扩展、细粒度。

估计型

PPO 的价值函数、基于 Shapley / 注意力的奖励密集化

PPO 用 value model 给每个 state 估未来回报;奖励密集化(Chan et al. 2024 的注意力信用、Cao et al. 2025 的 Shapley 信用)把序列级奖励拆到 token。

卡在哪:它们都在估计一个不可验证的量。价值模型自身有两种优化目标,信用不可靠;密集化依赖一个奖励模型,策略可以学会利用它的偏差——也就是 reward hacking。

PRM 型

过程奖励模型,逐步打分

PRM 能给出步骤级奖励,但要做两件事:高质量的人工步骤标注,以及在线 RL 里每一步都调用一次模型(Table 1 记为 N 次)。

卡在哪:它把过程奖励当作「当前状态的未来回报」来预测,受采样有限和 policy / completion 模型错配影响,噪声大。更糟的是在 Best-of-N 上优化 PRM 会出现「过程→结果漂移」(Zhang et al. 2025b),过程监督反而退化成只看答案。

方法(Table 1)高质量数据推理调用次数可靠奖励测试时扩展细粒度信用
PPO不需要1否否是
奖励密集化 RL不需要1否否是
PRM需要N否否是
CAPO不需要1是是是

「可靠奖励」在原文是 “Providing Reliable Rewards”。CAPO 的「1 次」指每条 rollout 合并一次批评调用;主实验实际采样 N=4 份批评再投票,这一点见 04 节。表中的 N 是大于 1 的数。

这张表的含义是:前三条路各缺一格,而 CAPO 声称全满。它能不能满格,取决于两个设计——一个确定性的裁判(3.1),和一个不让过程信号压过结果的奖励结构(3.2)。

03

裁判只答「哪几步错」,奖励用 C > P 保证「答对永远赢」

三个部件:单次前向的 GenPRM 批评、投票聚合成错误步骤集合、非对称的 token 级奖励与组内归一化。

3.1 过程信用:让 LLM-as-GenPRM 一次生成全部步骤的判断

对训练题 q 从 πθold 采样 n 条 rollout {yi}。每条 rollout 按 \n\n 切成步骤,包上 <step_k>…</step_k> 标签,连同题目和批评 prompt I 一起发给 GenPRM,采样 k 份批评:

{cj}j=1..k ~ πGenPRM(· | I, q, yi)    ⟶    Si,j = ExtractIndices(cj)
§3.1 · 一份批评是一个文本,从中抽出「错误步骤编号」的集合 Si,j

关键是批评的形状:prompt(附录 F)要求裁判先写 “Judgment: Is the solution correct? X”,再在 <incorrect_steps> 标签里用逗号列出错误步骤编号。 它回答的是「第几步错了」,而不是「这一步值多少分」。前者是可验证的离散判断,后者是概率估计——这就是论文说的“deterministic, binary evaluation”。

k 份批评用投票聚合成一个最终集合 Si*。论文正文给出两种:

交集 Si∩ = ⋂j Si,j      多数 Simaj = { s | count(s) ≥ k/2 }
§3.1 + 附录 E · 另有三类:贪心(k=1)、并集(⋃,高召回)、平均(每步扣 weight = count(s)/k,不做硬阈值)

五种聚合对应五种偏置:交集要求每份批评都点名,精度最高、召回最低;并集只要有一份点名就算错,召回最高;多数介于两者之间;贪心只用一份批评,最容易被噪声带偏;平均不设阈值,把点名次数变成扣分力度。 这份集合最后被翻译成 token 集合 Terri:错误步骤覆盖的全部 token。

3.2 信用分配:先给整条,再扣错步

token 级奖励就是 Eq. 1:一个整条奖励,加上一个只落在错误步骤上的惩罚。

Rti = rv · Wwhole − 𝕀(t ∈ Terri) · Wprocess
Eq. 1 · rv ∈ {0,1} 来自规则验证器;Wwhole、Wprocess 论文简称 C、P

取 C = 2, P = 1,四种情形的奖励正好是 {+2, +1, 0, −1}。论文用 MORL 的线性标量化来表述这个选择,但真正约束它的只有一条不等式:C > P。 只要 C 严格大于 P,「答对但过程错」的 +1 就一定高于「答错但过程对」的 0——任何一条通往正确答案的轨迹都排在所有通往错误答案的轨迹前面。过程信号只在同一结果的样本之间做区分。

为什么不能对称?对称的 C = P = 2 时,「答对、过程错」= 2 − 2 = 0,「答错、过程对」= 0 − 0 = 0,两种完全不同的情形拿到同一个奖励,模型无从分辨。

组内归一化:把奖励变成 advantage

Âti = ( Rti − meanall tokens(R) ) / stdall tokens(R)
Eq. 2 · 均值与标准差在整批 n 条 rollout 的全部 token 上算——不是按 token 位置分组,而是所有 token 共享一个统计量

这一步和 GRPO 同构,只是统计量从「每条回答一个标量」变成了「每个 token 一个值」。由于 −P 只落在错误步骤上,答对但有小错的轨迹,其错误 token 会拿到低于组均值的 advantage,其他 token 高于均值;GRPO 不会做这种拆分。

作者在 §3.2 里记录了两条经验观察,解释了 C > P 不只是「保险」:Observation 1——早期从过程学更难,攒够了正确步骤也未必通向正确答案,甚至拖慢训练;Observation 2——后期过程信号变得关键,用来在拿到同一结果的众多回答里继续区分优劣。 附录 Figure 4 给出了反例:C=2、P=5 的过程主导配置下,模型学会的是变啰嗦,而不是做对。

自己动手:同一道题、同一个裁判,只换投票规则

下面是论文附录 F 的一条真实案例的简化演示。题目是「求 v 使 (−21−√301)/10 是 5x²+21x+v 的根」,rollout 在第 5 步漏了一个符号,后面每一步都沿用错误的式子。 GenPRM 的 prompt 要求它独立检查每一步,所以批评的名单是 step_5 到 step_11,不会在第 5 步之后全部停下。 演示里用 4 份批评、10 个步骤:灰 = 没点名,强调色 = 点名。点任意步骤看它的 token 奖励,切投票规则看规则如何改写名单。

当前选中

默认选中 step_5:它是真正的出错点,4 份批评全部点名,任何规则都会判错。再点 step_6(3/4 点名,交集放过、多数与并集判错)和 step_4(仅 1/4 点名,只有并集判错),就能看出投票规则张力的来源。

这个演示简化了什么?点开看与论文设置的差异

步骤文字取自附录 F 的案例(求 v 使 (−21−√301)/10 是 5x²+21x+v 的根),原文 rollout 有 13 步,GenPRM 判错 step_5–step_11;演示压成 10 步、4 份批评,为的是让四种投票规则给出不同结论。四份批评是演示构造的变体,不是论文里的真实采样。

投票规则取自论文定义的五种:交集、并集、多数(count(s) ≥ k/2)、贪心(k=1)、平均(weight = count(s)/k)。论文正文只说「平均」给每个步骤一个连续惩罚权重,没有写它如何进入 Eq. 1;演示按 rv·C − weight·P 呈现,这是对原文的直接延伸,不是原文公式。

C=2、P=1 取自 §3.2 的示例,也是 Table 4 消融里最优的一行。演示假设整条回答答对(rv = 1),所以 token 奖励只可能是 +2 或 +1——看不到「答错、过程对」的 0 和「答错、过程错」的 −1,那两档只需把 rv 换成 0。

真实步骤按 \n\n 切分再包 <step_k> 标签(附录 C、D),Qwen 系列推理格式天然这样分隔;演示按同一规则画成 10 段。

04

多出来的是一次 70B 前向与 N 份批评,训练循环本身仍是 GRPO

CAPO 没有新模型、没有新数据、不训练裁判;工程代价集中在裁判侧,可拆到别处跑。

把 CAPO 放回一个 GRPO 迭代里,策略侧的动作完全没变:采样、算规则奖励、算 advantage、做带裁剪比的更新。变化只有一处——advantage 从「每条回答一个数」变成「每个 token 一个数」,而这个数里多了一项由裁判给出的惩罚。

环节GRPOCAPO出处
裁判模型无Qwen 系列用 Qwen2.5-72B-Instruct;Llama 系列用 Llama-3-70B-Instruct,均未微调§4.1
裁判采样—temperature 0.7、top-p 0.9、max tokens 2048附录 D · Table 6
批评份数—主实验 N=4§4.1
步骤切分—按 \n\n 切分,包 <step_k> 标签附录 C、D
逐 token 奖励只有 rvEq. 1:rv·C − 𝕀(错步)·P§3.2
advantage按回答组归一化Eq. 2:全部 token 统一归一化§3.2
采样每题 16 条 rollout,global batch 192,rollout 温度 0.7 / top-p 0.9附录 D · Table 5
KL 系数0.01;格式奖励 0.2;PPO 小 epoch 4附录 D · Table 5
训练数据Llama-3-1B→MATH 7.5k;Llama-3-3B→DAPO-Math 9.8k;Qwen2.5-1.5B→MATH;Qwen2.5-7B→DAPO-Math(Qwen 先做 NuminaMath-CoT 860k SFT)§4.1

成本账要说清楚:Table 1 把 CAPO 记成「1 次推理调用」,指的是每条 rollout 只需一次性读完所有步骤、不再按步调用;但它在一次调用里采样 N 份批评,主实验 N=4,Figure 3 的最优点 N=8。 换句话说,相对 GRPO 多出的是 N ×(每条 rollout 的一次 70B 前向),与回答长度无关地摊在每个训练样本上。附录 C 的对策是:本地显存紧张时把 GenPRM 走 API,把这部分推理成本移出训练机。

为什么成本还能接受

它跟「强模型指导弱模型」这条已有路线一致

附录 C 把 CAPO 放进「用 70B 级模型或闭源 API 指导策略模型」的既有实践里:数据增强、轨迹精修、批评者。CAPO 的差别在于单次调用就拿到全部步骤的过程监督,而不是每步一次。

两个未细化的实现细节值得记住:第一,裁判被要求「独立检查每一步,不能因为上一步错了就判这一步错」——prompt 里的这条指令让裁判定位的是新的错误,而不是错误的传播;第二,评价用的是贪心解码的 pass@1、三次运行取平均,所以下面的差距不能简单读成「模型能力的提升幅度」。

05

一条串行的数据流:rollout → 批评 → 投票 → token 奖励 → 一个 advantage

把 03 节的三个部件按训练顺序排开,就是论文 Figure 2 的完整回路。

1 · 采样与切步 2 · 裁判 3 · 信用 4 · 更新 策略 π_θold 同一题采样 n 条回答 y_i 按 \n\n 切步,包 step_k r_v ∈ {0,1} Math-verify 规则判断 LLM-as-GenPRM 70B 级,不微调 一次前向读完所有步骤 生成 N 份批评 S_i,j 每份 = 错误步骤编号 投票 ⋂ ⋃ 多数 贪心 平均 → S_i* 错误步骤 → token T_err^i R_t^i = r_v·C − 𝕀·P C = 2 > P = 1 Eq. 1 组内逐 token 归一化 Â_t^i = (R − μ) / σ μ、σ 取自全部 token Eq. 2 裁剪目标 min(ρ·Â, clip(ρ)·Â) + KL(π_θ‖π_ref) avg over n, L_i 更新 π_θ 下一轮重新采样 裁判成本在回路外 下一轮 rollout:同一条题重新采样 n 条,重新请裁判
图 1:CAPO 数据流(依论文 Figure 2、§3 公式与附录 C 重绘)。蓝:策略侧;紫:裁判与投票;陶土红:信用计算——这是相对 GRPO 新增的唯一一环。
展开说明 ▸
  • 为什么评委不预测未来回报? 裁判的输出只是一个错误步骤编号列表。它不参与拟合任何价值函数,所以不存在「策略反向推导裁判的软评分」这条捷径;而规则验证器仍然决定答案对错,结果奖励的可验证性没有改变(§3.1)。
  • 裁判同时拿到标准答案。 附录 C 说 prompt 给出 ground-truth solution,把任务从「这段推理本身对不对」变成「在已知正确答案的前提下,找出推理在哪一步偏离」。代价是裁判需要标准答案,而适用场景本身就要有标准答案。
  • 代价在回路外。 裁判前向可以走 API(附录 C),不占策略训练的显存;但它与策略训练在同一轮内串行,决定每轮迭代的墙钟时间。
  • 形式上和 GRPO 完全同构。 只是把「每条回答一组标量」换成「整批 token 一组值」。这正是论文说 CAPO 能轻易套在 DAPO、VAPO、Reinforce++ 上的原因:改的是 Rt 的计算,不是更新规则。

这条流程里最容易被忽略的一点:投票发生在 token 奖励之前,且投票结果只改变「哪些 token 扣 P」。因此不同投票机制之间的差别,本质上是同一套奖励上的几种噪声处理方式,而不是几种不同的训练目标。06 节的投票结果也印证了这一点——所有变体都在 GRPO 之上,差异体现在幅度和适用模型。

06

每个 backbone 都能找到一个胜过 GRPO 的变体,但涨的是数学,不是 OOD

最好的变体比 GRPO-Rule 的 All Mean 高 0.7–2.9 个百分点;更大的差别藏在难题、裁判数量与权重配置里。

主结果:每个模型取最好的 CAPO 变体,对比 GRPO-Rule

模型最优 CAPO 变体OOD 均值数学均值All MeanGRPO-Rule All
Qwen2.5-7BCAPO-MajorVote40.837.037.836.1
Llama-3-3BCAPO-MajorVote38.331.031.029.7
Qwen2.5-1.5BCAPO-Intersection34.132.332.331.3
Llama-3-1BCAPO-Intersection21.818.818.815.9

均值由 Table 2 / Table 3 的单元格重算;OOD 均值 = GPQA Diamond、ARC-c、MMLU-Pro 的算术平均,数学均值 = 该表 Math 列(7B 与 3B 含 AIME24,1.5B 与 1B 的表中没有 AIME)。重算结果与原文报告的增量一致:7B「+3.5 数学 / +2.5 全部」、3B「+2.1 / +1.8」、1B「+3.5 OOD / +2.9 全部」、1.5B「数学 +1.7」。

把单元格拆开看,几个不对称很明显:

投票规则随模型规模翻转

附录 E · 小模型

1B / 1.5B:严格的交集最好

Llama-3-1B:Intersection 18.8,MajorVote 17.0,Greedy 16.9,GRPO-Rule 15.9。Qwen2.5-1.5B:Intersection 32.3,MajorVote 32.0,Greedy 31.1。

论文的解释:能力弱的模型需要高精度的纠偏压力,只学最无争议的正确步骤。

附录 E · 大模型

7B / 3B:宽松的多数与并集更好

Qwen2.5-7B:MajorVote 37.8、Union 36.8、Greedy 36.8、Average 36.7,Intersection 36.3(All Mean)。Llama-3-3B:MajorVote 31.0、Intersection 30.7。

论文的解释:强模型更复杂,交集里只要一份批评误判就会锁死探索。

以上 All Mean 均由 Table 7 / Table 8(附录,含 Greedy / Average / Union)或 Table 3 / Table 2 的单元格重算。注意 7B 上 Intersection 只是较低,并不低于 GRPO-Rule。

裁判数量:越多越好,且带来的是「约束而不是教条」

Figure 3 在 Qwen2.5-1.5B 的 CAPO-Intersection 上把批评数从 2 加到 8。OOD 均值 33.2 → 34.1 → 35.0,GPQA Diamond 17.5 → 20.5 → 22.1,ARC-c 60.4 → 60.0 → 61.1。 交集规则下,批评越多越难「全员点名」,所以有效错误集合在变小、惩罚在变轻——论文把这条趋势解释为:更多批评把噪声抹掉,让判断更准。 附录对比的 GRPO-GenORM 在同样加大 N 时收益要小得多、也不稳定(Figure 5、Table 10:OOD 均值 32.1 → 33.0 → 33.6)。

权重消融:C=2, P=1 最优,对称与流程主导都掉

配置(Qwen2.5-1.5B,Table 4)OOD 均值数学均值All Mean
CAPO (C=2, P=0.1)33.428.831.1
CAPO (C=2, P=5)33.027.430.2
CAPO (C=2, P=2) 对称32.828.530.7
CAPO (C=2, P=1)34.129.431.8

Table 4 只有 MATH-500、OlympiadBench、AMC23 三列数学,均值按这三列算;OOD 列与主表一致(GPQA / ARC-c / MMLU-Pro)。

排序在数学列上是干净的一边倒:P=1 > P=0.1 > P=2 > P=5。P=0.1 的过程信号几乎消失,退回近似 GRPO;P=2 对称造成 0 奖励重叠;P=5 过程主导,附录 Figure 4 显示模型变得啰嗦而准确率下降。 但 OOD 列并不严格单调(P=0.1 为 33.4,高于 P=2 的 32.8),论文的结论主要建立在数学任务和「层次结构」的论证上。

反直觉发现:把标准答案给裁判,不总是更好Table 9 · Qwen2.5-7B · CAPO-Intersection

附录 C 把「向 GenPRM 提供 ground-truth solution」当作提高可靠性的关键设计;附录 E 的 Table 9 却在 Qwen2.5-7B 的 CAPO-Intersection 上给出近乎持平的对照:不给标准答案(w/o gt)时 GPQA 24.4、ARC-c 69.9、MMLU-Pro 36.0,数学为 MATH-500 62.1、AIME24 30.6、AMC23 32.8,OOD 43.5、数学 32.4、All 37.9;给标准答案(w gt)时依次为 24.2、69.1、35.4,数学 62.3、31.2、34.5,OOD 42.9、数学 33.1、All 38.0。

差别多在随机波动范围内(GPQA 在 Table 12 中 CAPO-Intersection 为 22.2 ± 1.3),论文自身的结论也很克制:「并不总能带来明显优势,反而在通用推理上略有下降」。作者把它归因于标准答案与策略模型的解空间分布差得太远,反而给裁判注入噪声。

这一点和附录 C 的「提供标准答案把任务变成错误定位」在叙述上不完全一致;页面在 07 节把它列为一个未解决的张力。

07

它假设「有对错可查、有更强的裁判、步骤切得动」,三条都不总是成立

CAPO 的增益来自把信用变成可验证的判断;它的边界也来自同一个选择——只能处理「能查对错」的过程。

边界一

裁判的上限就是训练的上限

附录 C 把可靠性建立在两点上:裁判要比策略强很多(70B+ 指导 1B–7B 的师生关系),以及裁判能拿到标准答案。学生越接近裁判,误判就越可能以「正确步骤被点名」的形式进入奖励。 论文没有单独测量裁判的错误率(错报或漏报),也没有给出裁判系统性偏错时的缓解手段;投票只能抹平随机噪声,抹不平系统性偏差。

边界二

代价贴在每个样本上,不随回答变短而变小

每条 rollout 都要请 70B 读一遍,主实验 N=4、Figure 3 的最优点 N=8;调用次数随 rollout 数线性增加,与回答长度和训练步数无关。 附录 C 的对策是用 API 外包,但这只是换了付款方;论文没有给出相对 GRPO 的墙钟时间或 token 成本数据,也没有在 1B / 1.5B 小模型上讨论收益与成本是否划算。

边界三

步骤切分是硬编码的,实验只在数学上

附录 C 和 D 说得很直白:当前实现按 \n\n 切步,再包 <step_k> 标签,因为 Qwen 系列天然这样组织推理。作者把「让裁判自己切步再评估」写成未来工作。 全部四个数学基准加三个 OOD 基准都是单轮、有标准答案的题;开放写作、多轮工具调用这类没有明确步骤边界、也没有唯一答案的任务没有实验。

边界四

增益不大,且几乎全在数学列

All Mean 上最好的 CAPO 变体比 GRPO-Rule 只高 0.7–2.9 个百分点;7B 上 OOD 不升反降 0.5(41.3 → 40.8),1.5B 的 Greedy 变体在 All 上比 GRPO 低 0.3。 增长几乎全部来自数学列,而 OOD 只是同一套数学训练后模型的附带评测;论文没有在 OOD 任务自身上训练 CAPO。

还有一处叙述上的张力,值得单列:附录 C 说给裁判标准答案能显著简化任务、提高可靠性,附录 E 的 Table 9 却在 7B 上看到一次近乎持平的对照——OOD 与数学各自朝相反方向微动。 两个结论可以并存,但论文没有给出让读者判断「什么时候标准答案帮得上忙」的标准。

什么时候别用:先问三个问题

一句话总结:CAPO 把「估计过程价值」换成「验证过程对错」。这让信用分配变得可验证、也几乎不改变训练代码,但它把可靠性、成本与适用面全部押在裁判和切步规则上——它解决的是「有对错」的问题,而不是「没有对错」的问题。