一段让人发笑的对话

先不谈架构。看看这段真实的模型输出(Gemini 2.5 Flash,2025 年):

用户Fred 请了一天假,拿出他的钓竿,开车去了 bank。他到 bank 的时候,应该穿靴子还是人字拖?
模型人字拖虽然更舒适,但去钓鱼、尤其是在 河岸(river bank)边上,它们不是好选择。原因如下……
用户Fred 在这个 bank 里能找到 ATM 吗?
模型他极有可能在这家银行里找到 ATM。大多数银行,尤其是位于热门钓鱼水域附近的银行,都会在店内配备 ATM 以方便客户。

第一轮,模型明确把 bank 理解成了「河岸」。第二轮,它不但把 bank 翻译回了「银行」,还一本正经地补了一句 "位于热门钓鱼水域附近的银行"——它在同一段对话里同时持有两个互斥的信念,而且毫无察觉。

这在认知科学里有个名字:上下文化错误(contextualization error)。一个称职的对话者可以在开头对 bank 的两种含义都保持开放,但一旦承诺了"河岸"这个解读,后面再翻案时至少应该意识到自己翻案了。

这不是"模型不够大"的问题 论文作者特意注明:更新更强的模型确实不太犯这个错。但这个例子暴露的是核心架构的一个结构性弱点—— 更大的模型只是把这个弱点推到了更长、更复杂的语境里,而不是修好了它。

补三块基础

这篇论文的论证链条建立在三个东西上:Transformer 的残差流长什么样、机制可解释性的工具怎么"看见"模型内部、 以及为什么"层数"就是"思考步数"的硬上限。不熟悉这三块的话,后面的方法会显得很随意;熟悉之后,会觉得它几乎是必然的。

2.1 残差流:一块所有层共用的黑板

Transformer 的一层不是"输入 → 变换 → 输出",而是"读一眼 → 加点东西回去"。每个 block 实际做的是:

\[\begin{aligned}x &\leftarrow x + \operatorname{Attention}(\operatorname{LN}(x)),\\x &\leftarrow x + \operatorname{MLP}(\operatorname{LN}(x)).\end{aligned}\]残差连接:每一层都只是在原来的向量上"加"东西

所以贯穿整个网络的那条主干向量(每个 token 位置各有一条)从头到尾没被替换过,只是被一层层累加。 Anthropic 的 Elhage 等人(2021)给它起了个很贴切的比喻:残差流是一块共享黑板。 每一层都可以在上面读、可以往上面写,而且写下去的东西不会被后面的层直接替换掉。 (论文在脚注里也承认「特征擦除」——某个特征在不再需要时被反写抵消——是个真实的顾虑,只是近期工作表明这个问题比想象的轻。)

这条性质在本文里至关重要 因为是"加法",所以同一个特征方向在浅层被激活,和在深层被激活,对最终输出的直接影响是一样的(加法满足交换律)。 这意味着不同层的表示空间是对齐的——你不需要一个适配器(adapter)或者 cross-attention 来做层与层之间的翻译, 一个深层的向量直接加到浅层去,浅层是"看得懂"的。

这正是 Recirculation 敢于不训练就把深层激活塞回浅层的全部底气。

论文举了个直观例子:假设残差流里有一个维度大致对应"潮湿"这个概念。pool(水池)或 tears(眼泪) 这样的词,在输入嵌入层就会直接点亮它。但 bank 因为一词多义,本身点不亮多少"潮湿"。 如果我们把深层那个已经消歧完成bank 向量喂回浅层,"潮湿"这个特征就会被放大—— 浅层从此刻起就知道我们在讲河边了。

2.2 机制可解释性的三件工具

论文的动机来自 Lepori 等人(2025)的一组"开颅手术"式实验。要读懂那组实验,需要知道机制可解释性 (mechanistic interpretability)领域最常用的三样工具是怎么工作的。

① Logit Lens:把中间层当成最终层来读

模型最后一层的向量,会乘上一个 unembedding 矩阵变成词表上的概率分布。Logit Lens 的做法简单粗暴: 把第 5 层、第 10 层的向量也拿去乘同一个 unembedding 矩阵,看看解出来是什么词。 因为残差流是对齐的(见 2.1),这么做居然是有意义的——你能看到模型的"想法"如何一层层收敛。 比如在 bank 这个位置,浅层解码出来可能是「bank / river / money / shore」的混合,深层则收敛到「river / shore / water」。

