思维链

4263 字
28 分钟
思维链
思维链
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
Jason Wei、Daniel Schuurmans 等 · Google Research, Brain Team · 2022 年 1 月
主线
大模型在算术、常识、符号推理这些任务上表现不好,靠加大参数量已经不够了。这篇的做法是把提示词里的答案换成「一串中间推理步骤」:示范几道答案里不带推理的例题,模型反而学会了自己把步骤写出来。作者的原话是标准提示只给出了大模型能力的下界。
内核
发现推理能力是随模型规模长出来的,不是被教出来的。百亿参数以下,思维链不但没帮助,反而比标准提示更差;到了百亿量级才开始生效,而且是从「完全不会」直接跳到「超过被专门微调过的模型」。
方法
提示词里多放一段推理

做法只有一句话:提示词里的示例,从「问题 + 答案」换成「问题 + 推理过程 + 答案」。论文第一页那张图画的是两件事,上下两半,这两半说的不是一回事。

同一个问题,两种提示词,示范给模型看的答案写法不同 问题 Roger 有 5 个网球,又买了 2 罐,每罐 3 个,有多少个? 标准提示 示范的答案: 原本 5 个球。2 罐共 6 个球。 5 + 6 = 11。答案是 11。 思维链 示范的答案: 答案是 11。 差别只有一个:示范的答案里带不带推理过程
这就是思维链与标准提示的全部差别,别的都不变。示范时把推理过程抽掉,模型输出时反而自己把步骤写出来。

标准提示的示例里带着推理过程,思维链的示例里只有答案。这一点很反直觉:示范推理的那一组,示例里反而写得更详细。

作者的解释是,标准提示给的是「陈述式的」推理(他告诉你答案是怎么算出来的),思维链要的是「问题分解式的」(先拆成可逐步执行的步骤)。给模型的示范形态,决定了它输出时模仿哪种形态。

作者还专门说明了为什么叫「思维链」而不是「解题过程」:这条链模仿的是一步步思考的过程,而解题过程与解释通常放在答案后面,位置正好相反。

推理时实际怎么跑

思维链的推理流程短得出奇,这也是它能被广泛采用的原因。

步做什么
1把问题接到提示词末尾
2模型逐词生成,每一步都把前面自己生成的内容当作上下文
3生成到句号时停下,答案就出来了

第 2 步是唯一的关键:模型在生成「3 + 6 =」的时候,前文里已经有「原本 23 个,用掉 20 个还剩」,它是在接着自己的话往下写,不是在凭空猜答案。

这套流程没有任何额外组件,不需要检索、不需要打分、不需要验证器。这也是它跟后面几篇最大的差别:思维树要加状态评估器和搜索算法,自我一致性要采样四十条,反思机制要评测者和记忆,思维链只要改提示词。

前提与边界

贪心解码(每步取概率最高的词)会让模型走进一条局部最优的路出不来,这是后续那几篇要解决的问题。这篇自己没有提这一点,它只报告了方法有效。

示范不带推理,输出却带推理,这个反差就是方法生效的机制。提示词里只给结论,模型要答对就只能自己把中间步骤推出来;提示词里给了推理,模型照抄一遍就行,不必自己走这条路。

论文第一页那张图还记录了一次具体输出:对「食堂原本 23 个苹果,用 20 个做午饭,又买 6 个」这道题,思维链输了一次,输在答了 27,标准提示答对了 9。思维链让模型做对的是它本来做不对的题,但它并不在每一道题上都赢,哪道赢哪道输取决于那道题的推理链条有多长。

前提与边界

论文记录的那次对照只有单次输出,没有给概率。单次输出说明不了方法的稳定性,方法层面的效果要看后面「涌现」与「三类任务」那两块的统计。

四条性质
作者给这个方法列的四条

作者在介绍方法之后单独列了四条,构成本篇的论证骨架。

