Lecture 3 · 思维链的理论:表达能力、可学习性、步长与潜在推理 · The Theory of Chain-of-Thought: Expressivity, Learnability, Step Size, and Latent Reasoning

Advanced Large Language Models Research Seminar · Lecture 03。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:CS486 课程描述的 “enhance LLM reasoning”——本讲是推理部分(第 3–7 讲)的理论基础。 依据说明:CS486 没有公开的日程或讲义。本讲依据 Transformer 表达能力与思维链的理论工作(Merrill & Sabharwal、Li et al.、Feng et al.、Sanford et al.、Pfau et al.)、可学习性的理论(Wies et al.、Kim & Suzuki、Abbe et al.)、机制可解释性的方法论文、以及潜在推理 / 循环 Transformer 的工作(Universal Transformer、Saunshi et al.、Geiping et al.、Coconut、隐式 CoT)来写。§4–§6 的实验是本讲义自己设计的,数字全部来自配套代码的实际输出。 配套代码 Code:code/lecture03/(PyTorch;3 个脚本 + 1 个模块;第一次运行约 3 分钟——并行训练 3 个步长模型和 3 个循环模型;之后每个脚本几秒) 预计阅读时间:4 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲,你应该能够:

  1. 用”深度 = 并行时间”的直觉解释电路复杂度类 AC⁰、TC⁰、NC¹ 的区别,并说出为什么固定深度的 Transformer 落在 TC⁰ 里(以及这个结论依赖的假设)。
  2. 复述三个思维链表达能力定理(Merrill & Sabharwal;Li et al.;Feng et al.)的内容,说清”多少步思维链换来多少表达能力”,以及它们没有说什么。
  3. 在一个训练好的思维链模型里找出”一跳查找”的电路(绑定头 + 查找头),并用消融和干预验证它;解释为什么零消融和均值消融会给出不同的结论,为什么”单头消融没影响”不等于”这个头不重要”。
  4. 解释思维链的可学习性好处(稠密的中间监督),以及为什么推理链的步长必须和一次前向的能力匹配。
  5. 说出潜在推理(循环 Transformer、Coconut、隐式 CoT、循环深度语言模型)的思想;解释为什么”不写 token、只循环”也能得到串行深度,以及它在什么条件下学得会、能不能外推、怎样知道何时停止。
  6. 重新理解填充 token:它们增加的是宽度,在什么任务上有用、在什么任务上没用。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲不展开 Not covered
第 1 讲:串行深度、三种作答方式的实验、“表达能力 vs 可学习性”复杂度理论的证明(只讲结论和直觉)
第 2 讲:消融、种子、“一次训练不足以下结论”机制可解释性的完整工具箱(稀疏自编码器、电路发现算法)
Transformer 的注意力和残差流状态空间模型(Mamba 等)的表达能力

0.3 本讲地图 Map

§1  为什么需要理论:实验告诉我们"发生了什么",理论告诉我们"边界在哪里"
§2  电路复杂度速成:深度与规模;AC⁰ ⊂ TC⁰ ⊆ NC¹ ⊆ L ⊆ P;Transformer 落在哪里
§3  思维链的表达能力:三个定理;深度与步数的交换;图灵完备性;定理没说什么
§4  打开模型:一跳查找的电路(绑定头 + 查找头;零消融 vs 均值消融;备份头;因果干预)← 代码 01
§5  可学习性与步长:子任务分解的理论;步长实验;跳步与隐式 CoT                      ← 代码 02
§6  潜在推理:循环 Transformer;外推;何时停止;潜在 vs 显式                         ← 代码 03
§7  再看填充 token:宽度能买到什么
§8  现状与开放问题
§9–13  小结、常见误区、练习、延伸阅读、下一讲预告

1. 为什么需要理论 · Why theory

第 1 讲的实验给出了一个清楚的现象:2 层模型直接回答连 2 跳都做不到,写出思维链就能做 7 跳;填充 token 没用。但实验只能回答”在这个设定下发生了什么”。我们还想知道:

  • 边界在哪里? 更深的模型能做多少跳?思维链能把能力扩展到多远——任何问题都能靠”多写几步”解决吗?
  • 为什么? 是我们的模型太小、训练不够,还是有一个原则性的限制?
  • 能推广到哪里? 指针追踪之外,哪些任务也”必须一步一步来”?

理论计算机科学为这些问题提供了一套现成的语言:电路复杂度。它研究”用多少层(深度)、多少个门(规模)的电路才能计算某个函数”。Transformer 的一次前向计算可以看成一个固定深度的电路,于是”一次前向能做什么”就变成了一个电路复杂度问题。

但要记住理论的局限:表达能力定理回答的是”存在不存在一组参数能算出这个函数”,是关于最坏情况和渐近(输入长度趋于无穷)的结论。它不回答”梯度下降能不能找到这组参数”(第 1 讲的可学习性),也不回答”在长度 50 的输入上会怎样”。理论和实验要配合着看。


2. 电路复杂度速成 · A crash course in circuit complexity

2.1 深度就是并行时间

一个布尔电路由输入、逻辑门(AND、OR、NOT 等)和连线组成,没有环。两个量:

  • 规模(size):门的个数——总工作量。
  • 深度(depth):从输入到输出最长路径上的门数——如果所有门可以同时计算,这就是需要的”时间步数”,也就是并行时间。

我们关心的是:当输入长度 nn 增长时,规模和深度怎样增长。一个问题如果能用多项式规模、常数深度的电路解决,就意味着”无论输入多长,都能在固定的几步并行时间内算完”。这正是 Transformer 一次前向的特点:层数固定,宽度(位置数)随输入增长。

2.2 一个复杂度类的阶梯

从弱到强(只给直觉):

