第 37 章 运行时增加计算:采样、搜索、验证和停止
37.1 权重不动,也可以多做几次工作
Section titled “37.1 权重不动,也可以多做几次工作”即使事实齐全,第一次作答也可能选错运算。第 36 章先加总住宿费、再封顶的做法,把正确的 1430 算成了 1500。我们可以用更好的解答训练模型,也可以保持权重不变,让它多产生几个候选,再加以检查。这是两种不同的改动。
运行时增加计算(test-time compute),指为当前请求投入更多计算。它可以是生成更长的解题过程、多次采样、搜索其他解法,或者调用核验器,并不意味着每次尝试之间都在更新参数。第 29 章解释了采样怎样产生不同续写,第 36 章解释了为什么检查这些续写是另一项能力。
额外工作究竟换来了什么?如果只计算最后胜出答案的成本,就隐藏了被淘汰的候选;如果只算生成,把核验当作免费服务,又会偏袒昂贵的选择办法。本章公开全部候选,采用明确的预算口径;第 38 章再对真实的本地 KA-1 模型做运行侧适配比较。
37.2 四道题,以及所有候选
Section titled “37.2 四道题,以及所有候选”例 37.1:固定一个小候选池。 每道题都有两晚整元住宿费,限额均为每晚 750 元。分别封顶,再把允许金额相加,不得挪用额度。下表四个正确总额都能按这条规则手算。
直接回答和分步候选均为作者给定,不是模型生成结果。CPU 实验是在固定候选上重放控制流程,测量的是选择程序的行为和重放时间,不是语言模型准确率或生成速度。这样无需 GPU,也能逐步检查选择。原始候选池保存在 data/part-vi/budget-v1.json。
表 37.1:完整题集与候选池。 A、B、C 是每道题内部的候选位置。相同字符串也保留为不同次尝试。
| 费用 | 正确总额 | 直接回答 | 分步候选 A | 分步候选 B | 分步候选 C |
|---|---|---|---|---|---|
| 680、820 | 1430 | 1500 | 680 + 820 = 1500 | 680 + 750 = 1430 | 680 + 750 = 1430 |
| 400、300 | 700 | 700 | 400 + 300 = 700 | 400 + 300 = 700 | 400 + 300 = 700 |
| 800、900 | 1500 | 1500 | 750 + 750 = 1500 | 800 + 900 = 1700 | 800 + 900 = 1700 |
| 600、900 | 1350 | 1500 | 600 + 750 = 1350 | 600 + 900 = 1500 | 600 + 900 = 1500 |
分步表达式里的两个数,是声称允许报销的金额,不只是原始账单。因此第一题 A 的第二项金额是错的。第三题 B、C 则重复了同一种未封顶错误。不同调用可能犯相关的错误,文字多了,并不保证换了一种方法。
37.3 一单位预算能做什么
Section titled “37.3 一单位预算能做什么”本章横轴采用每道题最多允许的计入预算的调用数:生成一个候选算一次,调用核验器也算一次。这是明确规定的调用配额,不是说每次调用花费相同的时间、Token 或 FLOP。输入输出 Token 和耗时另行记录。
固定重放使用 ASCII 请求串 sum per night minimum costs 680 820 cap 750,每题只替换其中两晚费用。教学词法规则把一个单词、一段连续数字或一个非空白标点各算一个 Token。每条请求都是 9 个 Token,直接数字答案是 1 个,分步表达式是 5 个。这些是固定材料的教学 Token,不是 MG-2 或 API 的 Token。两种语言页面分析的是同一批原始字符串。
生成时读入全部 9 个请求 Token,再输出候选。核验时读取请求与候选,再输出一个 accept 或 reject 判定 Token。不假定前缀复用。因此直接回答花费 个教学 Token,分步回答花费 个,核验花费 个。重复和被拒绝的候选都要计入。真实模型应使用它的分词器、实际处理的上下文和实现中的计时,不能直接套用这套教学词法规则。
直接作答(direct)只尝试一次答案。思维链(chain-of-thought,CoT)方式先生成中间解题文本,再给答案;本例的“首条分步路径”取第一个分步候选。原始 CoT 提示研究改变的是输入示范,不是权重。本章给定的两类输出也不是对该论文实验的复现。可见步骤能为后续 Token 提供有用上下文,但仍是生成文本,不是完整的内部计算记录。Wei 等人说明了提示设定及其限制。
自洽性选择(self-consistency)采样多条解题路径,提取最终答案,再选择出现最多的答案。本例 vote 按指定顺序最多取三个候选;平票时保留最先遇到的答案。它数的是最终金额的票,不是比较哪段话听起来更有道理。真实模型还需要合适的采样方式和答案解析器,控制程序重放不会替模型创造多样性。Wang 等人给出了多路径采样方法。
本例的搜索加核验器按顺序尝试完整候选。每生成一个,就用第 36 章基于规则的金额检查核验;第一个合格金额出现后即停止。开始新候选前,必须预留一次生成和一次核验的预算。剩余不足两个单位便停止;如果没有合格候选,就弃答。这里题目信息齐全,弃答计为失败。这是一种范围很小的完整解答搜索。前缀搜索或树搜索还可以在中间步骤处分支、剪枝,但扩展、重复前缀、向前试探和检查都要计入预算。本章不实现树搜索算法。
37.4 沿着选择过程看,而不只看最后分数
Section titled “37.4 沿着选择过程看,而不只看最后分数”例 37.2:每题最多四次调用。 先用主顺序 A、B、C。直接回答只答对第二、三题,成绩为 2/4;首条分步路径 A 答对第二、三、四题,成绩为 3/4。
投票用完三个候选,每题花三次生成。第一题 1430 以二比一胜出;第二题三个答案都是 700。可是第三题中,错误的 1700 以二比一压过正确的 1500;第四题中,错误的 1500 又压过正确的 1350。最终只答对 2/4。更多采样文本,反而降低了相对于主顺序首条分步路径的成绩。
搜索在第一题先拒绝 A=1500,再接受 B=1430,两次生成、两次核验,正好用满四个单位。第二、三、四题的首候选立即合格,各用两个单位。因此搜索总计 次调用,四题全对。
表 37.2:预算上限相同,全部工作照实计入。 每行都是每题最多四次调用,允许提前停止。Token 总数按教学词法规则计算。末列是 CPU 控制程序实际重放的耗时,不是模型生成耗时。
| 方法 | 生成次数 | 核验次数 | 计入预算的总调用数 | 教学 Token 总数 | 正确题数 | CPU 重放,ms |
|---|---|---|---|---|---|---|
| 直接作答 | 4 | 0 | 4 | 40 | 2/4 | 0.011417 |
| 首条分步路径 | 4 | 0 | 4 | 56 | 3/4 | 0.013000 |
| 三路径投票 | 12 | 0 | 12 | 168 | 2/4 | 0.036916 |
| 搜索加核验器 | 5 | 5 | 10 | 145 | 4/4 | 0.029125 |
搜索的五次生成花费 个 Token,五次核验花费 个,总共 145 个。若只算四个返回答案,就漏掉了第一个被拒候选和全部核验。直接作答与首条分步路径虽然调用数相同,Token 总数却不同,因此这不是等 Token 实验。
37.5 质量曲线也会向下弯
Section titled “37.5 质量曲线也会向下弯”在主顺序下,把上限依次设为 1、2、3、4、6。直接作答与首条分步路径在一次生成后便停止。投票用过三个候选后,候选池已空,提高上限不会凭空增加候选。搜索则在接受、候选用尽或剩余预算不足时停止。
表 37.3:主顺序下,各调用上限对应的成绩。
| 每题最多调用数 | 直接作答 | 首条分步路径 | 投票 | 搜索加核验器 |
|---|---|---|---|---|
| 1 | 2/4 | 3/4 | 3/4 | 0/4 |
| 2 | 2/4 | 3/4 | 3/4 | 3/4 |
| 3 | 2/4 | 3/4 | 2/4 | 3/4 |
| 4 | 2/4 | 3/4 | 2/4 | 4/4 |
| 6 | 2/4 | 3/4 | 2/4 | 4/4 |
上限为 1 时,搜索凑不齐“生成加检查”这一对预算,根本不开始调用。上限为 3 时,首候选失败后只剩一个单位,也无法尝试第二个候选。投票只看两个候选时,平票保留首答案;加入第三票后,第一题改善,第三、四题却退化,净少答对一道题。
○ 直接作答 · □ 首条分步路径 · △ 投票 · ◇ 搜索加核验器
主顺序 A—B—C。生成一次、核验一次都各计一次调用;实际工作可以在上限之前停止。
图 37.1 把表中数据画出来,除了标签,还用不同线型与标记区分曲线。纵轴是四道题中答对几道,横轴是最大配额;未使用的预算不能偷偷算成实际工作。这些点展示固定候选池下的可能结果,不是某个模型家族的普遍曲线。运行时计算研究同样发现,结果依赖题目难度、核验器和成本定义。Snell 等人明确讨论了这些条件,并说明其报告的实验没有计入难度估计成本。
只看一个有利顺序还不够。重放前保留了三个确定性顺序:A—B—C、B—A—C、C—B—A。它们检查的是顺序敏感性,不是三个独立的模型训练种子。
表 37.4:改变固定顺序,重做每题四次调用的比较。
| 顺序 | 首条分步路径 | 投票 | 搜索加核验器 | 搜索调用数 / 教学 Token 数 |
|---|---|---|---|---|
| A—B—C | 3/4 | 2/4 | 4/4 | 10 / 145 |
| B—A—C | 2/4 | 2/4 | 4/4 | 12 / 174 |
| C—B—A | 2/4 | 2/4 | 2/4 | 12 / 174 |
最后一种顺序里,第三、四题各花四个单位拒绝了 C、B,尚未看到正确的 A。把上限提高到六,两题都能走到 A,成绩恢复到 4/4,但总成本为 16 次调用、232 个 Token。实际仍只有四道题,十二个“题目与顺序”结果不能算成十二种独立任务情境。
code/part-vi/core.py 可以复现每个选择和成本。data/part-vi/mechanism-run-v1.json 保存了每种顺序、方法和上限下实际测得的 CPU 重放毫秒数,以及完整调用和 Token 记录。计时包含控制程序、词法处理与核验工作,没有模拟语言模型生成。耗时很短,又依赖具体实现,不能用作服务延迟;第 38 章另行记录真实本地模型的完整调用。
37.6 停止条件要说明什么证据才算够
Section titled “37.6 停止条件要说明什么证据才算够”硬预算限制的是允许做多少工作,不保证答案正确。本例预留核验预算,避免把最后一个单位花在无法检查的回答上。提前接受可以省工作,前提是核验器在所声明的任务范围内值得信任。
如果换成第 36 章的子串核验器,早早接受就可能保留错误或无依据的回答。继续搜索,还可能找到更多能钻评分漏洞的候选。同一个模型反复同意某个答案,也可能来自共同错误。共识是可以观察的现象,不是独立事实来源。
应先制定停止规则,再看测试结果里哪个最漂亮。从调用、Token 或时间上限,以及针对任务的接受条件开始。在开发数据上比较:增加一档预算多答对了哪些题,又增加多少工作、引入哪些退化。看不到改善,就没有证据支持额外成本。即使还剩有希望的分支,截止时间也可能要求明确弃答或给出有限回答。有分歧时,如果仍有预算且核验器确实能检查,可以再查一次;分歧不能成为无限生成的理由。
现在把住宿题里的现行制度拿掉。十次看似合理、都按 600 元计算的解答,也无法证明现行限额究竟是 600 还是 750。需要的是最新来源。同样,反复描述可能的订单状态,也没有查询真实订单。已有必要信息,并且确实存在可用解法时,增加解题计算才有针对性。因此下一步要判断的,是究竟缺了哪一层。
37.7 本章小结
Section titled “37.7 本章小结”运行时增加计算,可以不改参数而改变选出的答案。比较时要采用同一套明确的资源口径,计入失败候选和核验,并公开停止与平票规则。更多工作可能改善、停滞,也可能降低质量。固定候选池重放解释的是控制过程,真实模型运行是另一类证据。反复一致或更长的解题文本,都不能提供缺失的事实。
37.8 习题
Section titled “37.8 习题”- 在主顺序下,给搜索每题最多三次调用。写出第一题的尝试和停止过程,再计算四题总成本。
- 主顺序投票从两个候选增加到三个,虽然修好了第一题,为什么总成绩反而下降?
- 若核验一次改算两个单位,生成仍算一个单位,主顺序搜索每题至少需要多少上限,才能四题全对?整套题实际花多少单位?
- C—B—A 顺序、每题六次调用时,计算搜索的生成次数、核验次数和教学 Token 数。这能说明怎样的顺序敏感性?
- 团队报告称:“20 个回答大多数都说 600,因此制度仍是现行的。”缺了什么证据?哪一章的区分能说明这个错误?
37.9 参考解答
Section titled “37.9 参考解答”- 第一题生成 A 后将其拒绝,花两次调用。只剩一个单位,凑不齐下一对调用,因此弃答。其余三题都在两次调用后接受 A,总计八次调用, 个 Token,答对 3/4。
- 两候选平票时保留 A。第三个候选使第一题答对,却使第三、四题答错。一次改善抵不过两次退化,正确题数从 3/4 降到 2/4。
- 每对生成与核验花三个单位。第一题需要两对,所以上限至少为六;其余各用三个单位,总计 。成本口径变了,必须重新画曲线,不能只给旧曲线换标签。
- 第一、二题各一对,第三、四题各三对,因此共八次生成、八次核验, 个 Token。换顺序可能需要更多工作才能接触到同一批正确候选,没有因此学会新的模型能力。
- 缺少现行权威制度版本。二十个相关输出不是二十个独立来源。第 36 章区分应用已提供规则与补出缺失事实;第 32、38 章也区分来源选择与答案生成。
37.10 参考文献
Section titled “37.10 参考文献”- Wei 等,Chain-of-Thought Prompting Elicits Reasoning in Large Language Models,第 2—3 节。说明参数固定时如何用提示引出中间解题文本,以及解释这些文本的边界。
- Wang 等,Self-Consistency Improves Chain of Thought Reasoning,第 2—3 节。支持采样、最终答案提取、投票与重复比较。
- Snell 等,Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters,2024,第 3—5 节。说明依赖难度的计算分配、核验与搜索取舍,以及成本限制;论文实测曲线不是本章构造的曲线。