Chain-of-Thought Prompting 论文详读

论文信息

  • 标题:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
  • 中文可粗译为:思维链提示可以激发大语言模型的推理能力
  • 会议:NeurIPS 2022

先用一句话讲明白

这篇论文的核心想法是:

不要只让模型直接报答案,而是先给它看几个"题目 -> 一步一步推理 -> 最终答案"的示例,这样大模型就更容易学会按步骤思考。

如果用最白话的话说:

  • 普通 prompt:题目 -> 直接回答
  • CoT prompt:题目 -> 先把中间推理过程写出来 -> 再回答

作者发现,这个改动看起来很小,但对大模型的复杂推理能力提升很明显。


Abstract

作者想解决什么问题

作者关心的是:为什么大语言模型看起来会很多东西,但一到多步推理题就经常翻车?

尤其是下面这些任务:

  • 数学文字题
  • 常识推理
  • 符号推理

它们的共同点是:

不能只靠"直觉式地猜一个答案",而要经过中间步骤。

作者的核心 idea

作者提出一种非常简单的方法:Chain-of-Thought Prompting,简称 CoT

做法是:

  1. 给模型几个示例
  2. 每个示例不只是"问题 + 答案"
  3. 而是"问题 + 中间推理过程 + 答案"
  4. 然后让模型照着这种格式去解新题

也就是把 prompt 从:

  • input -> output

改成:

  • input -> chain of thought -> output

摘要里的主要结果

作者说 CoT 在三类推理任务上都有明显提升:

  • arithmetic reasoning
  • commonsense reasoning
  • symbolic reasoning

最有名的结果是:

  • PaLM 540B
  • 只给 8 个 CoT 示例
  • GSM8K 上达到当时 SOTA

这件事当时很震撼,因为它不是重新训练模型,而只是改了 prompting 方式。


1 Introduction

1.1 Motivation

这一节的动机可以概括成一句话:

模型规模变大了,不代表它自然就会做复杂推理。

作者说,之前大家已经知道:

  • 模型变大,很多任务会变强
  • few-shot prompting 也很有用

但问题是:

  • 对一些真正需要推理的任务
  • 普通 few-shot prompting 提升不够
  • 单纯放大模型,也不一定自动解决

1.2 以前有什么办法

作者提到两类已有思路:

  1. 训练/微调模型去生成 rationale
    也就是专门训练模型输出推理过程
  2. few-shot prompting
    也就是给少量例子,让模型在上下文里学

但这两类方法各有问题:

  • 训练 rationale 需要很多高质量人工标注,成本高
  • 普通 few-shot prompt 对复杂推理任务经常不够强

1.3 这篇论文想做什么

作者的思路是把上面两类方法的优点拼起来:

  • 不重新训练参数
  • 只在 prompt 里加"推理过程示例"

于是就有了 CoT prompting。

1.4 这篇论文的核心贡献

可以压缩成 4 点:

  1. 提出一种非常简单但效果很强的 prompting 方法:CoT prompting
  2. 证明它在数学、常识、符号推理上都有效
  3. 发现这种能力不是小模型就有,而是随着模型规模变大才明显涌现
  4. 说明"标准 prompting 低估了大模型真实能力"

1.5 这一节最值得记住的话

不是模型不会推理,而是你可能没有用对唤起它推理能力的提示方式。


2 Chain-of-Thought Prompting

这一节是方法定义。

2.1 CoT 到底是什么

作者把 chain of thought 定义为:

一串通向最终答案的中间自然语言推理步骤。

比如一个简单数学题,普通回答可能是:

  • 答案是 11

CoT 风格会变成:

  • 先有 5 个球
  • 又买了 2 罐,每罐 3 个,所以新增 6 个
  • 5 + 6 = 11
  • 所以答案是 11

2.2 为什么作者觉得它可能有效

作者给了 4 个理由。

第一,能把复杂问题拆成中间步骤

多步问题如果直接输出答案,模型容易跳步。

而 CoT 逼着模型先分解,再求解。

第二,推理过程更可解释

你不只能看它答对没答对,还能看:

  • 它卡在哪一步
  • 是算错了
  • 还是理解题意就错了

第三,方法适用面广

作者认为,只要是人可以通过语言一步步解决的问题,理论上都可能用 CoT。

第四,不需要改模型参数

这是它最迷人的地方:

只要在 few-shot exemplars 里加入思维链示例,就可能把推理能力"激发出来"。

