Agon:让两个模型互相做推理裁判
有一个现象很反直觉:我们训练推理模型时,常常奖励的是“最后答案对不对”,但真正让人类相信一个解法的,是中间那条路有没有走稳。
在数学题和代码题上,最终答案可以被程序检查,所以 GRPO 这类方法很有效。模型做出一组答案, verifier 只看答案对错,再把正确 rollout 的概率往上推。问题是,这个奖励没有看见推理过程。一个模型可以写很长,反复试错、犹豫、回头、碰运气;只要最后撞上正确答案,整段轨迹都会被奖励。论文把这个瓶颈说得很尖锐:在 hard DeepMath 上,Qwen3-0.6B 经过 vanilla GRPO 后,pass@1 从 23% 到 30%,平均轨迹却从 6.1k 涨到 8.1k token。它不是更会想了,而是更愿意多想。
Agon 的想法,是把“谁来评分推理过程”这个问题换一种问法:如果没有逐步标注、没有过程奖励模型,能不能让另一个模型在解同一道题时,顺便成为你的裁判?
先把几个概念放在桌面上
Outcome reward 像只看考卷最后一格答案的老师。它很便宜,因为数学答案或单元测试可以自动验证;但它看不见学生中间是不是靠蒙、靠绕路,还是靠真正的关键 insight。
推理轨迹密度 可以理解成每 100 个 token 里有多少有用判断。GRPO 容易提高的是“轨迹长度”,不是“密度”:多写几次“wait, let me reconsider”也许能增加命中率,但不一定增加每一步的质量。
Rival grading 是 Agon 的核心:让另一个模型读你的解题摘要,带着怀疑去重做题。如果它能抓住你的符号错误、跳过你的死路,并给出正确答案,那么你的那段推理就在竞争中输了。这里没有人给每一步贴标签,推理质量是通过“是否被对手利用或击败”间接显现出来的。
Draft-and-challenge 则是训练时的具体形态:一个模型先写草稿,另一个模型读草稿摘要后挑战;下一步角色交换。两边都在学,裁判也在变强。

为什么“最后答案奖励”会把模型推向长篇试错
先看最朴素的训练循环。给模型一道题,让它生成一组解答;只要 <answer> 里的最终结果能被 verifier 判定为正确,这条 rollout 就拿到奖励。GRPO 再把这一组 rollout 内部标准化:比组内平均更好的,概率上升;比平均差的,概率下降。这个机制的优点很明显:不需要人工标注推理步骤,也不需要训练一个脆弱的过程奖励模型。
但它的盲点也正来自这里。两条解法只要答案一样,在奖励眼里就几乎一样。一条可能五步内发现关键代换;另一条可能绕了两千 token、试了三个错误方向、最后侥幸回到正确答案。结果奖励不会说:第一条更干净,第二条更浪费。于是对 hard problem 来说,模型最便宜的策略不是提升推理密度,而是增加尝试次数:多写一点,多回头一点,多列几个 case,总有机会撞上答案。
这就是论文所谓 unscored trace。推理轨迹像一整段没有被阅卷的草稿纸,只有最后框出来的答案被打分。草稿纸越长,蒙对的机会越多;但草稿纸里的错误、犹豫和低质量步骤不会被直接扣分。
Agon 要补的不是 verifier。它仍然需要可验证答案:数学题要有答案检查,代码题要有单元测试。它补的是另一个维度的信号:让一条推理轨迹在另一个模型面前暴露。如果这条轨迹的摘要里有漏洞,对手可能抓住;如果这条轨迹有好思路,对手也可能借用。但最终奖励不来自“说得像不像好推理”,而来自“在同一道题上,谁把谁比下去了”。
第二个模型为什么不是简单 ensemble
很容易把 Agon 误解成“多模型投票”或 “Mixture-of-Agents”。论文刻意区分了这件事。
普通 ensemble 是合作式的:多个模型给答案,互相参考,最后趋向共识。这有时能提高鲁棒性,但也有两个问题。第一,如果模型强弱不同,弱模型可能稀释强模型的判断;第二,如果两个模型太像,它们会犯相同错误,互相参考也只是把同一个盲点说两遍。
Agon 要的不是共识,而是对抗性的差异。两个模型必须强度相近,否则会退化成一个弱模型模仿强模型;它们也必须行为不同,否则会退化成自我复读。论文的实现方式很节制:不是同时加载两套完整模型,而是在同一个冻结 base 上挂两个 LoRA adapter。第二个 rank-16 adapter 大约 10M 参数,约为 base 的 2% 额外参数,再加优化器状态;不是 2× 模型成本。A adapter 标准 LoRA 零初始化,B adapter 在零矩阵附近加小高斯噪声;训练时又通过角色轮换接收不同梯度流,逐渐拉开行为。
这里要注意边界:论文没有证明两个 adapter 已经形成了可量化的“不同盲点”。作者很诚实地说,这是一种结构性假设,而不是被直接测量的事实。实验能说明的是:训练成“读对手草稿”的模型,比训练成“读自己草稿”的 self-refinement 控制更强;但这并不能单独证明盲点互补就是唯一原因。

