推理时计算:用更多算力换更好答案
过去十年,「更大」几乎等于「更强」:更多参数、更多数据、更多预训练算力。这条由 scaling law 撑起的曲线让大模型能力随训练投入平滑提升。但 2024 年之后,工程界发现还有第二根杠杆:在模型权重冻结之后,针对每一个具体请求多投入推理算力,同样能换来更好的答案。这就是推理时计算(test-time compute,也常写作 inference-time compute 或 test-time scaling)。本文先把它放回 scaling law 的框架下理解,再逐一审视 Best-of-N、自洽、树搜索、长链式思考四类主流方法,说明它们如何与过程奖励模型(PRM)配合,最后用一段 Python 演示 Best-of-N 加投票选择,并讨论这套打法在延迟、成本与适用边界上的真实取舍。
一、训练时计算与推理时计算:scaling law 的延伸
训练时计算(train-time compute)是指预训练、微调、强化学习阶段一次性付清的算力。经典的 scaling law(Kaplan 等 2020;Chinchilla 的 Hoffmann 等 2022)告诉我们:在合理范围内,把参数规模 N、训练数据量 D、训练浮点运算量 C 往上调,测试损失会按幂律下降。这部分算力由厂商承担,被均摊到此后所有请求上,无论请求是难是易,每一条都免费享受同等的「能力底座」。
推理时计算则是另一根轴:权重不再变化,额外算力按「每个请求」单独支出。多采样几次、多想几步、多搜几叉,都会直接变成账单上的输出 token 数。OpenAI 在 2024 年 9 月介绍 o1 模型时给出了一张关键图示:o1 的准确率随「训练时计算(更多强化学习)」与「推理时计算(更多思考时间)」两条轴同步、平滑地上升,且两条曲线的形态都接近幂律而非立即饱和。这把「推理时多花算力」正式推到了与「预训练多花算力」对等的地位。
两根提升能力的杠杆(摘自 OpenAI o1 与 Snell 等,arXiv:2408.03314 的框架)
训练时轴(一次付清、全员均摊)
预训练 / 微调 / RL 的浮点运算量 C
决定「权重里装下了多少能力」
推理时轴(按请求付费、可只对难题买)
采样数 N、思考长度 T、搜索宽度 W
决定「已有能力被多充分地释放」
关键差异:推理时算力可由调用方针对单个问题动态开关,
简单请求可以完全不买,难题才加预算。
必须强调一个边界:推理时计算把「权重里已经潜藏的能力」更充分地转化为正确答案,它并不创造权重里不存在的能力。对一个基础模型根本不会做的超难问题,靠反复采样与搜索往往买不到突破,这类情形仍要靠更多的训练时计算。Snell 等的论文在 FLOPs 匹配对比下发现,在「小模型本来就有一定成功率」的题目上,合理的推理时策略可以让小模型反超 14 倍大的模型;但在最难的题上,结论逆转,预训练依旧更划算。
二、四类主要方法
1. Best-of-N 采样
Best-of-N(又称拒绝采样 rejection sampling)是最朴素的推理时扩展:对同一个 prompt 独立生成 N 条完整回答,再用一个「选择器」挑出最好的一条。选择器的强弱决定了收益大小。
最早的验证器思路来自 Cobbe 等(Training Verifiers to Solve Math Word Problems,arXiv:2110.14168,已核验):他们训练一个 solution-level 验证器给每条候选解答打分,测试时生成很多候选、取验证器评分最高的一条,在 GSM8K 上显著优于直接微调的基线。选择器可以是结果奖励模型(ORM)、PRM,也可以是外部测试套件。代价很直白:生成 N 条意味着最多 N 倍的生成 token,不过 N 条之间彼此独立,可以并行,因此瓶颈通常是总算力预算而非墙钟时间。
2. 自洽 self-consistency(呼应提示集成)
自洽(Wang 等,Self-Consistency Improves Chain of Thought Reasoning,arXiv:2203.11171,已核验)用「多数表决」替代 Best-of-N 里的验证器。它先对同一个问题采样一组多样化的推理路径(而非只取贪心那条),再对每条路径抽取最终答案、按答案做多数投票,选得票最高的答案。其核心直觉是:一道复杂推理题往往有多种思路,但正确思路通常会收敛到同一个答案。论文在 GSM8K 上把链式的贪心解码提升了约 17.9 个百分点。
自洽与「提示集成(prompt ensemble)」思路相通:提示集成通过对同一问题构造多个不同 prompt 并聚合结果来提升鲁棒性;自洽则是固定同一个 prompt,在解码阶段采样多条不同推理路径,再对答案投票。两者都把「单次脆弱的输出」换成「多次独立尝试的聚合」,区别在于一个动输入(prompt),一个动解码(sampling)。它最有效的场景是最终答案可判等(数学、选择题、可执行的代码),在开放式生成上多数表决并不适用。
3. Beam 搜索与树搜索
Beam Search 把打分提前到生成过程中:每生成一步就保留当前累计分数最高的 k 条部分路径,再各自续写、逐步剪枝。相比 Best-of-N 等全部生成完再选,它能在中途就丢掉已经走偏的路径,省下算力。
更激进的是树搜索。Tree-of-Thoughts(Yao 等,arXiv:2305.10601,已核验)把推理拆成「思维(thought)」节点构成一棵树,让模型对中间节点自我评估、向前看、必要时回溯,从而在 Game of 24 这类需要搜索与规划的任务上把 GPT-4 的链式提示成功率从 4% 拉到 74%。树搜索的天花板最高,但工程也最重:它对「半完成的尝试」需要一个价值估计,而这正好把接力棒交给了 PRM。
4. 长链式思考 long CoT
长链式思考(long chain-of-thought)是 2024 年推理模型(如 OpenAI o1 系列、DeepSeek-R1)的原生做法:模型在吐出最终答案之前,先生成一长串中间思考 token,在内部完成推敲、自我验证、试错与回溯。它通常只采样一条(或极少几条),代价体现在「思考 token 很长」而非「采样很多次」。
与前三类「靠外部编排多采样/多搜索」不同,long CoT 把推理时计算内化了:思考过程由模型自己把控,单次调用即可。工程上它最易落地(一次 API 调用、无需自写聚合逻辑),前提是基础模型本身已被训练得「会思考」。这类方法的系统细节多来自厂商博客与 R1 技术报告(待核实),但其「单样本、长思维」的形态已成为与 Best-of-N、搜索并列的又一条推理时扩展路线。
三、与过程奖励模型 PRM 的配合(呼应 process-reward-models)
推理时计算真正能「选对」而非「选快」,往往依赖一个可靠的评分信号,而过程奖励模型(PRM)正是为此而生。PRM 把奖励从「只看最终答案对错」下放到「对每一步推理打分」,从而能在推理阶段充当搜索的指南针。关于 PRM 的训练数据与逐步打分细节,可参见本站《过程奖励模型 PRM:让推理逐步可验证》一文。
PRM 与四类方法的关系可以这样理解:
PRM 在推理时计算中的两种角色
角色 A 路径打分器(用于 Best-of-N)
对 N 条完整解答各步打分,取「逐步正确概率的最小值/乘积」为路径分
选路径分最高的一条输出
角色 B 节点价值估计(用于 Beam / 树搜索)
对「还没写完的半截路径」估一个价值,指导剪枝与展开
例如 rStar、LLaMA-Berry 的 MCTS 都以 PRM 为节点价值
Snell 等的两条轴最终都收敛到验证器:
轴一(修订自己的输出)用自我批判当软验证器
轴二(采样+搜索)用 PRM/ORM 当硬验证器
Snell 等的论文(arXiv:2408.03314,已核验)把「针对稠密、基于过程的验证器奖励模型做搜索」列为扩展推理时计算的两大机制之一,并比较了 Best-of-N、Beam Search、lookahead search 三种搜索方式。换言之,没有验证器,推理时计算多半退化成「多花算力但不知道选哪条」;PRM 提供的逐步信号,是把额外算力转化成准确率的关键。
四、代价与取舍:延迟、成本、何时有效
推理时计算不是免费午餐,落地前要先想清三件事。
延迟方面,Best-of-N 与自洽的 N 条采样相互独立,完全可以并行,因此墙钟延迟大致等于「单条耗时」而非 N 倍,但总算力消耗仍是 N 倍。树搜索因为要逐节点展开与回溯,往往更偏串行,延迟更难压。long CoT 则是把时间花在单条回答的超长生成上,延迟与思考长度正相关。
成本方面,推理时计算直接放大输出 token 数。以客服分诊这类负载估算(来源:公开技术博客,待核实):若普通调用平均约 200 个输出 token,而推理版在此基础上额外多出约 3000 个隐藏思考 token,输出 token 就从 200 涨到约 3200,账单结构性地翻数倍。这正是「按请求付费」双刃剑的另一面:你只对真正需要的难题买了算力,但每一次购买都比普通调用贵得多。
何时有效,三条经验法则:
第一,答案要可验证。自洽依赖答案判等,Best-of-N/PRM 依赖验证器,数学、代码、带单元测试的任务收益最大;纯开放性、没有客观判据的文本生成,聚合往往帮倒忙。
第二,难度决定最优分配。简单题本来就容易命中,多采样边际收益很小,Snell 等甚至发现简单题用 Best-of-2 就够了;困难题才值得上更多搜索。他们的「计算最优」策略按题目难度自适应分配预算,相比固定 Best-of-N 把扩展效率提高了 4 倍以上。
第三,买不到缺失的能力。推理时计算释放已有潜力,不能补足权重里没有的知识或推理力。对最难的题,靠重采样与搜索依然收益有限,此时更应回到训练时计算。
五、代码示例:Best-of-N 加投票选择
下面用约四十行 Python 演示核心流程:对一个问题生成 N 条候选解答,每条带「最终答案」与「验证器分数」;先用多数投票筛出共识答案,再在命中共识的候选里取验证器分数最高的一条作为最终输出。这样既用到了自洽的投票,也用到了 Best-of-N 的验证器择优,正是「Best-of-N + 投票选择」的组合。真实场景里,候选由大模型多次采样产生,验证器是 ORM/PRM 或测试套件;此处用确定性 mock 代替。
# 模拟一个「会偶尔出错」的答题器:真实场景里是对同一 prompt 多次调用大模型 API
# 不同 seed 代表不同采样得到的不同推理路径与最终答案
def mock_solver(question, seed):
pool = {
"小明最初有几只苹果": ["3", "3", "5", "3", "2"],
}
return pool.get(question, ["未知"])[seed % 5]
# 模拟一个验证器:对一条解答给出 0 到 1 的分数,代表「看起来对不对」
# 真实场景里这里是 ORM / PRM,对整段或逐步输出一个标量
def mock_verifier(solution_text):
if solution_text == "5" or solution_text == "2":
return 0.4
return 0.9
# Best-of-N:对同一个问题生成 N 条候选,每条记录答案与验证器分数
question = "小明最初有几只苹果"
n = 5
candidates = []
for i in range(n):
ans = mock_solver(question, i)
score = mock_verifier(ans)
candidates.append({"answer": ans, "score": score})
# 第一步:对最终答案做多数投票,找出共识答案(自洽思路)
from collections import Counter
votes = Counter(c["answer"] for c in candidates)
majority_answer, majority_count = votes.most_common(1)[0]
# 第二步:在答案命中共识的候选里,取验证器分数最高的一条(Best-of-N 思路)
winners = [c for c in candidates if c["answer"] == majority_answer]
best = max(winners, key=lambda c: c["score"])
print("各候选:", candidates)
print("投票共识:", majority_answer, "得票", majority_count, "/", n)
print("最终选择:", best)
运行后,五条候选的答案分布为 3/3/5/3/2,多数投票得到共识答案「3」(3 票);在命中「3」的候选里,验证器分数都是 0.9,因此最终选择就是答案「3」。把 mock_solver 换成真实采样、mock_verifier 换成 PRM,并把它套进多轮树搜索展开,就接近生产环境里「自洽投票 + 验证器择优」的推理时计算管线。
小结
推理时计算是 scaling law 之外的第二根杠杆:在权重冻结后,针对每个请求多投算力来释放已有能力。它的四种主流形态——Best-of-N 采样、自洽投票、Beam/树搜索、长链式思考——分别对应「并行多选」「多数表决」「结构化搜索」「内生长思维」四种思路,而它们的效果都高度依赖一个共同的开关:能否廉价地判断「哪条答案更好」。PRM 通过逐步打分充当这个开关,使搜索与择优真正成立。代价上,推理时计算按请求放大多倍输出 token,带来更高的单请求成本与延迟,且只对「答案可验证、难度适中、能力已具备」的问题划算;最优策略是按题目难度自适应分配预算,而非对所有请求一视同仁地堆采样。
参考与延伸阅读
- OpenAI,Learning to reason with LLMs(2024 年 9 月,官方博客,已核验)。给出 o1 同时随训练时与推理时计算平滑提升的关键图示,并报告 AIME 上 64 样本共识、1000 样本重排序相对单样本的显著提升。
- Charlie Snell、Jaehoon Lee、Kelvin Xu、Aviral Kumar,Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters,arXiv:2408.03314(2024,已核验)。注:该文作者来自 UC Berkeley 与 Google DeepMind,并非 OpenAI;提出「计算最优」分配策略,并报告在 FLOPs 匹配下小模型加推理时计算可反超 14 倍大模型(限于易/中等题)。
- Xuezhi Wang 等,Self-Consistency Improves Chain of Thought Reasoning in Language Models,arXiv:2203.11171(2022,ICLR 2023,已核验)。多次采样推理路径后对答案多数表决,GSM8K 提升约 17.9 个百分点。
- Karl Cobbe 等,Training Verifiers to Solve Math Word Problems,arXiv:2110.14168(2021,已核验)。训练 solution-level 验证器、测试时取最高分候选的 Best-of-N 范式源头之一,并发布 GSM8K 数据集。
- Shunyu Yao 等,Tree of Thoughts: Deliberate Problem Solving with Large Language Models,arXiv:2305.10601(2023,NeurIPS,已核验)。把推理组织成可评估、可回溯的树结构搜索。
- 延伸方向(待核实):DeepSeek-R1 技术报告与 OpenAI o-series 的 long CoT 训练细节、PRM 引导的 MCTS 实现(rStar、LLaMA-Berry)、以及 REBASE 等计算预算受限下的帕累托最优推理算法,建议结合原始仓库 README 与最新论文进一步核对。