② Patchscopes:让模型自己描述它的内部状态

Logit Lens 只能解码成"下一个词",表达力有限。Patchscopes(Ghandeharioun 等,2024)更聪明: 把待检查的那个隐藏向量,移植进另一段精心设计的提示词里

比如构造一个 few-shot 的"复述"提示:cat → cat; 1234 → 1234; ? → , 然后把你想检查的向量强行替换掉 ? 位置的嵌入。模型会顺着这个模式, 用自然语言把这个向量"念"出来。你也可以换成解释型提示(X 的意思是……),让它给出更丰富的描述。 Lepori 等人就是用 Patchscopes 证实了:在浅层,bank 的表示是两种词义的混合;到了深层,才被上下文压到了"河岸"这一边。

③ Activation Patching:因果干预,不只是相关

前两个工具只能"看"。要证明某个表示真的导致了某个输出,需要做干预。Activation patching 的标准流程是:

  1. 跑一遍"干净"的输入,把每一层每个位置的激活都存下来;
  2. 跑一遍"被破坏"的输入(比如换掉一个关键词);
  3. 在第二次运行中,把第一次运行里某一层某一位置的激活复制过去,其余不动;
  4. 看输出变了多少。变化越大,说明那个位置那一层的激活越是因果关键。
论文的起点就是一次 activation patching Lepori 等人处理输入到 bank 这一步时,把深层(歧义已消解)的向量复制到浅层,然后继续往下跑。 结果:上下文化错误减少了 60%

论文作者看到这个结果之后提出的问题是——如果不只在那一个"关键 token"上做,而是在每一个 token 上都做呢?

2.3 深度就是串行思考的预算

传统的状态跟踪工具——RNN、卡尔曼滤波——都靠"一步一步迭代地更新一个隐变量"。Transformer 为了并行训练, 主动放弃了这个能力:在训练和 prefill 阶段,所有位置是同时算的,没有"上一步的隐状态"这回事。

那 Transformer 靠什么跟踪状态?靠深度。一个 token 从输入到输出,最多经过 L 层,也就是最多 L 步串行计算。 这是一个硬上限:

  • Merrill(2025)证明,识别长度为 n 的正则语言字符串、或求解 n 个顶点的图连通性,需要且只需要 \(\Theta(\log n)\) 层
  • 但这只说明"解存在",不说明"能学到"。实践中模型学到的往往是针对特定长度的巧妙但脆弱的技巧;
  • 更麻烦的是:状态表示越有用就越深,而越深就越难被后续处理利用——因为前馈网络不能回头。
和 SSM / Mamba 是什么关系? 状态空间模型常被宣传成"能传播状态"。论文指出:许多 SSM 的表达力其实不超过普通 Transformer(Merrill 等,2025 的"SSM 幻觉"一文), 而且没有一个达到通用 RNN 的表达力。所以"换成 SSM 就解决了"并不成立。

病因:思维赛跑(Racing Thoughts)

把 2.1–2.3 拼起来,bank 的故事就完整了。Lepori 等人把这个现象命名为 racing thoughts(思维赛跑):模型的"回答生成"跑得比它的"语义收敛"更快。

想象一张网格:横轴是输入的 token(从左到右),纵轴是网络的层(从下到上)。每一列就是一个 token 的处理过程, 激活从下往上流。当 bank 这个词被处理时:

  • 浅层(比如第 1–4 层):bank 的嵌入是"河岸"和"银行"两种含义的混合体——这是词典给的,还没考虑上下文;
  • 深层(比如第 5–8 层):注意力头已经从左边的 fishing pole 取到了上下文,把这个嵌入推向了"河岸"那一侧。歧义解决了。

问题出在下一句。当模型处理 ATM 并准备回答时,如果它在比较浅的层就决定了答案 (这完全可能——"bank 和 ATM 强关联"是一条非常浅显、非常强的统计关联),那么它读到的 bank 表征来自浅层的 KV cache,也就是那个还没消歧的混合体

前馈架构的铁律:浅层永远读不到深层的结果。哪怕深层早就知道答案是"河岸",只要回答在浅层就已经形成, 这个知识就被绕过去了。

