486 字
1 分钟
Chain of Thought:让大模型学会推理
2022 年,Google 团队发表了一篇看似简单却影响深远的论文。
标题是:《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》
核心思想简洁得惊人:让模型在给出最终答案前,先展示中间推理步骤。
这个简单的方法,让大模型在复杂推理任务上的表现提升了数倍。它揭示了一个重要事实——大模型具备推理能力,只是需要正确的引导方式。
Chain of Thought(思维链)改变了人与大模型交互的方式。
本文要点
- CoT 论文背景与动机
- 标准 Prompting vs CoT Prompting
- 三类推理任务实验
- 模型规模与 CoT 效果
- CoT 的适用场景
- 后续发展与影响
一、论文背景
1.1 研究动机
flowchart TB
subgraph CoT想要解决的问题
A[大模型的困境]
A --> A1[擅长模式匹配,不擅长推理]
A --> A2[复杂任务上表现不佳]
A --> A3[Few-Shot 示例不够有效]
B[传统方法的局限]
B --> B1[直接给出答案的 Few-Shot]
B --> B2[问题 → 答案的直接映射]
B --> B3[缺乏中间推理过程]
C[灵感来源]
C --> C1[人类解决问题时会写下中间步骤]
C --> C2[逐步推理比跳跃更可靠]
C --> C3[为什么不让模型也这样做?]
D[CoT 的解决方案]
D --> D1[让模型生成中间推理步骤]
D --> D2[逐步推导最终答案]
D --> D3[通过示例教会模型这种能力]
end
1.2 论文信息
论文:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models作者:Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed H. Chi, Quoc V. Le, Denny Zhou机构:Google Research发表:NeurIPS 2022引用:10000+ 次二、标准 Prompting vs CoT Prompting
2.1 核心对比
flowchart TB
subgraph 标准 Prompting
A1["问题: Roger 有 5 个网球,他又买了 2 罐,每罐 3 个,共有多少?"] --> B1["示例: Q: 有 2 个苹果,买 3 个,共几个? A: 5"]
B1 --> C1["模型输出: 11"]
end
subgraph CoT Prompting
A2["问题: Roger 有 5 个网球,他又买了 2 罐,每罐 3 个,共有多少?"] --> B2["示例: Q: 有 2 个苹果,买 3 个,共几个?"]
B2 --> D2["A: 原有 2 个苹果,买了 3 个,2+3=5,答案是 5"]
D2 --> C2["模型输出: Roger 原有 5 个网球,买了 2 罐每罐 3 个,2×3=6,5+6=11,答案是 11"]
end
style C1 fill:#f44336,color:#fff
style C2 fill:#4caf50,color:#fff
2.2 数学问题示例
flowchart TB
subgraph 标准vsCoT对比
A[标准 Prompting 示例]
A --> A1["问题:一个篮子里有 8 个苹果,小明拿走了 3 个,小红又放进了 5 个,篮子里现在有多少个苹果?"]
A --> A2["Few-Shot 示例:Q: 有 10 个橘子,吃了 4 个,还剩几个? A: 6"]
A --> A3["模型输出:10 (错误!模型直接猜测答案,没有正确计算)"]
B[CoT Prompting 示例]
B --> B1["问题:一个篮子里有 8 个苹果,小明拿走了 3 个,小红又放进了 5 个,篮子里现在有多少个苹果?"]
B --> B2["CoT 示例:Q: 有 10 个橘子,吃了 4 个,还剩几个? A: 原有 10 个橘子,吃了 4 个。10 - 4 = 6。答案是 6。"]
B --> B3["模型输出:A: 篮子里原有 8 个苹果。小明拿走了 3 个,8 - 3 = 5 个。小红又放进了 5 个,5 + 5 = 10 个。答案是 10。(正确!)"]
end
2.3 代码示例
# 标准 Few-Shot Promptingstandard_prompt = """Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?A: 11
Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?A:"""
# Chain of Thought Promptingcot_prompt = """Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?A: Roger started with 5 balls. 2 cans of 3 balls each is 6 balls. 5 + 6 = 11. The answer is 11.
Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?A:"""
# CoT 模型输出会包含推理步骤:# "The cafeteria started with 23 apples. They used 20, so 23 - 20 = 3 apples left.# Then they bought 6 more. 3 + 6 = 9. The answer is 9."三、三类推理任务实验
3.1 算术推理
xychart-beta
title "GSM8K 数学应用题准确率"
x-axis ["GPT-3", "PaLM 62B", "PaLM 540B 标准", "PaLM 540B CoT"]
y-axis "准确率 %" 0 --> 60
bar [15, 17, 18, 57]
flowchart TB
subgraph 算术推理任务结果
A[GSM8K(小学数学应用题)]
A --> A1["PaLM 540B 标准提示:17.9%"]
A --> A2["PaLM 540B CoT 提示:57.9%"]
A --> A3["提升:+40% 绝对提升!"]
B[MAWPS(数学应用题)]
B --> B1["标准提示:35.4%"]
B --> B2["CoT 提示:78.1%"]
B --> B3["提升:+42.7%"]
C[AQuA(代数应用题)]
C --> C1["标准提示:23.9%"]
C --> C2["CoT 提示:35.8%"]
C --> C3["提升:+11.9%"]
D[SVAMP(简单数学问题)]
D --> D1["标准提示:66.6%"]
D --> D2["CoT 提示:79.0%"]
D --> D3["提升:+12.4%"]
E[关键发现]
E --> E1[复杂任务提升更显著]
E --> E2[简单任务提升有限]
E --> E3[证明推理步骤的重要性]
end
3.2 常识推理
flowchart TB
subgraph 常识推理任务示例
A["问题:小明想买一本书,但他没有足够的钱。他应该怎么做?"]
B[标准 Prompting 输出]
B --> B1["A: 他应该等有钱再买。(过于简单,缺乏推理)"]
C[CoT Prompting 输出]
C --> C1["A: 小明想买书但没有足够的钱。"]
C --> C2["有几种可能的解决方案:"]
C --> C3["1. 他可以攒钱,等够钱再买"]
C --> C4["2. 他可以借书或去图书馆"]
C --> C5["3. 他可以找更便宜的版本"]
C --> C6["4. 他可以询问是否有折扣"]
C --> C7["最实际的做法是先考虑图书馆借阅或攒钱。"]
D[CommonsenseQA 结果]
D --> D1["标准提示:73.0%"]
D --> D2["CoT 提示:75.2%"]
D --> D3["提升:+2.2%"]
end
3.3 符号推理
flowchart TB
subgraph 符号推理任务示例
A[任务:字母排序]
A --> A1["问题:请按字母顺序排列以下字母:D, A, C, B"]
B[标准 Prompting]
B --> B1["A: A B C D(可能正确,但过程不透明)"]
C[CoT Prompting]
C --> C1["A: 我需要将这些字母按字母表顺序排列。"]
C --> C2["字母表顺序是 A, B, C, D, E..."]
C --> C3["检查每个字母的位置:"]
C --> C4["- A 是第一个"]
C --> C5["- B 是第二个"]
C --> C6["- C 是第三个"]
C --> C7["- D 是第四个"]
C --> C8["所以正确顺序是 A, B, C, D。"]
D[符号推理任务结果]
D --> D1["4 个字母排序:标准 16% vs CoT 100%"]
D --> D2["5 个字母排序:标准 7% vs CoT 95%"]
D --> D3["任务越复杂,CoT 优势越大"]
end
四、模型规模与 CoT 效果
4.1 缩放特性
xychart-beta
title "不同模型规模下 CoT 的效果(GSM8K)"
x-axis ["8B", "62B", "540B"]
y-axis "准确率 %" 0 --> 60
line [5, 15, 18]
line [7, 35, 57]
flowchart TB
subgraph CoT的缩放特性
A[8B 模型]
A --> A1["标准 Prompt: 5.2%"]
A --> A2["CoT Prompt: 7.0%"]
A --> A3["提升: +1.8%"]
B[62B 模型]
B --> B1["标准 Prompt: 15.6%"]
B --> B2["CoT Prompt: 36.8%"]
B --> B3["提升: +21.2%"]
C[540B 模型]
C --> C1["标准 Prompt: 17.9%"]
C --> C2["CoT Prompt: 57.9%"]
C --> C3["提升: +40.0%"]
D[关键发现]
D --> D1[小模型上 CoT 效果不明显]
D1 --> D1a[8B 模型几乎没有提升]
D1 --> D1b[模型需要足够的容量来学习推理模式]
D --> D2[大模型上 CoT 效果显著]
D2 --> D2a[540B 提升最大]
D2 --> D2b[模型越大,推理能力越强]
D --> D3[涌现特性]
D3 --> D3a[CoT 能力在约 100B 参数后涌现]
D3 --> D3b[与模型的其他涌现能力一致]
end
4.2 为什么大模型更受益?
flowchart TB
subgraph 大模型与CoT的协同效应
A[模式识别能力]
A --> A1[大模型能更好地识别推理模式]
A --> A2[从示例中学习更有效]
B[上下文学习能力]
B --> B1[大模型有更强的上下文学习能力]
B --> B2[能够遵循长推理链]
C[知识储备]
C --> C1[大模型有更丰富的知识]
C --> C2[支撑推理过程]
D[自我纠错能力]
D --> D1[在推理过程中发现错误]
D --> D2[大模型更有可能自我纠正]
E[结论]
E --> E1["CoT 是「解锁」大模型推理能力的钥匙"]
end
五、CoT 的适用场景
5.1 适用场景
flowchart TB
subgraph CoT适用场景
A[适合 CoT 的任务]
A --> B[复杂推理]
B --> B1[数学应用题]
B --> B2[逻辑推理]
B --> B3[多步骤问题]
A --> C[需要中间验证]
C --> C1[计算密集型任务]
C --> C2[需要检查中间结果]
A --> D[开放式问题]
D --> D1[需要详细解释]
D --> D2[答案不唯一]
A --> E[知识密集型]
E --> E1[需要调用多方面知识]
E --> E2[需要综合分析]
end
5.2 不适用场景
flowchart TB
subgraph CoT不适用场景
A[不适合 CoT 的任务]
A --> B[简单任务]
B --> B1[单步计算]
B --> B2[简单分类]
B --> B3[CoT 反而增加延迟]
A --> C[模式识别]
C --> C1[图像分类]
C --> C2[情感分析]
C --> C3[不需要推理]
A --> D[事实检索]
D --> D1[简单问答]
D --> D2[知识查询]
D --> D3[直接回答更高效]
A --> E[小模型]
E --> E1[模型能力不足]
E --> E2[CoT 效果有限]
end
5.3 任务复杂度与 CoT 效果
flowchart TB
A[任务复杂度] --> B{判断}
B -->|简单| C["标准 Prompting<br/>更快、更高效"]
B -->|中等| D["根据情况选择<br/>可尝试 CoT"]
B -->|复杂| E["CoT Prompting<br/>显著提升效果"]
F["经验法则:"] --> G["需要 3 步以上推理 → 用 CoT"]
六、CoT 的变体与改进
6.1 Zero-Shot CoT
flowchart TB
subgraph Zero-Shot CoT
A[核心思想]
A --> A1[不需要示例,直接在问题后加「Let's think step by step」]
B[示例]
B --> B1["Q: Roger has 5 tennis balls..."]
B --> B2["A: Let's think step by step."]
B --> B3[模型输出会自动开始推理]
C[优势]
C --> C1[无需构造示例]
C --> C2[更灵活,适用于各种任务]
C --> C3[论文:Kojima et al. 2022]
D[效果]
D --> D1["GSM8K:从 17% 提升到 40%"]
D --> D2[不如 Few-Shot CoT,但远好于标准提示]
end
6.2 自动 CoT
# Auto-CoT: 自动生成推理链示例
def auto_cot(question, model, num_examples=3): """ 自动生成 CoT 示例
思路: 1. 从问题库中检索相似问题 2. 使用 Zero-Shot CoT 生成推理链 3. 组合成 Few-Shot 提示 """
# 1. 检索相似问题 similar_questions = retrieve_similar(question, k=num_examples)
# 2. 为每个相似问题生成推理链 cot_examples = [] for q in similar_questions: reasoning = model.generate( f"Q: {q}\nA: Let's think step by step." ) cot_examples.append(f"Q: {q}\nA: {reasoning}")
# 3. 组合成最终提示 prompt = "\n\n".join(cot_examples) prompt += f"\n\nQ: {question}\nA:"
return prompt6.3 Self-Consistency
flowchart TB
A[问题] --> B[生成多条推理路径]
B --> C["推理路径 1 → 答案 A"]
B --> D["推理路径 2 → 答案 A"]
B --> E["推理路径 3 → 答案 B"]
B --> F["推理路径 4 → 答案 A"]
C --> G[投票]
D --> G
E --> G
F --> G
G --> H["多数答案:A"]
style H fill:#4caf50,color:#fff
七、CoT 与推理模型的关系
7.1 从 CoT 到 o1
flowchart TB
subgraph CoT到推理模型的演进
A[2022:CoT 提示]
A --> A1[通过示例引导模型生成推理步骤]
A --> A2[需要人工设计示例]
B[2022-2023:Zero-Shot CoT]
B --> B1[无需示例,直接提示「逐步思考」]
B --> B2[更简单但效果略逊]
C[2023:Self-Consistency]
C --> C1[多路径推理 + 投票]
C --> C2[提高可靠性]
D[2024:OpenAI o1]
D --> D1[内部自动生成推理链]
D --> D2[通过 RLVR 训练]
D --> D3[推理能力飞跃]
E[演进逻辑]
E --> E1["从「提示引导推理」 → 「自动推理」 → 「强化学习训练推理」"]
end
7.2 CoT 的核心价值
flowchart TB
subgraph CoT最重要的贡献
A[发现推理能力]
A --> A1[证明大模型具备推理能力]
A --> A2[只是需要正确的引导方式]
B[交互范式转变]
B --> B1[从「直接问答」到「推理过程」]
B --> B2[可解释性大幅提升]
C[开启研究热潮]
C --> C1[推理能力成为研究热点]
C --> C2[导致推理模型的诞生]
D[实用价值]
D --> D1[简单有效,易于使用]
D --> D2[立即可用,无需训练]
end
小结
Chain of Thought 论文揭示了大模型推理能力的「开关」——通过展示推理步骤的示例,可以让模型学会逐步推理。
核心贡献:
flowchart TB
subgraph CoT核心总结
A[简单有效] --> A1[只需添加推理步骤示例]
B[显著提升] --> B1[复杂推理任务准确率翻倍]
C[缩放特性] --> C1[模型越大,效果越好]
D[可解释性] --> D1[推理过程透明可见]
E[影响深远] --> E1[开启推理模型研究热潮]
end
CoT 让大模型从「直觉回答」进化到「推理思考」。
参考资料
- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models - Wei et al. 2022
- Large Language Models are Zero-Shot Reasoners - Kojima et al. 2022
- Self-Consistency Improves Chain of Thought Reasoning - Wang et al. 2022
- Automatic Chain of Thought Prompting - Zhang et al. 2022
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
Chain of Thought:让大模型学会推理
https://blog.souloss.com/posts/machine-learning/llm-paper-history/cot-reasoning-enhancement/ 部分信息可能已经过时
相关文章 智能推荐
1
ReAct 与 Agent 架构:让大模型主动推理行动
AI 深度解读 ReAct 论文(2022)——推理与行动的协同、Thought/Action/Observation 循环、Tool Use 在 Agent 中的应用范式。
2
Toolformer 论文解读:让语言模型学会使用工具
AI 深度解读 Toolformer 论文——Meta 如何让语言模型通过自监督学习掌握使用外部工具的能力。
3
OpenAI o1/o3 与推理模型的崛起
AI 深度解读 OpenAI o1/o3 系统(2024-2025)——推理模型的新范式、RLVR 训练方法、Test-Time Compute Scaling,以及在 ARC-AGI 上的突破性表现。
4
WebGPT 论文解读:让语言模型学会上网搜索
AI 深度解读 WebGPT 论文——OpenAI 如何训练 GPT-3 使用浏览器进行信息检索和问答。
5
Qwen/InternLM:中国开源大模型
AI 深度解读 Qwen 和 InternLM 系列——中国大模型厂商的重要开源贡献






