解锁黑箱: 大语言模型中思维链背后的理论
如果你曾使用过现代大语言模型 (LLM) 解决难题,你可能知道这个技巧: 在提示中加上一句“让我们一步一步地思考”,模型通常会生成中间推理过程并给出正确答案。这个看似简单的改变,被称为思维链 (Chain-of-Thought, CoT) 提示,已成为提升模型在数学、逻辑和推理任务表现的常用方法。
但为什么 CoT 的效果如此显著?它只是引导模型说出已有的知识,还是从根本上改变了模型的计算能力?
论文《揭示思维链之谜: 一个理论视角》 (Feng 等) 给出了清晰且令人意外的答案: CoT 不仅仅是推动模型一把——它从根本上改变了模型的计算模式。简而言之,自回归 Transformer 通过生成逐步推导步骤,可以解决一些同等模型直接一次性计算无法完成的问题类别,除非模型规模大到不切实际。
本文将梳理论文的主要思想,解释背后的直觉 (避免陷入繁复技术细节) ,并将理论与验证其结论的实验联系起来。
路线图
- 快速入门: 自回归 Transformer 与思维链
- 核心理论张力: 并行浅层计算 vs. 串行深度计算
- 两个具体数学任务: 算术表达式与线性方程组
- 为什么直接预测在理论上很难
- CoT 如何让常数规模 Transformer 成功
- 更广泛的类别: 动态规划 (DP) 及 CoT 的泛化能力
- 实验: CoT 训练 vs. 直接监督
- 实践启示与开放问题
简要入门: 自回归 Transformer 与思维链
自回归 Transformer (包括 GPT 系列) 以一次一个词元 (token) 的方式生成文本。在每一步,Transformer 会关注所有先前生成的词元 (使用因果掩码) ,并生成下一个词元。不断重复此过程,就能得到完整的答案或推导过程。
两个关键要素与本次讨论密切相关:
- Transformer 架构: 由堆叠的自注意力模块 + 位置信息 + 前馈网络 (FFN) 构成。每次前向传播都在整个输入序列上进行一次浅层但宽度较大的计算。
- 自回归循环: 在生成一个词元后,模型将该词元作为下一步的输入。重复这一循环,可以将多个相同的前向传播变为串行 (迭代) 的计算过程。
图: Transformer 模块 (自注意力 + 前馈网络 + 残差连接) 是自回归大语言模型的基本计算单元。
思维链是一种使用模式: 我们不要求模型直接跳到最终答案,而是让它写出中间步骤 (类似人类推导) 。论文的关键发现是: 这些中间输出不仅仅是解释,它们本身是计算步骤。当模型将这些输出反馈并继续生成时,它实际上在用固定的浅层模块实现更深、更串行的算法。
核心理论张力: 浅层并行计算 vs. 深层串行计算
为了分析 Transformer 能力边界,论文使用了电路复杂性理论的工具。两个重要的复杂度类别是:
- \( \mathsf{TC}^0 \): 浅层 (常数深度) 、多项式规模、具有多数门类功能的电路。这一类电路刻画了有界深度、有限精度的 Transformer 在一次前向传播中能计算的范围。
- \( \mathsf{NC}^1 \): 具有对数深度的电路,刻画了更广泛的可并行化但本质上是顺序的计算。
许多非平凡的算术及推理任务已知 (或被证明) 是 \( \mathsf{NC}^1 \)-难。如果一个有界深度的 Transformer (类似 \( \mathsf{TC}^0 \) 的设备) 在一次传播中能解决这些任务,这将意味着 \( \mathsf{TC}^0 = \mathsf{NC}^1 \),而复杂性理论普遍认为这一层级坍缩不可能发生。因此,有界深度且规模合理的 Transformer 在直接预测许多推理问题时存在根本限制。
图: 复杂度层级 (非正式示意) 。有界深度、对数精度的并行模型 (如部分 Transformer) 位于 \( \mathsf{TC}^0 \);很多推理问题需要更深的计算 (例如属于 \( \mathsf{NC}^1 \) 或更高) 。
然而,通过自回归生成循环可以反复使用同一个浅层模块,每次用先前生成的词元作为新的输入。这样的循环会将有效深度成比例地增加到生成步数,将浅层电路变为更深电路,足以模拟需要顺序推理的算法。
这一观察是理论的核心: CoT 能让固定规模的 Transformer 利用生成的链作为“磁带”或中间存储来模拟更深的计算。
两个具体数学任务: CoT 的作用
论文研究了两个基础任务来说明该观点:
- 算术表达式求值 (包含运算符和括号) 。
- 解线性方程组 (高斯消元式) 。
这些任务在更复杂的数学推理中都是常见子模块,且适合生成清晰的 CoT 推导。
为什么直接预测很难 (不可能性结果)
在实际且合理的算术精度假设下 (论文假设为“对数精度”,即神经元值有 \(O(\log n)\) 位精度) ,作者证明:
- 对于任何固定 Transformer 深度 \(L\) 和该深度下的多项式规模网络,存在某些输入长度使模型无法可靠地得出正确结果。算术是 \( \mathsf{NC}^1 \)-难任务,而有界深度 Transformer 属于 \( \mathsf{TC}^0 \)。
- 同样,对于规模足够大的线性方程组,有界深度对数精度的 Transformer 无法直接求解。
这些结论基于从经典 \( \mathsf{NC}^1 \)-完全问题 (如布尔公式求值) 的归约,以及 Transformer 前向传播与浅层电路类的映射。
直观地说,让一个浅层高并行度的模块一次性生成复杂的顺序结果,就好像让一个只有一层的程序完成一个多步骤算法,没有足够深度或无限精度,它不能成功。
CoT 如何让常数规模 Transformer 成功 (构造性结果)
令人意外的是,作者也给出了相反的结果:
- 对任何输入大小,存在一个常数架构规模 (常数深度、常数隐藏维度,与输入长度无关) 的自回归 Transformer,当其生成 CoT 序列时,可以为该输入范围的每个算术表达式生成正确的逐步推导。
- 同样,一个常数规模 Transformer 可以为线性方程组 (高斯消元步骤) 生成正确的 CoT 推导,适用于任意变量数量 (在问题规模范围内) 。
其实现基于两大洞见:
- Softmax 注意力 + 多头机制 + FFN 可以组合实现一组基本操作: 条件复制、条件平均、局部算数运算、条件选择以及查表。这些原语允许浅层模块实现并行算法中的一次“更新”步骤。
- 自回归循环会重复应用同一个 Transformer 模块,每个生成的 CoT 词元作为下一步输入,因此常数模块可通过生成构建长序列计算。有效计算深度等于生成的 CoT 词元数量。
可将 Transformer 想象为一个微型固定“处理器”,而 CoT 是用词元编写的程序。生成每一步时,应用同一个处理器推进程序状态。这样利用时间 (生成步数) 将浅层硬件转化为深度计算。
作者还做了严谨构造与误差分析,显示参数量级随输入大小保持多项式级,确保在对数精度模型下具有可实现性。
泛化: 思维链实现动态规划
算术与线性代数案例展示了数学上的 CoT 应用,论文将其推广到动态规划 (DP) 。
动态规划通过将复杂问题分解为一组有序重叠的子问题并按拓扑顺序求解: 先计算基本情况的 dp 值,再用这些结果计算依赖状态,最后进行汇总。
形式上,许多 DP 可以写为:
\[ \mathsf{dp}(i) = f\bigl(n, i, s_{g_1(n,i)},\dots,s_{g_J(n,i)},\ \mathsf{dp}(h_1(n,i)),\dots,\mathsf{dp}(h_K(n,i))\bigr), \]然后通过聚合步骤收集所需的 dp 值。
DP 部分的主要定理表明:
- 在实际且合理的假设下 (状态空间是多项式规模,dp 转移与聚合函数可由小型 MLP 高效近似等) ,常数规模的自回归 Transformer 可以按拓扑顺序生成完整的 dp 状态 CoT 序列,从而在给定长度范围内解决各类 DP 问题。
这一结论很强大且广泛,意味着 CoT 能让 Transformer 模拟大量经典算法,例如最长递增子序列 (LIS) 、编辑距离等均可纳入该框架。
同时,作者展示了一些不可能性结果: 某些类 DP 问题 (如上下文无关文法成员测试——P 完全问题) 无法用有界深度 Transformer 直接预测,但可以通过自回归 CoT 方式解决。
综合来看,CoT 是利用自回归生成实现顺序算法过程的架构机制。
图: DP 状态转移通常会查找少量输入与少量先前计算的 dp 状态来计算当前的 dp 值。
实验: 模型能从数据中学会 CoT 方法吗?
理论构造展示了可能性。那么现实中的 Transformer 能否从数据中学习这些 CoT 程序?论文针对四个任务进行了严谨实验:
- 算术表达式求值 (有限域算术)
- 线性方程求解 (有限域高斯消元)
- 最长递增子序列 (LIS)
- 编辑距离 (ED)
每个任务的两类数据集:
- 直接数据集: (问题 → 最终答案)
- CoT 数据集: (问题 → 完整逐步推导 + 最终答案)
在相同训练预算与词元化方案下,作者训练了不同深度 (3、4、5 层) 的标准小型 Transformer (隐藏维度 256,4 个注意力头) 。
结果令人印象深刻:
- CoT 数据集训练的模型 (即使是 3 层浅模型) 在所有任务与难度均取得近乎完美的准确率。
- 直接预测训练的模型表现显著较差,随着问题规模增加而急剧下降。加深网络有改善但不足以赶上 CoT 模型。
- CoT 模型能有效泛化到训练未见过的更长输入 (长度外推) ,显示其学习的是算法结构而非记忆。
- CoT 训练具备很强鲁棒性,即使训练数据中 CoT 步骤部分缺失或损坏,模型仍能高准确率完成任务。
下面的可视化总结了主要实验对比 (四个算法任务) 。紫色代表 CoT 训练 (L=3) ,蓝色阴影表示不同深度的直接训练。
图: CoT 训练持续获得近乎完美表现,而直接预测随问题复杂度增加而下降,即便更深模型通常也失败。
论文还做了泛化测试: 在最多 15 个操作符的算术题上训练后,让 CoT 模型在含 16–18 个操作符的题目上测试,仍保持高准确率——表明它学会了底层递归算法。
图: 算术表达式求值的长度外推结果。CoT 模型能泛化到更长表达式。
综合分析: 对 LLM 行为的解释
为什么简单的提示“让我们一步一步地思考”常常能让错误答案变成正确?
- 要求中间推理可以将任务从一次性计算 (浅前向传播难处理) 变成可用自回归生成的串行迭代过程。
- 自回归循环把固定浅层模块变成基于时间的深度计算。每步生成既是输出,也是下一步输入。
- 经验表明,在训练期间暴露正确中间步骤 (或用少量 CoT 示例提示) 能帮助模型学习 DP 式算法的更新规则;一旦掌握,模型就能重现多步推导并给出正确答案,即便在更长问题中。
换言之,CoT 不只是让 LLM 更有说服力的提示技巧,它开启了更适合算法化、逐步推理的计算模式。
实践启示
- 当任务具备顺序结构 (数学推导、算法推理、许多 DP 问题) 时,应优先选择能生成中间步骤的训练或提示。CoT 不仅可解释,更是计算能力的赋能工具。
- 小型浅层 Transformer 学会生成 CoT 序列后,也能执行非平凡算法。无需为每次前向传播增加巨大深度,深度可由自回归步骤累积。
- 如果训练模型解释或写出计算过程,引入 CoT 风格监督能显著提高最终答案的正确性。
- CoT 训练有助于模型在算法上的泛化 (长度外推) ,适合关注大输入鲁棒性的场景。
局限、注意事项与开放问题
论文解答了关键的表达能力问题,但仍存在开放方向:
- 触发 CoT: 理论假设模型会生成 CoT,但未解释为何某些提示 (如“让我们一步一步地思考”) 在实践中能稳健触发大型模型的这种行为。提示与模型内部动态的关系仍待研究。
- 模型规模: 经验显示更大模型有更强涌现的 CoT 能力。规模如何影响学习 CoT 策略的能力?论文重点在给定构造下的表达能力,不涉及规模与学习交互。
- 有限 CoT 学习: 实验使用了大量 CoT 数据。在现实中 CoT 标注成本高昂。需要多少逐步示例才能让模型学会可泛化的算法?
- 人类可解释性: 论文展示模型可模拟算法步骤。但生成的 CoT 是否忠实、能被人理解,还是仅是内部状态的程序输出,这需要进一步研究。
结论
这项工作清晰地从理论和实证上解释了思维链提示的强大之处: 通过自回归生成,它能将原本的浅层并行计算转化为深层串行计算。当自回归 Transformer 生成中间步骤时,它们能实现经典算法过程 (如动态规划) ,并解决在实际精度与规模限制下,同一模型无法直接完成的任务。
当你要求模型“一步一步地思考”,你不仅是在请求解释,更是在让它以不同方式进行计算。这种重新框定改变了我们对模型设计、训练数据及中间监督角色的看法,并帮助模型更可靠地进行推理。
对于具有算法性质的任务 (数学、规划、动态规划、解析) ,本文为使用与研究 CoT 风格监督提供了理论依据与现实建议。
参考文献与进一步阅读
- 关于本文提及的电路复杂性类别的入门介绍,请参阅 Arora & Barak 著《Computational Complexity: A Modern Approach》。
- 关于思维链提示的背景与实证研究,请参阅 Wei 等 (2022) 的论文《Chain of Thought Prompting Elicits Reasoning in Large Language Models》。
- 关于本文涉及的完整技术推导、证明和实验,请参阅原论文《Towards Revealing the Mystery behind Chain of Thought: A Theoretical Perspective》 (Feng 等) 。