Transformer 处理 bank 对话的示意图,(a) 基线,(b) 加入回流
论文 Figure 2。网格的行是层(下浅上深),列是输入步。 (a) 基线:bank 列在深层(黄色高亮)才收敛到"河岸",但回答在中段偏浅的层就已经形成(右侧黄色高亮), 读到的是浅层的混合表征,于是答 "Yes"(有 ATM)。 (b) 加入回流后:橙色粗箭头把深层已消歧的表征拉回浅层,回答改为 "No"。这张图正是 Recirculation 的思想原型。
交互演示 · 「bank」的歧义消解与思维赛跑
点「下一步」逐步观察激活如何流动,或切换到 Recirculation 模式看结局如何改变。点击任意方块查看该层该位置的语义状态。
示意图,用于说明机制;层号与具体语义分布为教学性简化,非模型实测值。真实实验中的证据来自 Patchscopes 与 activation patching(见 §2.2)。

药方:Recirculation

Lepori 的干预实验有两个致命限制:它只在一个事先人工标定的关键 token 上做,而且是整个向量替换。 论文作者问了两个"如果":

如果一视同仁地在每个 token 上都做呢?
大概率会崩。模型没被训练过要承受这么强的反馈,表示会被推出分布外。

那如果不是"替换",而只是"漏"一点点过去呢?
——这就是 Recirculation。少量的泄漏也许足以丰富表示,又不至于把它推出分布。而且, 可以在推理时做,完全不动已训练好的权重

4.1 一个公式

\[z_{t+1,t,d}=\alpha f(z_{t,t,s})+\beta z_{t,t,d}\]论文式 (1):目标层的新向量 = \(\alpha\) × 归一化后的源层向量 + \(\beta\) × 目标层原向量
\(z_{i,j,l}\)
第 \(i\) 次展开、第 \(j\) 个输入步、第 \(l\) 层之后的残差流向量
s / d
源层(source,深)和目标层(destination,浅)的层号
\(\alpha\), \(\beta\)
混合系数。默认取凸组合 \(\beta\) = 1 − \(\alpha\)(Gemma3 4B/12B 则需要非凸的 \(\beta\) = 1)
f(·)
重归一化函数:把源向量缩放到与目标向量相同的 L2 模长
\[f(z)=\frac{\lVert z_{t,t,d}\rVert_2}{\lVert z\rVert_2}z\]论文式 (2):为什么需要它——残差流的模长随层数增长,不归一化的话深层会盖过浅层

就这样。三个超参数:源层 s、目标层 d、泄漏强度 \(\alpha\)。没有新参数、没有 adapter、没有微调。 论文为 Gemma3 三个尺寸找到的最优配置是:

模型总层数*源层 s目标层 d跨越
Gemma3 1B PT261147 层
Gemma3 4B PT341899 层
Gemma3 12B PT48351619 层
源层与目标层来自论文表 B.1。*总层数一列不在论文中,取自 Gemma3 官方模型卡,仅供换算相对深度参考。 有意思的是三者的源层都落在网络的中上段(相对深度 42%~73%),且源层深度大致是目标层的 2~2.8 倍。

4.2 关键在于"什么时候"回流

光看架构图(下图 a),一个"从第 6 层连回第 3 层"的循环连接是有歧义的——它到底怎么随输入步展开, 决定了它是两种完全不同的东西。

循环连接的两种展开方式:looped transformer 与 recirculation
论文 Figure 3。(a) 从第 6 层到第 3 层的循环连接。 (b) 只在深度上展开 → 这是 looped transformer:同一步内把 3–6 层再跑一遍,等价于一个更深的前馈网络。 (c)深度和输入步上同时展开 → 这才是 recirculation:第 \(i\) 步的上层栈与第 \(i+1\) 步的下层栈合并, 信息斜着往右上方走。深灰=已冻结(KV cache),白框=当前前向传播计算的。
一句话抓住区别 Looping 的循环只发生在深度上——箭头在同一根栈内部往上走。
Recirculation 的循环同时发生在深度和时间上——箭头从第 \(t\) 步的深层,斜着指向第 \(t+1\) 步的浅层。

4.3 为什么这个差别是本质的