类允许的门深度直觉代表性问题
AC⁰AND、OR、NOT,扇入不限常数常数步内做”有没有 / 是不是全部”两个数相加
TC⁰再加上多数门(MAJORITY,阈值门)常数常数步内还能”数数、比大小”乘法、排序、数一串比特里有几个 1
NC¹扇入为 2 的门O(log⁡n)O(\log n)对数步,“二叉树式”地合并布尔公式求值、复合一串 S5S_5 的置换
L——(对数空间的图灵机)——用很少的内存一步一步走在每个点只有一条出边的图里沿边走
P——(多项式时间)——能高效解决的问题几乎所有”可计算”的实用问题

已知的包含关系是 AC⁰ ⊊ TC⁰ ⊆ NC¹ ⊆ L ⊆ P。第一个是严格的:奇偶校验(一串比特里 1 的个数是奇是偶)不在 AC⁰ 里(Furst, Saxe & Sipser 1984;Håstad 1986),但用多数门很容易算,所以在 TC⁰ 里。后面几个”⊆“是否严格是著名的未解决问题,但普遍猜想它们都是严格的。

两个对本课重要的例子:

  • 复合一串置换:给一串 5 个元素的置换 π1,π2,…,πn\pi_1, \pi_2, \dots, \pi_n,问它们的乘积是什么。Barrington 定理(1989)说明它是 NC¹ 完全的——如果 TC⁰ ≠ NC¹,常数深度的阈值电路就做不到。这是”状态追踪”类任务(追踪一个对象经过一系列操作后的状态)的原型。
  • 沿指针走很多步:我们的指针追踪,当跳数 kk 随输入增长时,也属于这类”状态追踪”问题:每一步都依赖上一步的结果。Sanford, Hsu & Telgarsky(ICML 2024)对”kk 跳”任务证明:O(log⁡k)O(\log k) 层的 Transformer 足够(用”指针加倍”),而在一个关于并行计算的标准猜想下,对数深度也是必需的。

2.3 Transformer 落在哪里

  • 硬注意力(每个位置只看注意力分数最高的一个位置)的固定深度 Transformer 在 AC⁰ 里(Hao, Angluin & Frank, TACL 2022)——所以它连奇偶校验都算不了。
  • 软注意力、精度为 O(log⁡n)O(\log n) 位的固定深度 Transformer 在(一致的)TC⁰ 里(Merrill & Sabharwal, TACL 2023,The Parallelism Tradeoff)。直觉:softmax 加权平均本质上是在”数数”和”比较大小”,这正是阈值门擅长的;而层数固定,所以深度是常数。

所以,如果 TC⁰ ≠ NC¹,任何固定深度的 Transformer 都不能直接解决复合置换、布尔公式求值、长距离状态追踪这类问题——无论它有多宽、参数有多少。

这些结论依赖的假设值得注意:精度(如果允许任意精度的实数,结论会变)、位置编码的形式、“一致性”(电路族是否能被简单的程序生成)。Strobl et al.(TACL 2024)的综述整理了不同假设下的结果。


3. 思维链的表达能力 · The expressivity of chain-of-thought

3.1 三个定理

现在允许 Transformer 在给出答案之前生成 TT 个中间 token。每个 token 都会从第 0 层重新进入模型(第 1 讲 §3.2),所以计算的串行深度随 TT 增长。

Merrill & Sabharwal(ICLR 2024,The Expressive Power of Transformers with Chain of Thought):表达能力随思维链的长度增长。

  • O(log⁡n)O(\log n) 步:只比没有思维链强一点点。
  • 线性步数(O(n)O(n)):能识别所有正则语言(也就是能模拟任何有限自动机——正好对应”状态追踪”),并且在这个设定下还能做一些更多的事。
  • 多项式步数:在他们的设定下,恰好等于 P——所有多项式时间可解的问题。

Li, Liu, Zhou & Ma(ICLR 2024,Chain of Thought Empowers Transformers to Solve Inherently Serial Problems):常数深度、常数精度的 Transformer,有 TT 步思维链时,可以模拟任何规模为 TT 的布尔电路。没有思维链时,同样的模型只能做 AC⁰ 级别的事。他们的实验正好包括复合置换(S5S_5)、迭代平方等”天生串行”的任务:没有思维链时浅层 Transformer 学不会,有思维链时可以。

Feng et al.(NeurIPS 2023,Towards Revealing the Mystery behind Chain of Thought):在算术表达式求值、线性方程组这类具体任务上,有界深度的 Transformer 直接输出答案时,除非规模随输入长度超多项式增长,否则做不到;而写出思维链时,常数规模就够了。他们还说明思维链能处理动态规划这一大类问题。

三句话的共同核心:思维链把”深度”换成了”长度”。每多写一个 token,就多一次完整的、LL 层的串行计算。

3.2 深度和步数可以互换

如果串行深度是关键,那么”更深的模型”和”更长的思维链”应该在某种程度上可以互相替代:

  • 更深:kk 跳查找,O(log⁡k)O(\log k) 层就够(Sanford et al.)——深度只需要对数增长,比每跳一层省得多。但第 1 讲的实验显示,梯度下降很难找到这样的解:4 层模型学 2 跳都很慢。
  • 循环:把同一组层重复执行很多次,深度增加而参数不变。Saunshi et al.(ICLR 2025,Reasoning with Latent Thoughts: On the Power of Looped Transformers)说明,一个 kk 层的块循环 LL 次,在很多推理任务上接近一个 kLkL 层的普通模型;并且循环模型可以模拟 TT 步思维链。§6 用实验看这一点。

3.3 图灵完备性:一个容易被误读的结论

Pérez, Barceló & Marinkovic(ICLR 2019;JMLR 2021,Attention is Turing Complete)证明:允许任意精度的实数和不限步数的解码,Transformer 是图灵完备的。这个结论常被引用为”Transformer 什么都能算”,但它依赖的假设(无限精度、无限步数)在实践中不成立。真正有用的问题是 §3.1 那种定量的问题:“给定这么多步、这样的精度,能算什么?”

