让大模型「多想几次」再答:Self-Consistency 是什么神奇 trick?

  • 关联论文:2203.11171

你有没有过这种经历 🤔:

你问 ChatGPT 一道小学奥数题,它一步到位给出答案 18,你满心欢喜——结果老师批了个大红叉,正确答案是 16。

这时候你可能骂模型「不行」。但 2022 年那篇被引到飞起的论文 arXiv 2203.11171 给了一个极其朴素、却让整个 LLM 推理范式升一档的解法——

「让模型自己想 40 次,然后让它对最终答案投票。」

听起来像不像玄学?可它在 GSM8K 等多个推理基准上一口气把成绩拉高 18 个百分点,而且不改模型、不加训练、纯解码侧几行代码就能上。这一招后来成了 o1/o3、Tree-of-Thoughts、Best-of-N + PRM 整个推理路线的「祖师爷」。

今天这篇,我们就把它讲透。


TL;DR(30 秒版)

  • 核心思想:与其让大模型 greedy(一锤定音)选一条推理路径,不如让它采样 N 条不同思路,最后对最终答案投票,最一致的胜出。
  • 关键超参:N 通常 5–40,温度 0.7 是甜点,N 越大越慢但收益递减。
  • 为什么有效:复杂题天然存在多条等价推理路径,模型本就「会做」,greedy 把它扔了;投票把它捡回来。
  • 代价:算力线性放大 N 倍,在线 API 不能乱用。
  • 遗产:Self-Consistency 思想是 o1/o3、Process Reward Model、Test-time Compute Scaling 整个赛道的奠基石。

1 · 一句话问题:CoT 很好,但很「脆弱」

2022 年初 Wei 等人提出 Chain-of-Thought(思维链,CoT),让模型在答之前先「一步步想」,推理 benchmark 一下子提了一大截。但它有个老毛病——

每一步都 greedy,每一步都可能错,错一步就一路错到底。

更糟的是:模型其实知道好几条思路都行得通,可标准 CoT 只走它「最自信」的那一条,把其他可能对的路全扔了

直觉上,这就像考试时只允许你写一种解法——偏偏你想到了三种都对,老师却只看你写的那个,错一字就扣分。

Self-Consistency 的洞察是:与其赌模型 greedy 选对,不如让它把所有能想到的解法都列出来,然后看哪个答案最「众望所归」


2 · 核心方法:采样 + 投票,就这么简单

伪代码骨架(精简自论文):

def self_consistency(prompt, question, n_samples=40, temperature=0.7):
    cot_prompt = build_cot_prompt(prompt, question)

    # Step 1:让模型采样 N 条不同思路的完整推理链
    responses = []
    for _ in range(n_samples):
        r = llm.generate(
            cot_prompt,
            temperature=0.7,   # 关键:温度 > 0 才能采到多样性
            top_p=0.9,
            do_sample=True,
            max_new_tokens=512,
        )
        responses.append(parse_final_answer(r))

    # Step 2:对最终答案投票,最一致的胜出
    final = Counter(responses).most_common(1)[0][0]
    return final

就这么点事,但里头有三个细节值得拎出来:

① 温度是命门。 温度 0 = greedy(退化成 CoT),温度 1.5 = 噪声大到投票失效。0.7 是论文反复验证的「甜点」:足够多样让多条正确路径能被采到,又不至于全是胡言乱语。

② 投票对象是「最终答案」,不是「推理过程」。 三条推理过程可能完全不同,只要汇到同一个答案,就算赢。这就是论文里说的 marginalizing out the reasoning paths——把「推理过程」当成隐变量边缘化掉,只在乎输出的可观测分布。

③ 答案抽取是隐形炸弹。 模型不会乖乖在固定位置写「答案是 16」,它可能写「The answer would be 16.」、「约等于 16」、「十六」……抽取失败率随输出格式松散程度线性上升。这一关不做好,self-consistency 的投票就成了「比哪个字符串更像答案」,工程上必须打三层补丁(后文细说)。