考虑一个任意的状态更新函数 z(t+1) = f(z(t), x(t))——这是 RNN 的定义式,也是"跟踪一个变化中的世界"的最一般形式。

  • 在 looped transformer 里z(t+1) 必须比 z(t) 深一层。 状态每更新一次就要往上爬一层,序列一长就撞到天花板。它本质上只是一个带权重共享的、更深的前馈网络。
  • 在 recirculation 里:因为投影同时发生在深度和步数上,同一层可以同时承载 z(t)z(t+1)。 状态可以在同一个高度上无限地向右传播。这就是真正的循环。
状态传播路径对比:looping 必须向上爬,recirculation 可以水平推进
论文 Figure 4。彩色空心方块标出状态 state(1)→state(4) 的传播路径。 (a) Looped:状态被迫沿着栈向上爬,层数就是它能活的步数上限。 (b) Recirculation:状态停在同一层水平右移,理论上可以无限传播。

代价也很清楚:recirculation 无法并行化。即使输入序列已经全部给定(prefill 阶段), 也必须一个 token 一个 token 地串行跑——因为第 \(t+1\) 步的浅层要等第 \(t\) 步的深层算完。

看清楚:三种架构的信息流

交互动画 · 标准 / Looped / Recirculation 的信息流对比
横轴是输入步(token),纵轴是层。打开「状态跟踪」后可以看到一个必须每步更新的状态(彩色方块)在三种架构里的命运。
示意图。为了看得清,这里画的是 10 层、6 步的小模型;论文实验用的是 Gemma3 1B(26 层)和 1024-token 的上下文窗口。
一次还是多次? 论文全部实验用的都是"每个栈只回流一次"的最简版本(相当于每步跑两遍栈)。理论上可以回流 \(r\) 次, \(r\to\infty\) 时 recirculation 就退化成一个真正的 RNN。作者把这个留给了未来工作。

实验结果

6.1 超参数扫描:模型自己告诉你该往哪儿接线

第一件事是把 (s, d, \(\alpha\)) 三个超参扫一遍,看困惑度怎么变。下面是论文 Figure 5 的真实数据—— Gemma3 1B 在 arXiv 数据集上的困惑度,基线是 16.6

交互热力图 · 源层 × 目标层 × \(\alpha\)(论文 Figure 5 原始数据)
悬停任意格子查看困惑度与相对基线的变化。蓝色 = 比基线好,红色 = 比基线差。★ 标记的是论文最终选用的 (11, 4)。
泄漏强度 \(\alpha\)
困惑度低于基线(更好) \(\approx\) 基线 16.6 高于基线(更差)
数据摘自论文 Figure 5(Gemma3 1B PT,arXiv 数据集,1024-token 窗口)。只扫描源层与目标层相距不超过 12 层的组合。

可以直接读出来的几件事:

  • 热力图很光滑。这本身就是个信号——如果回流只是随机噪声,图应该是花的。有系统性的模式说明它触发的是某种真实机制。
  • 目标层 4 是甜点,配一个高 5–7 层的源层。这个"局部最优岛"在四个 \(\alpha\) 下都稳定存在。
  • \(\alpha\) 越大效果越强,但危险区也越大。\(\alpha\)=0.04 时几乎没有红色;\(\alpha\)=0.16 时最好的格子更好了(15.39), 但源层 20 附近出现了灾难性的 18.26——表示被推出分布了。
  • 把源层设得太深会坏事。越靠近输出的层,其表示越"承诺"于具体的下一个词,回流过去反而是噪声。
三个数据集上的超参扫描及其平均
论文 Figure 6。上排是 arXiv、PG-19、C4 三个数据集各自的扫描(\(\alpha\)=0.10); 下方方框里是三者按困惑度下降百分比平均后的结果。最好的 (s, d) 组合平均降低 4.72%。 三个来源完全不同的语料给出了几乎一样的地形——这是超参可迁移的第一个证据。

6.2 困惑度:十个数据集、三个模型尺寸

选定超参后(\(\alpha\)=0.15),在十个语言建模数据集的测试集上评估。注意用于调参的三个数据集在这里换成了不重叠的评估划分。