性质说的是什么
算力可以按需分配多步问题能被拆成中间步骤,需要更多推理的题目就多花算力
提供一个可解释的窗口能看出模型怎么走到这个答案,也能定位推理在哪一步错了
适用面可能很宽原则上凡是人类能用语言解的任务都可能用得上
不需要训练就能诱导出来只要在示例里放几个带推理过程的例子,足够大的模型就出来了

第 2 条作者留了个限定,值得原样记住:能看到推理链不代表能刻画模型的计算,「完整刻画一个模型支撑某个答案的计算过程仍是开放问题」。所以「可解释」这个词在这篇里是打了折的。

前后呼应

第 1 条正是后面消融要检验的假设,多花算力本身有没有用。第 2 条又在「这篇没回答什么」里被反过来质疑。原文这三处是前后呼应的:先提出性质,再用消融检验,最后承认没做到。

论证链
两个想法的合并

作者把两个已有想法拼在一起,各自补上了对方的短板。

自然语言中间步骤做算术推理 优点 步骤能引导到正确答案 短板 需要高质量标注,从头训练成本高 传统少样本提示 优点 不需要训练,改起来快 短板 需要推理的任务上效果差,加大参数量也不见好转 思维链提示:用少样本的形态,承载中间步骤的能力
两条路线的短板在同一个方向上:要能力就得重训,不要能力就没法用。这篇把两者的长处接在一起,做法只是把提示词里的三元组从「问题 + 答案」换成「问题 + 推理过程 + 答案」。

这两个短板是同一个方向上的:要能力就得重训,不要能力就没法用。这篇的贡献就是把两者的长处接在一起:用少样本提示的形态承载需要中间步骤的推理能力,且零训练成本。

证据的重量集中在算术上。5400 亿参数的模型配八个思维链示例,在 GSM8K 这个小学应用题基准上达到了当时的最好成绩,超过了专门微调过的 GPT-3(还带验证器)。这个对比是关键:思维链没有训练任何参数,却在数学任务上超过了训练过的模型。

前提与边界

「标准提示不够用」这个前提,依赖的是当时的模型规模与任务设定。作者没有论证这个结论在今天的模型上还成不成立。后来的模型在标准提示下的表现已经大幅提高,这个对照的基准线变了。

涌现
能力是规模长出来的,不是教出来的

这是全文最要紧的一处发现,也是标题里「Elicits Reasoning」的真正含义。

百亿参数以下:思维链比标准提示更差 小模型的表现 能写出通顺的推理链 但内容不合逻辑 步子迈错时自己察觉不到 百亿量级的表现 部分任务达到最好成绩 从「完全不会」直接跳过去 不是被诱导出来的 ← 模型规模 → 失败样本的手工归类(读了 62 亿参数模型的 45 个错误) 语义理解错误 20 漏掉一步 18 其他 7 含幻觉、重复输出、符号映射错误
效果不是单调变好的,而是先有害、后突然生效。「通顺但不逻辑」这个现象很关键:它说明模型不是在模仿推理的表面形式,而是在真的走一步算一步。

作者把小模型的失败做过一次手工归类,读了 PaLM 62 亿参数的 45 个错误,分成语义理解错误(20)、漏掉一步(18)、其他(7,含幻觉、重复输出、符号映射错误)。「通顺但不逻辑」这个现象很关键:它说明模型不是在模仿推理的表面形式,而是在真的走一步算一步,只是步子迈错时自己察觉不到。

这个发现的连带含义比发现本身更重要:标准提示下的平坦曲线,不等于模型没有这个能力。作者的原话是「思维链提示似乎扩展了大模型能成功完成的任务集合,换句话说,我们的工作凸显了标准提示只提供了大模型能力的一个下界」。

前提与边界

「涌现」这个词在后续研究里争议很大:有工作认为曲线之所以看起来是突变的,是因为评测指标用了离散档位,把连续变化量化成了跳变。这篇论文没有回应这个质疑,它只给出了曲线,没有解释为什么是那个形状。

消融
它到底为什么有效

作者做了三组对照,把「思维链有效」这件事拆成几个可能的原因,逐个排除。