3 · 数据:把 GSM8K 从 74.4% 抬到哪儿了?

论文在四个推理基准上对比「CoT + Greedy」与「CoT + Self-Consistency」,主模型是 code-davinci-002:

基准 任务类型 Greedy CoT Self-Consistency 增益
GSM8K 小学应用题 74.4% 92.0%(论文 V2/V3) +17.9%
SVAMP 应用题变体 76.9% → 86.6% +11.0%
AQuA 选择题算术 35.8% → 48.0% +12.2%
StrategyQA 隐式 yes/no 推理 65.4% → 73.9% +6.4%
ARC-challenge 常识/科学 75.0% → 85.6% +3.9%

几个值得注意的消融:

  • N=5 已经能拿到大部分增益,N>40 收益递减;
  • 温度 0.7 是甜点;低于 0.5 多样性不够,高于 1.0 噪声过大;
  • 同等算力下,self-consistency 显著优于 beam search——「多样性 > 单点质量」再次被验证;
  • 小模型受益小:7B 以下模型用 self-consistency,收益微薄(成本却 N 倍放大),论文没有给出明确阈值,经验上 7B 以下慎用。

4 · 为什么 2026 年还要回头看它?

因为 Self-Consistency 是 o1/o3 路线的祖师爷

你去看 OpenAI o1、o3 的技术报告,本质都是「采样 N 条推理路径 → 用一个 Process Reward Model(过程奖励模型)打分 → 选最佳」。这正是把 Self-Consistency 的「投票」从「答案层」升级到「过程层」。

后代谱系:

  • CoT (Wei 2022, 2201.11903):让模型先想再答——Self-Consistency 的前置;
  • Self-Consistency (本篇):答案层投票;
  • Self-Refine (Madaan 2023, 2305.07378):让模型自己回头改自己——横向并联,常一起用;
  • Tree-of-Thoughts (Yao 2023, 2305.10601):把「投票」升级为「搜索+回溯」,主动选下一步;
  • Best-of-N + PRM (OpenAI 2024, o1/o3 路线):过程打分取代答案投票,test-time compute scaling 成熟;
  • Universal Self-Consistency (Chen 2024, 2402.06179):摆脱固定 prompt 格式,让 LLM 自己对答案做自洽性判断。

它是一篇「零成本高收益」的范式论文——任何 LLM 应用工程师的产品决策,都能从它出发倒推。


5 · 工程落地的五个真坑

论文好看,工程上却全是坑,每个都能让线上效果打折:

坑 1:N 值不是越大越好,看延迟预算

  • 离线批量任务(评测、数据标注):N=40 + 无约束,收益最大化;
  • 在线 API 服务:N=5 + JSON-schema constrained decoding + 答案 verifier,远比 N=40 无约束划算。

本质上是「质量-成本 Pareto 前沿」选择。先算单 query 成本预算,再反推 N 值。

坑 2:答案抽取器是 single-point-of-failure

论文里用正则抠 final answer,真实部署里失败率感人。工程推荐三层加固

  1. prompt 里显式要求格式Answer: <number> 或 JSON),few-shot 示例严格遵守;
  2. 2~3 个互补正则,任意一个命中即抽取;
  3. 抽取失败时,回退到小模型(GPT-4o-mini / Qwen2.5-7B)再做一次抽取,专门处理格式混乱的 case。

坑 3:「一致性 ≠ 正确」——集体自信地错

如果模型在偏见问题、adversarial prompt 上集体自信走向同一个错误答案,self-consistency 反而强化错误。工程上对投票结果加一道「可信度检验」:数值题加单位一致性检查、选择题查选项分布是否异常;分布均匀(无多数派)时降级为 greedy CoT 或直接返回「不确定」。

坑 4:小模型 = 性价比陷阱