一次 Agon 训练步到底发生了什么
Agon 的一个训练步可以拆成两段。
第一段是 drafter。假设这一步 A 当起草者,它从普通题目 prompt 出发,生成 N 个解法。A 在这部分拿到的是普通 GRPO 奖励:答案正确与格式正确。这个流的作用,是保证每个 adapter 仍然会从零开始解题,而不是只会当评论员。
第二段是 challenger。B 逐一读取 A 的解法摘要,再生成自己的解法。注意,B 看到的不是 A 的原始长思维轨迹,而是 A 在 reasoning 之后写出的 solution summary;最终答案也被隐藏,至少形式上避免直接抄答案。B 的 prompt 会提醒它:不要相信对手,要独立验证,目标是在对手错的时候自己做对。
奖励的关键在这里。合作版本的 reward 主要是 2 × correctness + format,对手只出现在上下文里,不出现在奖励里。Agon 的竞争版本再加一个 conversion bonus:当 B 正确而它配对的 A 草稿错误时,B 额外得分。论文写成直观的话就是:同样是做对题,做对一个对手已经做错的题,更值得奖励。
为什么不用更自然的 margin:c(B) - c(A)?论文给了一个很重要的技术解释。对 B 的动作来说,A 是否做对已经固定,它是 action-independent 的。简单相减里的 -c(A) 更像一个基线,在期望梯度里不给 B 新方向;经过 group-relative 标准化后,也很难真正形成“打败对手”的训练信号。conversion bonus 不一样,它乘在 B 自己是否正确上:只有 B 做对时,对手失败才会放大这条样本的权重。这样梯度会被推向“对手失败但我能成功”的上下文。
还有一个细节决定这个 bonus 是否有效:每个 challenger rollout 要看到不同的 opponent draft。这样同一组里才有不同难度的对手上下文。如果整组共享同一个隐藏对手草稿,conversion bonus 变成组内常数,会在 GRPO 标准化里基本消掉。论文的 shared-opponent ablation 正好验证了这个理论预期:结果是 32%,几乎贴着 vanilla GRPO 的 30%。

数字真正说明了什么
主实验在 DeepMath-103K 的 hard split 上做,训练集 3,000 题,held-out 300 题;使用 Qwen3-0.6B,group size N=8,LoRA rank 16,学习率 5×10^-5,一轮训练。评估时 temperature 0.6、top-p 0.95,每个 stage 采样一次,completion cap 是每 stage 15k token。所有训练方法按生成 rollout 数量匹配预算;pair-trained 方法推理时是两阶段 cascade,报告 A→B 和 B→A 里更好的方向。这个“更好的方向”是在 held-out set 上后验选择的,是一个需要记住的限制。
主表的结果很清楚:zero-shot 是 23%,vanilla GRPO 到 30%;self-refinement 控制是 32%,GRPO two-pass self-cascade 是 35%,未训练的 MoA 是 34%。合作式 exchange 到 46%。Agon,也就是 competition + exchange,到 61%。
这个结果可以拆成两段看。第一,信息交换本身有用:cooperative exchange 从 GRPO 的 30% 到 46%,增加 16 个百分点。第二,在相同 exchange 结构上,把 reward 从合作式改成竞争式,又从 46% 到 61%,增加 15 个百分点。论文的 headline “大约翻倍 GRPO”指的是 Agon 61% 对 vanilla GRPO 30%;“约八倍 MoA gain”指的是未训练 MoA 只比 GRPO 多 4 个百分点,而 Agon 比 GRPO 多 31 个百分点。
置信区间也值得看。论文给的是 300 个 held-out 问题上的 95% Clopper–Pearson 区间:GRPO 30% 的区间是 [25.0, 35.4],cooperative 46% 是 [40.3, 51.8],Agon 61% 是 [55.2, 66.6]。这些区间覆盖的是评估样本的二项噪声,不覆盖训练 run-to-run variance。换句话说,单次训练的差距看起来足够大,但论文没有证明多随机种子下方差也小。
更有意思的是长度。GRPO 的平均最终轨迹是 8.1k token,Agon challenger 的最终阶段是 3.5k。与两阶段未训练 MoA 的最终阶段 6.9k 相比,Agon 也短很多。论文没有把完整 cascade 的总 token 成本算清楚:Agon 还有起草阶段,且 challenger 需要额外 prefill 对手摘要。所以不能说它总体推理成本一定更低。能说的是:在最终回答阶段,它写得更短而 pass@1 更高。