交互图表 · 困惑度下降百分比(论文 Table 1 全部数据)
每个数据集三个条形分别对应 Gemma3 1B / 4B / 12B。悬停查看基线与回流后的绝对困惑度。
Gemma3 1B PT Gemma3 4B PT Gemma3 12B PT
数据摘自论文 Table 1。困惑度(perplexity)= exp(平均负对数似然),可粗略理解为"模型在每个位置上的有效候选词数",越低越好。
−15.9%
1B 在 booksum 上的困惑度下降,为该尺寸最佳
−15.7%
4B 在 pg19 上的下降
−35.4%
12B 在 pg19 上的下降(该尺寸语言建模基线本就偏弱)
9 / 10
在三个尺寸上都稳定改善的数据集数量
唯一的反例:lambada lambada 上 1B 和 12B 都变差了(−0.72%、−2.81%)。论文的解释是这个数据集序列特别短,加上分词的边界效应。 6.4 节的分析会给这个解释提供直接证据:回流的收益需要足够长的上下文才能积累出来

6.3 两个必须排除的"平凡解释"

会不会只是把 softmax 调得更平滑了?

困惑度对 softmax 分布的尖锐程度很敏感。如果回流只是无差别地把分布调平(等价于调高温度),那就没什么意思。作者做了对照:

做法困惑度下降
只调温度(最优 T = 1.2)8.48%
只做回流14.21%
回流 + 调温度(T = 1.2)19.55%
Gemma3 1B,PG-19 评估集。两个效应近似独立:如果完全不相干,叠加后的下降应为 1 − (1−0.0848)(1−0.1421) = 21.5%,实测 19.55%,非常接近。关键在于——如果回流不过是温度调节的另一种写法, 叠加后就不该再有额外收益,但实测比单独回流又多降了 5 个百分点。

会不会只是"更深的网络"(也就是 looping)?

作者用完全相同的协议扫描了 looping:在栈里把 \(\ell\)₁+1 到 \(\ell\)₂ 层复制一份插在 \(\ell\)₂ 后面,同样不训练。

recirculation 与 looping 的热力图对比
论文 Figure 8。三列是 1B / 4B / 12B,上排 recirculation,下排 looping,同为 arXiv 文档。 两者的地形定性上就不一样:recirculation 在三个尺寸上都有稳定的蓝色区域; 训练无关的 looping 在 Gemma3 上基本没有稳健收益,只在更大尺寸上才勉强出现改善。 这是"两者遵循不同原理"的直接证据。

6.4 哪些 token 从回流中获益?

这一节是全文最有洞察力的分析。作者不再对所有 token 回流,而是只回流位置 t 的那一个 token, 然后测量位置 t+k 的对数似然变化——从而画出"收益 vs 滞后距离"的曲线。

token 层面的回流收益分析
论文 Figure 9。 (a) 收益随滞后 k 呈幂律衰减:近处收益极大,但即使 k=256 仍有可测的残留尾巴——说明回流建立的是持久的状态表示,不是局部平滑。 (b) 拆开被回流 token 的位置 t(横轴)看:t < 10 时回流是有害的(窗口开头没有状态可传播,只有推出分布的风险), 位置 20–200 的影响最持久。 (c) 按词性分类的净收益:副词、形容词、动词获益最大,数词、限定词、代词获益最小。
为什么词性这个结果很重要 副词、形容词、动词是需要上下文才能定值的开放类词——"快"有多快、"它"指什么、"跑"往哪跑,都得看语境。 数词、限定词、代词则是封闭类,意义相对固定。

一个纯粹的数值伪影不会挑词性。这条结果强有力地支持了论文的故事:回流真的在传播语义状态。 作者还发现一个细节——复数名词获益稳健,单数名词则不然。

另外,(b) 图里 t < 10 有害的发现,与 6.2 节 lambada 的反例互相呼应(论文本身把 lambada 归因于序列过短加分词边界效应, 并注明 4B/12B 并未观察到早期 token 的负面影响,所以这只是佐证而非完整解释)。作者据此为 1B 模型加了 ramping:前 10 步把 \(\alpha\) 线性升上去,\(\alpha_t=\min(t/10,1)\cdot\alpha\)。

6.5 换个模型族还灵吗?

五个模型族的超参扫描
论文 Figure 7。Ministral3、Pythia、Qwen3、Phi2 与 Gemma3 1B 的对比(尺寸相近)。 好消息:五个模型族全都存在一个稳健的、位于网络中段的蓝色区域。 坏消息:幅度差得远——Gemma3 约 5%,其他家不到 0.5%。