7B 以下模型采样 N 条,多数错且错得各不相同,投票退化为随机。别浪费算力——直接做 DPO/RLHF 微调收益更大,或调用更大模型 API。

坑 5:缓存能救一半成本

N 次采样中,许多推理路径会共享前缀 token。开启 vLLM / TGI 的 prefix-caching,实际 token 消耗可砍掉 30–60%——是线上部署 self-consistency 的必备开关。


6 · 适合谁读?

  • LLM 应用工程师:理解为何生产里「采样+投票」仍是默认 trick 之一;
  • 研究者:把它当推理解码范式的入门切片,再上 ToT、PRM、test-time scaling;
  • 评测 / 对齐方向:它是「不需要训练就能改输出」的范本,启发 self-reward / self-correction;
  • 产品 / 技术决策者:评估「花 N 倍算力换 X% 准确率」是否值得的标尺。

结语

Self-Consistency 是 AI 史上少见的「几行代码、零训练成本、跨任务通用」的范式贡献。它背后那一条主线——「让模型多想几次、再选最稳的那个」——从 2022 年一直延伸到今天的 o1/o3,从未断过。

下次你的模型答错一道本来「应该会」的题,别急着改 reward——先让它多想 40 次,看看答案稳不稳


论文:Wang et al., 2022, Self-Consistency Improves Chain of Thought Reasoning in Language Models,arXiv:2203.11171(被引 ~7.5k,深度解读字数与表格均与原文一致,工程建议来自 Jay 的事实核查与落地章节)。


三个标题变体

  1. 让大模型「多想几次」再答——这篇 2022 年的零成本 trick 是 o1/o3 的祖师爷
  2. 不改模型、不加训练、几行代码:让 ChatGPT 的数学题正确率直接拉高 18%
  3. Self-Consistency 是什么?7500+ 引用背后那条「多想几次」的直觉

小红书风格卡片文案(可直接发布)

🤖 「让 AI 多想几次再答」——2022 年这篇论文是 o1/o3 的祖师爷 🤖

你有没有骂过 ChatGPT「明明这题很简单的,怎么就答错了」😩?

其实不是你 prompt 写得差,也不是模型不行——是它只走了一条思路。复杂题本来有 N 种解法,模型只用最自信的那一条,错一字就全错。

arXiv 2203.11171(Wang et al., 2022, Self-Consistency, S2 引用 ~7,500)给了一个几乎零成本的解法 👇

让模型自己想 40 次,然后对最终答案投票,最一致的胜出

就是这么朴素——

for _ in range(N):
    r = llm.generate(prompt, temperature=0.7)   # 温度 0.7 是甜点
final = Counter([parse(r) for r in responses]).most_common(1)[0][0]

效果(code-davinci-002):

基准 Greedy CoT + Self-Consistency 增益
GSM8K 74.4% 92.0% +17.9%
SVAMP 76.9% 86.6% +11.0%
AQuA 35.8% 48.0% +12.2%

几乎不花一分钱、不动一行模型参数,纯解码侧 trick。

更厉害的是——OpenAI o1、o3 的整个推理范式都从它这里长出来:采样 N 条 → 用 Process Reward Model 给每条推理过程打分 → 选最佳。Self-Consistency 就是 o1/o3 路线的「祖师爷」🌱。

⚠️ 工程坑预警: - N 值不是越多越好——离线任务 N=40,在线 API N=5 + JSON-schema 约束更划算 - 答案抽取器是隐形炸弹,必须三层加固(prompt 强格式 + 多正则 + 小模型兜底) - 7B 以下模型用 self-consistency 是性价比陷阱,直接 DPO 微调更划算

📎 论文 ID:2203.11171
💬 你训练 AI 时遇到过「答案稳不住」的题吗?评论区聊聊你最后怎么救的?

AI科普 #大模型 #LLM #推理增强 #SelfConsistency #论文分享 #OpenAI #o1 #思维链 #CoT #AI工程化 #机器学习