2.3 这一节真正想表达什么

CoT 不是一个新的模型结构。

它本质上是一个 prompting pattern:

给模型示范"你应该怎么一步步想"。


3 Arithmetic Reasoning

这一节是最经典的一部分,因为 CoT 最出圈就是靠数学文字题。

3.1 Experimental Setup

作者测了多个数学文字题 benchmark,包括:

  • GSM8K
  • SVAMP
  • ASDiv
  • AQuA
  • MAWPS

如果你是初学者,只要先记住:

  • GSM8K 是最经典的 grade-school math word problems 数据集
  • 这些任务都不是纯计算,而是"读懂题意 + 建立步骤 + 再计算"

3.2 baseline 是什么

baseline 是 standard prompting

  • 给几个 问题 -> 答案 示例
  • 让模型直接回答

CoT prompting 则是:

  • 给几个 问题 -> 推理过程 -> 答案 示例
  • 让模型模仿这种方式回答

3.3 实验模型

作者测了多个模型族和不同规模,包括:

  • GPT-3 系列
  • LaMDA
  • PaLM
  • UL2
  • Codex

但这篇论文最重要的观察不是"哪个模型最好",而是:

CoT 的效果和模型规模强相关。

3.4 Results

这一节最重要的结论有 3 个。

结论 1:CoT 是一种 scale-dependent / emergent ability

也就是:

CoT 的收益不是所有模型都有,而是在大模型上才明显出现。

作者观察到:

  • 小模型加 CoT,常常没帮助,甚至更差
  • 大概到 ~100B 量级后,CoT 才开始显著生效

这是这篇论文最重要的发现之一。

结论 2:问题越复杂,CoT 越有用

作者发现:

  • 对简单的一步题,收益很小,甚至没有
  • 对 GSM8K 这种复杂多步题,收益非常大

所以 CoT 不是"所有任务都提升一点点",而是:

越需要多步推理的任务,越能吃到它的红利。

结论 3:在一些 benchmark 上达到或逼近当时 SOTA

论文里最亮眼的是:

  • PaLM 540B + CoT 在 GSM8K 上达到当时 SOTA

而且关键是:

  • 不是微调
  • 不是新训练
  • 只是 prompting

这也是 CoT 为什么会一下子非常火。

3.5 作者对"为什么有效"的人工分析

作者人工看了一些模型生成的思维链。

他们发现:

  • 答对的样本里,大多数思维链本身也逻辑正确
  • 答错的样本里,有些是小错误,比如少一步、算错一步
  • 也有一些是更大的语义理解错误

这说明:

CoT 不只是"表面上多写点字",很多时候它真的把正确推理路径写出来了。


3.3 Ablation Study

这一节很重要,因为作者想证明:CoT 的作用不是别的因素冒充出来的。

作者做了 3 个主要对照。

3.3.1 Equation only

这个对照问的是:

是不是因为模型只要列出公式就够了?

做法是只让模型输出公式,不输出自然语言推理。

结果:

  • 在复杂题上,效果明显不如真正的 CoT

这说明:

自然语言中间推理,不只是"公式的替代写法"。

很多题先要理解语义,不能直接跳成公式。

3.3.2 Variable compute only

这个对照问的是:

是不是因为模型多输出了一些 token,所以相当于"多想了一会儿"?

作者设计了一个很有意思的对照:

  • 让模型输出一串点号 ...
  • 给它差不多长度的"计算预算"
  • 但没有真正的推理内容

结果:

  • 几乎没帮助

这说明:

CoT 的价值不只是"多花 token",而是"多花在有意义的中间推理上"。

3.3.3 Reasoning after answer

这个对照问的是:

是不是只要 prompt 里出现一些推理文字,就能激活模型知识?

所以作者试了:

  • 先答答案
  • 再写推理

结果也接近 baseline。

这说明:

关键不是出现了推理文本,而是推理过程必须在答案之前,真正参与求解。

3.3.4 这一节你要记住什么

作者通过 ablation 想说明:

CoT 有效,不是因为它更长,不是因为它更像公式,不是因为它看起来解释性更强,而是因为"按顺序写出的中间推理步骤"本身真的有用。


3.4 Robustness of Chain of Thought

作者在担心什么

prompting 方法经常有一个问题:

  • 换个示例
  • 换个顺序
  • 换个人写

结果可能就变很多。

所以作者要检查:CoT 会不会只是碰巧 prompt 写得好?