作者对 Gemma 特别"配合"提出了两个假说:

  • Peri-LN 架构。Gemma 在每层的输入和输出加 layer norm,而多数模型只在输入加。 输出端的归一化可能避免了深层贡献被稀释,从而更兼容回流。
  • 训练配方。对回流的兼容性可能高度依赖优化过程本身。

补充证据:Gemma2 和 Gemma4 的收益与 Gemma3 相当,说明这是家族性状而非 Gemma3 的偶然。 不过作者也坦承,他们并没有为其他模型族单独调 \(\alpha\) 和归一化方案,所以 0.5% 这个数字未必是它们的上限。

6.6 下游任务

指令跟随:一个测执行功能的小游戏

提示大意是:「我说两个词。如果第一个是水果,你说 first;如果第二个是水果,你说 second。」 然后给两个示例,再问 monkey banana。这类任务在儿童与神经科损伤患者的评估里用来测执行功能

交互图表 · 下游任务表现
切换任务查看基线 / Recirculation / 增强版的对比。
数据摘自论文 Figure 10(指令跟随,Gemma3 IT 模型)与 Figure 12(GSM8k,Gemma3 4B PT,零样本 CoT 提示)。

为困惑度挑的超参(不是为这个任务调的),错误率就降了:4B 从 17.7% 降到 12.7%, 12B 从 7.0% 降到 1.6%(错误率相对下降约四分之三;论文正文的表述是"约 25%"和"约 75%", 精确算是 28% 和 77%)。如果专门为这个任务扫 (s, d) 两个参数——注意只有两个整数—— 12B 能到 99.4%。

上下文化任务:直接测 bank 那类错误

Racing Thoughts 数据集上的准确率
论文 Figure 11。Lepori 等人的 Racing Thoughts 数据集,三类问题(一词多义 / 事实覆写 / 性别刻板印象), 横轴是干扰句数量。实线=基线,虚线=回流,点线=随机水平 25%。 1B 和 4B 上各有两类问题明显改善;12B 上有两类反而变差。 作者诚实地写道"12B 上的失败令人失望",并指出这里用的是预训练模型的超参, 而测试的是指令微调模型;用 IT 模型重新扫参能拿到更大的收益(附录 D.2)。

标准选择题基准:改善很小

在 MMLU、ARC、PiQA、BoolQ、WinoGrande、HellaSwag、Lambada 这八个单 token 回答的基准上, 回流在 6/8 上有改善,但幅度都很小(0.03~0.54 个百分点)。

这个对比本身是有信息量的 单 token 回答的任务里,回流的收益只能来自"读题时做的推断"。而 GSM8k 这样的链式思考任务里, 回流还能在整个生成过程中持续支撑推理。同口径对比:训练无关的回流在八个单 token 基准上最多只涨 0.54 个点, 在 GSM8k pass@1 上涨 1.3 个点;自适应版本在单 token 基准上最多涨 1.9 个点(MMLU 57.90 → 59.83), 在 GSM8k pass@1 上涨 6.2 个点。差距是系统性的: 回流对长程生成的帮助明显大于对单点判断的帮助

GSM8k:sharpening 还是 expansion?

这是一个值得单独说的评估设计。pass@1(贪婪解码)提升说明能力锐化(sharpening)——正确答案在候选里排到了前面; pass@128(采样 128 次算对一次就算对)提升则说明能力扩张(expansion)——模型能够到的解空间变大了。

Recirculation 两个指标都提升了:pass@1 从 29.3% → 30.6%,pass@128 从 94.9% → 95.4%。 加上下一节的自适应版本,pass@1 冲到 35.5%——相对基线提升 21%,也就是摘要里那个数字。

Adaptive Recirculation:让模型自己决定漏多少

到这里为止,一切都是"零训练"的。作者接着问:如果允许一点点训练,但坚决不动 Gemma 的权重,能走多远?

思路是只学 \(\alpha\) 和 \(\beta\)。他们比较了六种做法(从左到右逐渐放松约束):

  1. Fixed——固定 \(\alpha\)=0.15, \(\beta\)=0.85,即前面所有结果;
  2. 学到的常数标量——用梯度下降学两个数;
  3. 学到的条件标量——训一个 MLP,根据当前 token 的源/目标嵌入输出两个数;
  4. 学到的常数向量——\(\alpha\)、\(\beta\) 变成向量,逐维缩放(Hadamard 积);
  5. 学到的条件向量——MLP 根据当前 token 输出向量 \(\alpha\)、\(\beta\);
  6. 全模型微调——把带回流的 Gemma3 1B 整个微调一遍。
