让 AI 像学生一样"做完 5 道题对答案":Self-Consistency 用最笨的办法拿下数学题 17.9 分
- 关联论文:2203.11171
你有没有这种感觉——
你给 ChatGPT / Claude / Gemini 出一道小学应用题:「小明有 12 个苹果,送给小华 3 个,又买了 5 个,现在有几个?」它有时候能算对,有时候算错——而且你也不知道它这次是蒙对了还是真的算对了。
更糟的是——
同样的题目,换个问法,它又错了。
这种现象的本质:模型推理时只走「一条路径」,走对了算对,走错了就翻车。它没有「反复验算」的能力。
arXiv 2203.11171(Self-Consistency, Wang et al., Google Research 2022, 被引 7721 次)做了一件让所有 LLM「多走几条路再对答案」的事——
让模型对同一道题生成 40 条不同的解题过程,然后看哪个答案出现得最多,就把那个作为最终答案。
零训练、零微调、零额外数据。 仅仅是改了解码策略——小学数学题(GSM8K)准确率从 56.2% 飙到 74.4%(+17.9pp),这就是 Self-Consistency。
为什么这件事值得大众关注
Self-Consistency 是当前所有大模型推理增强的「根技术」——
- 你今天看到的 GPT-4 / Claude / Gemini 在数学题上的「一致率」「置信度」,背后就是 Self-Consistency 思想
- 任何说"我们模型有自洽性检查"的厂商,理论根基都是 2022 年这篇 8 页论文
- 这个方法任何人都能立刻用——不需要 GPU,不需要训练,不需要花钱调 API
它解决的问题非常具体:「一个 AI 怎么知道自己到底是对还是错」。
一句话故事
想象你是老师,给学生出一道数学题。学生有两种答题方式:
- 贪心学生:每次只写第一个想到的解法,写完就交卷。可能对,可能错。
- Self-Consistency 学生:先想 40 种不同的解法,然后看哪个答案出现得最多,就交那个。
「投票」这件事,看起来很笨,但数学题从 56% 涨到 74%——这就是 Self-Consistency 的全部秘密。
为什么「一条路径」会出错
LLM 默认的解码方式叫贪心解码(greedy decoding)——
每次只挑概率最高的下一个 token(可以理解为「最像标准答案的字」),一路选下去,输出一条推理路径。
这种方式的根本问题:
- 局部最优陷阱:正确答案往往有多种推理路径,贪心可能锁死在「看似合理但其实错误」的中途分支
- 缺乏交叉验证:一条路径错了,没有其他路径来「反驳」
- 浪费了「多数投票」的免费信号:正确答案是多条路径的「汇聚点」,但贪心只用了一条
核心洞见:一个复杂的推理问题,通常有多种不同的思考方式最终指向同一个正确答案。 与其固执地走一条路径,不如让模型"撒网"——生成多条路径,然后投票。
Self-Consistency 到底做了什么
算法核心(10 行代码就能实现)
对每个问题:
1. 用 temperature=0.7 的采样,让模型生成 N 条不同的解题路径
2. 从每条路径里提取最终答案(数字 / 选项 / 文本)
3. 对所有答案投票:出现次数最多的就是最终答案
就这么简单。
关键细节:为什么用 temperature=0.7?
Temperature 控制模型采样的"随机性":
- temperature → 0:趋近贪心,路径几乎相同,没有多样性
- temperature = 1:完全随机,可能生成乱码
- temperature = 0.7:甜蜜点——既有多样性,又不至于胡言乱语
关键发现:temperature 0.5~0.9 区间效果差异不大,关键是别用贪心。
答案提取:隐藏的脆弱点
从模型生成的文本里提取最终答案,比想象中难:
- 算术题:
答案是 14?14?#### 14?Therefore, the answer is 14? - 多选题:
A?(A)?选 A?The answer is (A)? - 自由问答:答案可能在第 3 段也可能在第 5 段
实操经验:在 prompt 里强制要求模型用固定格式输出(比如 答案是:XXX),可以大幅提高提取成功率。
采样数量:边际递减
| 采样次数 | GSM8K 准确率 |
|---|---|
| 1(贪心) | 56.2% |
| 5 | 63.1% |
| 10 | 67.8% |
| 40 | 74.4% |
| 80 | 75.7% |
结论:40 次已经接近饱和,再多采样收益不大但成本翻倍。
关键数字(来自原文 Table)
算术推理
| 题目集 | 贪心 CoT | Self-Consistency | 提升 |
|---|---|---|---|
| GSM8K(小学数学) | 56.2% | 74.4% | +17.9 pp |
| SVAMP(应用题变体) | 68.9% | 81.6% | +11.0 pp |
| AQuA(代数题) | 46.7% | 58.9% | +12.2 pp |
常识/逻辑推理
| 题目集 | 贪心 CoT | Self-Consistency | 提升 |
|---|---|---|---|
| StrategyQA(隐含推理) | 72.6% | 79.0% | +6.4 pp |
| ARC-Challenge(科学推理) | 75.2% | 79.1% | +3.9 pp |
| BoolQ(是/否问题) | 86.9% | 88.6% | +1.7 pp |
核心结论:题目越难、推理步骤越多,Self-Consistency 收益越大。简单问答收益有限。
它跟同类工作的关系
前驱
- Chain-of-Thought(CoT, Wei et al. 2022):让模型「先想再答」,Self-Consistency 是对 CoT 的增强
- Greedy Decoding:自回归语言模型默认解码方式,是 Self-Consistency 要改进的目标
同期工作
- STaR(2022):用 self-taught reasoning 训练模型,需要额外训练数据
- Selection Inference(2022):把推理分解为子步骤再选择,需要额外标注
Self-Consistency 的优势:完全不需要额外训练,改改解码策略就能用。
后续发展(值得关注的演进方向)
- Tree of Thoughts(Yao et al. 2023):用树结构而非线性路径探索推理空间,能回溯
- Process Reward Model(PRM):给「推理的每一步」打分,而非只看最终答案
- Self-Refine:让模型对自己的输出做反思和修正
- DiVeRSe(2023):用多样性 + 验证器(verifier)增强 self-consistency
对工程落地的启发
启发 1:成本 vs 效果的甜蜜点
Self-Consistency 的代价是 N 倍推理成本。生产环境不能无脑上 40 次:
| 场景 | 推荐采样数 | 延迟影响 |
|---|---|---|
| 关键决策(金融计算、医疗诊断) | 40 | 延迟 40×,必须用批处理 |
| 一般业务(客服、文档问答) | 5-10 | 延迟 5-10×,可接受 |
| 实时对话 | 1-3 | 几乎不影响体验 |
启发 2:把「一致率」当置信度信号
不要只看投票结果,要看一致率(agreement rate):
- 一致率 > 80%:模型对答案有信心,可以直接输出
- 一致率 50-80%:答案有争议,建议返回「多数答案 + 一致率标注」
- 一致率 < 50%:问题本身有歧义或超出模型能力,应该降级到人工
这条经验对所有 LLM 应用都适用:与其直接信模型的输出,不如让模型「多答几次看自己有多大把握」。
启发 3:早停(Early Stopping)
如果已经采了 25 次答案都一样,后面 15 次基本不会翻盘——可以提前终止:
# 伪代码:动态早停
answers = []
for i in range(max_samples):
answer = model.sample(question)
answers.append(answer)
# 检查是否已达成主导答案
counter = Counter(answers)
top_count = counter.most_common(1)[0][1]
if top_count >= min_threshold and top_count / len(answers) >= 0.6:
break # 提前结束
省下来的算力 = 白赚的钱。
启发 4:跟 RAG 结合
Self-Consistency 的多条路径天然适合 RAG:
- 不同路径检索不同的知识片段
- 最终投票的答案 = 多源验证的共识
- 特别适合「法律咨询」「医疗问诊」这种不能出错但答案散落在多个文档的场景
启发 5:答案提取是隐藏的脆弱点
很多团队上 Self-Consistency 效果差,不是因为采样数不够,而是因为答案提取失败:
- 模型说「答案是 14 元」 → 提取出 "14 元" → 跟 "14" 字符串不匹配 → 投票失败
实操建议:在 prompt 里强制规定输出格式,比如:
"请在最后一行用
Final Answer: 42的格式给出答案,不要添加任何其他文字。"
⚠️ 边界坑(部署前必看)
- 40× 推理成本:单个请求延迟从秒级跳到分钟级(对 PaLM-540B 而言)。在线服务必须用批处理 + 早停,否则用户等不了。
- 答案提取失败可能放大错误:如果 30% 的路径答案提取失败,投票基础就不稳——必须监控「成功提取率」。
- 小模型收益有限:在 7B/13B 模型上,多样性不足,投票结果接近随机,提升可能 < 1%——不要盲目上。
- 长推理链更脆弱:推理步骤越多,路径越容易中途出错,投票可能被噪声稀释。
- 不适合实时对话:延迟敏感场景不能用,否则用户体验崩。
- 不适合生成任务:写文章、写代码这种没有唯一答案的任务,投票基础不稳。
🎯 你能立即做的事
- 用任何 LLM 都能试:GPT-4 / Claude / Gemini / 开源模型都行,原理通用
- 20 行代码就能跑:采样 N 次 → 提取答案 → Counter 投票
- 先在 5 个问题上测:如果 5 次里有 3 次以上答案一致,说明值得上线
- 结合「一致率」做置信度:一致率高的直接信,低的降级到人工
一句话总结
Self-Consistency 用「投票」这种最朴素的方法,在不动模型本身的前提下,把数学推理准确率拉高了 17.9 个百分点——它不是更聪明的算法,而是「让 AI 多想几遍再答题」的工程哲学。这篇被引 7721 次的 8 页论文,今天仍然是所有 LLM 推理增强方案的「根」。
三个标题变体
- 「让 AI 多想几遍」就能多拿 17.9 分:8 页论文拿下 7721 引,不改模型也能提准确率 🧠
- 零训练、零微调、零花钱:让 ChatGPT 数学题从 56% 飙到 74% 的「投票法」到底是什么 🔢
- 老师看了想鼓掌的论文:让 AI 答完题自己「对答案」,多走几步反而更稳 ✅
📱 小红书风格卡片文案(直接可用)
姐妹们听我说 🧠
你给 ChatGPT 出数学题,是不是有时候对有时候错?
不是它笨——是它只走一条解题路径,走对了算对,走错了就翻车。
arXiv 2203.11171(Self-Consistency, Google 2022)做了一件事:
让 AI 对同一道题想 40 种不同的解法,然后投票看哪个答案出现最多。
就这么简单。
结果?📊
- 小学数学 GSM8K:56.2% → 74.4%(+17.9pp)
- 应用题 SVAMP:68.9% → 81.6%
- 代数题 AQuA:46.7% → 58.9%
零训练、零微调、零花钱——只是改了解码策略。
今天 GPT-4 / Claude 答题背后的「一致率」「置信度」概念,都源自这篇 8 页论文。
被引 7721 次,AI 推理增强的「根技术」 ✨
⚠️ 部署注意:40× 推理成本(适合关键任务,不适合实时对话)
LLM #SelfConsistency #ChatGPT #数学 #推理 #Prompt #论文解读 #AI #arXiv #投票 #解码策略 #CoT #思维链
关联论文:2203.11171(点格式)
科普版:/shared/research-kb/organized/promo/popular/2203-11171.md