📖 什么是Test-Time Compute?
Test-Time Compute(测试时计算)是指在模型推理阶段增加计算量来提升输出质量的技术。与传统的「训练时堆算力」不同,这里是在回答问题时多花时间思考。
代表应用:OpenAI o1的"think before answering"、DeepSeek-R1的推理时搜索、各类CoT扩展方法。
💡 一句话理解
🧠 比喻
「考试时多算几遍」
以前考试靠平时练得多(训练时计算);现在考试时可以多算几遍草稿(测试时计算),想好了再填答案。做数学题时多检查几遍,正确率自然更高。
🆚 训练时计算 vs 测试时计算
🏋️ 训练时计算
时机:模型训练阶段
目标:学习知识
成本:一次投入
效果:提升模型能力
例子:预训练、微调
⏱️ 测试时计算
时机:每次推理时
目标:提升输出质量
成本:按次计费
效果:提升特定任务表现
例子:CoT、Best-of-N
⚙️ 主要技术方法
🧠
Chain-of-Thought
逐步推理
🎯
Best-of-N
生成多个选最优
🔍
Self-Consistency
多次采样取共识
📝
Self-Refine
自我修正迭代
🌳
Tree-of-Thought
思维树搜索
🔄
Verifier-guided
验证器引导
📊 效果对比
# 数学题正确率 (GSM8K benchmark)
GPT-4 (标准推理): ~92%
GPT-4 + CoT: ~95% (+3%)
GPT-4 + Best-of-N(100): ~97% (+5%)
OpenAI o1 (测试时多计算): ~96% (但用更小的模型!)
# 关键洞察:
# - 小模型 + 大量测试时计算 ≈ 大模型
# - 成本可灵活控制(按需增加计算)
# - 适合需要高质量答案的场景
💻 代码示例:Best-of-N + Verifier
import openai
def best_of_n_with_verifier(prompt, n=10):
"""生成N个候选答案,用验证器选最优"""
# 1. 生成N个候选
candidates = []
for _ in range(n):
response = openai.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.8, # 较高温度增加多样性
)
candidates.append(response.choices[0].message.content)
# 2. 用验证器评估每个候选
best_answer = None
best_score = -1
for candidate in candidates:
# 验证器判断答案质量
verify_prompt = f"""问题: {prompt}
候选答案: {candidate}
请给这个答案打分(0-10),判断正确性和完整性:"""
score_response = openai.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": verify_prompt}],
temperature=0,
)
# 提取分数
score = extract_score(score_response.choices[0].message.content)
if score > best_score:
best_score = score
best_answer = candidate
return best_answer
# 使用:测试时计算 = N次生成 + N次验证
answer = best_of_n_with_verifier("解方程: 2x + 5 = 13", n=10)
🎯 适用场景
- 数学推理:多算几遍,确保正确
- 代码生成:生成多个方案,选最优
- 重要决策:深思熟虑比快速响应更重要
- 安全关键:医疗、法律等领域
- 竞赛题目:追求极致正确率
⚠️ 权衡考虑
💰
成本增加
N倍计算量
⏰
延迟增加
响应时间变长
📈
边际递减
N越大提升越小
🎯
按需使用
关键任务才启用