过去几年,LLM 的进步主要靠三条路:预训练数据/算力扩展、后训练优化(RLHF/RLAIF)、测试时推理扩展(test-time compute)。这篇论文提出了一个被忽视的第四条路——验证扩展(Verification Scaling)。
逻辑很简单:生成能力可以通过采样多条轨迹再选最好的来放大(oracle Pass@K 在 Terminal-Bench V2 上能到 98.9%),但选哪条需要可靠的验证器。传统的 LM Judge 输出离散分数(比如 1-5 分),在复杂任务上大量打平——Terminal-Bench 上 27% 的比较会 tie。训练专门的 Reward Model 虽然更精细,但受限于训练数据,跨域泛化差。
LLM-as-a-Verifier 的核心改动非常直觉:不要只取概率最高的那个 token 作为分数,而是取整个打分 token 分布的期望值。
具体做法:给模型一个提示,要求用字母表示的 1-20 分给两个候选轨迹打分(用字母而非数字是为了提取 logprobs),然后从 <score_A> 和 <score_B> 标签处提取 top-K token 的 logprobs,计算加权期望得到连续分数。
这个连续分数有三个可扩展的维度:
从 G=1(标准 judge)扩展到 G=20。更细的粒度让模型内部信念有更多空间投射,减少了把不同质量的方案映射到同一分数的概率。SNR 从 0.775 提升到 0.799,验证准确率从 73.1% 提到 77.5%。
同一方案评 K 次,取均值。本质是蒙特卡洛方差缩减。K=1 到 K=16,准确率从 74.7% 提到 77.5%,且连续分数在 K=1 时就已经追平了 K=16 次的离散 judge。
把"这条轨迹对不对"拆成多个子标准分别评估再聚合。在代码任务上拆成 Specification(是否满足需求)、Output(输出格式)、Errors(有无报错)三项,任一单项准确率 75-76%,三项聚合到 78.3%。
要从 N 条轨迹里选最好的,朴素做法是 O(N²) 两两比较。论文提出了 Probabilistic Pivot Tournament(PPT),复杂度降到 O(Nk),k 远小于 N:
在四个基准上,用同一个验证框架、不训练任何东西,直接 SOTA:
| 基准 | Pass@1 | Oracle | LLM-as-a-Verifier |
|---|---|---|---|
| Terminal-Bench V2 | 83.1% | 92.1% | 86.5% |
| SWE-Bench Verified | 76.1% | 84.4% | 78.2% |
| RoboRewardBench | — | — | 87.4% |
| MedAgentBench | 70.2% | 75.0% | 73.3% |
机器人领域的成绩尤其亮眼——zero-shot、无需训练,直接超过专门在 ~45k episode 上训练的 RoboReward-8B(81.4%)和 Robometer-4B(78.8%)。
论文发现验证分数与任务进度高度相关(Spearman VOC):成功的轨迹分数单调上升,失败的轨迹分数停滞。这为监控 agent 运行状态提供了自然接口——作者还做了 Claude Code 和 Codex 的扩展(TurboAgent),可以实时显示验证分数,在 agent 走偏时及时干预。
机器人任务上,VOC 达到 0.966,远超 RoboReward-8B 的 0.877 和 TOPReward 的 0.565。
把验证分数作为 dense reward 直接喂给 RL 算法: