02. Chain-of-Thought 为什么有效?Self-Consistency 是什么?

整理 Chain-of-Thought 的有效机制、触发方式、Self-Consistency 与局限。

简单回答

Chain-of-Thought(CoT,思维链)是让模型在给出最终答案前先输出推理过程,从而显著提升复杂推理任务的准确率。它有效的核心原因是:把"一步预测最终答案"分解成"逐步预测中间推理步骤",每一步的预测难度更低,而且中间步骤的文本作为下一步的输入,相当于把外部记忆(working memory)写在 context 里。Self-Consistency 是 CoT 的强化版,对同一问题采样多条不同推理链,取多数投票的最终答案,进一步提升准确率。

详细解答

CoT 为什么有效

从语言模型的运作机制来理解 CoT,有一个很好的直觉:transformer 在每次预测 token 时,它的"计算量"是有限的——每个 token 的预测对应一次前向传播,能做的"思考"受限于模型的深度和宽度。对于只需要简单知识检索的问题("北京是哪个国家的首都"),一步预测答案没问题。但对于需要多步逻辑推导的问题("小明有 15 颗糖,给了小红 1/3,小红又给了小张 4 颗,小张现在有多少颗"),把所有推理压缩到一次预测里,相当于要求单次前向传播完成多步数学运算,很容易出错。

CoT 的做法是把多步推理"展开"在 token 序列里——模型可以先写"小明给了小红 颗",然后基于这个中间结果继续写"小红原来有 5 颗,给了小张 4 颗,小张有 4 颗"。每一步的预测都更简单,而且前面写出来的中间结果成了下一步预测的上下文输入,相当于给了模型一个"草稿纸"。

研究还发现,CoT 对模型规模有很强的依赖性——在小模型(<10B 参数)上效果很有限甚至无效,在大模型(>100B)上才有显著提升。这暗示 CoT 需要模型本身有足够的"推理能力基础",它不是一种能凭空创造推理能力的魔法,而是帮助模型更好地调用已有能力。

CoT 的触发方式

Few-shot CoT:在 Prompt 里给几个带有推理过程的示例,模型会模仿这种格式生成推理链。这是 Wei et al. 2022 的原始做法,效果很好但需要人工写示例推理链,成本不低。

Zero-shot CoT:最简单的触发方式——在问题后面加上 "Let's think step by step"(中文是"让我们一步步思考")。Kojima et al. 2022 发现这个简单的触发词在大模型上效果出乎意料地好,相当于免费获得了 CoT 的大部分好处,不需要写示例。这也是目前最常见的做法。

更精细的变体:告诉模型具体的思考步骤("首先……然后……最后……")、要求模型在给出答案前先分析所有可能性再排除、或者要求模型先把问题拆解成子问题再逐一解答。

Self-Consistency

标准的 CoT 是贪婪生成(greedy decoding)或单次采样,得到一条推理链和一个最终答案。但推理过程有多种可能的路径,而不同路径可能得到不同答案,贪婪解不一定是最优的。

Self-Consistency(Wang et al. 2022)的思路:对同一道题,用 temperature > 0 采样多条不同的推理链(比如 20~40 条),每条推理链会得到一个最终答案,然后取多数投票的答案作为最终输出。

其中 是第 条推理链, 是它得到的最终答案。

直觉上:如果一道题有 20 条不同的推理路径,其中 15 条都得到了答案 A,只有 5 条得到了答案 B,那 A 大概率是对的——多条独立推理链的一致性是答案可靠性的信号。

Self-Consistency 在 GSM8K、MATH 等数学推理 benchmark 上效果非常显著,比单次 CoT 提升 5%15%。但代价是 inference cost 增加 2040 倍(需要采样多次),所以主要用于对精度要求高、成本可以接受的场景。

CoT 的局限性

对事实性问题没有帮助:如果问题是"马克吐温生于哪一年",让模型"逐步推理"是没有意义的,答案取决于训练数据里有没有这个事实,而不是推理过程。

推理链可能"自圆其说"但结论错误:模型可能生成一个看起来逻辑完整但包含错误前提或推理谬误的链条,并得出错误答案。这种"有自信的错误推理"有时比直接给错答案更难发现。

在具体任务上需要调优:通用的 "think step by step" 不是对所有任务都是最优的触发词,对于某些任务(排序、分类),更结构化的思考步骤指引可能效果更好。

面试时可以这样答

CoT 有效的核心原因是:把"一步预测最终答案"分解成了"逐步写出推理过程"。模型每次预测一个 token,单次预测能做的计算是有限的,复杂推理需要多步骤。CoT 让模型把中间结果写在 context 里,相当于给了一个草稿纸,每步难度更低,前面写的内容会作为后面预测的输入,减少了"一次性算出来"的压力。

触发方式有两种:Few-shot CoT 给几个带推理过程的示例,效果好但需要写示例;Zero-shot CoT 直接加 "let's think step by step",成本低效果也不差,是现在最常用的。

Self-Consistency 是进阶版——采样多条推理链,取多数投票的答案。一道题有 20 条不同推理路径,15 条得到 A,5 条得到 B,选 A。在数学推理上能再提升 5%~15%,但 inference 成本增加几十倍,适合对精度要求高的场景。

CoT 有个重要约束:依赖模型规模,小模型(10B 以下)效果有限,大模型上才明显。它不是凭空创造推理能力,是帮助大模型把已有能力更好地发挥出来。

常见追问

  1. Process Reward Model(PRM)和 CoT 是什么关系?PRM 是怎么监督推理链的?
  2. CoT 对 Hallucination 的影响是正面的还是负面的?
  3. Tree-of-Thought 是在 Self-Consistency 的基础上做了什么改进?