作者怎么测

他们换了:

  • 不同 annotator 写的 CoT 示例
  • 不同风格的 CoT 示例
  • 不同 exemplar 集合
  • 不同 exemplar 顺序
  • 不同 exemplar 数量

结果

结论是:

  • 确实存在波动
  • 但整体上,CoT 依然稳定优于 standard prompting

这说明:

CoT 的有效性不是某一种特别玄学的话术造成的。


4 Commonsense Reasoning

任务是什么

这一节作者想证明:CoT 不只对数学有用,对更一般的常识推理也有用。

测试的数据集包括:

  • CSQA
  • StrategyQA
  • Date Understanding
  • Sports Understanding
  • SayCan

这些任务更像:

  • 常识判断
  • 多跳问答
  • 日期推理
  • 事件合理性判断
  • 根据自然语言做机器人动作规划

结果

作者发现:

  • 随着模型变大,standard prompting 本来也会变强
  • 但 CoT 通常还能进一步提升
  • StrategyQA 等任务上提升比较明显

论文里还提到:

  • 在 Sports Understanding 上,PaLM 540B + CoT 的表现甚至超过了未辅助的人类体育爱好者基线

但不是所有常识任务都提升很多

作者也承认:

  • CSQA 上收益比较小

这很重要,因为它说明:

CoT 并不是所有"看起来像推理"的任务都会暴涨。


5 Symbolic Reasoning

这一节很有意思,因为它更像是在测"规则操作能力"。

任务是什么

作者用了两个 toy task:

  1. Last Letter Concatenation
    取每个词最后一个字母再拼起来
  2. Coin Flip
    多个人轮流翻不翻硬币,最后判断正反面

为什么要做这种任务

因为这类任务:

  • 人类觉得简单
  • 但模型如果没有清晰步骤,经常会乱

而且它们很适合测:

  • 能不能按规则一步步执行
  • 能不能泛化到更长的输入

什么是 OOD generalization

作者这里特别测了一个点:

训练/示例里只给较短的步骤数,但测试时给更长的步骤数。

这叫:

  • OOD(out-of-domain)generalization

你可以先把它简单理解成:

题目长度或难度超出了示例里见过的范围,看模型能不能继续按规则推下去。

结果

作者发现:

  • standard prompting 在 OOD 设置下几乎不行
  • CoT prompting 明显更强
  • 但这种优势同样主要出现在足够大的模型上

这一节的重要意义

它说明 CoT 不只是帮助"理解语义"。

它还帮助模型:

  • 维持步骤状态
  • 执行符号规则
  • 对更长链条做一定程度的泛化

6 Discussion

这一节很像作者自己帮你总结"这篇论文到底说明了什么"。

6.1 作者最核心的结论

作者认为 CoT 说明了两件大事。

第一,CoT 扩展了大模型能做好的任务范围

很多任务在 standard prompting 下看起来"能力到头了",扩展模型规模也没用。

但一换成 CoT,曲线就重新往上走。

这意味着:

standard prompting 其实低估了大模型能力。

第二,CoT 的效果和规模涌现强相关

也就是:

不是所有模型都能被 CoT 激活,往往要大到一定程度以后,这种能力才明显出现。

6.2 这篇论文没解决的问题

这一节作者承认了几个限制。

限制 1:模型到底是不是真的在"推理",仍然是开放问题

作者很谨慎,他们没有说:

  • “模型已经像人类一样思考了”

他们只说:

  • 它表现出了类似 step-by-step reasoning 的行为

所以:

CoT 让模型看起来像在推理,不等于已经证明模型内部真的在做人类式推理。

限制 2:如果要大规模标注 CoT 数据,人工成本可能很高

few-shot 场景里只写几个 exemplars,成本不高。

但如果你想把这事扩展成:

  • 大规模监督训练
  • 大规模微调

那 annotation 成本就会变贵。

限制 3:思维链本身不保证正确

模型可能会:

  • 写出一条很流畅但错误的推理链
  • 最后答对,也可能答错

所以 CoT 不是"自动得到可靠解释"。

限制 4:太依赖大模型,现实部署成本高

作者很明确地说:

  • CoT 的强效果主要出现在超大模型
  • 这对真实应用的推理成本和服务成本都不友好

这也是后面很多工作的出发点:怎么把 CoT 能力迁移到更小模型上。


这一节主要是在给 CoT 找学术坐标。

