Test-Time Compute Scaling
不改权重、只在推理时砸算力,coverage 往往还能涨;majority vote 捞不出长尾上的稀有正确答案。真正要设计的是 verifier,以及怎么把生成、修订、融合编成一套推理架构。
这是什么
CS329A Self-Improving AI Agents 第二讲,片长约 63 分钟(duration_s: 3801)。第一讲已经把 LLM 生命周期拆成预训练 / 微调 / 推理;本讲把舞台交给推理:参数不动、也不做 fine-tuning,只靠采样、修订、奖励模型和推理时架构,把较差的开源模型抬到能打过单次尝试的专有模型。
沿三篇工作走:
- Large Language Monkeys — 反复采样(repeated sampling)+ 自动 verifier;coverage 对样本数 k 有可拟合的缩放律。
- Scaling LLM test time compute optimally can be more effective than scaling model parameters — 并行采样 vs 串行修订,ORM / PRM 怎么选,以及「再砸推理」何时优于「再训更大模型」。
- Archon — 把生成、融合、critic、ranker、单测生成/评估当成可搜索的推理时架构;课上 TA 是共同作者。
素材:raw/collections/cs329a/02-test-time-compute-scaling.md。
核心要点
- 三阶段算力极不对称:预训练按月、上大量 GPU、数据是万亿 token 量级;微调少几个数量级;历史上每次推理几乎是一次来回、几乎不花钱。本讲的新范式是:推理也可以离线地、长时间地砸 token。00:00:05 00:11:20
- pass@k / coverage:对单题,若 pass@1 = p,则 pass@k = 1−(1−p)^k。coverage = 至少被一个样本做对的题目比例。难题上正确答案频率可以极低但非零。00:08:09 00:03:36
- 有硬 verifier 的域(数学形式化证明、代码单测、输出可对照的编译/翻译)适合「多采样再过滤」。Llama 3 8B / 70B 单次不如 GPT-4o,但反复采样并选出正确候选后,可以显著超过更大的专有模型。00:01:48
- 讲者展示:在 SWE-bench 一类软件工程任务上,样本数从 1 拉到 1,000 时,DeepSeek(讲者认为是 DeepSeek-V3)的 coverage 可以超过 Claude 3.5 和 o1 preview。00:03:06
- 无 verifier 时出现 generation-verification gap:majority vote 大约在 10 或 50 个样本后平台;模型打分的 reward model 也填不满与真实 coverage 的缝。最难的题可能在 1,000 或 10,000 次采样里只对 1–3 次,票数机制捞不出来。00:15:34 00:18:09
- 并行不是唯一旋钮。还可以让模型顺着一条链 sequential revision;用 ORM 看最终答案、用 PRM 逐步打分并做 beam search。现成 PRM 可以借,不必从头训。00:26:55 00:34:16
- 按 pass@1 把题分成 5 个难度箱:较易的题,课上读到的最优配比是串行 token 远多于并行;最难的箱最优比「很难说」,第 4 箱和第 5 箱之间还会变。易/中题上,额外 test-time compute 可以比继续放大预训练更划算;最难题仍然更吃更大、预训练更充分的模型。00:37:09 00:37:57
- Archon 把推理时技术当成架构搜索。Fusion(把 K 个回答合成一个)可以超过 Oracle 选择(在已有样本里挑最好的)。按任务或通用目标做贝叶斯搜索后,开源模型组合的 pass@1 平均超过当时的 GPT-4o / Claude 3.5 Sonnet 14.1%(指令遵循 / 推理 / 数学 / 代码;论文数字)。00:52:41 01:02:31
机制 / 论证
为什么反复采样能让「较差」的模型变强
输入同一道题,不是生成一次,而是 10 次、100 次地重复问,再用 verifier 挑出正确的那一个作为系统输出。00:01:11
课上的直觉:较小模型(Llama 3 8B / 70B)在难题上「其实已经知道答案」,只是第一次不一定说出来;反复采样是在引出(elicit)已经在搜索空间里的解。这个范式在他们试过的几乎所有域都成立,包括模仿软件工程师改代码、提交 patch 的 SWE-bench。00:02:35
有单测时,这条路是端到端可自动化的:开源模型(课上的 DeepSeek)狂采样 → 单测过滤 → 得到比 Claude 3.5 / o1 preview 更高的 coverage。没有单测,你只有一堆候选,系统仍然交不出答案。00:04:12
Coverage 的推理时缩放律,以及它为什么长成 power law
上一讲的预训练缩放:加大数据、算力、参数,可预测地压低 test loss。Monkeys 把同一逻辑搬到推理:coverage 与并行抽出的样本数 k 之间,服从一条可拟合的 exponential power law,系数 a、b 由曲线拟合得到。00:04:44 00:05:27
他们在 Llama 3 8B、Gemma、Pythia 等一串模型上画这条曲线,参数规模从 7,000 万到 700 亿。拟合曲线大体贴着实测 coverage。工程含义:要达到某个 coverage,可以事先估计需要多少样本、该拨多少资源。连 70M 这种很小的模型也有同样的缩放形态,而且跨域成立。00:05:48 00:07:06
单题层面这并不神秘:1−p 是一次抽错的概率,(1−p)^k 是前 k 次全错,再取补就是 pass@k。非直觉的是:整套题目上看到的是 power law,不是把每道题的指数式简单平均一下就会自动出现的形状。充分必要条件是题目难度有一条 长尾:大量题在 pass@1 就解掉,越难的题 pass@1 越低,但尾部很长、不是突然截断。他们在数据里核对过,这个条件成立。00:07:26 00:09:20
这改变了算力账单的故事。过去公司在预训练上花数亿美元到数十亿美元,微调少得多,每次推理几乎免费。现在可以(甚至离线地)把 agent 放出去持续生成 token,用推理算力换能力。00:11:20
哪些域天生有 verifier
有候选之后,仍然要知道哪一个对。课上按「验证是否容易自动化」划域:
| 域 | 检查器 | 为什么能闭环 |
|---|---|---|
| 部分数学 | 形式化证明工具,逐步核验 | 给定证明策略,软件可以判每一步 |
| 代码 | 单元测试 | 写单测往往比写完整程序简单,可以由人写好当 verifier |
| AI as a compiler(讲者实验室方向) | 把 PyTorch 源码降到 CUDA,对任意输入比对输出 | 不必「读懂」CUDA,输出一致即视为正确 |
| 语言互译(Python / C++ ↔ Java 等) | 等价性检查 | 比从零写程序更容易度量 |
KernelBench 是 CUDA 生成基准。样本数增加时 coverage 近似线性上升;默认就有「完美」verifier(输出对照)。00:13:29 00:14:21
没有 verifier 时:generation-verification gap
没有自动检查器的域里,best-of-n(majority vote、基于模型的 ranker)和真实 coverage 之间有一条大缝,课上称为 generation-verification gap。00:15:34 00:17:31
一张对比图(讲者口头描述):
- 绿线 majority vote:在已生成回答里看哪个出现最多,当作系统输出。大约 10 或 50 个样本后就平台。
- 蓝线 coverage:假设有完美选择器。远高于绿线。
- 另有按整份回答打分的 reward model(LLM 训成打分器,取最高分),以及这些工具的组合。即使用上它们,缝仍然很大。
缝在更难的集上更明显:MATH(课上说 capital MATH)比 GSM8K 更复杂。GSM8K 上多数题 majority vote 够用,因为正确回答更容易生成;但两边最难的那些题,正确样本都太稀。有的题在 1,000 或 10,000 次采样里只对一次、两次、三次——多数票机制按定义抓不住稀有事件。00:17:01 00:18:51
所以:反复采样证明「空间里经常有解」;系统能不能用,取决于你能不能把它捞出来。Verifier 的质量就是这条路的上限。
课上第一段讨论留下的方向
学生复述的 takeaway:有好 verifier,采样极大提升准确率;verifier 质量决定这套玩法。00:20:01
其它被接住的方向(多数指向后几讲,不是本讲实验结果):
- 下一轮修订已有解(讲者:马上讲 sequential revision)。00:21:16
- 知识图谱 / 文档 + RAG,准确率不够才去重文档,换时间效率。00:21:32
- 先用搜索 / 类似 self-study 的技术,再看 pass@k 随 k 的曲线会不会变。00:22:25
- 先让模型在该域里探索、攒洞察,再灌进并行采样。00:23:02
- 讲者归纳:反复采样之外,还有 self-study、search、tool use。00:23:17
- 有些域「证明对」太贵,但「证伪」容易,可以先滤掉坏答案;物理或分子动力学一类模拟也可以当过滤器。00:23:31
- 生成 10,000 个弱 verifier 再多数票:指向周一的 Weaver(10 或 20 个弱 verifier 的弱监督集成),算力很贵。00:25:24
- coverage 数字是否「真对」:数学题他们人工抽查,正确率大约在 97–98% 量级(转写为 “above like a 90s, 7%, 8%”)。代码单测若覆盖不全,过测试 ≠ 真对。Verifier 质量始终是失败模式。00:25:54
Monkeys 论文里每题 10,000 个样本已放到 Hugging Face;缩小 generation-verification gap 被点名为可选课程研究项目。00:24:34
并行、串行、以及两种奖励模型
第二篇论文的标题即论点:最优地缩放 test-time compute,可以比缩放模型参数更有效。00:26:55
两条生成轴:
- Parallel sampling:同一题独立生成多份回答(Monkeys 那条)。
- Sequential revision:先给出初始步骤或思路,再不断改、换角度,直到模型认为可以交卷。可以用 prompt 要求模型这样做;推理模型则在训练里内化了这种修订。00:27:27 00:28:12
两条选择轴:
- ORM(outcome reward model):看最终答案打一个分。新域上质量有限。
- PRM(process reward model):给解题过程的每一步打分(例如五步数学题的每一步)。不是 per-token,是 per-step;一步可以是一个「有智力意义的块」或一句话。常见做法是人类对每步标对/错,再微调一个语言模型。PRM 一般从 LM fine-tune 来,域内更好,也有一定跨任务泛化。00:28:35 00:32:12
怎么嵌进搜索:
- Best-of-n:并行出 n 个完整答案,ORM 取最高分。00:29:58
- PRM + beam search:每一层预算例如 4 个样本,PRM 打 0–1 分,留下 top 2(可设阈值),从这些节点继续展开。PRM 可以只看 step,也可以看 question+step。00:30:20
- 两条轴可以叠:例如两条并行轨迹,每条都做串行修订,最后用 PRM 或 ORM 在两条终态里选;PRM 也可以在每条修订里导航。00:33:13
不一定从零训。可以找一个和目标任务最接近的 现成 PRM 来导搜索,也可以用自己的数据训 PRM / ORM。00:34:16
该文的数学设定(课上口述):约 12k 训练集、500 道测试题,用 PaLM。难度不靠人工标签,而靠该模型在一批样本上的 pass@1,分成 5 个箱子(1 最易,5 最难、准确率最低)。他们自己训了 PRM,还为「修订」fine-tune 过一个模型;讲者补了一句:现在只要是 instruction-tuned 的模型,你要求它修订,它大体都会。00:34:40 00:35:36
结果形态(口头对颜色):generation budget 增加时,majority vote、ORM(紫)、PRM(绿)、以及把修订和并行混在一起的蓝线。蓝线那块仍是开放问题——目标是:每个准确率对应的最小 generation budget。00:35:57
反直觉的配比:易题偏串行;最难题仍更吃预训练
难度分箱上,他们画了 sequential-to-parallel 的比例(颜色越深串行越多):
- 较易的题:最深的紫色准确率最高,对应 串行 token 远多于并行。00:37:09
- 更难的题:最优配比很难说;第 4 箱到第 5 箱,比例还会变。
这和课后讨论里学生的直觉并不完全一样。学生的说法:难题正确路径稀,需要更多并行探索才找得到一条活路;易题几乎条条路都能到,不必并行。00:44:09 讲者认为这是一种直观想法,但论文读到的易题最优,是串行更多。
另一张图比较「再砸推理 token」vs「再砸预训练 token」(易=绿,中=蓝,难=橙)。讲者说这仍是进行中的工作,但「今天看来仍然成立」:
- 易、中:额外 test-time compute 比继续放大预训练更有利(推理 token / 预训练 token 的比值为正)。
- 最难:从 token 优化的角度看,更大、预训练更充分的模型仍然更好。即便推理预算「合理的大」(不是无限),前沿模型还是赢。00:37:57 00:39:22
实验室周围的观察同一方向:较小的开源模型一旦叠上更多 test-time compute,会越来越好用;非常非常难的题仍然要更大的 frontier 模型。
课堂追问:预训练只付一次,推理每次都付,这张「比值」图怎么读?讲者:不是「预训练 1 token = 推理 1 token」的一一对应,而是某种预训练/推理算力比。即使在所有尺度上预训练都更优,也不是人人训得起大模型;对许多题,每次新题都做 test-time scaling 仍然可行。最难题两边都需要:继续预训练,更好的模型仍然更好。00:39:36 00:40:59
把小模型在某一组题上 fine-tune 成专家,和「按通用预训练配方放大再比 test-time」不是同一个比较。00:41:45
树搜索被学生问到时,讲者的回答是:那就是在混并行和串行;前面 PRM beam 正是在每一层砍掉不看好的枝,只展开更有希望的分支。00:42:59
Archon:推理时架构搜索
问题换成:如何把不同的推理时方法(以及不同模型)拼起来,走出一条 正确率 vs 代价 的前沿,并且不要浪费 token。Archon 把推理缩放当成 inference architecture design。00:45:47
输入:一组要对齐的目标基准、inference call budget、可用的 LLM 集合、一组推理时技术。优化器课上叫 itest(全称 inference time architecture search;拼写以转写为准)。输出:把技术和模型拼好的架构。00:47:06
本讲列出的推理时操作(critic / ranker 是 prompting,没有为这些角色单独训练模型):00:48:00 00:50:06
| 操作 | 做什么 |
|---|---|
| Generation | 对同一题采 n 个回答,即 repeated sampling |
| Fusion | 把原题 + K 个回答交给一个 LLM,合成一个新回答。被讲者称为 surprisingly effective,算 sequential update |
| Critic | 描述某份回答的弱点或优点 |
| Ranker | 按质量排序,并说出理由 |
| Unit test generation | 让模型为编码 / 数学 / 其它推理题生成单测 |
| Unit test evaluation | 「更疯狂」的一步:不跑单测,让模型判断某份答案是否通过这些单测 |
课上的括号平衡编码题:奇数个括号应输出 no;右括号必须匹配最近尚未匹配的左括号。模型可以写出这类单测,也可以再生成真正去跑的测试代码。00:55:01
Fusion 可以超过 Oracle;先滤再融更好
一张 win-rate 图(具体基准名幻灯片上没有,讲者说是某个问答/推理基准),横轴 repeated samples 从 1 到 10:00:51:15
| 线 | 做法 | 相对位置 |
|---|---|---|
| 橙 | 随机挑一个 | 最差 |
| 绿 | 模型排序,取 top-1 | 好于随机 |
| 蓝 | Oracle:不混合,只在已有样本里挑真正最好的 | 好于模型排序 |
| 红 | Fusion:把这 K 个回答合成一个 | 可以超过 Oracle |
| 紫 | 先选 top 5 再 fusion | 更好 |
Fusion 超过 Oracle 是反直觉点:Oracle 只能在已经生成的样本里挑;Fusion 允许模型看见多种解法之后写出一份新的。先过滤再融合,比把全部回答一股脑塞进去更好。00:52:41
右图改成 不同模型 的 ensemble:1 / 2 / 10 个模型各出一份。Ensemble 按「最好的模型 → 次好的…」往里加;随机线会变差,因为左边单模型实验用的是较好的那个。趋势同左图。谁来 fuse / rank?讲者认为是 ensemble 里的 model number one。00:53:34
加深推理层,以及搜索空间怎么砍
Archon 搜到的架构是分层的。一个偏复杂的例子:第一层多模型 generation → critic + ranker → 若干 fuser 各合成一份 → 再进入下一轮 critique / rank。00:56:20
搜索本身非常贵(大量 inference call),所以他们先离线缩小空间:发现 generation → critic → ranker → fuser 这条序列特别有效,于是把搜索限制在这类骨架附近。用一份可优化的训练/留出数据,目标是 给定 call budget,最大化准确率。00:57:32
编码题上的一个优化架构:狂生成样本,同时生成单测,再评估。
另一个观察:把这些推理时技术 一层层叠深,准确率还会涨——类比预训练里加层。最右边的粉线:多模型 ensemble + 三层 critique/fuser + 最后一层 fuser,显著好于「只用最好的模型一次」,也显著好于「最好的模型采 8 次 + 一层 fusion」。跨不少任务成立。00:58:24
优化器是 贝叶斯优化(课上强调有大量开源实现),比 greedy 或随机选配置更 sample-efficient。他们加的硬约束包括:00:59:28
- 每层只用一种推理时技术
- 第一层永远是 generator
- critic 必须在 ranker 或 fuser 之前(本地试过更好)
- unit test generator 后面必须跟 evaluator
- ranker / critic / verifier 的级联位置仍可搜
可配置的目标包括:可用模型集合、inference call budget 等。
最终只交一个答案:开源组合打过当时的闭源 pass@1
Archon 最后只产出 一个 回答,所以优化的是 pass@1,不是 pass@k。01:01:12
只用开源模型,当时就能在许多任务的 pass@1 上追平或大幅超过当时的闭源前沿。贝叶斯优化可以对 单一任务 搜一套架构,也可以按 通用 目标(许多任务都要好)来搜;通用版仍然很好,并且好于这些任务上的前沿模型——推理时架构可以泛化到它没有专门对准的任务。01:01:59
课上给出的平均数字:在指令遵循、推理、数学和代码上,pass@1 平均超过 GPT-4o(结尾转写为 GPT-4.0)或 Claude 3.5 Sonnet 14.1%。01:02:31
最后一组讨论题因下课没在课堂上展开。
可操作
- 先画清任务有没有自动 checker。有(单测、形式化工具、输出对照、模拟器)→ 先把 k 拉高,画 coverage 曲线,看还没饱和再砸采样。没有 → 不要指望 majority vote 在 10–50 个样本之后还能涨;先造弱 verifier,或接受 gap。
- 预算比较的是「再训一个更大模型」和「同一模型多采样 / 多修订」,不要默认总是预训练。易/中题上 test-time 常常更划算;最难题不要幻想无限采样能替代更大的 base。
- 选择器按域挑:能跑测试就跑测试;只能看最终答案用 ORM + best-of-n;步骤会走偏用 PRM 做 beam,并优先找邻近任务的现成 PRM。
- 并行和串行要混,不要只调一个旋钮。较易的题,课上读到的最优是串行更多;最难箱没有稳定配比。树搜索 = 混两者,用 PRM 剪枝。
- 不要只会「挑一个最好的」。Fusion(看见 K 个再合成)可以超过 Oracle 选择;先 rank/过滤再 fuse,通常优于全部塞进去。
- 推理时层可以叠:generation → critic → ranker → fuser,再重复。搜索架构时先砍空间(每层一种操作、critic 在 ranker 前、单测生成后必须有评估),再用贝叶斯优化,而不是穷举。
- 想做本课项目:Hugging Face 上有每题 10,000 样本的数据,题目就是缩小 generation-verification gap;也可探弱 verifier 集成(指向 Weaver,见下一讲)。
术语
| 词 | 课里的意思 |
|---|---|
| test-time / inference scaling | 不改权重,推理时多花算力 |
| repeated sampling | 同一输入独立生成多次 |
| pass@k | k 次独立采样里至少一次正确 |
| coverage | 至少被一个样本做对的题目比例;图上常当作「完美选择器」上限 |
| generation-verification gap | 能生成正确答案 ≠ 能选中它 |
| majority vote | 在候选里选出现次数最多的答案 |
| ORM | 只看最终输出打分的奖励模型 |
| PRM | 对解题步骤打分的过程奖励模型 |
| sequential revision | 在同一条解上继续改,而不是另开一条 |
| beam search(本讲) | 每层少样本 + PRM 留 top 分支再展开 |
| fusion | 把 K 个回答合成一个新回答 |
| critic / ranker | 用 prompt 让模型批评或排序候选 |
| itest | Archon 里的 inference time architecture search |
| KernelBench | CUDA 生成基准,输出对照即 verifier |
| SWE-bench | 软件工程补丁任务;本讲用来展示 coverage 随 k 上升 |
不确定 / 待验证
- SWE-bench 那条曲线的模型,讲者说「I believe this was the DeepSeek-V3」——以论文/幻灯片为准,转写不是硬证据。00:03:51
- coverage–k 的具体公式只说到 exponential power law 和拟合系数 a、b,课上没有把方程读出来。
- 数学人工抽查「97–98%」来自口头约数(“90s, 7%, 8%”),不是书面表。
- Fusion 那张 win-rate 的具体基准名,幻灯片上没有,讲者只说是某个问答/推理基准。00:51:15
- 优化器名称转写为 itest;是否为 ITAS / 其它缩写 [需要验证]。
- +14.1% 是 Archon 论文在其指令/推理/数学/代码基准上、相对 GPT-4o 或 Claude 3.5 Sonnet 的 pass@1 平均提升,不是这门课的作业复现。结尾转写写成 GPT-4.0,同讲前面称 GPT-4o。01:02:31
- 「易题最优 = 更多串行」依赖幻灯片颜色;最难两箱的并行/串行比,讲者明确说很难说。不要把学生后来的直觉(难题更要并行)写成该论文的主结论。
- 「test-time 优于继续预训练」被标记为仍在进行中的观察,且只对易/中题;最难题结论相反。
相关
- CS329A Self-Improving AI Agents
- Test-time compute
- Generation-verification gap
- Process reward models
- Course Overview — 第一讲已经用 infinite monkey / Monkeys 把「答案在空间里」说一遍
- Robust Verification — 下一讲专讲 ORM / PRM / 弱 verifier 集成(Weaver)
- Planning and Multi-Step Reasoning — 树搜索、多步,接本讲的 beam / 并行–串行混合
- Train-Time Scaling / Scaling RL — 对照:推理时是搜出来,训练时 RL 是写进权重
来源 raw/collections/cs329a/02-test-time-compute-scaling.md · 更新 2026-09-04 · confidence: high