这个结果是否只适用于一个模型、一套数学题?
论文做了三类外推检查。
第一是其他数学 benchmark 的 sanity check。还是 Qwen3-0.6B,同一 checkpoint 不再微调:GSM8K 上 zero-shot 62%、GRPO 68%、Agon 75%;MATH-500 上 zero-shot 45%、GRPO 52%、Agon 64%。提升还在,但绝对幅度小于 DeepMath-hard。这个现象符合论文叙事:Agon 最适合 hard regime,因为那里单模型更容易靠长轨迹试错,而 rival signal 更有空间发挥。
第二是规模和模型家族。Qwen3-0.6B 从 GRPO 30 到 Agon 61,增益 31 点;Qwen3-1.7B 从 46 到 70,增益 24 点;Qwen3-4B 从 59 到 71,增益 12 点。更强的 base 本来就离正确更近,Agon 的边际收益变小,但仍为正。论文还报告 Qwen3.5-2B 从 50 到 70,Gemma-4-E4B 从 58 到 73,说明排序不只在一个家族出现。
第三是代码任务。作者在 CodeContests easy-difficulty 子集上,用 Qwen3-1.7B、unit-test verifier、300 个 held-out 问题复现实验。zero-shot 18%,vanilla GRPO 24%,cooperative 29%,Agon 34%;平均长度从 GRPO 的 7.3k 到 Agon 的 3.9k。幅度小于数学,论文解释为 unit-test 奖励更稀疏、代码摘要 prefill 相对更重。这里能支持的是“方向一致”,不是“数学上的 31 点增益会在所有 verifier 任务复现”。
消融也强化了主机制:reward form 里 margin 版本 49%,conversion bonus 61%;固定角色 52%,角色轮换 61%;shared opponent 32%,per-rollout opponents 61%。这些数字一起说明,Agon 不是简单地“多一个 adapter”或“多跑一遍推理”就有效,而是需要可见的对手上下文、组内变化的对手难度、以及轮换角色让两个 adapter 都学会起草和挑战。
论文证明了什么,没有证明什么
这篇论文证明得比较扎实的,是一个窄而重要的命题:在有可靠 outcome verifier 的 hard reasoning 任务上,把两个强度相近的模型训练成起草—挑战的竞争关系,可以比单模型 GRPO、self-refinement、未训练 MoA 和合作式 exchange 得到更高 pass@1;这个效果在作者测试的数学、代码和几个模型家族里保持同一排序。
它也证明了一个工程上有吸引力的点:两模型竞争不一定要付出 2× 参数成本。至少在这个实现里,两套 LoRA adapter 共享一个 frozen base,第二个 adapter 的参数开销约 2%。训练和推理预算则不能被同样轻描淡写:训练按生成 rollout 数匹配,但没有审计总生成 token;推理是两阶段 cascade,有额外 latency;对手摘要的 prefill compute 没有被完全 equalize。
论文没有证明的也很重要。
第一,它没有证明“不同盲点”已经被直接测量。作者依赖初始化噪声和不同梯度流来制造 divergence,但没有给出错误集合互补度、行为距离或因果证据。Agon 的胜利说明这种设置有效,不等于解释机制已经完全闭合。
第二,它没有证明竞争比合作在所有多模型场景都更好。这里的竞争是在有 verifier、有配对 opponent draft、有 GRPO group 标准化的特定结构里成立。没有 clean verifier 的开放式写作、规划、事实问答,能否安全迁移还是未知。
第三,它没有证明真实 token 成本下降。3.5k 是 final-stage completion length,不是完整 cascade 总成本。论文自己也把完整 token-cost accounting 留给未来工作。
第四,所有 trained number 都是单次训练 run。300 题区间只能说明 held-out 采样不确定性,不能说明训练随机性。对一个新训练范式来说,这不是小事。
Big Picture:过程监督也许不一定来自“更好的裁判”
Agon 最有启发的地方,不是某个 benchmark 数字,而是它改变了过程监督的想象方式。
传统路线会问:我们能不能训练一个 process reward model,给每一步推理打分?这条路当然重要,但它依赖标签、偏好数据或更强裁判,成本高,也容易把裁判自己的偏差固化进去。Agon 走的是另一条路:不直接判断“这一步好不好”,而是让这一步进入另一个模型的解题现场。如果它有用,对手会借;如果它错,对手会抓;如果它只是冗长噪声,对手可能绕开。推理质量不再是一个静态标签,而是一个关系属性。
这很像两个人同时解题。一个人写下“我觉得这里可以代换”,另一个人看了以后说:“代换方向对,但符号错了,积分限也要反过来。”第二个人的纠正不需要逐字标注前者哪句话有几分,它通过最后谁解对来给出信号。Agon 把这个日常学习场景压进了 RL 目标。
如果这个方向继续发展,真正有趣的下一步也许不是让两个模型在文本里互读摘要,而是让它们交换更压缩的内部状态。论文最后提到 latent-space exchange、KV-cache injection、gated latent bridges。文本摘要有带宽瓶颈,也会丢掉模型自己未必能说清的中间表征;隐空间通信如果能稳定训练,可能让“对手评分”从读作文变成读脑电图。
但在那之前,Agon 已经给出一个清晰信号:当模型因为 outcome-only reward 学会“多写一点也许就能蒙对”时,答案 verifier 本身不一定够。你需要另一个会犯不同错误、也会变强的对手。不是为了投票达成共识,而是为了让你的坏推理在对方面前输掉。