机械可解释性
一个训练好的 Transformer 是几千亿个数字,它们产出无人写下的行为。机械可解释性(mechanistic interpretability)试图把这些数字读作计算:找出模型所表示的特征,以及连接它们的电路,就像有人把一个二进制反编译回源代码那样。这个尝试马上遇到三件事实:单个神经元很少只意味一件事,稀疏字典成了这个领域拆开特征的主要工具,而这个工具是否正确,至今仍未定论。
一个神经元为什么很少只意味一件事
我们先从最直观的起点入手:打开一个 Transformer,看一个神经元。神经网络的基本单位是神经元,人们自然希望每个神经元都对应某种含义:这个对 Python 代码激活,那个对红色激活。早期的视觉工作确实找到了几个这样的神经元。语言模型里很少如此。探测 Transformer 里的一个神经元,它会对一组互不相关的东西激活,同时像是一个曲线检测器、一个车轮检测器,又像是一行法语的特征。这就是多义性(polysemanticity),它阻止了直接解释。如果能读到的最小单位本身就没有单一含义,那么读它也说明不了模型在算什么。
障碍不在于模型没有概念,而在于模型拥有的概念远多于它的神经元,却照样把它们存了下来。一条宽度为 的残差流(每一层都从中读取、又写回的共享向量通道)只有 个正交方向,而模型似乎在追踪数以万计的不同特征。这些特征无法各得一个私有方向,于是只能共享。要做的事,是解开这种共享:从把概念混在一起的激活(模型处理一个词元时在内部形成的向量)中,把模型所用的概念恢复出来,再展示这些概念如何相互作用并产出一个输出。它的回报,是 第 55 章 的输入:只能观察行为的监督,对一个一直表现正常、直到不再如此的模型是盲目的,而能读特征的监督,则有机会在一个计划执行之前就抓住它。
这个障碍决定了后面的顺序。先是两个想法,它们解释多义性为何存在,又说明如何处理它。然后是电路,它把恢复出的特征变成对行为的解释。再往后,是十年来的方法演进,它把方法从手工追踪的视觉滤波器,带到一个生产级模型的因果图。到这里,领域才开始正面处理一个公开问题:主要工具是否正确。最后留下的,是对这个工具仍然缺什么的一份克制清点。
处理多义性的两个想法
脱离多义性靠的是两个想法,一个关于模型如何存储特征的假说,一个恢复它们的方法。
这个假说叫叠加(superposition):模型之所以能表示多于自身维度的特征,靠的是给每个特征指派激活空间里的一个方向,再让这些方向彼此重叠。这之所以可行,是因为特征是稀疏的:在任一给定词元上,数千个可能特征里只有少数几个激活,于是模型能容忍那些很少同时开启的方向之间的干扰。Elhage 等在 「Toy Models of Superposition」 里给出了最清楚的演示 (Elhage et al. 2022):一个被迫把 个稀疏特征放进少于 个维度的微型自编码器(一种训练来压缩输入、再把它重构出来的网络),正是这样做的。它把特征方向排布成规则的几何结构,并把重构误差与干扰之间的权衡,作为稀疏度的函数来取舍。在这幅图景里,多义性不是缺陷,而是模型用叠加去容纳多于神经元数量的特征所留下的可见现象。
如果特征沿方向存在,而非落在神经元上,那么正确的分析单位就是方向,正确的工具就是能找出方向的那个。这个工具是字典学习,以稀疏自编码器(SAE)实现 (Cunningham et al. 2023)。一个 SAE 取一个模型激活 ,其中 是原模型激活宽度;它学习一个由 个特征方向组成的过完备字典,其中 是 SAE 暴露出的特征槽位数。它把 编码为一个稀疏的特征激活向量,再解码回去:
其中 是原始激活, 是稀疏特征激活, 是重构回来的激活。编码矩阵 把残差流投到许多候选特征上,非线性 和稀疏惩罚只允许少数特征点亮;解码矩阵 再把这些特征组合回原空间。训练目标是最小化重构误差加上一个稀疏惩罚,使得任一输入上只有少数 个特征激活。 的各列就是恢复出的特征方向。因为 超过 ,字典是过完备的:它有空间给每个底层特征一个独立的槽位,尽管模型不得不把它们挤进 个拥挤的维度。SAE 恢复出的特征,远比原始神经元更常是单义的,这正是要点所在。
图 54.2 展示了让这一切奏效的双向数字张力。模型把许多稀疏的真实特征压进残差流的 个共享方向,容忍那些很少同时激活的方向之间的干扰。SAE 把这个压缩反向运行,将那个 维向量展开到 个槽位,使每个特征重新落到自己的方向上。
从特征到电路
特征本身只说明模型表示了什么。要解释行为,还需要知道激活如何从一个特征传到另一个特征。这就是电路。电路是模型计算的一个子图,一小组特征加上它们之间的权重,共同实现一个可辨认的算法。视觉之外最早被完整做出的例子是归纳头(induction head),一个由两个注意力头组成的电路,实现这条规则:「如果词元 在上下文中较早处后面跟着 ,而我刚又看到 ,就预测 。」Olsson 等追踪了这个电路,并把它的形成与训练中一次相变联系起来,那次相变恰与上下文学习的出现同步 (Olsson et al. 2022)。这个领域的纲领,是把归纳头对复制所做的事,对任意行为也做一遍:给特征命名,给连线命名,通过干预来检验这个解释。
有两件事让这个纲领变得困难,而它们朝相反方向拉扯。给特征命名需要一个只意味一件事的单位,而叠加把这个单位从神经元手里夺走,字典学习则试图把它还回来。给连线命名需要一个关于这些单位如何组合的模型,那就是电路。这个领域的历史,正是这两种需求彼此推动向前的故事。
从手工电路到因果图
这一路径从手工追踪的电路,走到学习出的特征,再到因果图,每一步都被上一步的极限所逼出。
它始于视觉。Olah 等在 Distill 线上的 「Zoom In: An Introduction to Circuits」 主张特征是真实的、连接它们的电路也是真实的,并在卷积网络里手工把两者都展示了出来 (Olah et al. 2020)。把这一点带到 Transformer 需要一套关于该架构的代数。Elhage 等的 「A Mathematical Framework for Transformer Circuits」 提供了它 (Elhage et al. 2021):残差流作为每层都从中读取、又向其写入的共享通信通道,注意力头作为在位置之间搬运信息的操作,以及让头组成多步电路的组合规则。归纳头是那个框架解释的第一个大结果。
随后遇到同一个障碍:手工追踪无法扩展,而叠加意味着想追踪的神经元本来就是多义的。「Toy Models of Superposition」 给这个障碍命了名 (Elhage et al. 2022)。处理办法是不再读神经元,转而学习特征。Cunningham 等的 「Sparse Autoencoders Find Highly Interpretable Features in Language Models」 (Cunningham et al. 2023),以及 Anthropic 的 「Towards Monosemanticity」 (Bricken et al. 2023),在同一时间得出同一个想法:在一个模型的激活上训练一个 SAE,恢复出的字典远比神经元基底更可解释。Bricken 等在一个带 512 神经元 MLP(多层感知机,即逐词元的前馈网络)的单层 Transformer 上工作,展示了字典特征挑出了清晰的概念,比如阿拉伯文字或 DNA 序列,而没有任何单个神经元能清楚地持有它们。
悬而未决的问题是这是否能扩展到大模型。「Scaling Monosemanticity」 把 SAE 推到了 Claude 3 Sonnet 这个生产级模型,在其中间层残差流上训练字典,恢复出抽象、多语言、多模态的特征 (Templeton et al. 2024),其中包括金门大桥特征:把它钳制在开启状态,就产出了那个把每段对话都引向大桥的 「Golden Gate Claude」。比演示更重要的是干预:它表明这些特征是因果的,而非仅仅相关。与此同时,SAE 的工程也在收紧。Gao 等的 「Scaling and Evaluating Sparse Autoencoders」 (Gao et al. 2024) 用一个 top- 激活替换了软 L1 惩罚,直接固定激活特征的数量,这消除了一个调参上的麻烦,削减了死潜元(dead latent)的数量,并产出了把字典规模与稀疏度同重构联系起来的清楚扩展律。图 54.3 勾勒出这个关系:每个词元上更多的活跃潜元换来更低的重构误差,更大的字典把整条前沿往下推,而稀疏度轴的两端则承载着后面会回到的失效模式。
在下面扫一遍 top- 稀疏度,看重构误差先下降,再在 达到真实活跃特征数之后变平,留下一个任何额外潜元都消不掉的非零残余。
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
d, m, n_true = 32, 96, 6 # 残差宽度 d,字典槽位 m,真实活跃特征数
D = rng.standard_normal((m, d))
D /= np.linalg.norm(D, axis=1, keepdims=True)
codes = np.zeros((300, m)) # 每个 token 只用 m 个特征中的 n_true 个
for c in codes:
idx = rng.choice(m, n_true, replace=False)
c[idx] = rng.standard_normal(n_true)
X = codes @ D + 0.15 * rng.standard_normal((300, d)) # 激活只是近似稀疏
base = np.mean(X ** 2)
ks, frac = list(range(0, 13)), []
for k in ks:
f = codes.copy()
if k == 0:
f[:] = 0
else:
thr = np.sort(np.abs(f), axis=1)[:, -k][:, None]
f = np.where(np.abs(f) >= thr, f, 0.0) # 只保留最大的 k 个潜变量
frac.append(np.mean((X - f @ D) ** 2) / base)
plt.plot(ks, frac, "o-")
plt.axvline(n_true, ls="--", color="gray", label=f"真实稀疏度 = {n_true}")
plt.xlabel("每个 token 的活跃潜变量 k")
plt.ylabel("未解释方差比例")
plt.legend(); plt.title("Top-k 重建:先下降,随后在残差上平台")
plt.show()
print("k=0,3,6,12 时未解释比例:", [round(frac[i], 3) for i in (0, 3, 6, 12)])
最新的一步把特征与电路重新连接起来。Anthropic 2025 年的工作,「Circuit Tracing」 (Ameisen et al. 2025) 与 「On the Biology of a Large Language Model」 (Lindsey et al. 2025),构建归因图(attribution graph):它把模型的 MLP 替换为跨层转码器(cross-layer transcoder),即从某一层读取、向其后所有层写入的稀疏可解释特征,然后为单个提示追踪穿过这些特征的线性因果通路。结果是一张图,其节点是特征,其边是因果影响,是针对一个输入的局部电路图。在 Claude 3.5 Haiku 上研究时,这些图呈现出多步推理、在押韵中提前规划,以及跨语言共享的机制 (Lindsey et al. 2025)。2025 年 5 月这套工具开源,社区在 Neuronpedia 上的复现把归因图追进了 Gemma-2-2b、Llama-3.2-1b 等开放权重模型,这个方法由此从一家实验室的演示,向整个领域共用的研究工具迈进 (Anthropic 2025)。
图 54.4 追踪了这一进展,其中每一步都被它前一步的极限所逼出。
这个回路在实践中如何运转是机械的,值得看个轮廓。在模型的某一处采集一大批激活,即某个选定层之后的残差流,或一个 MLP 的隐藏激活。在它们上面训练字典。用一个 top- 编码器,前向过程很小:
# x: 模型激活,形状 (batch, d)
pre = x @ W_enc + b_enc # (batch, m), m >> d
f = topk(pre, k) # 保留最大的 k 个,其余置零
x_hat = f @ W_dec + b_dec # 重构
loss = mse(x_hat, x) # 没有单独的 L1 项:k 固定了稀疏度
固定的 消除了 L1 形式逼着去调的那个稀疏系数,这正是 top- SAE 取代旧的软惩罚的实际原因 (Gao et al. 2024)。训练之后,字典的每一列都是一个候选特征。通过收集最能激活它的输入来解释它,读出那个模式,并且关键地,通过把特征钳制为开或关、观察输出移动,来检验这个解读。一个无法用来操控的特征,就是一个尚未理解的特征。归因图把同样的纪律扩展到整个计算:把 MLP 换成训练好的转码器,跑一个提示,读出活跃特征之间的因果图,再通过扰动节点、确认下游效果来验证边 (Ameisen et al. 2025)。
稀疏自编码器正在接受检验
这些方法已经把这个领域带到了一个生产级模型和一张因果图,但它并未了结那个核心的方法论问题。处理多义性的整套办法都依赖一个判断:字典学习就是读取叠加的方式。这个判断如今正在接受检验。
稀疏自编码器究竟是正确的可解释性原语,还是一条易生伪影的弯路,正被激烈争论。反方有若干具名的结果。Kantamneni 等的 「Are Sparse Autoencoders Useful? A Case Study in Sparse Probing」 (Kantamneni et al. 2025) 发现,在下游探测任务上,一旦把简单基线做强,SAE 特征就很少胜过它们,这让其实际回报受到质疑。Chanin 等记录了特征吸收(feature absorption):一个像 「以 L 开头」 这样的一般特征,会在像 「lion」 这样的特定词元上不再激活,因为一个更特定的特征把它吞了,于是字典表面上的清楚性,部分是训练目标造成的伪影 (Chanin et al. 2024)。另一些人主张 L1 稀疏惩罚把 SAE 推向去学习高频组合,而非真正中介计算的原子特征,并且转码器在可解释性上胜过 SAE(arXiv:2501.18823)。辩护方以 Anthropic 的可解释性团队,以及扩展与归因工作的作者们为中心,反驳说 SAE 是可改进的工程,而非不可行路线,像 Golden Gate Claude 那样的因果干预表明这些特征是真实的,而归因图已经产出了裸探测无法给出的机械解释。分歧不在于叠加是否真实,而在于字典学习是不是我们读取它的方式。还有第三种立场,干脆拒绝去读:OpenAI 的权重稀疏 Transformer 把模型的权重训练成大部分为零,电路从构造上就可解释,而无需事后恢复,目前的代价是只在玩具规模上可行,还要牺牲一部分能力 (Gao et al. 2025)。
叠加是关于 第 8 章 中那个架构的事实,它支配着这里每一件工具的形状。因为残差流装进的特征多于它的维度,任何直接读神经元的方法都行不通,这个领域便被逼向过完备的字典学习。模型如何存储信息的一个性质,设定了我们如何读取它的整个方法栈。
字典留下了什么
这里每一份收益都以一份对应的代价换来,而点清这些代价,正是理解这场检验的关键。
- 单义性与完备性。 稀疏性换来清楚、单一含义的特征,但字典只恢复它被赋予的规模与训练所能找到的特征。把稀疏性推得太狠,特征就会分裂或被彼此吸收;推得太软,它们又会回到多义。SAE 对激活的重构并不完美,而那个差距,即重构误差,恰是字典未能解释的那部分模型计算。
- 忠实性与可解释性。 一个替换模型部分的转码器或 SAE,只在它对原模型所计算的东西保持忠实的程度上才可解释。归因图把这种取舍摆明了:它冻结注意力、近似 MLP,于是图是一个关于某个模型的可读故事,而那个模型并不完全是部署的那个。
- 局部与全局。 一张归因图解释一个提示。一部特征字典描述一个模型在一个训练检查点上的样子。两者都还没有给出关于模型在未曾追踪的输入上做什么的全局、可复用的说明,而这正是监督最终想要的。
- 投入与覆盖。 读一个电路是缓慢的人力工作。自动解释,即用一个模型给特征打标签,把劳力规模化,却也引入了打标者的错误,而这个领域对于一个特征何时被正确理解还没有一个稳定的度量。
失效模式是具体的,每一种都会让字典显得比实际更清楚。死潜元是从不激活、也学不到任何东西的字典特征,浪费容量。死潜元与过度激活的潜元一起,把人推向 top- 与谨慎的初始化 (Gao et al. 2024)。特征分裂给出几个狭窄特征,而模型本只有一个;吸收把一个一般特征藏进一个特定特征里,于是字典看起来比模型更清楚 (Chanin et al. 2024)。而重构误差不是可以忽略的噪声:它是未被解释的残余,是字典没有捕获的那部分计算,一个在留下大量误差的同时还报告高可解释性的方法,解释的东西比它声称的要少。多义性这个障碍并没有被完全处理掉。这里给出的,是对方法已经走到哪里、还剩哪些距离的克制说明。
延伸阅读
- Olah et al., “Zoom In: An Introduction to Circuits,” 2020. distill.pub该 Distill 文章提出神经网络内部存在可理解的"电路",由神经元连接构成有意义的算法,并提出特征、电路与跨模型通用性三个假说。
- Elhage et al., “A Mathematical Framework for Transformer Circuits,” 2021. transformer-circuits.pub本文提出一个用于 Transformer 机械可解释性的数学框架,通过残差流、QK/OV 电路和归纳头对纯注意力模型进行逆向工程分析。
- Olsson et al., “In-context Learning and Induction Heads,” 2022. transformer-circuits.pub本文认定归纳头(induction heads)是 Transformer 中由两个注意力头构成的电路,是各规模模型中上下文学习的主要机制来源。
- Elhage et al., “Toy Models of Superposition,” 2022. arXiv:2209.10652
- Cunningham et al., “Sparse Autoencoders Find Highly Interpretable Features in Language Models,” 2023. arXiv:2309.08600稀疏自编码器(SAE)通过稀疏字典学习将语言模型内部激活中的多义性神经元分解为单义、可解释的特征,从而消解叠加现象。
- Bricken et al., “Towards Monosemanticity: Decomposing Language Models With Dictionary Learning,” 2023. transformer-circuits.pub
- Templeton et al., “Scaling Monosemanticity: Extracting Interpretable Features from Claude 3 Sonnet,” 2024. transformer-circuits.pub
- Gao et al., “Scaling and Evaluating Sparse Autoencoders,” 2024. arXiv:2406.04093本文提出使用 TopK 稀疏自编码器(SAE)直接控制稀疏度以改善重建-稀疏度边界,建立关于 SAE 规模与稀疏度的扩展律,并在 GPT-4 激活上训练了一个拥有 1600 万潜变量的 SAE。
- Ameisen et al., “Circuit Tracing: Revealing Computational Graphs in Language Models,” 2025. transformer-circuits.pubCircuit Tracing 提出归因图方法,通过将 MLP 替换为可解释的跨层转码器,揭示语言模型逐步计算的内部机制。
- Lindsey et al., “On the Biology of a Large Language Model,” 2025. transformer-circuits.pub本文将电路追踪方法应用于 Claude 3.5 Haiku,通过机械可解释性分析揭示该模型在多步推理、诗歌规划、多语言及算术任务中使用的内部机制。
- Kantamneni et al., “Are Sparse Autoencoders Useful? A Case Study in Sparse Probing,” 2025. arXiv:2502.16681一项跨 113 个数据集的探针研究发现,稀疏自编码器(SAE)潜变量在数据稀缺、类别不平衡、标签噪声和协变量偏移等困难设置下,未能持续超越简单基线方法的 LLM 激活探针性能。
- Chanin et al., “A is for Absorption: Studying Feature Splitting and Absorption in Sparse Autoencoders,” 2024. arXiv:2409.14507本文发现稀疏自编码器(SAE)中的"特征吸收"现象:层次化特征导致 SAE 潜在特征在本应激活的词元上静默失效,从而破坏 LLM 机械可解释性的可靠性。
- Anthropic, “Open-Sourcing Circuit Tracing Tools” (归因图工具开源,并经 Neuronpedia 在开放权重模型上复现), 2025. anthropic.com
- Gao et al., “Weight-sparse Transformers Have Interpretable Circuits” (从构造上可解释:直接把权重训练成稀疏,而不是事后去解读叠加), 2025. arXiv:2511.13653OpenAI 的研究者把 Transformer 的权重训练成大部分为零,使电路从构造上就可解释,代价是在小规模下用能力换可解释性。
评论
登录后评论