3.4 定理没说什么

  1. 可学习性:定理说”存在”一组参数,不说训练能找到它。第 1 讲:2 层模型表达得了 1 跳,混在多跳题里训练却学不会。
  2. 具体长度:定理是渐近的。在输入长度 50 的题上,一个 4 层模型完全可能”表达得了”8 跳(每跳的电路没有那么大)。我们的实验处在”小 nn“的世界里,理论只给出方向。
  3. 模型怎样用它的步数:定理构造的思维链(模拟电路的一个一个门)和真实模型写出的思维链(自然语言的推理)很不一样;真实的思维链可能”浪费”很多步,也可能把很多推理放在一步里(§5)。
  4. 思维链是否忠实:定理假设模型真的依赖它写下的步骤。真实模型的推理链可能只是”事后的解释”(第 6 讲)。

4. 打开模型:一跳查找的电路 · Inside the model: the one-hop circuit

第 1 讲猜测:2 层模型做 1 跳的机制是”第 1 层绑定、第 2 层查找”。代码 01_lookup_circuit.py 打开第 1 讲的 cot_L2(2 层、4 头,1–7 跳全部 100%)来检验。

4.1 注意力模式:绑定头与查找头

在推理链里”要预测下一个字母”的每个位置(当前字母为 cc),统计每个头的注意力落在哪里。“匹配陈述”是题面里以 cc 开头的那条 c>y,它的右边 yy 就是正确答案(200 道题 × 7 步):

头匹配陈述的左边匹配陈述的右边(答案)跳数数字其他
第 2 层 头 10%0%58%42%
第 2 层 头 21%99%0%0%
第 2 层 头 30%97%0%3%
第 1 层的 4 个头0–2%0–6%0–2%81–94%

(完整表格见代码输出;第 2 层头 0 的注意力 96% 在”其他”。)

第 2 层的头 2 和头 3 几乎把全部注意力放在正确答案所在的位置——它们是查找头。有意思的是,它们不看当前字母 cc 本身在题面里出现的地方(匹配陈述的左边,1% 和 0%),而是直接看向右边的 yy。那它们怎么知道哪个 yy 的”来源”是 cc?答案在第 1 层。

在题面里每条陈述右边字母的位置上,第 1 层的头看向哪里:

头左边 2 格(来源)左边 1 格(>)自己其他
第 1 层 头 03%82%0%15%
第 1 层 头 121%1%9%69%
第 1 层 头 214%11%5%70%
第 1 层 头 399%0%0%1%

第 1 层的头 3 在每个 yy 的位置上看向左边 2 格的来源字母——它是绑定头:把”我的来源是 xx“写进 yy 的表示里。于是第 2 层的查找头可以用当前字母 cc 作为查询、用每个 yy 位置上”被绑定进来的来源”作为键,找到来源等于 cc 的那个 yy,再把 yy 本身作为值搬过来。

