推理时计算是第二条扩展轴——它也有自己收益递减的前沿。
预训练扩展在部署前买到能力;推理时扩展在运行时按查询买到准确率,方式或为内部(经 RL 训练、答题前先吐出长思考的推理模型,如 o 系列与 R1 类系统),或为外部(采样、搜索、核验)。本文把这两条轴框定为可相互替代的算力,勾勒计算最优的分配,并钉死额外思考何处停止见效——又何处开始有害。
花掉一个 FLOP 的两种方式:更大的模型,或更长的思考。
对一个固定的准确率目标,你有一笔预算,可以花在参数上(训一个更大的模型,并在此后每个 token 上永远为它付费),或花在测试时计算上(保留模型,只在难查询上每次多花 FLOP)。DeepMind 2024 年的结果与 2025 年的后续表明二者可相互置换:在许多推理任务上,一个小模型配上计算最优的测试时策略,可匹敌一个大得多、贪心运行的模型;测试时扩展甚至能让过度训练一个小模型成为计算最优之选。运维上要紧的重述是:模型规模是你在每次调用上都要付费的、被摊销的能力;测试时计算是你只在需要它的查询上才付费的、按需的能力。
内部扩展与外部扩展是同一根杠杆,归属不同。
内部:一个经 RL 训练、在答案前产出一段长私有链的推理模型(o 系列、R1 类)。你通过调高一个推理努力/思考预算设置来扩展;搜索与核验被烘焙进权重里。外部:你围绕一个普通模型编排采样、best-of-N、束/树搜索与核验器(前四篇)。内部更易运维,且常常按 token 校准得更好;外部给你一个显式、可检视的核验器,以及对预算的精确控制。它们可组合——对一个推理模型跑 best-of-N 就是两条扩展轴叠加——并且共享同一种收益递减形状。
计算最优的分配是按难度自适应的。
计算最优测试时扩展的头条发现:正确策略取决于策略模型、核验器,以及单查询难度,所以固定预算是浪费。计算最优策略会估计难度并路由:简单查询给近乎零的额外算力(单次,或许加点轻量自修订);中等查询给适度采样或带核验器引导的浅束搜索;只有困难的长尾才拿到完整的采样/深搜索预算。在每个查询上花同样的大预算,对占多数的简单查询几乎什么都买不到,又对它本不需要的部分一分没少花——纯属烧钱。
# Difficulty-adaptive test-time budget d = estimate_difficulty(q) # calibrated proxy, cheap if d < LO: ans = model.call(q) # single pass elif d < HI: ans = best_of_n(q, n=8, verifier=V) # moderate else: ans = beam_search(q, depth=D, verifier=V) # full budget
前沿会弯,过了弯点它会向下弯。
准确率作为测试时计算的函数是凹的、会饱和的,和自一致性曲线一模一样,原因也一样:边际样本/思考越来越多地重走已探索过的推理。更糟的是,2025 年"测试时计算悖论"的结果显示它可能掉头:越过一个与问题相关的临界点后,更多思考会让某些推理模型更不准确——过度思考、锚定在一个早期的错误承诺上,或把自己从一个正确答案里说服出来。不存在普适的最优预算;只有一个你必须度量的、按任务类别的拐点,越过它,开支就是负 ROI。
"它是推理模型,所以把思考预算拉满"既是成本错误也是准确率错误。在简单任务和重直觉的任务上,拉满预算会为零或负的准确率变化付出巨大的延迟/token 溢价。预算是按任务调的旋钮,不是拉到底的滑块。
这条轴真正见效的地方。
测试时扩展的回报最陡峭、最可靠之处,恰与搜索相同:可核验的领域(竞赛数学、带测试的代码、形式化/约束问题),以及那一困难长尾——在那里单次准确率是被度量出的瓶颈,且一个正确答案的价值远超推理溢价。它在简单查询上回报很差(没什么可想的),在没有核验器的开放式生成上回报很差(想得更多,选不更好),在紧的延迟/QPS 预算下回报很差(那个乘数付不起)。决定性的问题不是"这模型是不是推理模型",而是"这个查询是否有更多算力可转化的余量,以及我能否分辨出哪些查询是那样"。
在扩大预算之前先把难度路由器建起来。测试时扩展里 ROI 最高的一步不是"更多样本"——而是只把样本花在有余量的查询上,这通常会在抬高平均准确率的同时削减总成本。
诚实的取舍。
推理时计算是真实的、可替代的扩展——但它是凹的、会掉头,而且统一预算把绝大多数开支浪费在本不需要它的查询上。把预算当作由难度估计与核验器设定的、按查询的旋钮,按任务类别度量拐点并在那里停下:过了弯点,你就是在为持平甚至下滑的准确率线性付费。