首先我觉得需要澄清的是,CoT 并不是指某个或某类具体的技术,而是一种引导模型解决复杂问题的方法论。思维链的概念是由 Google 在 NIPS 2022 的论文 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models[1]" 中首次提出的,其最初的含义即:让模型在输出答案之前展示出逐步的推理步骤,以辅助复杂问题的解决。因此 CoT 重点关注的是推理的中间步骤本身,而不是让模型呈现出推理中间步骤的某种或某类特定技术。但很多人会把 CoT 狭义地理解为“思维链提示词工程”,或说 CoT Prompting,我认为这是不对的。
核心思想:通过中间步骤得出最终答案
为了让模型具备解决复杂推理问题的能力,学者们付出了不少努力。比如,Ling 等人在 ACL 2017 的论文“Program Induction by Rationale Generation : Learning to Solve and Explain Algebraic Word Problems[2]”中构建了一个新的包含100,000个样本的代数问题数据集,包括问题、答案和理由;并提出了一个seq2seq模型,该模型生成一系列指令,当执行这些指令时,会生成理由;在此之后才选择答案。
随后来自 OpenAI 的 Cobbe 等人在 2021 年发表的论文“Training Verifiers to Solve Math Word Problems[3]”中构建了一个更大的具有自然语言原理的数学单词问题数据集(GSM8K),并使用它来微调 GPT-3。
同年,Nye 等人在论文“Show Your Work: Scratchpads for Intermediate Computation with Language Models[4]”中将算法的中间步骤编码为文本(scratchpad),并将其包含在训练数据中。例如,在长加法任务中,scratchpad 包含了标准长加法算法的中间结果。
然而研究发现,LLM 在单步推理任务(比如回答1+1=?)中,few-shot 和 zero-shot 都可以取得很好的效果,但是在需要推理的多步任务(复杂算术推理、常识推理、符号推理等)中,上述方法都变得不再有效。于是 Jason 等人在 NIPS 2022 论文“Chain-of-Thought Prompting Elicits Reasoning in Large Language Models”中首次将思维链示例引入提示词中,从而将推理过程分解为多个步骤,并在每个步骤中指导模型逐步进行推理,使模型能够理解和执行每个推理阶段所需的操作。这样CoT Few-shot Prompting的做法的确非常显著地改善了 LLM 在复杂问题上的解决能力,但缺点也相当明显:
而今年,来自斯坦福大学、Google等单位的学者在 ICLR 2024 的论文“Chain of Thought Empowers Transformers to Solve Inherently Serial Problems[5]”中,从表达能力的角度,通过理论分析和实验验证,探究了 CoT 为何能提升 decoder-only Transformer 的推理能力,特别是在解决固有串行问题方面的作用机制:
Kojima 等人在 NeurIPS 2022 上发表的论文“Large language models are zero-shot reasoners[6]”提出了Zero-shot CoT,这是一种更加简单的CoT。即仅仅通过在提示词中加入一句简单的“Let’s think step by step”就能让 LLM 自动输出中间的推理步骤。这种办法与最初 Jason 等人提出的 Few-shot CoT 相比,尽管在增强效果上略差,且需要两次调用 LLM(分别用于推理提取和答案提取),但可以被广泛地应用在所有文本生成任务上,具有通用性和任务无关性。当然,实验也表明,当模型很小时(小于60B),Zero-shot CoT 也基本不起作用。