概念 | Transformer 里贯穿所有层、每个 token 位置各自持有的一条「共享通信通道」:embedding 写入初值后,每层 attention 与 MLP 都以加法把自己的输出叠加进去,后续层再从中读取——这种 additive 结构让模型的内部表示可被线性分解。
是什么
在标准 decoder-only Transformer 里,每个 token 位置都对应一个向量(维度 ),它从 embedding 开始,一路被逐层修改,直到最后送进 unembedding 算 logit。这条「随层演化的向量」就是 residual stream(残差流)。
它的核心特征是每个子层(sublayer)都用残差连接(residual connection)把输出加回去,而不是替换。把第 层的残差流记为 ,那么一层的更新是:
(实际实现中 attention 与 MLP 通常各带一个 LayerNorm 和各自的残差加法,这里合并写出表达 additive 的本质。)
一个直觉图景:把残差流想象成一条从输入流到输出的主干道 / 公共总线(bus)。embedding 给每个 token 放上初始信息;每一层的 attention 和 MLP 是接在总线上的「读写设备」——它们先读当前总线上的内容,做点计算,再把结果加回总线。它们从不直接覆盖别的层写的东西,只是往同一个向量空间里继续累加。最终的残差流,是 embedding 与所有层所有组件贡献的总和:
为什么重要(动机)
残差流的 additive 结构,是大量机制可解释性(mechanistic interpretability)方法能成立的结构性前提。理解了它,后面很多技术就从「魔法」变成「自然推论」:
- 可分解性(decomposability):因为最终表示是各组件贡献之和,我们可以把任意一个内部向量拆成「哪个 head / 哪个 MLP / embedding 各贡献了多少」。这给了我们一个干净的归因(attribution)入口。
- logit 是贡献之和:unembedding 是一个线性映射 ,作用在 上。由于 是各项之和,而线性映射对加法可分配,logit 也就等于每个组件单独经 投影后的贡献之和。这正是 direct logit attribution(DLA) 的基础:可以直接量化「某个 attention head 把哪个 token 的 logit 推高/拉低了多少」。
- 它解释了为什么 Logit Lens、Activation Patching 这类「在中间层读取/替换残差流向量」的操作是有意义的——残差流本身就是一个统一的、跨层共享的表示空间,中间层的向量和最终层的向量住在同一个空间里,因此可以用同一个 去解读、可以把一处的向量搬到另一处。
换句话说,残差流是 Transformer 内部的「共享坐标系」。没有它的线性可加性,就没有今天大多数读取与干预内部表示的工具。
关键细节
- 读写带宽(bandwidth)视角(已知 + 部分推测):残差流维度 是固定的,而要往里写信息的组件(所有 head、所有 MLP)数量远多于维度数。可以把残差流理解为一条带宽有限的总线——许多 feature 必须共享同一组维度。这正是 叠加(superposition) 现象出现的结构原因之一:模型被迫把多个特征压进同一空间,靠近似正交来减少干扰。各组件用 / 输出权重选择「写到哪些方向」,用 / 输入权重选择「从哪些方向读」,于是残差流里不同的子空间(subspace)/ 方向承载不同信息,组件间通过「写同一方向、读同一方向」实现跨层通信。
- 线性结构 ≠ 全程线性(边界条件):残差流的累加是线性的,但每个组件内部(attention 的 softmax、MLP 的非线性激活)是非线性的;LayerNorm 也引入轻微的非线性缩放。所以「最终表示 = 各贡献之和」严格成立,但「某个 head 的贡献」本身是经过非线性计算才得到的——可加性是关于组件输出之间的,不是说整个网络是线性的。
- 常见误解:① 误以为残差连接只是为了「梯度好传、训得动」的优化技巧。它确实有这个作用,但从可解释性看,它更关键的后果是创造了一个持久的、可累加的共享表示空间,让信息能跨层无损传递与叠加。② 误以为每一层「重写」了表示——其实每层只是增量地加,早期层写入的信息可以一直保留到最后(除非被后续层显式地加了一个反方向的向量去抵消)。
- 与「线性表示」的关系是两件事(争议/区分):残差流的 additive 可加性是架构事实,几乎无争议;而「概念在残差流中被编码成线性方向」是一个更强的经验假设(见 线性表示假设),它在多大程度上、在多大规模上成立仍有争论。前者保证了「我们能把向量拆成贡献之和」,后者才进一步主张「这些方向对应可解释的语义」。不要把两者混为一谈。
与其他概念的关系
- 线性表示假设:残差流提供了「线性可加的共享空间」这一容器,线性表示假设进一步主张这个容器里的方向对应可解释概念。前者是结构前提,后者是经验主张。
- 叠加 与 多义性:残差流的带宽有限是叠加发生的结构动因——维度不够,特征只能挤在一起共享方向。
- Logit Lens:直接用 unembedding 去解读中间层的残差流向量,之所以「能解读」,正是因为中间层与最终层共享同一残差流空间。
- Activation Patching 与 因果中介:在残差流的某个位置/某层把向量换成另一次前向的向量,借此做因果定位——可行性来自残差流是统一、可寻址的中间表示。
- Circuits 与 Induction Head:电路分析把残差流当作组件间的「通信信道」,研究某个 head 往哪个子空间写、下游哪个组件来读,从而还原信息流路径。
- 特征与字典学习:SAE 等方法正是直接对残差流(或某子层输出)做分解,试图把叠加在一起的方向重新拆成单义特征。