Mechanistic Interpretability
机制可解释性通过逆向工程,将神经网络拆解为其输出背后的特征和电路。了解关键方法以及它与 XAI 的区别。
机制可解释性是一个研究领域,致力于对经过训练的神经网络进行逆向工程,将其还原为人类可以理解的机制:模型在激活中表示的特征,以及将这些特征转化为输出的电路,也就是由权重和组件组成的链路。大多数评估将模型视为黑盒,仅依据其预测结果进行判断;机制可解释性则将权重视为编译后的程序,尝试对其进行反编译。该领域已从对小型视觉模型的研究发展为大型语言模型(LLMs)AI 安全研究的核心组成部分,MIT Technology Review 还将其列为 2026 年十大突破性技术之一。
特征、电路与叠加#
该领域基于一些工作假设,这些假设在面向图像分类器的 Distill 文章深入探索:电路简介中有所阐述:
- 特征:某一层激活空间中的方向,对应输入的有意义属性。卷积神经网络(CNN)的浅层包含曲线和边缘检测器,深层则包含用于表示物体部件的特征,例如车轮或狗的鼻子。
- 电路:由权重连接起来、能够实现某种算法的特征组。在 Transformer 中,归纳头是一对注意力头,它们会找到当前 token 之前的某次出现,并复制其后面的内容;这是上下文学习背后的机制。一项针对 GPT-2 small 的研究绘制了补全句子“当 Mary 和 John 去商店时,John 给了……一杯饮料”中空缺处的电路,发现该电路由 7 个功能组中的 26 个注意力头组成。
- 叠加:模型通过重叠表示的方式,表示数量超过神经元数量的特征,因此单个神经元通常会响应几个彼此无关的概念。这种多义性使单个神经元难以作为有效的分析单位,也促使该领域转向字典学习。
关键方法#
研究人员会将观察与干预结合起来:观察用于寻找候选特征,干预则用于检验这些特征是否重要:
- 线性探测:在激活上训练简单分类器,检查某个概念能否在特定层被线性解码。探测结果可以证明信息确实存在,但要证明模型会用到这些信息,还需要进行干预。
- 消融与激活修补:将某个激活值设为零,或替换成来自另一输入的值,然后测量输出变化。这些因果测试能区分真正计算某种行为的组件,以及仅与其相关的组件。
- 稀疏自编码器(SAEs):将某一层的激活分解为数量更多、稀疏激活的特征的网络,可消除叠加现象。Anthropic 的 Scaling Monosemanticity 从 Claude 3 Sonnet 中提取了数百万个特征,其中包括一个代表金门大桥的特征;将该特征的值固定在较高水平后,模型开始自称是这座桥。
- 归因图:Anthropic 于 2025 年开展的 Claude 3.5 Haiku 电路追踪工作用可解释的近似模型替换了模型的 MLP 层,并追踪特征之间的路径。研究发现,模型会从“包含达拉斯的州的首府”经过中间步骤“德克萨斯州”得出“奥斯汀”;在写出以某个词结尾的诗句之前,它还会先选择一个押韵词。
- 引导:在推理过程中添加或减去特征方向以改变行为,这是引导向量和表征工程的基础。
典型的研究会在这些方法之间交替进行:
消融视觉模型中的通道#
消融是最简单的因果测试方法。下面的代码片段从 torchvision 加载预训练的 ResNet-18,使用 PyTorch 前向钩子,依次将中间层特征图的 256 个通道逐个置零,并记录模型最高分类对应的 logit 降低了多少:
import urllib.request
import torch
from PIL import Image
from torchvision.models import ResNet18_Weights, resnet18
weights = ResNet18_Weights.DEFAULT
model = resnet18(weights=weights).eval()
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg"))
x = weights.transforms()(image).unsqueeze(0)
with torch.no_grad():
logits = model(x)
top = logits.argmax().item()
drops = torch.zeros(256)
for c in range(256): # zero one layer3 channel at a time and record how far the top-class logit falls
handle = model.layer3.register_forward_hook(lambda m, i, out: out.index_fill(1, torch.tensor([c]), 0))
drops[c] = logits[0, top] - model(x)[0, top]
handle.remove()
values, channels = drops.topk(3)
print(f"{weights.meta['categories'][top]}: logit {logits[0, top]:.2f}, median drop {drops.median():.3f}")
print(f"largest drops: channels {channels.tolist()} -> {values.round(decimals=2).tolist()}")模型将图像预测为“minibus”,logit 为 13.42。移除一个典型通道几乎不会改变这个 logit(中位数降幅为 -0.002);而仅移除通道 62 就会使其下降 1.80,移除通道 70 和 155 则会各下降约 1.15,这说明少数几个通道承载了大量证据。这些通道会成为后续研究的起点:可视化每个通道检测到的内容,并追踪哪些早期特征为其提供输入。
机制可解释性与可解释人工智能的区别#
可解释人工智能(XAI)是让模型决策变得可理解的更广泛领域,其中很大一部分工作属于归因:显著性图和类激活图会突出显示影响预测结果的输入像素。在 Ultralytics YOLO26 的预测模式中设置 visualize=True,即可在每个预测结果旁保存此类热力图,显示哪些像素提高了预测类别的得分。归因回答模型关注了哪里;机制可解释性则关注哪些内部特征和电路将这些像素转化为得分。概念瓶颈模型则采用第三种方法:在架构中强制模型通过以人类命名概念为中间环节进行预测,从而实现可解释性。
应用与局限#
机制分析工具可用于在发布前审查 LLM 是否存在不良行为,例如监控与欺骗或谄媚相关的激活方向;也可用于调试依赖捷径的视觉模型,例如皮肤病变分类器学会将皮肤科医生放在可疑病变旁的尺子识别为恶性信号。这类检查在医学图像分析中尤为重要,因为模型可能只是因为错误的原因而在测试集上取得高分。TransformerLens 等开源工具让 Transformer 模型中的钩子、缓存和修补操作变得常规化。
该领域的主要局限在于覆盖范围。SAE 无法完美重建激活,因此每次计算中都会有一部分无法解释;用于归因图的替代模型也只能捕捉前沿模型在特定提示词下的部分行为。验证每个电路仍然需要投入大量人工,因此目前还无法对大型模型给出完整解释。