和哪些方向相关

作者说它主要接在两条线后面:

  1. 用中间步骤帮助推理
  2. prompting / in-context learning

它和以前方法最大的区别

以前很多方法会:

  • 训练模型生成 rationale
  • 用 formal language 做中间表示
  • 微调专用模型

而 CoT 的特别之处在于:

它不改模型,只改 prompt 的输出示例结构。

也就是从"增强输入提示"转成了"增强输出示范格式"。


8 Conclusions

作者最后的结论可以压缩成一句话:

Chain-of-thought prompting 是一种简单、通用、对大模型特别有效的推理增强方法。

它最核心的发现不是单个 benchmark 分数,而是:

大模型里存在一种可以被 prompt 激发出来的多步推理能力。

这也是后来整个 prompt engineering、reasoning prompting、agent prompting 大量工作的起点之一。


我自己的精简评价

这篇论文为什么重要

这篇论文非常重要,因为它改变了很多人对大模型能力边界的理解。

在它之前,很多人会觉得:

  • 模型不会做推理,就是不会

在它之后,大家开始意识到:

  • 有时不是模型完全不会
  • 而是你没有把"思考格式"示范给它

它最颠覆的地方

最颠覆的是:

一个只改 prompt、不改参数的方法,居然能把复杂推理能力拉起来这么多。

这对整个 LLM 研究影响很大。

它最大的现实边界

我觉得它最现实的问题有两个:

  1. 很依赖模型规模
  2. 思维链写出来不代表真的可靠

所以 CoT 很强,但也不能把它神化成"万能推理开关"。


读完后你应该记住的 6 句话

  1. CoT 就是在 prompt 里给模型示范"中间推理过程"
  2. 它不是训练方法,首先是一个 prompting 方法
  3. 它对复杂多步推理任务特别有用
  4. 它的效果在大模型上才明显,小模型 often 不行
  5. 它的价值不只是多输出 token,而是输出有意义的中间步骤
  6. 它让大家意识到:standard prompting 可能低估了大模型能力

术语补课

如果你读这篇还是觉得有点卡,建议先把下面几个词补一下。

优先补的概念

  • few-shot prompting
    给少量示例,让模型按示例做新题
  • standard prompting
    只给"输入 -> 输出"的普通提示方式
  • rationale
    可以简单理解成"解释/推理过程"
  • benchmark
    公开评测集
  • ablation study
    拆模块做对照实验
  • emergent ability
    规模到一定程度才明显出现的能力
  • OOD generalization
    超出示例分布的泛化能力

如果你想补基础,再回来读这篇

我建议顺序如下:

  1. 先了解 few-shot prompting
  2. 再看 in-context learning
  3. 再读这篇 CoT
  4. 然后再读 Self-ConsistencyReAct

因为很多后续工作,其实都是在 CoT 的基础上继续长出来的。


这篇 CoT 和 Reflexion 的关系

你刚刚读完 Reflexion,再看 CoT 会很有帮助,因为它们在思路上是连着的。

你可以这么理解:

  • CoT:让模型在单次作答时,学会"分步骤想"
  • Reflexion:让模型在多次尝试之间,学会"总结上次错因再改"

所以:

  • CoT 解决的是"这一次怎么想"
  • Reflexion 解决的是"下一次怎么从失败中学"

这两篇合起来,基本就是后面很多 agent prompting 方法的基础。


如果你接下来继续读什么最顺

如果你想顺着这条线继续往下读,我建议优先级这样排:

  1. Self-Consistency
    看"多条 CoT 采样后投票"为什么更强
  2. ReAct
    看"思考 + 行动"怎么结合
  3. Reflexion
    看"思考 + 复盘 + 记忆"怎么结合
  4. Tree of Thoughts
    看"不是一条思维链,而是多分支搜索"

如果你更想连接到 agent / harness 方向,那可以接着看:

  1. ReAct
  2. HotPotQA / GSM8K / HumanEval 这些 benchmark 本身
  3. AgentBench / SWE-bench / lm-evaluation-harness

这样你会更清楚:

  • CoT 解决的是什么层面的问题
  • 后来 agent 和 harness 又是在什么层面继续扩展它

最后给小白的一句提醒

不要把 CoT 简单理解成"让模型废话更多"。

更准确地说,它是:

让模型先显式展开中间推理,再给最终答案。

真正有价值的不是"更长",而是"更有结构的中间步骤"。