一个例子(代码 01 演示 3,第 2 层头 2 在起点位置的注意力,# 表示 ≥ 0.8):

题面    i>b;f>c;c>i;n>k;b>n;e>p;p>f;k>e;3?c
注意力            #                              ← 起点 c,正确的下一个字母是 i(陈述 c>i 的右边)

这正是第 1 讲 §3.5 的猜测,也解释了”为什么 2 层恰好做 1 跳”:绑定用掉 1 层,查找用掉 1 层,第二跳还需要以第一跳的结果为查询再查一次,没有层可用了。它和 归纳头(induction head,Olsson et al. 2022)是同一类两层电路:前一层把”前面是什么”写进每个位置,后一层按内容匹配、复制后面的东西。Brinkmann et al.(ACL Findings 2024)在一个树上找路径的任务里,也找到了类似的”逐层向后追溯”的电路。

4.2 消融:零消融 vs 均值消融,以及备份头

注意力模式是相关性证据:一个头看向答案,不代表模型的答案依赖它。消融(ablation)关掉一个头,看准确率掉多少——这是因果证据。两种关法:

  • 零消融:把这个头的输出置零。
  • 均值消融:把这个头的输出换成它在数据上的平均值——只去掉”随输入变化的信息”,保留”平均的贡献”。

教师强制下逐步查找的准确率(n = 8、k = 7,200 道题 × 7 步):

消融的头零消融均值消融
不消融100.0%100.0%
第 1 层 头 3(绑定头)16.9%17.7%
第 2 层 头 1(看跳数数字)80.4%100.0%
第 2 层 头 2(查找头)94.6%94.9%
第 2 层 头 3(查找头)99.9%99.5%
第 2 层 头 2 和 头 3 同时9.7%11.1%
其余 4 个头99.9–100%99.9–100%

三个教训:

  1. 电路确认了:关掉绑定头,准确率掉到 17%;同时关掉两个查找头,掉到 10%。
  2. 备份头:两个查找头单独关掉时几乎没影响(94.6% 和 99.9%),因为另一个能顶上。如果只做单头消融,会得出”头 3 毫无作用”的错误结论——它的注意力 97% 都在答案上!Wang et al.(ICLR 2023)在 GPT-2 的”间接宾语识别”电路里发现了同样的”备份名字搬运头”;McGrath et al.(2023)把这种”关掉一个部件、其他部件自动补偿”的现象叫作九头蛇效应(Hydra effect)。
  3. 零消融会高估:第 2 层头 1 的注意力 58% 在跳数数字上,从不看匹配陈述。零消融让准确率降到 80.4%,均值消融则是 100.0%。它的输出几乎是一个常数,后面的层”习惯了”这个常数——置零破坏的是这个习惯,不是查找。Zhang & Nanda(ICLR 2024)讨论了激活修补和消融方法的这类选择:零消融会把输出离开了正常范围的效应也算进来,均值消融或”重采样消融”(换成另一个输入上的激活)通常更能反映一个部件携带的信息。

4.3 因果干预

消融告诉我们”哪个部件必要”,干预告诉我们”模型用这个部件做了什么”。只改题面里的一个字母,看推理链第一步的预测(300 道题):

干预检查比例
不改预测 = 正确的下一个字母100.0%
(a) 把匹配陈述 c>y 的右边改成题里没有的字母 z预测 = z100.0%
(b) 把匹配陈述的左边改成 z(起点不再有出边)预测仍 = 原来的 y16.7%
(c) 对照:改一条无关陈述的右边预测 = 原来的正确答案100.0%

(a) 说明模型确实是照搬匹配陈述右边的字母(换成什么字母就搬什么字母,哪怕这个字母在别处从没出现过);(b) 说明它确实是按来源找的(来源对不上,就不再搬那个 yy);(c) 是对照。三者合起来,加上注意力和消融,构成了对”绑定 + 查找”电路的完整证据:相关(注意力)+ 必要(消融)+ 机制(干预)。

4.4 这对理论意味着什么

小模型找到的解,正是理论里”每跳需要常数层”的那种朴素构造(绑定 + 查找),而不是”指针加倍”那种对数深度的聪明构造。这提醒我们:理论给出的是可能性的边界,训练找到的是”最容易找到”的解。 第 1 讲 4 层模型学 2 跳很慢,很可能就是因为它要在 4 层里搭起两组”绑定 + 查找”,而梯度下降很难同时把两组都搭起来。


5. 可学习性与步长 · Learnability and step size

5.1 可学习性的理论

第 1 讲的实验发现思维链的第二个好处:可学习性。混在多跳题里训练直接回答,2 层模型连它表达得了的 1 跳都学不会;思维链把每道题拆成 kk 个 1 跳,每个 token 都是一个可学的小任务。理论上也有对应的结果:

  • 子任务分解(Wies, Levine & Shashua, ICLR 2023):一些任务在只有最终答案的监督下需要指数级的样本才能学会,但如果监督包含中间步骤(把任务分解成子任务),多项式样本就够了。
  • 奇偶校验(Kim & Suzuki 2024,ICLR 2025):一个 Transformer 用梯度下降、在有思维链监督(写出逐步的部分奇偶性)时能高效学会奇偶校验;没有中间监督时,奇偶校验对梯度方法是出了名的难学(梯度信号随位数指数衰减)。
  • “全局性”障碍(Abbe et al., NeurIPS 2024):如果一个任务的答案依赖于输入的很多部分的联合(“全局性”高),Transformer 很难从头学会;草稿纸(scratchpad)通过把它分解成一系列”局部”的步骤来打破这个障碍——但草稿纸的形式要设计得对。
  • 自回归是通用学习器(Malach 2023):在足够的中间监督(“思维链数据”)下,即使很简单的自回归模型(如线性的下一个 token 预测器)也能学会计算任何高效可计算的函数。

共同的信息:思维链不只是推理时的”草稿纸”,也是训练时的”课程”——它把一个难学的映射拆成一串好学的映射。

5.2 实验:每一步能跨多远?

如果推理链写得”更省”——每一步跨 ss 跳(只写第 ss、2s2s、3s3s……跳到达的字母),会怎样?代码 02_step_size.py 训练了步长 s=2s = 2、3 的 2 层模型和 s=2s = 2 的 4 层模型(其余设置和 cot_L2 相同;4 层训练 3000 步),和 s=1s = 1 的 cot_L2 比较:

同一道题(k = 5)的推理链:
  s = 1:ifbgo|o$
  s = 2:fgo|o$       (第 2、4、5 跳)
  s = 3:bo|o$        (第 3、5 跳)
跳数s = 1,2 层s = 2,2 层s = 3,2 层s = 2,4 层(3000 步)
k = 1100.0%15.0%16.7%13.3%
k = 2100.0%16.3%11.0%16.7%
k = 4100.0%9.7%9.0%17.3%
k = 7100.0%10.3%12.0%14.0%
平均(k = 1–7)100.0%13.1%12.0%14.0%

步长一旦超过一次前向的能力(2 层 = 1 跳),思维链就完全失效。4 层模型表达得了每步 2 跳,但在 3000 步内也没学会——和第 1 讲”4 层模型学 2 跳很慢”一致。

最能说明问题的是 k=1k = 1 一行:步长 2、3 时,k=1k = 1 的推理链只有一步、只需要 1 跳——这是 2 层模型完全能做的事,准确率却只有 15.0% 和 16.7%。原因和第 1 讲”混合训练的直接回答模型连 1 跳都学不会”一样:训练数据里大部分步骤学不会,淹没了能学会的那部分。步长太大不只是让大步骤失败,而是让整个模型学不会。

5.3 真实 LLM 里的步长

这个玩具实验对应几个真实的问题:

  • 推理链的粒度:人写的推理常常”跳步”(“显然……""化简得……”)。用这样的数据训练,模型要在一个 token 里完成好几步推理。Liu et al.(NeurIPS 2024,Can Language Models Learn to Skip Steps?)研究了模型能否在逐步推理的基础上学会安全地跳步:可以,但需要从完整的步骤出发、逐渐学会合并。
  • 压缩推理链:推理模型的思维链很长、很贵,压缩它是一个活跃的方向。我们的实验提醒:压缩后的每一步必须仍在模型一次前向的能力之内,否则压缩会让能力消失。
  • 隐式思维链:Deng, Choi & Shieber(2024,From Explicit CoT to Implicit CoT: Learning to Internalize CoT Step by Step)的”逐步内化”:先训练模型写出完整的思维链,再一步一步地删掉中间步骤、每删一次就继续微调,让模型把推理”内化”到隐藏状态里。用这种方法,GPT-2 Small 能不写任何中间步骤做 9×9 位数乘法(准确率最高 99%),而直接训练连 4×4 都做不到。关键词是”逐步”:一次删太多(就像我们直接用步长 2 训练)就学不会。(练习 4 在我们的任务上试了这个想法。)

6. 潜在推理:不写 token 的串行深度 · Latent reasoning

6.1 思想

第 1 讲说思维链有用,是因为”写下的 token 从第 0 层重新进入模型”带来了串行深度。那么,串行深度一定要靠写 token 吗? 几条路线都在探索”在隐藏状态里推理”:

  • 循环 / 权重共享的 Transformer:Universal Transformer(Dehghani et al., ICLR 2019)把同一层重复执行多次,并用自适应计算时间(ACT,Graves 2016)让每个位置自己决定循环几次;Giannou et al.(ICML 2023)证明循环 Transformer 可以当作可编程计算机;Saunshi et al.(ICLR 2025)说明循环模型能模拟思维链;Fan et al.(ICLR 2025)发现循环 Transformer 在一些算法任务上的长度泛化更好。
  • 循环深度语言模型:Geiping et al.(NeurIPS 2025,Scaling up Test-Time Compute with Latent Reasoning: A Recurrent Depth Approach)训练了一个 3.5B 参数、800B token 的模型,中间有一个可以循环任意次的块;测试时多循环几次,推理基准上的表现明显提高(最多相当于一个 50B 参数模型的计算量),而且不需要专门的思维链训练数据。
  • 连续思维:Coconut(Hao et al. 2024,Training Large Language Models to Reason in a Continuous Latent Space)把模型最后一层的隐藏状态直接作为下一步的输入嵌入,而不是先解码成 token;用一个从显式思维链逐渐过渡到”连续思维”的课程来训练。它在需要搜索的逻辑推理任务上表现很好,有迹象表明连续思维可以同时保留多个候选路径(类似广度优先搜索)。
  • 隐式思维链:§5.3 的逐步内化。

6.2 实验:循环 Transformer

代码 03_looped_latent.py 训练了一个循环 Transformer:一个 2 层的”循环体”(参数量 104,320,和第 1 讲的 2 层模型完全相同),在同一道题上重复执行 TT 次;中间结果留在隐藏状态里,不写任何 token;第 TT 轮之后在起点位置读出答案。题面去掉了跳数数字(…;?a),走几跳只由循环次数决定。训练时 k∈[1,4]k \in [1, 4],T=kT = k。三个版本:

  • 逐轮监督 + 输入注入:每一轮的读出都要预测”走了 tt 跳之后的字母”——和思维链提供的中间监督相同,只是推理时不写出来;每轮开始时把原始词嵌入加回残差流(Bansal et al. 2022)。
  • 逐轮监督,不注入。
  • 只监督最终答案(+ 输入注入):只有一个”更深”的模型,没有中间监督。

结果(n = 8,每格 300 道题):

跳数(= 循环轮数)逐轮监督 + 注入逐轮监督,不注入只监督最终答案
k = 1–4(训练范围)100.0%100.0%14.0–18.7%
k = 5(外推)98.7%98.7%14.0%
k = 6(外推)88.7%86.3%13.3%
k = 7(外推)57.7%65.7%14.3%
k = 8(外推,回到起点)13.3%29.3%0.0%

和第 1 讲的模型并排(同样的参数量):

跳数直接回答(2 层)思维链(2 层)循环,逐轮监督循环,只监督答案
k = 110.7%100.0%100.0%14.0%
k = 214.0%100.0%100.0%17.0%
k = 416.3%100.0%100.0%14.3%
k = 715.3%100.0%57.7%(外推)14.3%

四个发现:

  1. 串行深度不一定要靠写 token。同样的 2 层参数,循环 kk 次、不写任何 token,就做到了 2 层直接回答模型做不到的 1–4 跳推理。这是第 1 讲”串行深度”解释的一个独立验证:起作用的是”计算在深度上串起来”,token 只是实现它的一种方式。
  2. 但中间监督仍然必要。只监督最终答案的循环模型在所有跳数上都是随机水平——和第 1 讲的直接回答、§5.2 的大步长一样。循环提供了表达能力,逐轮监督提供了可学习性;两者缺一不可。(Coconut、隐式 CoT 都需要从显式思维链出发的课程,原因相同。)
  3. 测试时多循环几轮,能解出比训练时更长的题:训练时最多 4 跳,测试时循环 5、6、7 轮,准确率是 98.7%、88.7%、57.7%,随长度逐渐衰减。这就是”测试时多想一会儿”在潜在空间里的版本(Schwarzschild et al. 2021、Bansal et al. 2022 在迷宫、前缀和等任务上把这叫作”从简单到困难的外推”)。k=8k = 8 那一格混进了别的因素:n=8n = 8 的环走 8 跳回到起点,而训练时答案从来不是起点。
  4. 输入注入的作用在这里不稳健。我在原型里(题面还带着跳数数字)看到注入明显更好;正式版本去掉数字之后,不注入的版本在 k=7,8k = 7, 8 上反而更好。一个种子、一次训练的比较,不足以下”注入有用 / 没用”的结论——第 2 讲 §3.3 的教训在自己的实验里又出现了一次。

6.3 何时停止?

代码 03 的演示 2:给 k=4k = 4 的题循环 TT 轮,第 TT 轮的读出是什么?

循环轮数 T读出 = 正确答案(走 4 跳)读出 = 走 T 跳的位置
1、2、30.0%100.0%
4100.0%100.0%
50.0%98.7%
61.0%85.0%
84.0%18.3%

模型每循环一轮就走一跳,它自己不知道什么时候该停——少循环就停在半路,多循环就走过头。在我们的实验里,停止条件由外部给出(T=kT = k)。真实的推理需要模型自己决定想多久:

  • 自适应计算时间(ACT,Graves 2016)和 PonderNet(Banino et al. 2021)给循环网络加一个”停止概率”的输出,在训练时用一个惩罚项鼓励”能早停就早停”。
  • 显式思维链有一个天然的停止机制:模型写出”答案”或结束符。第 1 讲的思维链模型从题面里的跳数数字学会了”走 k 步就停”(也正因为如此,没见过的数字让它停错了地方)。
  • 推理模型的过度思考和思考不足(第 6 讲)本质上就是停止决策出了问题。

6.4 潜在推理 vs 显式思维链

显式思维链潜在推理(循环 / 连续思维)
串行深度每个 token 一次完整前向每次循环一次(可以更细)
每步的带宽一个离散 token(几个比特)一个连续向量(可以同时表示多个候选)
训练数据需要思维链数据,或者用 RL 发现通常需要从显式思维链出发的课程
停止写出结束符需要专门的停止机制
可监控性人可以读(但不一定忠实,第 6 讲)很难读——安全上的代价(第 19 讲)
成本每步要解码一个 token、存 KV cache循环时可以不增长 KV cache

这是一个真实的权衡,没有一边倒的答案。从安全的角度,很多研究者担心推理”潜入”隐藏状态之后就无法被监控(第 19 讲);从效率的角度,潜在推理可能省下大量 token。


7. 再看填充 token · Filler tokens revisited

第 1 讲:填充 token 在指针追踪上完全没用。§2–§3 给出了理论解释:填充 token 增加的是宽度(更多位置并行计算),不增加深度——带着填充 token 的固定深度 Transformer 仍然在 TC⁰ 里。

那它们在什么时候有用?

  • 可并行化的任务:Pfau, Merrill & Bowman(2024,Let’s Think Dot by Dot)构造了 3SUM(在一组数里找三个和为 0 的数)等任务:答案需要检查很多组合,但每个组合可以独立检查。填充 token 提供了更多”检查位置”,在这类任务上能提高准确率。但模型要在特殊设计的稠密监督下才学会利用它们;而且这类任务仍在 TC⁰ 内。
  • 预训练时就加入:Goyal et al.(ICLR 2024)在预训练和微调时都加入暂停 token,1B 模型在 SQuAD 上提高了 18%(精确匹配)、在 GSM8k 上只提高了 1%(第 1 讲 §3.6)。只在微调时加入效果有限。
  • 在大模型的推理任务上:Lanham et al.(2023,Measuring Faithfulness in Chain-of-Thought Reasoning)把思维链换成同样长度的填充符号,发现大模型在他们测试的推理任务上没有从填充中得到好处——思维链的好处来自它的内容。

一句话:填充 token 买的是宽度,思维链买的是深度。 先判断你的任务需要哪一种。


8. 现状与开放问题 · State of the field

  • 理论与实践的距离:表达能力定理说”多写几步就能算更多”,但真实推理模型的思维链长度和问题难度之间的关系很复杂(第 4、6 讲);理论也很少涉及”模型怎样分配它的步数”。
  • 可学习性理论还很初步:已有的结果大多针对特定任务(奇偶校验、简单的组合任务)和简化的模型;“什么样的思维链数据最容易学”缺少一般性的理论。
  • 潜在推理正在扩大规模:循环深度语言模型、连续思维、隐式思维链在 2024–2025 年都有了大模型规模的实验;它们能否在能力上追上显式推理模型、以及可监控性的代价,是开放问题。
  • 机制可解释性看推理:在小模型和合成任务上,推理电路可以被完整地找出来(本讲 §4);在大模型的真实推理上,这还很难。

研究问题:

  1. 能不能设计既有潜在推理的效率、又可以被监控的推理方式(例如可以按需解码的连续思维)?
  2. 怎样自动地确定思维链的最佳粒度——每一步既在模型的能力之内,又不过于冗长?
  3. 循环模型的停止机制:怎样让模型学会”想到对了就停”,而不是靠外部给定的循环次数?
  4. 理论上,哪些任务能从潜在推理中受益、哪些必须显式推理(例如需要和外部工具交互的推理)?

9. 小结 · Summary

  1. 深度 = 并行时间。固定深度的 Transformer(对数精度、软注意力)在 TC⁰ 里;如果 TC⁰ ≠ NC¹,它就不能直接解决复合置换、长距离状态追踪这类天生串行的问题。
  2. 思维链把深度换成长度:线性步数能模拟有限自动机,多项式步数在 Merrill & Sabharwal 的设定下等于 P;常数深度加 TT 步思维链能模拟规模为 TT 的电路。
  3. 定理回答”存在不存在”,不回答”学不学得会”、“在具体长度上会怎样”、“思维链是否忠实”。
  4. cot_L2 的一跳是一个两层电路:第 1 层的绑定头(右边字母看向左边 2 格的来源),第 2 层的两个查找头(用当前字母找到来源匹配的右边字母,直接搬过来)。
  5. 注意力是相关性证据,消融是必要性证据,干预是机制证据;要一起看。备份头会让单头消融低估一个头的作用;零消融会高估输出近乎常数的头的作用。
  6. 思维链的可学习性好处来自稠密的中间监督;步长必须在一次前向的能力之内,否则不只是大步骤失败,整个模型都学不会。
  7. 潜在推理:同样参数的 2 层循环体循环 kk 次、不写 token,就能做 1–4 跳,并能在测试时多循环几轮外推到 5–7 跳(逐渐衰减);但只监督最终答案时学不会。循环提供表达能力,中间监督提供可学习性。
  8. 循环模型不知道何时停止;停止决策是自适应计算和推理模型”想多久”问题的核心。
  9. 填充 token 买宽度,思维链买深度。

10. 常见误区 · Common pitfalls

  1. “Transformer 是图灵完备的,所以什么都能算。” 那个结论需要无限精度和无限步数;有界深度、有界精度时,一次前向只能做 TC⁰ 的事。
  2. “思维链有用,是因为模型’想得更认真’。” 从计算的角度,它提供了串行深度和中间监督;“认真”是一个拟人化的说法。
  3. “表达能力定理说 4 层能做 2 跳,所以 4 层模型会做 2 跳。” 表达得了 ≠ 学得会(第 1 讲 4 层模型 10000 步才学到一半)。
  4. “这个头的注意力全在答案上,所以它是关键的。” 可能有备份头(单独消融没影响);也可能它只是看着,答案并不依赖它。要做消融。
  5. “零消融后准确率掉了,所以这个头携带了任务信息。” 可能只是输出离开了正常范围;和均值消融对照。
  6. “推理链写得越简洁越好。” 每一步都要在模型一次前向的能力之内;步长太大会让模型完全学不会。
  7. “潜在推理不需要思维链数据。” 在我们的实验和 Coconut、隐式 CoT 里,都需要中间监督或从显式思维链出发的课程。(Geiping et al. 的循环深度模型是一个例外的方向:它在普通预训练数据上训练,靠测试时多循环获益——但它在什么任务上能多大程度替代显式推理,仍在研究中。)
  8. “循环更多次一定更好。” 没有停止机制时,多循环会”走过头”(演示 2)。
  9. “填充 token 和思维链一样,只是不可读。” 填充 token 不增加串行深度;在天生串行的任务上没用。

11. 练习 · Exercises

练习 1(指针加倍)。解释为什么 LL 层的 Transformer(原则上)可以做 2O(L)2^{O(L)} 跳的指针追踪,而我们找到的”绑定 + 查找”电路每跳需要一层。提示:第 ℓ\ell 层能不能让每个位置知道它的”2ℓ2^\ell 跳后继”?

参考答案:指针加倍:先让每个位置(每条陈述的右边字母 yy)知道自己的 1 跳后继(用一次”绑定 + 查找”);下一层,每个位置用”自己的后继”作为查询,去找”后继的后继”——这样每个位置知道了 2 跳后继;再下一层知道 4 跳后继……每一层把”已知的跳数”翻倍,ℓ\ell 层之后是 2ℓ2^\ell 跳。最后在起点处把需要的若干个 2j2^j 跳组合起来(kk 的二进制表示)。所以深度只需 O(log⁡k)O(\log k)。我们的小模型没有学到这种构造:它是”每跳一组绑定 + 查找”的朴素解,需要的深度随 kk 线性增长——这就是”理论上可能”和”训练找到的”之间的差别(§4.4)。

练习 2(奇偶校验)。为什么奇偶校验(一串 nn 个比特里 1 的个数是奇是偶)对一次前向的 Transformer 不难表达(它在 TC⁰ 里),却很难学?思维链怎样帮助学习?

参考答案:表达上,“数 1 的个数再看奇偶”可以用阈值门在常数深度内完成,所以在 TC⁰ 里。学习上,奇偶性依赖于所有比特的联合:改变任何一个比特都会翻转答案,而任何一部分比特(少于全部)和答案都不相关——梯度信号非常弱(“全局性”很高)。思维链写出逐步的部分奇偶性 p1,p2,…p_1, p_2, \dots,每一步只需要”上一步的结果 XOR 当前比特”,是一个局部的、容易学的映射(Kim & Suzuki 2024;Abbe et al. 2024)。

练习 3(消融方法)。零消融、均值消融、重采样消融(把这个部件的激活换成另一个随机输入上的激活)各自回答什么问题?在代码 01 里,第 2 层头 1 的零消融和均值消融结论不同。你会怎样用重采样消融进一步检验它?

参考答案:零消融问”如果这个部件完全不存在会怎样”——但”不存在”可能让下游看到一个从没见过的值,高估影响。均值消融问”如果这个部件不再携带随输入变化的信息会怎样”。重采样消融问”如果这个部件携带的是另一道题的信息会怎样”——保持了激活的分布,最贴近”这个部件携带了什么信息”。检验第 2 层头 1:对每道题,把这个头的输出换成另一道跳数不同的题上的输出,看推理链的长度会不会变(它看的是跳数数字,可能负责”何时停止”);在教师强制的逐步准确率上它可能没有影响,但在自由生成时也许会让模型停错位置。

练习 4(逐步内化)。§5.3 提到隐式思维链需要”逐步”删掉中间步骤。在我们的任务上试一个最简单的版本:4 层模型,前 1000 步用步长 1 训练,后 2000 步改用步长 2(同一个学习率调度)。和直接用步长 2 训练 3000 步(代码 02,平均 14.0%)比较。先预测,再运行(提示:用 cot_lab.stride_format 和 method_lab.fit_stream 写一个按步数切换步长的 batch_fn)。

参考答案(编写时在草稿目录里的实际运行,约 1.7 分钟):k = 1 是 100%(直接用步长 2 训练时只有 13.3%);k = 2–7 是 13–20%,仍在随机水平附近。检查输出发现:模型学会了步长 2 的格式(推理链的长度对了),但内容不对——第一个字母等于”第 1 跳”的只有 7–10%(它确实放弃了”一步一跳”),等于”第 2 跳”的约 18–20%(略高于随机)。所以”先学小步”保住了能学会的 1 跳,但这个一次就把步长翻倍的课程,没能让”每步 2 跳”在 2000 步内变得可学。Deng et al. 的逐步内化每次只删掉少量中间步骤,而且用的是大得多的模型;在我们的设定里,可以试试”先让一小部分题用步长 2、比例逐渐增加”的更平缓的课程。

练习 5(停止机制)。为代码 03 的循环模型设计一个”何时停止”的机制:在每一轮的读出之外,再加一个”停止”的二分类输出。训练时用什么标签?推理时怎样用它?可能会出现什么问题?

参考答案要点:训练标签:第 tt 轮时,如果 t=kt = k(已经走了足够的跳数)则”停止” = 1,否则 0——但题面里已经去掉了跳数数字,模型无从知道 kk;所以要么把 kk 放回题面(模型要学会”数到 kk”),要么改变任务让停止条件可以从内容判断(例如”走到字母 x 为止”)。推理时:每轮之后看停止概率,超过阈值就停,用当前读出作为答案(再设一个最大轮数)。问题:停止判断出错时(过早或过晚)直接导致错误;ACT / PonderNet 用”停止概率的期望轮数”做惩罚,训练时要平衡”多想”和”早停”。

练习 6(论文卡片)。用第 1 讲 §8.4 的论文卡片读 Coconut(Hao et al. 2024)。重点回答:“连续思维”相对于显式思维链的优势,在哪些任务上被证明了、在哪些任务上没有?它的训练依赖什么?

参考答案要点:主张:把最后一层隐藏状态直接作为下一步输入,可以在潜在空间里推理,并有可能同时保留多个推理路径。证据:在需要规划 / 搜索的逻辑推理任务(如 ProsQA)上优于显式思维链且用更少的 token;在 GSM8k 这类数学题上没有超过显式思维链。依赖:一个从显式思维链出发、逐步把语言步骤替换成连续思维的多阶段课程——没有这个课程,效果明显变差(和本讲 §6.2 的”只监督最终答案学不会”一致)。下一步:更大规模、更多任务、停止机制、可监控性。


12. 延伸阅读 · Further reading

电路复杂度与 Transformer

  • W. Merrill, A. Sabharwal. The Parallelism Tradeoff: Limitations of Log-Precision Transformers. TACL 2023.
  • Y. Hao, D. Angluin, R. Frank. Formal Language Recognition by Hard Attention Transformers: Perspectives from Circuit Complexity. TACL 2022.
  • L. Strobl et al. What Formal Languages Can Transformers Express? A Survey. TACL 2024.
  • B. Liu et al. Transformers Learn Shortcuts to Automata. ICLR 2023.
  • J. Pérez, P. Barceló, J. Marinkovic. Attention is Turing Complete. JMLR 2021.

思维链的表达能力

  • W. Merrill, A. Sabharwal. The Expressive Power of Transformers with Chain of Thought. ICLR 2024.
  • Z. Li, H. Liu, D. Zhou, T. Ma. Chain of Thought Empowers Transformers to Solve Inherently Serial Problems. ICLR 2024.
  • G. Feng et al. Towards Revealing the Mystery behind Chain of Thought: A Theoretical Perspective. NeurIPS 2023.
  • C. Sanford, D. Hsu, M. Telgarsky. Transformers, Parallel Computation, and Logarithmic Depth. ICML 2024.

可学习性

  • N. Wies, Y. Levine, A. Shashua. Sub-Task Decomposition Enables Learning in Sequence to Sequence Tasks. ICLR 2023.
  • J. Kim, T. Suzuki. Transformers Provably Solve Parity Efficiently with Chain of Thought. ICLR 2025.
  • E. Abbe et al. How Far Can Transformers Reason? The Globality Barrier and Inductive Scratchpad. NeurIPS 2024.
  • E. Malach. Auto-Regressive Next-Token Predictors are Universal Learners. 2023.

机制可解释性

  • C. Olsson et al. In-context Learning and Induction Heads. 2022.
  • K. Wang et al. Interpretability in the Wild: A Circuit for Indirect Object Identification in GPT-2 Small. ICLR 2023.
  • T. McGrath et al. The Hydra Effect: Emergent Self-Repair in Language Model Computations. 2023.
  • F. Zhang, N. Nanda. Towards Best Practices of Activation Patching in Language Models: Metrics and Methods. ICLR 2024.
  • J. Brinkmann et al. A Mechanistic Analysis of a Transformer Trained on a Symbolic Multi-Step Reasoning Task. Findings of ACL 2024.

步长、跳步与隐式思维链

  • T. Liu et al. Can Language Models Learn to Skip Steps? NeurIPS 2024.
  • Y. Deng, Y. Choi, S. Shieber. From Explicit CoT to Implicit CoT: Learning to Internalize CoT Step by Step. 2024.
  • Y. Deng et al. Implicit Chain of Thought Reasoning via Knowledge Distillation. 2023.

潜在推理与循环 Transformer

  • M. Dehghani et al. Universal Transformers. ICLR 2019.
  • A. Graves. Adaptive Computation Time for Recurrent Neural Networks. 2016;A. Banino et al. PonderNet. 2021.
  • A. Giannou et al. Looped Transformers as Programmable Computers. ICML 2023.
  • N. Saunshi et al. Reasoning with Latent Thoughts: On the Power of Looped Transformers. ICLR 2025.
  • Y. Fan et al. Looped Transformers for Length Generalization. ICLR 2025.
  • J. Geiping et al. Scaling up Test-Time Compute with Latent Reasoning: A Recurrent Depth Approach. NeurIPS 2025.
  • S. Hao et al. Training Large Language Models to Reason in a Continuous Latent Space(Coconut). 2024.
  • A. Schwarzschild et al. Can You Learn an Algorithm? Generalizing from Easy to Hard Problems with Recurrent Networks. NeurIPS 2021;A. Bansal et al. End-to-End Algorithm Synthesis with Recurrent Networks: Logical Extrapolation Without Overthinking. NeurIPS 2022.

填充 token

  • J. Pfau, W. Merrill, S. Bowman. Let’s Think Dot by Dot: Hidden Computation in Transformer Language Models. 2024.
  • T. Lanham et al. Measuring Faithfulness in Chain-of-Thought Reasoning. 2023.

13. 下一讲预告 · Next lecture

第 4 讲:测试时计算——采样、投票、搜索与验证器。 本讲的”循环更多次”是测试时计算的一种(在潜在空间里)。下一讲回到显式的 token:同一个模型多采样几次、投票、用一个验证器挑出最好的答案、在推理树上搜索——花更多推理时的计算,能把准确率提高多少?我们会看到生成–验证的不对称:在我们的任务上,“写出推理链”是串行的,而”检查推理链的每一步”是并行的——一个小模型就能可靠地检查它自己写不出来的推理链。

← 返回课程目录