让 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(可以理解为「最像标准答案的字」),一路选下去,输出一条推理路径。

这种方式的根本问题:

  1. 局部最优陷阱:正确答案往往有多种推理路径,贪心可能锁死在「看似合理但其实错误」的中途分支
  2. 缺乏交叉验证:一条路径错了,没有其他路径来「反驳」
  3. 浪费了「多数投票」的免费信号:正确答案是多条路径的「汇聚点」,但贪心只用了一条

核心洞见:一个复杂的推理问题,通常有多种不同的思考方式最终指向同一个正确答案。 与其固执地走一条路径,不如让模型"撒网"——生成多条路径,然后投票。

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 的格式给出答案,不要添加任何其他文字。"

⚠️ 边界坑(部署前必看)

  1. 40× 推理成本:单个请求延迟从秒级跳到分钟级(对 PaLM-540B 而言)。在线服务必须用批处理 + 早停,否则用户等不了。
  2. 答案提取失败可能放大错误:如果 30% 的路径答案提取失败,投票基础就不稳——必须监控「成功提取率」。
  3. 小模型收益有限:在 7B/13B 模型上,多样性不足,投票结果接近随机,提升可能 < 1%——不要盲目上。
  4. 长推理链更脆弱:推理步骤越多,路径越容易中途出错,投票可能被噪声稀释。
  5. 不适合实时对话:延迟敏感场景不能用,否则用户体验崩。
  6. 不适合生成任务:写文章、写代码这种没有唯一答案的任务,投票基础不稳。

🎯 你能立即做的事

  • 用任何 LLM 都能试:GPT-4 / Claude / Gemini / 开源模型都行,原理通用
  • 20 行代码就能跑:采样 N 次 → 提取答案 → Counter 投票
  • 先在 5 个问题上测:如果 5 次里有 3 次以上答案一致,说明值得上线
  • 结合「一致率」做置信度:一致率高的直接信,低的降级到人工

一句话总结

Self-Consistency 用「投票」这种最朴素的方法,在不动模型本身的前提下,把数学推理准确率拉高了 17.9 个百分点——它不是更聪明的算法,而是「让 AI 多想几遍再答题」的工程哲学。这篇被引 7721 次的 8 页论文,今天仍然是所有 LLM 推理增强方案的「根」。


三个标题变体

  1. 「让 AI 多想几遍」就能多拿 17.9 分:8 页论文拿下 7721 引,不改模型也能提准确率 🧠
  2. 零训练、零微调、零花钱:让 ChatGPT 数学题从 56% 飙到 74% 的「投票法」到底是什么 🔢
  3. 老师看了想鼓掌的论文:让 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