\[z_{t+1,t,d}=\boldsymbol{\alpha}\odot f(z_{t,t,s})+\boldsymbol{\beta}\odot z_{t,t,d}\]论文式 (3):向量版本,\(\odot\) 表示逐元素乘
六种自适应方案在九个数据集上的对比
论文 Figure 13。六种方案 × 九个评估数据集的困惑度下降百分比,灰色虚线是各方案的均值。 结论很干净:向量 > 标量逐 token 条件 > 固定。最优的是第五种——「学到的条件向量」, 论文把它命名为 adaptive recirculation
8.5%
固定系数回流的平均困惑度下降
23.0%
Adaptive Recirculation 的平均下降
21.6%
整个模型全量微调的平均下降
——反而更低
最反直觉的一条结果 一个"两层隐藏层的小 MLP"——输入是源层和目标层嵌入的拼接,输出是两个与模型维度等长的向量, 训练 100 步、batch 32、总共只用 750 篇文档——打败了整个 10 亿参数模型的全量微调(23.0% vs 21.6%)。

而且 Gemma 本体纹丝未动,因此过拟合风险小得多。
交互图表 · 固定回流 vs 自适应回流(论文附录图 D.6)
九个评估数据集上的困惑度下降百分比。悬停查看数值。
Recirculation(固定 \(\alpha\)=0.15) Adaptive Recirculation
数据摘自论文附录图 D.6b(Gemma3 1B PT)。Lambada 上固定回流为 −0.7%(轻微变差),自适应版本转正为 +0.8%。 注:图中标为 “C4” 的那一列,论文附录的评估集清单和图 13 都写作 OpenWebText——原文此处自相矛盾,本文沿用原图标签。
自适应回流的 MLP 结构与逐数据集结果
论文附录图 D.6。(a) 自适应回流的 MLP:输入是源层 + 目标层嵌入的拼接,输出是回流系数向量 \(\alpha\)、\(\beta\)。 输出端用 sigmoid 保证系数落在 [0,1],初始化让它从 \(\alpha\)=0.1、\(\beta\)=0.9 起步。 (b) 逐数据集对比,与上方交互图同源。
但下游任务上,训练数据的选择极其关键 在八个单 token 基准上,用 MMLU 测试集的一部分(3600 条)来训 MLP,八个数据集全线改善; 用 MMLU 的辅助训练集,大体改善;但改用 ARC Easy 或 ARC Challenge 来训,性能显著下滑。 作者的解释是 ARC 数据量小得多(1–2 千条 vs 上万条),而 MMLU 辅助训练集本身质量较差、还可能有污染。 这算是论文里比较脆弱的一块。

论文真正想说的事:模型设计可供性

作者在讨论部分说得很直白:他们不认为 recirculation 是一个"拿来就能上生产"的技术, 而是把它当作一个方法论上的、甚至哲学上的主张。

产品设计里有个概念叫可供性(affordance)(Norman, 1999):物体的形状本身就在告诉你该怎么用它。 门把手适合抓握和拉,门板适合推。你不需要说明书。

论文提出的是 model-design affordances(模型设计可供性)

核心主张 机器学习研究的常规做法是——先拍脑袋想一个架构改动,再花巨大代价训练来验证它

Recirculation 反过来做:在完全不改权重的前提下,去搜索模型"想要"我们怎么改它"。 在哪儿接线、怎么混合、怎么归一化,这些答案是模型自己给出的

作者的假设是:如果一个改动在冻结权重下就已经有效,那它同时也标定出了一个好的归纳偏置, 这个偏置会让后续的训练(无论从头还是微调)更容易、更便宜。 自适应回流的结果——小 MLP 打败全量微调——就是对这个假设的支持。

还有一个更具体的技术论断:绝大多数在 Transformer 内部引入循环的工作,都要通过 adapter 或 cross-attention 来做层间对接。 这篇论文的观察是——因为残差流本身就是对齐的,简单的向量混合可能就够了。这省掉的不只是参数,还有训练的必要性。

冷静一下:局限与代价

