推理时计算与验证器
不改权重,靠采样、搜索、工具与检查把额外计算换成更可靠的答案
Test-time Compute · Inference-time Scaling · Verifier
- 推理时扩展与扩大训练规模有什么区别?
- 并行采样、串行推理和搜索分别适合什么任务?
- 为什么候选数增加会出现边际收益递减?
- 验证器错误时会发生什么?
- 怎样在准确率、延迟和成本之间分配预算?
- 基础模型给出候选分布,而非保证正确答案。
- 额外采样或搜索扩大被探索的解空间。
- 多样性决定新计算是否带来不同尝试。
- 验证信号区分更可靠与更差的分支。
- 选择、修正和提前停止把信号转成质量收益。
- 相关错误、弱验证器与预算上限造成收益递减。
1训练时扩展与推理时扩展直觉
把同样多的一倍算力花在训练阶段还是花在每一次请求上,表面上是同一笔账,实际是两种不同的产品决策:一个是部署前一次性支付的固定成本,一个是每个请求都会发生的边际成本。
训练时扩展把更多计算投入权重学习。这笔成本在模型部署之前支付,此后被所有请求共享。无论后来的问题是难是易,权重更新带来的能力提升对每个用户都在生效,单个请求的边际成本几乎不变。训练算力直接改变模型参数本身,得到的是一个能力更强但已经冻结的模型。
推理时扩展则把这笔计算按请求投入。模型参数保持不变,额外计算被用来改变模型如何使用现有参数和外部工具:生成更多候选答案、执行搜索、调用工具、对候选进行验证。它的核心优点是预算可以随难度动态路由——对难题多花预算,对简单题少花预算。代价同样直接:每个请求的延迟、费用和峰值能耗都会随之上升。更重要的是,推理算力只能放大权重和上下文中已有的知识,无法凭空创造出其中完全缺失的事实。
把两者放在一起比较时,输入包括训练预算、请求难度、推理预算、延迟费用和知识边界,输出是在训练时扩展与推理时扩展之间的选择。因果链是:训练计算改变权重并被所有请求共享;推理计算按请求增加候选、搜索、工具和验证,可动态路由却直接增加服务成本。两者的共同边界在于,无论投入多少计算,都不能保证创造出训练与上下文完全缺失的事实。
2四种主要计算方式工程
推理时扩展的额外计算不是一种均质的资源:额外 token、额外候选、搜索节点和工具调用提供的是不同形态的收益。把预算投错形态,计算量增加而正确率不动。
更长的串行轨迹让模型在一段连续推理里逐步分解、计算、检查和修正。它擅长强依赖的任务——下一步依赖上一步的中间结果,写错一步会沿链条向后传导。此时增加并行候选帮不上忙,因为分支在源头就已经分叉,真正需要的是把单条链做深。
并行候选解决的是覆盖问题。当一个问题存在多个相对独立的解法路径,单条链可能一开始就选错了方向,同时生成多个候选再从中选择,能显著提高命中正确解法的概率。它适合解法之间依赖弱的任务,每个候选可以独立推进。
显式搜索则把推理过程变成有状态的过程:保存已展开的节点,按策略扩展候选,用评分函数剪枝。它介于串行与并行之间——既保留多条路径,又通过评分决定哪些路径值得继续投入。适合状态空间呈分支结构、需要系统探索而非碰运气的任务。
工具执行通过调用代码解释器、检索系统、数学求解器或交互环境取得模型权重之外的新证据。它的收益与前三种不同:前三种是在模型已有的知识上做更多加工,工具执行则引入外部信息,弥补模型或上下文里缺失的事实。
选择哪种形态,取决于任务的可验证性。数学和代码常有强检查器:候选答案对不对、测试是否通过,反馈信号清晰且廉价,多花计算几乎总能沿着正确方向改进。开放式写作只有模糊的偏好反馈,没有一个客观判据告诉你哪个候选更好,额外搜索很容易优化错目标——计算越多,离真实意图可能越远。
因此先诊断瓶颈,再选择计算形态:输入是任务的依赖深度、解法覆盖、状态空间、外部可验证性和工具可用性,输出是四种形态之一。深依赖用串行,解法多样用并行,有状态分支用搜索,缺新证据用工具。瓶颈判断错误,是推理时扩展最常见的浪费来源。
3候选数与边际收益数学
并行候选的收益不是线性的。每新增一个候选,覆盖率的提升都比上一个候选小,原因可以从最理想的情形开始推导。
假设每个候选完全独立,且单次尝试的成功概率为 p,那么单个候选失败的概率是 1 − p。k 个候选全部失败,需要这 k 次独立尝试同时失败,概率为 (1−p)ᵏ。取补集,至少有一个候选成功的概率就是:
P_coverage = 1 − (1−p)ᵏ
新增第 k 个候选带来的覆盖增益,等于前 k−1 个候选全部失败、且第 k 个候选成功的概率:
P(k) − P(k−1) = (1−p)ᵏ⁻¹ × p
由于 0 ≤ 1−p < 1,这个增益随着 k 增大而指数衰减。前几个候选把大部分容易覆盖的成功情形都覆盖掉了,后面的候选只能去覆盖越来越小的剩余失败空间。
这个式子是一个理想上界,现实中几乎总是达不到。真实的多个候选共享同一个模型和同一条提示,错误高度相关:模型若在某一类问题上存在系统性缺陷,所有候选往往在相似的地方一起失败,独立性假设随之失效。其次,覆盖只是必要条件,系统还必须识别出哪一个候选是成功的;若验证器选错,候选池覆盖再高也兑现不了正确率。因此 k 增大不会自动带来全部理论收益,实际收益通常低于上界。
候选覆盖的输入是单次成功概率 p、候选数 k 和候选相关性,输出是至少一个成功候选的理想概率 P_coverage。独立假设下 P_coverage = 1 − (1−p)ᵏ,新增候选的覆盖增益随 k 增加而递减;真实候选共享模型与提示,通常相关并低于该上界。这个式子只估计候选池本身覆盖正确答案的能力,不包含验证器能否选对。
4验证器决定搜索方向机制
候选生成之后,搜索本身并不能告诉你哪一个是对的;决定搜索朝哪里走的,是验证器。
验证器可以只检查最终答案,也可以给中间步骤打分。结果验证适合有明确终态的任务——答案对错可以由一个客观终态判定,比如测试是否通过、等式是否成立。过程验证则对每一步推理给出反馈,能够在错误分支还未展开到终点时就提前剪掉它,节省后续计算。它的代价是过程标注成本远高于终态标注,而且评分者可能把某一种解题风格误当成正确性:步骤写得规整、符合训练数据的常见套路,未必代表推理真的正确。
验证器信号越独立,越可信。编译器和形式化证明器通常比模型自评更独立——它们执行的是机械规则,而不是同一个模型对自身输出的判断,因此不容易与生成过程犯相同的错误。但它们仍要检查覆盖范围、版本与跨领域漂移:一个编译器只能验证它支持的语言和特性,一个证明器只在其形式化系统内给出保证,换到未覆盖的领域,信号强度就会下降。
验证器同时也是攻击面。只要评分规则存在漏洞,搜索就会主动找到高分但错误的输出——评分器奖励什么,搜索就集中生产什么,这种现象就是奖励投机。候选空间越大、搜索预算越足,被系统性利用的漏洞就越致命。
验证器的输入是候选答案或过程、明确的正确性契约、测试规则、版本和领域,输出是通过、失败、分数或修正反馈。结果验证检查终态,过程验证提前剪枝,编译器和形式化规则通常比同源自评更独立;但任何验证器都有覆盖漏洞。搜索会主动利用评分漏洞,所以高分不等于真实正确。
5搜索不是无限写思维链边界
推理时扩展很容易被误认为"让模型多写一些思考文字"。有状态的探索和同一错误的冗长改写是两回事,区分它们要看每一次扩展是否改变了搜索状态。
有效的计算需要四样东西:状态、动作、停止条件和反馈。状态记录搜索已经走到哪里,动作是合法的下一步,停止条件决定何时不再投入,反馈告诉搜索这些动作是好是坏。在这个框架下,每次扩展都应该产生新候选、填补证据槽位或改变验证状态。如果一个 token 序列只是在用更长的篇幅重复同一个错误——同一个错误的结论、同一条走不通的路径——它不带来任何新信息,也不是新探索,只是消耗预算的冗长改写。
把推理轨迹公开展示给用户,也不会让内部计算更可靠。展示长度与计算质量没有因果关系:一段很长的公开文本可能只是低信息重复,而真正有价值的探索可能只体现在内部状态的几次变化里。系统可以保留必要的中间状态、使用隐藏草稿或结构化工具调用来完成探索,同时向用户提供可核验的简洁解释——解释负责让用户检验结论,探索负责找到结论,两者长度不必一致。
状态搜索的输入是当前状态、合法动作、新证据、停止条件和反馈,输出是可追踪的状态变化与候选。每次扩展应当填补证据、改变验证状态或产生不同候选;重复生成同一错误的冗长文字不算新增探索。向用户提供的简洁可核验解释与内部计算长度,本来就是两件事。
6预算分配与停止策略工程
搜索不会自己知道何时收手。预算分配要回答的问题是:继续搜索的期望收益,什么时候已经低于它带来的新增延迟和费用?这需要一个停止策略,而不是无条件地把预算用完。
分配的第一步是估计难度。先用轻量模型对请求做一个廉价的难度或不确定性判断,再决定投入档位:简单请求直接回答,困难请求才升级到更大的模型或更多的候选。这一步把昂贵的计算留给真正需要它的请求。
停止则依赖验证信号。一旦出现强验证证据——测试通过、证明闭合、检查器确认——就可以提前停止,而不是机械地跑完预设的最大步数。反过来,为了给最坏情况兜底,还要设置硬上限:token 数、工具调用次数、墙钟时间和金额上限,防止单次请求失控。
路由策略的质量要用按任务切片的曲线来评估:每一类任务上,质量随成本如何上升、延迟随成本如何上升。好的路由策略优化的是单位成本的质量收益,而不是让所有请求都使用最大预算——后者只是把平均质量抬高的同时把平均成本也抬得没有意义。
这里还有一个容易被忽视的失效模式:路由器可能通过把困难请求错误地降级来降低平均成本,而平均指标看起来仍然很好。因此要记录被错误降级的困难样本,单独检查它们的表现,防止路由器学到的只是"少花钱",而不是"把钱花对"。
预算策略的输入是难度估计、校准后的不确定性、验证结果、token、调用次数、墙钟时间与金额上限以及任务价值,输出是预算档位、提前停止、升级或报告未知。简单请求短答,困难且可验证的请求扩候选,出现强证据就停止,同时记录被错误降级的难例。目标是单位成本的质量收益,而不是所有请求都用最大预算。
7把因果链连起来综合
把前面几个环节串起来,推理时计算要兑现成质量收益,必须完整走通一条因果链,其中任何一环断裂,投入的计算都会空转。
链条的起点是基础模型给出的候选分布。分布只说明哪些答案更可能,不保证其中一定有正确答案——覆盖的第一步取决于模型有没有把正确解法放进可采样的范围里。额外采样或搜索的作用是扩大被探索的解空间:更多候选、更多分支、更多路径。但扩大解空间只在多样性成立时才有意义;如果新生成的候选彼此高度相似、反复落入同一类错误,那么新增计算就没有带来不同的尝试,只是重复抽样同一片失败区域。
接下来,验证信号负责区分更可靠的分支与更差的分支。没有这一层,搜索不知道朝哪个方向前进,候选再多也只是堆在那里。最后,选择、修正和提前停止把验证信号转成实际的质量收益:选出得分最高的分支,修正接近正确的分支,在强证据出现时停止投入。
收益递减则来自三个位置:候选的错误相关性破坏了多样性,弱验证器提供了错误的区分信号,预算上限切断了本可继续改进的路径。三者任何一个生效,都会让新增计算的边际质量下降。
这条因果链的输入是基础候选分布、探索多样性、验证信号、选择修正和预算上限,输出是对"额外计算为什么产生或没有产生质量收益"的解释。新增计算先扩大覆盖,再由验证器识别,最后由停止策略兑现。它的用途是诊断:当推理时扩展没有带来预期提升时,沿着链条逐层检查,找到失效的那一环。它本身不构成新的正确性保证。
8四个代码候选怎样兑现计算收益运行示例
用一个代码修复的数值例子可以把前面的链条算清楚。假设模型单次修复的成功率是 35%,系统为每个问题生成 4 个候选。"至少有一个候选正确"和"系统最终选对"是两个不同的事件,对应两个不同概率,整个流程如图 1 所示:从难度路由进入四候选生成,再经过编译与测试验证,出现强证据后提前停止。
图 1 中的额外计算通过"扩大候选集合 + 独立验证"兑现收益:并行采样只提高正确候选出现的机会,验证器决定系统能否找到它。逐步算下去:
先按独立假设用 1 − (1−0.35)⁴ 得到 82.1%,这是上界。真实候选共享同一个模型,错误相关,实测覆盖只有 68%——四个候选常常一起卡在同一个盲点上,独立式明显高估。接着,验证器只在候选池里确实含解时才谈得上选择,而它的选择准确率是 85%。端到端成功要求两个事件同时发生:候选出现且被选中,所以是 0.68 × 0.85 = 57.8%。
从 35% 到 57.8% 是有价值的提升,但成本近似为 4 倍的候选生成再加上验证开销。收益对验证器质量极其敏感:若选择准确率只有 55%,端到端变为 0.68 × 0.55 = 37.4%,收益几乎被吃掉;若候选高度同质,增加 k 也不会接近独立公式的上界。改进的方向因此是同时优化多样性和验证,而不是只扩 token。
失败边界同样清晰:验证器只能检查它编码的契约。当单元测试漏掉并发隔离时,搜索会更高效地找到"通过测试但仍有漏洞"的补丁——搜索在优化测试分数,而测试分数没有完全代表真实正确。应对方式是保留隐藏测试、保护验收和权限边界,让验证契约覆盖真正要保证的性质。代码案例的输入是单次成功率 35%、k=4 候选、实测覆盖 68% 和验证器选择准确率 85%,输出是候选覆盖、选择率与端到端成功 57.8%。先用独立式得到 82.1% 上界,再以实测覆盖替代,最后算 0.68 × 0.85;候选出现和最终选对是两个事件。
| 量 | 计算 | 结果 | 含义 |
|---|---|---|---|
| 至少一个正确(独立上界) | 1−(1−0.35)⁴ | 82.1% | 候选池覆盖上界 |
| 错误相关后的实测覆盖 | 标注 100 题中 68 题含正确候选 | 68% | 共享盲点使独立式高估 |
| 验证器从含解集合选对 | 85% | 0.85 | 选择并非完美 |
| 端到端成功 | 0.68×0.85 | 57.8% | 仍高于单次 35% |
9预算路由、误区与学习路线路线
如果所有请求都固定使用最大的候选数和最长的轨迹,那么绝大多数简单请求都在为极少数困难请求的边际收益买单。预算路由的价值恰恰在于按信号区分对待:
强外部验证且候选便宜的任务是扩 k 的理想场景,但前提是验证器真的覆盖了要保证的性质;难度估计误判会让简单题被错误降级;开放式偏好任务如果只用模型自评,容易陷入迎合与模式坍塌,需要明确 rubric 和人工评价兜底;高风险不可逆动作必须先在沙箱中模拟,执行前取得审批,采样多数票不构成授权;预算耗尽时如实报告未知,比硬凑答案更诚实。
学习路线可以按依赖关系分层。先修概念是采样参数、概率、推理模型和代码执行。本页的核心是并行候选、串行轨迹、搜索、验证器、提前停止与预算路由。紧邻的延伸概念包括自一致性、思维树、反思和后训练。工程层面的延伸是模型路由、评测、奖励投机、可观测性和人在回路。
上线后的评估要画质量—成本—p95 延迟前沿,并按难度、领域和验证器类型切片。判断任务需要深度还是覆盖,可以在相同总 token 下比较长单轨迹与多个短候选;只看总成功率会掩盖路由器把困难领域或少数领域错误地降级。预算路由的输入是任务难度、验证强度、候选成本、风险可逆性、SLO 和历史切片表现,输出是 k、轨迹长度、模型选择、沙箱审批或停止并报告未知。强验证低成本任务可以扩 k,高风险动作只在沙箱模拟并在执行前授权,开放偏好任务使用明确 rubric 与人工评价。上线应报告质量成本 p95 前沿和困难切片的误降级情况。
| 路由信号 | 预算动作 | 风险 |
|---|---|---|
| 强外部验证、低成本候选 | 扩大 k,命中后提前停 | 验证覆盖漏洞 |
| 高置信简单题 | k=1 或短轨迹 | 难度估计误判 |
| 开放式偏好任务 | 少量候选 + 人评/明确 rubric | 自评迎合与模式坍塌 |
| 高风险不可逆动作 | 在沙箱模拟,执行前审批 | 不能靠采样多数授权 |
| 无进展或预算耗尽 | 停止并报告未知 | 强行给答案造成幻觉 |
| 层级 | 概念依赖与延伸 |
|---|---|
| 先修 | 采样参数、概率、推理模型、代码执行 |
| 本页核心 | 并行候选、串行轨迹、搜索、验证器、提前停止与预算路由 |
| 紧邻 | 自一致性、思维树、反思、后训练 |
| 工程延伸 | 模型路由、评测、奖励投机、可观测性和人在回路 |
- Self-Consistency Improves Chain of Thought Reasoning:多路径采样与一致性选择。
- Let's Verify Step by Step:过程监督与验证器。
- Tree of Thoughts:显式搜索、评估与回溯。