假设检验方式结果
只是多给了计算量让模型输出一串点数,长度等于解题需要的算式字符数与标准提示基本持平。多花算力本身没用,用自然语言表达中间步骤才有用
只是让模型更容易想起预训练里学过的知识把推理过程放在答案之后,这样推理没能影响答案与标准提示基本持平。说明模型确实依赖自己刚生成的那串推理,不是事后联想
只是把题目翻译成算式只要求输出算式,不写自然语言推理应用题基准上几乎没提升。但一步两步的小题目上有效,因为那种题确实能直接从题意翻成算式

第三组结果最有意思。小学应用题基准上的题目语义复杂,必须先用自然语言想一遍才能落成算式;而简单应用题不用这层中间解释。所以「有效」不是全有全无,而是取决于题目是否需要先理解题意。

前提与边界

三组消融都是在算术任务上做的。对常识与符号推理,中间步骤起作用的机制是否相同,论文没有验证。

三类任务
同一个机制,三种用法

作者在三类任务上验证,结论不是「思维链在哪都灵」,而是它的适用边界跟着任务的推理结构走。

算术 多步应用题,每步因果明确 收益最大 常识推理 因为 A 所以 B 这类自然语言推断 语言性质天然契合 符号推理 取末字母、抛硬币后判断 唯一拓宽了能力边界 符号推理带来的不只是「同任务做得更好」 还带来了长度上的分布外泛化:推理链比示例里更长的输入也能处理 三项任务的评测都在短文本上做 长上下文、代码、多轮任务上还成不成立,这篇没有证据
三类任务的推理结构不同,思维链的收益来源也不同:算术是「别掉步」,常识是「本来就要语言解释」,符号推理是「能处理更长的链」。

算术是最典型的。多步应用题,每一步都有明确的因果,模型只要不掉步就能算对。这里思维链的收益最大。

常识推理(CSQA、StrategyQA、日期理解等五个数据集)用的是同一个提示,但推理形态完全不同:不是数值演算,是「因为 A 所以 B」这类自然语言推断。作者的判断是思维链的语言性质让它能覆盖这一类,因为常识推理要的本来就是语言化的中间解释。

符号推理里有两个玩具任务:取人名末字母拼接、抛硬币后判断正反面。作者报告思维链不只让模型做对了这类任务,还带来了长度上的分布外泛化,推理链比示例里更长的输入也能处理。这是三项里唯一一个「能力边界被拓宽」的证据,不只是「同任务做得更好」。

前提与边界

三项任务的评测都在 2022 年的模型上做,题目都是短文本。这套方法在长上下文、代码、多轮任务上还成不成立,这篇没有证据。

缺口
这篇论文没回答什么
1. 规模阈值为什么会出现在那个位置,没有解释。

论文说了「百亿量级开始生效」,但没给机制。附录里那句「这个问题必然是多面的,我们只做了一次初步的错误分析」是作者的原话。他知道这只是猜测,没有当成结论。

2. 推理过程对了,结论也可能错。

作者自己列了这条:思维链不保证推理路径正确,同一条错误的推理可能推出正确答案,也可能推出错误答案。论文提到当时有研究在用这个方向改进事实性生成,但这里没做。这一条最要紧:思维链提升的是「算对的机会」,不是「想对的保证」。

3. 是不是真的在「推理」,论文明确说不回答。

原文是「尽管思维链模仿了人类推理者的思维过程,但这并不能回答神经网络是否真的在推理,我们把这留作开放问题」。这句话放在今天看仍然成立。

4. 成本方向反了。

少样本场景下手写思维链很便宜,但要做微调,这种标注成本就吃不消了。而思维链又只在超大模型上生效,也就是最贵的那批模型。作者把「怎么在小模型上诱导出推理」列为未来工作,没有给方案。

5. 评估的隐性前提没被检验。

全文的评测都建立在「标准提示是合理的对照」这个前提上。如果对照本身偏弱,「思维链超越了被微调的模型」这个结论的强度就要打折。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

当前页面没有目录

文章目录

当前页面没有目录