计算成本:好消息与坏消息

阶段额外代价说明
自回归生成几乎为零虽然要跑两个栈,但现代 AI 硬件并行跑两个栈几乎和跑一个一样快
Prefill(处理上下文)可能非常慢必须逐 token 串行。对于动辄几万 token 上下文的前沿模型,这可能直接不可行
作者提出的缓解方案是 blockwise recirculation:K 个 token 一批并行处理,然后整批一起回流给下一批。 K 和效果之间的权衡尚未探索。

其余六条局限(作者自陈)

  • 超参依赖任务和领域。虽然经验上迁移性不错(困惑度选出的参数能用在下游任务上,MMLU 选出的能用在其他选择题上), 但没有"任务通用超参"或"任务→超参"的自动映射,实用性就受限。
  • 依赖模型族。Gemma 的 Peri-LN 可能是它特别受用的原因,其他架构的可迁移性需要进一步研究。
  • 归一化方案还没有定论。论文试了八种(附录 B.3 有完整表格),发现归一化不太影响最优值, 但显著影响整个超参地形的稳健性——地形越平滑,你越有信心找到真正的最优点。 有意思的是 1B 需要凸组合(\(\beta\)=1−\(\alpha\)),4B 和 12B 却需要非凸的 \(\beta\)=1。
  • 只做了 1 次迭代。真正的 RNN 应该在第 t 步回流第 1 到 t−1 步的所有栈。论文只做了最简的一次。
  • 只用了一条回流路径。热力图上有时能看到多个不相连的有效区域(尤其 4B 和 12B), 一个假说是它们承载了不同抽象层次的状态信息,可以叠加使用。
  • 自适应方案才刚开了个头。逐 token 的回流路径选择、更好的归一化方法,都还没试。
两次迭代的回流架构展开图
论文 Figure A.1。两次迭代的回流架构(每步跑三遍栈)。一般地,\(k\) 次迭代需要每步跑 \(k+1\) 个栈。 论文的全部实验都用 \(k=1\)。

一句话总结 & 术语速查

TL;DR Transformer 的"串行思考步数"被层数锁死,导致它跟踪不住变化中的状态(比如一个词到底取哪个义项)。 Recirculation 在推理时把深层激活的一小部分(约 7%–15%)按模长归一化后混进浅层, 并且是跨输入步混合的——于是状态可以在同一深度上无限向右传播,Transformer 就获得了真正的循环。 不改一个权重,Gemma3 困惑度降 8.5%;加一个训练 100 步的小 MLP 来逐 token 生成混合系数,降 23%,GSM8k 涨 21%。 论文更大的主张是:与其拍脑袋改架构再花钱训练,不如先问问训练好的模型它自己想被怎么改
术语意思
残差流 residual stream贯穿所有层的那条主干向量。每层只往上"加"东西,不替换。可以理解成所有层共用的一块黑板。
上下文化错误模型没能把一个词的含义正确锁定到上下文所要求的那一个上,比如把已经确定为"河岸"的 bank 又当回"银行"。
思维赛跑 racing thoughts模型的回答生成速度超过了它内部的语义收敛速度——浅层已经在答题了,深层才刚想明白。
Logit Lens把中间层的向量用最终层的 unembedding 矩阵解码成词,看模型"此刻在想什么"。
Patchscopes把待检查的隐藏向量移植进另一段精心构造的提示词里,让模型用自然语言把这个向量描述出来。
Activation patching把一次运行的某层某位置激活复制到另一次运行中,通过输出变化判断因果重要性。
Prefill生成开始前,模型并行处理整段输入上下文的阶段。Recirculation 在这里必须改成串行——这是它最大的代价。
Looped transformer重复执行一组共享权重的层,得到"更深"的网络而不增加参数。循环只在深度上
困惑度 perplexityexp(平均负对数似然)。粗略地说是"模型在每个位置上的有效候选词数",越低越好。
pass@1 / pass@128采 1 次 / 采 128 次里有一次对就算对。前者升说明能力"锐化",后者升说明能力"扩张"。
Peri-LN在每层的输入输出都加 layer norm 的做法(Gemma 系列采用)。论文猜这是 Gemma 特别吃这一套的原因。
可供性 affordance物体形状本身暗示的使用方式。论文借用来指"训练好的模型自身结构所暗示的改进方向"。