52|可解释性入门 讲过,attention weight 不是完整解释,因为它只是相关性线索。机制可解释性(mechanistic interpretability)往前走一步:不满足于“看起来关注哪里”,而是要求因果证据——干预某个内部组件,行为是否按预测变化。
这条路线的难点不在于找不到有意义的组件,而在于三件事经常被混淆:找到一个能解释部分行为的 head,不等于解释了整个模型;干预实验本身也会制造虚假的因果结论;从几层的玩具模型得到的结论,搬到几十层的生产模型上未必成立。本文按这三条线索展开:circuit 在因果意义上怎么定义,induction head 和 IOI 电路两个具体案例分别说明了什么,activation patching 怎么提供因果证据又怎么会给出错误结论,superposition 和 Sparse Autoencoder 为什么是同一个问题的两面。
本篇能让你学会:
- circuit 的因果定义,以及 induction head、IOI 电路这两个可核对的经典案例;
- activation patching 如何提供因果证据,以及它自己的失败模式;
- superposition 和 Sparse Autoencoder 的假设、可扩展性证据和已知失败模式。
一、什么是 circuit:因果模型,不是贴标签
在机制可解释性里,circuit(电路)指模型内部一组组件及其连接,被证明共同实现了某个具体行为。组件可以是 attention head、MLP、残差流上的某个方向,连接可以是层间的读写关系。
关键在“被证明”。给某个 head 起一个好记的名字不算找到电路;电路研究要求可反驳的因果主张:切掉这些组件,行为要消失;把它们从干净输入替换到损坏输入,行为要恢复。Wang 等人(ICLR 2023)在验证 IOI 电路时提出了三条量化标准——faithfulness(电路单独能重现多少原模型行为)、completeness(去掉电路外的部分是否还保持行为)、minimality(电路里是否有可以再删掉的冗余部分)。这三条标准比“看起来像”严格得多,也是本文后面判断一个电路主张是否站得住的基准。
二、Induction head:谱系起点,也是可扩展性的第一次警示
Induction head 的形式化定义来自 Elhage 等人(Anthropic,Transformer Circuits Thread,2021)的《A Mathematical Framework for Transformer Circuits》。这篇工作把多头注意力分解成 QK 电路(决定关注哪里)和 OV 电路(决定写入什么),并引入 K-composition:一层的输出可以被下一层用作 key,从而让两层 head 组合出单层无法实现的算法。
Induction head 正是这种组合的产物。它在一个只有两层、只有
attention 没有 MLP 的玩具模型里就能被完整刻画:第一层的
previous token head 在每个位置写入“上一个
token 是谁”;第二层的 induction head 通过 K-composition
读到这个信息,在当前 token 是 A 时去找“前一个 token 也是
A”的位置,然后用 OV 电路把那个位置之后的 token(记为
B)复制到输出。整体效果是:序列里出现过
A B ... A,模型倾向预测下一个是
B。这正是 in-context learning
最基础的模式之一。
Olsson 等人(Anthropic,2022,arXiv:2209.11895)把这个案例推向了可扩展性问题的核心。他们在训练早期观察到一次“相变”(phase change):训练损失曲线上出现一个明显的凸起,同一时刻 induction head 大量形成,模型的 in-context learning 能力(用序列早期与晚期 token 的 loss 差衡量)也同步跳变。这个相变出现在从 2 层 attention-only 玩具模型到 40 层、13B 参数全尺寸模型的所有测试模型里,位置大致在训练的前 1~5 亿 token 附近。
但他们对因果性的措辞非常克制,值得原文引用:对于小的 attention-only 模型,论文给出的是强因果证据;对于带 MLP 的大模型,论文明确写的是相关性证据(correlational evidence)。也就是说,“induction head 是大模型 in-context learning 的机制来源”这个结论,在玩具模型里被严格证明过,在真实规模的大模型里至今仍是有强相关支持、但未被因果证明的假设。这是本文要强调的第一个可扩展性边界:找到 induction head 不等于解释了大模型的 in-context learning,论文作者自己就没有这样宣称。
三、IOI 电路:一个行为需要 26 个 head
如果说 induction head 说明了“电路存在”,Wang 等人(ICLR
2023,《Interpretability in the
Wild》)说明了“电路有多大”。他们逆向工程了 GPT-2 small 完成
Indirect Object Identification(IOI)任务的完整机制——给定
When Mary and John went to the store, John gave a drink to ___,模型要预测
Mary 而不是重复出现的 John。
结果是一个包含 26 个 attention head、分成 7 类角色的电路:
- Duplicate Token Head:在第二次出现的
John(记为 S2)位置识别出这个 token 之前出现过,把“发生了重复”的信号写入残差流; - Previous Token Head 与 Induction Head:以 Elhage 等人(2021)定义的机制协作,把“S1 后面跟着什么”传递给下游;
- S-Inhibition Head:在句尾 END 位置读取 S2 的信息,写入 Name Mover Head 的 query,抑制它们对 S1、S2 的注意力;
- Name Mover Head(论文中具体定位到
layer.head 记号
9.6、9.9、10.0):默认会复制前文中的名字,由于被
S-Inhibition Head 抑制了对 S1/S2 的注意力,转而复制
IO(
Mary); - Negative Name Mover Head(如 10.7、11.10):反方向写入,降低预测置信度,论文猜测这是模型在可能出错时的“对冲”行为。
作者使用的定位方法是 path patching——只替换某个 head 到指定下游组件之间的特定路径,而不是整体替换该 head 的所有输出,从而分离出“这条具体的信息通路”对结果的贡献。这个方法后来被 Goldowsky-Dill 等人(arXiv:2304.05969,2023,未经 peer review 的预印本)推广成通用框架。
这个案例最直接的价值,是给“找到一个 head 就解释了模型”这句常见误解一个具体反例:GPT-2 small 只是一个 117M 参数的模型,只完成一个语法层面的指代任务,已经需要 26 个 head 分七种角色协作,还带有一类连作者自己都只能猜测功能的“负向”头。真实模型要完成的任务远比 IOI 复杂,组件数量只会更多。
四、Activation patching:把相关性变成因果证据
Activation patching(激活替换)是机制可解释性里最基础的因果干预手段。做法是:准备一对输入——clean prompt 让模型给出正确答案,corrupted prompt 让模型答错;分别跑一次前向传播并缓存激活;然后把 clean 运行中某一层、某个位置的激活,替换进 corrupted 的运行里,继续往后计算,看输出是否被“拉回”正确答案。
flowchart LR
A["Clean prompt<br/>model answers correctly"] -->|cache activation at layer L, position p| B["Cached activation h"]
C["Corrupted prompt<br/>model answers wrong"] --> D["Forward pass up to layer L"]
D -->|overwrite with h| E["Patched activation at layer L, position p"]
E --> F["Continue forward pass"]
F --> G{"Output flips back<br/>to correct answer?"}
G -->|yes| H["h carries the causal information"]
G -->|no| I["h is not the causal bottleneck here"]
如果替换能让输出恢复,说明那个位置携带了完成任务所需的关键信息;如果替换到很多位置都没有效果,而某个特定的层、head 或 MLP 一替换就恢复,就把因果证据从“整个模型”收窄到了具体组件。这比只看梯度或注意力权重强得多,因为它直接回答“改变这里,结果会不会变”,而不是“这里和结果相关吗”。
一个被广泛引用的例子是 Meng 等人(NeurIPS 2022,《Locating and Editing Factual Associations in GPT》)提出的 causal tracing。他们在 GPT-2-XL(1.5B 参数)上做事实性问答的因果追踪,发现把某个中间层 MLP 在“主语最后一个 token”位置的激活从干净版本替换回损坏版本,可以显著改变事实预测:整体平均总效应(ATE)为 18.6%,其中在第 15 层附近观察到最强的平均间接效应(AIE),达到 8.7%;进一步拆分发现,这个效应主要由 MLP 贡献(AIE 峰值 6.6%),而同一位置的 attention 贡献很小(AIE 1.6%)。这个结果支持了论文的核心主张:事实性知识主要存储在中间层 MLP、处理主语最后一个 token 时被读取——并据此提出了 ROME(Rank-One Model Editing)编辑方法。
activation patching 也有明确边界。替换激活会制造一个训练时从未出现过的混合状态(模型的一部分“看到”了 clean 输入,另一部分“看到”了 corrupted 输入),这本身可能引入分布外行为,而不是干净地隔离出了因果机制。这也是下一节要讲的问题的起点。
五、Patching 自己也会制造“解释幻觉”
如果替换某个子空间(subspace)的激活能让行为恢复到预期效果,能否就此断言“这个子空间就是承载该特征的地方”?Makelov 等人(ICLR 2024,《Is This the Subspace You Are Looking For?》)给出了否定的反例。
他们证明:即使沿某个子空间做替换,在端到端的行为层面达到了预期效果,这个效果也可能是通过激活了一条休眠的并行通路(dormant parallel pathway)实现的——这条通路本身与真正决定模型输出的计算路径因果无关。换句话说,patching 实验“成功”了,但成功的原因不是你以为的那个原因。作者在 IOI 电路和事实性回忆两个真实场景里复现了这个现象,并指出这类“解释幻觉”在实践中应该相当普遍,因为大模型内部存在大量冗余通路。
这不意味着 activation patching 不可用——作者同时展示了在 IOI 这种已经有独立、可信的手工电路分析作为对照的任务上,子空间 patching 结果是可信的。他们给出的结论是:patching 的因果结论需要额外证据支撑(例如与独立方法交叉验证、检验通路的完整性),不能仅凭“替换后行为变了”就下定论。这是本文要强调的第二个边界:因果干预方法本身,也需要被验证是否可靠,不能默认“因果”标签自带正确性。
六、Superposition:一个神经元靠不住的原因
早期把神经网络当黑箱打开的做法,是去找“哪个神经元表示哪个概念”。Elhage 等人(Anthropic,2022,《Toy Models of Superposition》)用一个可以完全解出解析解的玩具模型证明,这个假设在数学上经常不成立:当特征数量远超过模型的维度,而特征又足够稀疏时,网络会学会把多个特征叠加(superposition)编码进同一组维度,而不是给每个特征分配一个专属神经元。
论文定义了特征维度数(feature dimensionality)来量化这件事:
\[D_i = \frac{\lVert W_i \rVert^2}{\sum_j (\hat{W_i} \cdot W_j)^2}\]
其中 \(W_i\) 是第 \(i\) 个特征对应的权重向量,\(\hat{W_i}\) 是其单位向量。\(D_i = 1\) 表示这个特征独占一个维度;\(D_i = 0.5\) 是典型的“反极对”(antipodal pair)情形——两个互不相关的特征共享一个方向,分别指向正负两端;\(D_i\) 越接近 0,表示这个特征被越多其他特征稀释在同一组维度里。论文进一步画出了一张相图(phase diagram):随着特征稀疏度和重要性变化,模型会在“学会该特征”“把该特征放进叠加”“完全忽略该特征”三种状态之间发生相变。
这个结果直接解释了为什么神经元会呈现“多义性”(polysemantic)——对多个无关概念都有响应——因为它们本来就不是被设计成对应单个概念的坐标轴,而是叠加态里被投影到某个神经元维度上的多个方向之一。找单个神经元的最大激活样本来判断它的意义,在叠加态存在的情况下经常会误导。
七、Sparse Autoencoder:从玩具模型到 Claude 3 Sonnet
如果特征是叠加在一起的高维方向而不是坐标轴,一个自然的想法是训练另一个模型把它们拆开。Sparse Autoencoder(SAE)就是做这件事:用一个更宽、但激活稀疏(大多数维度为零)的隐藏层去重建原始激活,希望学到的稀疏方向比原始神经元更接近人类可命名的概念。
Bricken 等人(Anthropic,2023,《Towards Monosemanticity》)在一个仅有 一层 transformer 上验证了这个思路,找到了一批看起来对应具体概念(比如某种阿拉伯文字模式、DNA 序列片段)的稀疏特征,并通过干预实验部分验证了它们对输出确实有因果作用。
这项工作当时最大的疑问是:这套方法能不能扩展到真实规模的生产模型,而不只是玩具 transformer。Templeton 等人(Anthropic,2024,《Scaling Monosemanticity》)用 Claude 3 Sonnet 直接回答了这个问题——他们在这个生产级模型的中间层残差流上,训练了三档规模的 SAE(100 万、400 万、3400 万个特征),确认方法可以扩展,同时也暴露了系统性的失败模式:
- 三档 SAE 的重建都只能解释原始激活方差的至少 65%,不是全部;
- 平均每个 token 只有不到 300 个特征处于激活状态,这部分符合稀疏性假设;
- 但“死特征”(训练后从未被激活过的特征)比例随规模增大而上升:1M 特征的 SAE 里约 2% 是死特征,4M 里约 35%,34M 里高达约 65%;
- 作者原话承认:“我们的特征集合是不完整的,而且我们缺乏严格的方法来评估这些特征是否忠实地刻画了模型的真实计算过程。”
也就是说,SAE 从玩具模型扩展到生产模型这一步是成功的,但“扩展成功”和“解决了可解释性”是两件事:特征数量越大,能解释的方差比例并没有显著提高,死特征比例反而快速上升,而且没有独立于训练损失之外的方法能验证一个 SAE 特征是不是真的对应模型计算里的一个真实单元,还只是一个统计上方便、但语义上凑巧对齐的方向。这是叠加与 SAE 这条线的核心开放问题,不是工程细节。
八、自动找电路的代价:ACDC 与它没解决的问题
IOI 电路的发现依赖大量人工假设和手动 patching 实验。Conmy 等人(NeurIPS 2023,《Towards Automated Circuit Discovery for Mechanistic Interpretability》)提出 ACDC,试图把这个过程自动化:从完整计算图出发,逐条边做消融测试,贪心地剪掉对指定行为影响很小的边,留下的子图就是候选电路。
ACDC 暴露了自动化本身的代价。它需要的前向传播次数大致随计算图节点数指数增长——在 T4 GPU 上跑完 GPT-2 small 的 IOI 任务需要 1 到 2 小时;它对超参数和评估指标的选择很敏感,同一个任务换一个指标可能得到不同的子图;更重要的是,论文自己指出 ACDC 会漏掉某些确实属于电路的组件,典型例子就是上一节提到的 Negative Name Mover Head——这类“反方向”写入的头,在贪心剪枝框架下经常被误判为不重要而被剪掉。
后续工作 Syed 等人(arXiv:2310.10348,2023,未经 peer review 的预印本,发表于 NeurIPS 2023 的 ATTRIB workshop)提出用梯度近似(attribution patching)代替真实的逐边消融,把所需的前向/反向传播次数从随节点数指数增长降到常数,在多个基准上表现优于或接近 ACDC。但这是一种近似,论文也承认结合 ACDC 做二次校验效果更好。这条线索呼应了本文反复强调的可扩展性问题:哪怕只是把电路发现这一步自动化,在 117M 参数的 GPT-2 small 上就已经要在计算代价、鲁棒性和完整性之间做取舍,还没有涉及成百上千层的生产模型。
九、可解释性对安全能做什么,不能做什么
机制可解释性和 AI 安全的关系是工具性的,不是已经解决的关系。Templeton 等人(2024)在 Claude 3 Sonnet 的 SAE 特征里找到了对应欺骗、权力寻求、奉承等概念的方向,并展示了通过操纵这些特征可以让模型输出朝对应方向偏移,这说明干预已知方向、做定向的行为调整是可行的。
但这不等于可解释性已经能提前发现或穷尽模型的所有危险认知。上一节的数字已经说明:即便在生产规模的模型上,SAE 找到的特征集合本身是不完整的,也没有可靠方法验证覆盖度;电路层面同样如此,ACDC 会漏掉真实存在的组件,activation patching 会被“休眠通路”制造的解释幻觉误导。把机制可解释性当作安全的充分手段,现阶段没有证据支持;把它当作提供额外因果证据的诊断工具之一,是目前站得住的定位。
十、关键概念回顾
- circuit:一组内部组件及连接,被 faithfulness、completeness、minimality 等标准证明共同实现某个行为,而不是被贴上标签。
- induction head:通过 K-composition 组合
previous token head 实现
[A][B]...[A]→[B]模式补全的两层机制;在玩具模型中有因果证据,在带 MLP 的大模型中目前只有相关性证据。 - path patching:只替换指定的一条信息通路,而非整个组件输出,用于精确定位电路内部的边。
- activation patching:把 clean 运行的激活替换进 corrupted 运行,观察输出是否恢复,提供因果证据;但可能触发解释幻觉。
- superposition:特征数远超模型维度时,多个特征叠加编码进同一组方向;用特征维度数 \(D_i\) 量化叠加程度。
- Sparse Autoencoder:训练稀疏隐藏层重建激活,试图把叠加的特征拆开;规模扩大后死特征比例上升,特征集合仍不完整。
十一、常见误解
11.1 “找到一个 head 就解释了模型”
不对。GPT-2 small 完成 IOI 这一个语法任务就需要 26 个 head、7 种角色协作;真实模型的复杂行为通常跨层、跨组件、跨特征。
11.2 “SAE feature 一定是真实概念”
不一定。SAE 是分析工具,其特征是否对应模型真实计算里的稳定单元、是否因果重要,需要独立于训练损失的验证方法——而这种方法目前还不存在。
11.3 “activation patching 恢复了行为,就找到了因果机制”
不一定。Makelov 等人(2024)证明,patching 的行为效果可能来自与真实输出无关的休眠通路,因果结论需要额外交叉验证。
11.4 “机制可解释性已经能完整解释 LLM,或者已经能保证安全”
远远没有。它在小模型和局部行为上进展明显,在生产规模模型上也证明了方法可以扩展,但特征集合不完整、电路发现方法有系统性遗漏,这些都是当前论文自己承认的边界。
十二、开放问题
- induction head 在带 MLP 的大模型里究竟是不是 in-context learning 的主要机制来源:Olsson 等人(2022)明确写的是相关性证据,不是因果证明;把小模型的因果结论直接套用到大模型,目前缺少同等强度的证据。可读入口:Olsson et al., In-context Learning and Induction Heads, 2022 全文的因果性讨论部分。
- SAE 特征是不是模型计算的“真实原子单元”,还是训练目标凑出来的方便近似:Templeton 等人(2024)自己承认缺乏严格评估方法;死特征比例随规模上升这一现象说明当前的稀疏字典学习目标本身可能不是充分刻画特征结构的正确目标函数。可读入口:Anthropic Circuits Updates 系列后续讨论,以及 Scaling Monosemanticity 的 Limitations 一节。
- 电路发现能否在不牺牲完整性的前提下自动化到生产规模模型:ACDC 的指数级前向传播开销和对 Negative Name Mover 一类组件的系统性遗漏,attribution patching 的近似性,两者目前是在计算代价和结果完整性之间的权衡,还没有同时满足两者的方法。可读入口:Conmy et al. (NeurIPS 2023) 与 Syed et al. (2023) 的对比实验部分。
不用“AI 很快会完全理解自己”这类说法收尾——以上三个问题目前都没有已发表的确定性答案。
十三、下一步
机制可解释性关注内部计算的因果结构。下一篇转向行为层面的宏观现象:为什么模型变大后会出现上下文学习、思维链等看起来“涌现”的能力。
十四、参考文献
- Elhage, N. et al. “A Mathematical Framework for Transformer Circuits.” Anthropic, Transformer Circuits Thread, 2021.
- Olsson, C. et al. “In-context Learning and Induction Heads.” Anthropic, Transformer Circuits Thread, 2022. arXiv:2209.11895(研究博客 + arXiv 预印本,未经期刊/会议 peer review,但已被后续多篇 peer-reviewed 工作复现和引用)。
- Wang, K. et al. “Interpretability in the Wild: a Circuit for Indirect Object Identification in GPT-2 Small.” ICLR 2023.
- Meng, K., Bau, D., Andonian, A., Belinkov, Y. “Locating and Editing Factual Associations in GPT.” NeurIPS 2022.
- Goldowsky-Dill, N., MacLeod, C., Sato, L., Arora, A. “Localizing Model Behavior with Path Patching.” arXiv:2304.05969, 2023(未经 peer review 的预印本)。
- Makelov, A., Lange, G., Geiger, A., Nanda, N. “Is This the Subspace You Are Looking For? An Interpretability Illusion for Subspace Activation Patching.” ICLR 2024.
- Elhage, N. et al. “Toy Models of Superposition.” Anthropic, Transformer Circuits Thread, 2022.
- Bricken, T. et al. “Towards Monosemanticity: Decomposing Language Models With Dictionary Learning.” Anthropic, Transformer Circuits Thread, 2023.
- Templeton, A. et al. “Scaling Monosemanticity: Extracting Interpretable Features from Claude 3 Sonnet.” Anthropic, Transformer Circuits Thread, 2024.
- Conmy, A., Mavor-Parker, A., Lynch, A., Heimersheim, S., Garriga-Alonso, A. “Towards Automated Circuit Discovery for Mechanistic Interpretability.” NeurIPS 2023.
- Syed, A., Rager, C., Conmy, A. “Attribution Patching Outperforms Automated Circuit Discovery.” arXiv:2310.10348, 2023(NeurIPS 2023 ATTRIB Workshop,未经期刊/会议主会 peer review)。
← 上一篇:52|可解释性入门 | 下一篇:54|涌现能力 →
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【Transformer 与注意力机制】42|FlashAttention:注意力计算的硬件级重写
FlashAttention 的关键不是近似注意力,也不是把公式改掉,而是重新安排标准 attention 在 GPU 内存层级里的计算路径。本文解释为什么标准 attention 的瓶颈常常是 HBM 读写,FlashAttention 如何用 tiling 和 online softmax 避免物化完整注意力矩阵,以及它为什么省显存、提吞吐,却没有消除 O(n²) 的根本复杂度。
【Transformer 与注意力机制】49|KV Cache:推理为什么是 O(n) 不是 O(n²)
自回归推理和训练不是同一种程序。本文解释 KV Cache 为什么成立:历史 token 的 Key/Value 一旦算出,在后续 decode 中不会改变;缓存它们可以避免反复重算前缀。文章同时讲清 prefill 与 decode 的差异、cache 显存公式、长上下文为什么受限,以及 PagedAttention、MQA/GQA、cache 量化等方向各自在解决什么。
【Transformer 与注意力机制】50|Speculative Decoding:用小模型加速大模型
KV Cache 后 decode 仍是显存带宽受限的串行循环。本文给出投机解码的接受-拒绝公式与正确性证明,推导接受率如何决定加速比,用实测数据说明批大小何时让投机解码倒贴,并只钉住 Medusa/EAGLE/MTP 的原理差异。
【Transformer 与注意力机制】51|量化、蒸馏、剪枝:压缩改变的是三种不同的东西
量化、蒸馏、剪枝常被当成同一件事的三种手段——"让模型变小",但它们改变的对象、误差来源和失败模式完全不同。本文从 weight-only 与 activation quantization 的假设差异、GPTQ/AWQ/SmoothQuant 的数学分野,讲到 attention、FFN、KV Cache 承受压缩代价的不同,以及 PPL 为什么骗过了很多人的质量评测。