思维链(Chain-of-Thought)技术的背后,是人类思考问题的方式!

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 ha ve now?
问题:罗杰有5个网球。他又买了2罐网球,每罐有3个网球。现在他总共有多少个网球?
一道小学级别的数学推理题,对今天的我们来说毫无压力。甚至对大多数大语言模型(LLM)来说,答对也不稀奇。但一个语言模型为什么能正确回答这种需要推理的数学题?这个问题本身,就很值得琢磨。
按人类的思考习惯,要解这道题,得先看看当前有多少网球——5个。再算算新买的:两罐,每罐3个,那就是6个。最后加起来,得到11。这个步步紧扣的思维过程,就是所谓的
思维链(Chain-of-Thought)
思维链技术同样可以应用在LLM上。它模仿人类大脑处理信息的逻辑链条——面对复杂问题时,模型会自然地把它拆成几个小问题,逐一解决,最后合并成完整答案。语言模型通过思维链提示(Chain-of-Thought Prompting),就能模仿这个过程,一步步推理出正确答案。这项技术最早源于2022年的一篇论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》。研究者发现,让模型生成一系列中间推理步骤,可以显著提升大语言模型完成复杂推理任务的能力。
思维链提示(Chain-of-Thought Prompting)
论文详细探讨了这种提示技术:通过模仿人类逐步思考的过程,让模型在得出答案前先走完一整套逻辑链条。实验表明,只要在少量示例中加入思维链,大语言模型就能在算术推理、常识推理、符号推理等任务上取得明显进步。更重要的是,这种方法不仅提高了推理能力,还让模型的决策过程变得更透明——你能看到它到底是怎么想的。而且,因为任何人类能用语言表达的任务都可以套用这个思路,思维链提示的适用范围比想象中广得多。
思维链提示为什么这么吸引人?几个关键特性值得留意:
第一,原则上,思维链把多步骤问题分解成中间步骤,这就意味着可以为需要更多推理步骤的问题分配额外计算资源——模型不会“跳步”。
第二,思维链提供了一个可解释的窗口。你可以看到模型得出某个答案的推理路径,甚至能顺着链条找到哪里出了问题(当然,要完全解释模型背后的计算逻辑,目前仍是个开放问题)。
第三,思维链推理可以应用于数学文字题、常识推理、符号操作等多种场景,理论上任何人类用语言能解决的任务都适用。
第四,只要在少量示例的提示中加入思维链的例子,现有的大语言模型就能直接学会这种推理方式,不需要额外训练。
算术推理(Arithmetic Reasoning)
研究背景与目标
- 算术推理对人类来说很简单,但语言模型过去的表现经常掉链子。用上思维链提示,特别是搭配540B参数的大模型时,性能可以比肩专门微调过的模型,甚至能在GSM8K这个高难度基准上刷新纪录。
实验设置
- 研究者在多个算术文字题基准上测试了不同模型的思维链提示效果,包括GSM8K、SVAMP、ASDiv、AQuA和MAWPS五个数据集。对比两种方法:标准提示(只给输入-输出对)和思维链提示(每个示例里加一条推理链)。
实验结果
- 思维链提示在大模型上效果显著,尤其是参数规模达到100B左右时,性能提升非常明显。对于像GSM8K这样的复杂问题,提升幅度更大;而简单问题上提升较小,有时甚至不明显。用GPT-3 175B和PaLM 540B做思维链提示,多个数据集上都达到了新最佳。
错误分析
- 研究者手动检查了LaMDA 137B在GSM8K上生成的思维链:答案正确的情况下,几乎所有的思维链在逻辑和数学上都正确。答案错误的情况则分为两类——部分思维链几乎全对,只是漏了个小错误;其他的则在语义理解或连贯性上出了大问题。
消融研究
为了搞清楚思维链到底为什么有用,研究者还做了几个消融实验:
- :对复杂问题帮助不大,只在简单问题上有点改善。
仅方程提示
- :性能和基线差不多——说明光列变量不叫思维链。
仅变量计算
- :也让模型先输出答案再写推理过程,结果性能和基线持平——说明顺序推理是思维链成功的关键,不光是“激活知识”那么简单。
答案后的思维链
思维链的稳健性
- 不同注释者写的思维链虽然风格不同,但所有思维链提示都显著优于标准基线。换个示例集、换个注释者、换个大模型,结果依然稳得住。这说明思维链提示的稳健性相当好。
结论
- 思维链提示是一种简单但适用范围广的方法,能显著提升语言模型在算术推理任务上的表现。它的效果不依赖于特定的语言风格,并且在大模型上表现出很强的复杂问题解决能力。这项工作也表明,通过少量示例和自然语言数据,大语言模型就能学会执行多步骤推理任务。
常识推理(Commonsense Reasoning)
研究背景与目标
- 思维链提示虽然最初在数学文字题上发光发热,但它的语言本质决定了它几乎适用于所有常识推理问题。而常识推理是机器与世界交互的基础,目前自然语言理解系统在这方面仍有不少短板。
基准数据集
- 研究者挑了五个覆盖不同常识推理类型的标准数据集:
- :问的是涉及复杂语义的世界常识问题。
CSQA
- :要求模型推断出回答问题的多步骤策略。
StrategyQA
- :从给定上下文中推断日期。
Date Understanding
- :判断与体育相关的句子是否合理。
Sports Understanding
- :将自然语言指令映射到一系列离散的机器人动作。
SayCan
实验设置
- 实验沿用之前的做法:对CSQA和StrategyQA,从训练集随机选例子并手动编写思维链作为少量示例;对没有训练集的两个BIG-bench任务,直接取评估集的前十个例子做示例,在其余评估集上报结果;对SayCan数据集,用了Ahn等人(2022)的六个训练例子,同样手动编写思维链。
实验结果
- 思维链提示在所有任务上都显著提升了性能,尤其PaLM 540B的提升最为夸张。例如在StrategyQA上,思维链提示帮助PaLM 540B超越了此前的最佳水平(75.6% vs 69.4%);在体育理解任务上,甚至超过了完全没受过训练的体育爱好者(95.4% vs 84%)。不过,在CSQA上的提升相对较小——可能这个任务本身对推理步骤的要求不那么明确。
结论
- 思维链提示不只是数学题的专属武器,它也能切实提高语言模型在常识推理任务上的表现。只要在少量示例里加入思维链,尤其是配合大模型,推理能力就能上一个台阶。这进一步证明了思维链是一种强大且灵活的方法,可以拓宽语言模型在多种复杂任务上的应用边界。
符号推理(Symbolic Reasoning)
研究目标
- 想看看思维链提示能不能让语言模型解决那些标准提示下完全搞不定的符号推理任务,甚至还能处理比提示示例更长的输入序列。
任务设计
- :把姓名中每个词的最后一个字母连起来(比如“Amy Brown” → “yn”)。这是对已有“首字母连接”任务的扩展。
姓氏字母连接任务
- :给定一些人的翻硬币动作(有人翻,有人不翻),问最终硬币是不是正面朝上。比如“硬币正面朝上。Phoebe翻转了硬币。Osvaldo没有翻转。硬币还是正面朝上吗?”答案是“否”。
硬币翻转任务
实验设置
- 为了测试模型的泛化能力,每个任务设计了领域内(in-domain)和领域外(OOD)的测试集。领域内测试的示例步骤和训练/少量示例的步骤数一样;领域外测试中,示例步骤数更多——比如在姓氏字母连接任务中,模型只见过两个词的姓名,测试时却要处理三个词、四个词的姓名;硬币翻转任务中,模型只见过两次翻转,测试时要处理更多次翻转。
实验结果
- :PaLM 540B配合思维链提示,几乎达到了100%的解出率。有趣的是,标准提示在硬币翻转任务上也能让PaLM 540B表现不错,但对LaMDA 137B就不行。
领域内测试
- :标准提示在两个任务上都失败了。而思维链提示则展现出向上的性能提升曲线——虽然比领域内表现低一些,但确实在变好。这说明,只要模型规模够大,思维链提示能帮助模型在从未见过的更长思维链上发生泛化。
领域外测试
结论
- 思维链提示不仅提高了语言模型在符号推理任务上的性能,还促进了模型对更长序列的泛化能力。实验结果再次强调了模型规模的重要性——只有在模型参数达到100B左右时,才开始展现对未见符号进行抽象操作的能力。这项工作进一步确认,思维链是一种强大且灵活的方法,可以扩展语言模型在更多复杂任务上的应用,也为未来的研究打开了新方向。