串讲 | 介入式可解释性如何用因果干预把「读出来」升级成「证出来」,并把单个关键组件拼成可验证的电路。主线:patching 立因果 → 手工电路立判据 → 自动化与严格验证 → 单位多义问题引向特征段。 | 2026-06

这一段在谱系里的位置:lens 只能读,不能证

上一段(读残差流)的成果是「能看见模型中间在想什么」:把 residual stream 投影到 vocab,逐层读出 model 的 belief。但它有一个硬限制:读出 ≠ 导致。某一层能解码出 “Paris”,不代表这一层就是模型最终说出 Paris 的原因。它可能是旁路、是冗余、是下游根本不消费的副产品。lens 给的是 correlational evidence,而 correlation 不蕴含 causation(Activation Patching 笔记里把这一点讲得最透)。

这一段就是对这个限制的回应:不再只观察,而是动手干预。按住其余一切不变,只改一个组件,看输出是否随之改变。这正是因果推断的精神(causal mediation:clean / corrupt 是两个反事实世界,patch 是对中介变量的强制赋值)。沿着这条「干预」主线,本段会走完三步:(1) 用 patching 给单个组件立因果证据并做事实编辑(ROME);(2) 用 path patching 把节点拼成电路、并立下「什么算一个好电路」的判据(IOI);(3) 把人力流程自动化(ACDC)、把验证做严格(Causal Scrubbing),并把 mediator 从「人指定的神经元」升级成「学出来的子空间」(DAS)。最后留下的问题是:组件这个单位本身是多义的

一、Activation Patching:把「重要」变成可测量的因果量

整段的方法论原子是 activation patching(又名 causal tracing / interchange intervention)。设置极简:跑一次 clean run(任务正常完成)和一次 corrupt run(任务失败),然后把某个位置(某层、某 token、某 head 输出)的激活从一次 run 抠出来覆盖到另一次,让剩余计算跑完,看输出变化多大。变化大 = 该组件在因果链上举足轻重。

两个方向回答两个不同的问题,混淆会 overclaim:denoising(往 corrupt 注入 clean)测充分性——它一个人能不能把行为救回来;noising(往 clean 注入 corrupt)测必要性——缺了它行不行。一个组件可以必要但不充分(必经之路但需配合),也可以充分但不必要(有冗余备份)。

ROME 是 causal tracing 的奠基样板,强在做成了一个可证伪的闭环:先用三跑 tracing(clean / corrupt subject / 单点 restore)测每个 hidden state 的 indirect effect,定位到事实存储在中层 MLP、subject 末 token(early site);再用一个 rank-one 闭式权重更新把新事实 写进那一层的 ,把 MLP 当 linear associative memory。“定位在哪” 和 “改哪里最有效” 在同一个 (layer, token) 上对齐(Fig 5),两端互为 ground truth。这比单纯 probing 强得多。

但 ROME 也留下了本段的两条裂缝:

  • 争议 1:corruption 方式会改结论。 ROME 用 Gaussian noise 加在 subject embedding 上,把激活推向 OOD 分布;后续 Zhang & Nanda (2024) 的 activation patching best practices 系统指出,noise corruption 不如 symmetric token replacement(换成另一个合法同类 token,如 Mary↔John)干净——两个 run 都在分布内。「结论随 corruption 漂移」是已知的方法论裂缝,不是细节洁癖。
  • 争议 2:定位 ≠ 编辑。 Hase et al. (2023) 发现 tracing 标出的层与 ROME 编辑最有效的层并不一致——可以在 tracing 没标出的层成功编辑。这直接打折「编辑成功 ⇒ 事实就存在这里」的强解读。

二、Path Patching 与 IOI:从「重要节点」到「电路」,并立下三判据

朴素 activation patching 替换一个组件后让它穿过所有下游路径传播,只能回答「这个节点重要吗」。要拼出一张有向 电路图,需要知道哪条边重要,这就是 Path Patching(Goldowsky-Dill et al. 2023)的 delta:只让被 patch 的激活沿特定路径(sender→receiver)传播、其余路径维持原样,从而隔离出组件之间的连接。关键在于:像 backup / negative head 这类组件彼此依赖,整体 activation patching 会把类内交互混在一起,只有 path patching 能把「直接路径」单独拎出来。

IOI 用 path patching + mean-ablation knockout,手工逆向出 GPT-2 small 上 Indirect Object Identification 任务的完整 26-head 电路(7 类:Name Mover / Negative Name Mover / S-Inhibition / Duplicate Token / Induction / Previous Token / Backup Name Mover),只占全模型 1.1% 的 (head, position) 对。选 IOI 是关键的品味:它既是自然语言、又有唯一可写出的目标算法,使「电路对不对」有了 ground truth。其中复用了 induction head 的 prefix-matching+copying 机制,但有个重要 meta-lesson:induction head 在 IOI 里被「挪用」成 position signal 喂给 S-Inhibition 的 value,而非直接预测 next token。一个组件的 mainline 功能不等于它在某电路里的实际功能。

IOI 留给后世的真正遗产是把 忠实性 操作化成三个量化判据:

  • Faithfulness:电路性能逼近全模型(IOI 恢复 87% logit difference)。
  • Completeness:对任意子集 都应小——否则说明漏抓了并联/冗余子电路。
  • Minimality:每个节点都必要。

IOI 的价值还在于它自我证伪:它诚实报告 completeness 在 greedy 搜索下失败(incompleteness 高达 ≈87%)。两个反直觉发现把朴素归因工具打穿了:Backup Name Mover Head(主 head 被 ablate 后才接管,self-repair)证明「ablate 掉不掉性能 ⇏ 不参与计算」;Negative Name Mover Head(系统性把正确答案往下压)证明「head 都朝目标努力」是错的。这两点直接定义了后续工作的攻击面。遗留问题也很清楚:MLP / layer norm 全被搁置,且手工逆向的人力成本随模型规模爆炸。这正是 ACDC 要解决的。

三、自动化与严格验证:ACDC、EAP、Causal Scrubbing

ACDC:把 Step 3 自动化

ACDC 的贡献先是 framing——把 IOI / Greater-Than / Induction 这批工作背后隐含的人力流程抽象成三步(选行为/数据/metric → 定计算图粒度 → patching 剪边),再只自动化最耗时的第三步。算法是贪心递归 edge pruning:从输出节点逆拓扑序遍历,对每条入边试删,若删后输出分布的 KL 增量小于阈值 就永久删除。它首次把「找电路」形式化为边的二分类问题,用 edge-level ROC/AUC 比较不同算法,并加 reset-network 对照(确认信号来自真实能力而非算法幻觉)。

但 ACDC 也继续暴露 ROME/IOI 的问题:

  • 贪心 + 路径依赖:父节点遍历顺序是超参,会改变结果——找到的不是唯一/客观电路。
  • 昂贵:每条候选边一次前向,GPT-2 small 已有 32000 边,不 scale——不 scale 的方法大概率方向不对,这也直接催生了 EAP。
  • 系统性漏 negative 组件:单 metric 优化天然漏掉「有害」组件(IOI 的 negative name mover)——「删了影响小 = 不重要」这个判据本身有 blind spot,抵消效应被当成不重要。
  • 组件单位多义:节点是 head/MLP/neuron,本身可能 多义;在多义单位上画的边,语义本就模糊。这是 framing 层面修不掉的限制,也解释了为什么下一段要转向特征。

EAP / EAP-IG:用梯度让 patching 可 scale

ACDC「贵」的问题催生了 Attribution Patching(Nanda 2023)/ EAP(Edge Attribution Patching, Syed et al. 2023):用一次反向传播的「梯度 × 激活差」线性一阶近似 patching 效果,把 次前向降到常数次反向,一次性估计全图所有边的重要性。代价是近似失真;EAP-IG(Hanna et al. 2024)用 integrated gradients 修梯度饱和,恢复忠实度。delta 是纯粹的 scalability:方法学没变,只是把暴力前向换成可微近似。

Causal Scrubbing:把验证做到严格

ACDC 是「发现」,那「验证一个既定假设有多严」呢?Causal Scrubbing(Chan et al. 2022, Redwood)把一个电路假设形式化为「哪些激活承载哪些信息」,进而定义一组允许的重采样集合:只要假设为真,把无关激活换成同分布的其它样本,行为应当(分布意义上)保持不变;递归地替换、看行为是否保持,作 faithfulness 的上界检验。关键性质:只能证伪,不能证真。通过只意味着「尚未被推翻」。这把 IOI 的 completeness 直觉推到了一个系统化协议。

四、DAS:换个 mediator——把因果变量对齐到学出来的子空间

到这里所有方法的 mediator 都是人指定的、标准基下的组件(head / neuron / 边)。DAS 换了这个旋钮。它属于「因果抽象 / 对齐验证」这条平行支线:不像电路发现那样 exploratory 地找子图,而是 confirmatory 地先写死一个高层符号算法,再用 interchange intervention 验证网络是否实现了它

DAS 的核心 insight 来自线性代数:在一个把输入旋转 20° 的线性网络里,「标准基下找不到对齐」是 basis 选错导致的伪结论,把隐表征反旋转 20° 就出现完美对齐。神经元与概念是 many-to-many 的(superposition / polysemanticity),没理由认为概念恰好沿坐标轴排列。于是 DAS 破掉旧 causal abstraction 方法的两个限制:(1) 暴力离散搜索对齐 → 用梯度下降学一个正交旋转 ;(2) localist(变量对齐到互斥神经元)→ 对齐到旋转后的非 basis-aligned 分布式子空间。干预变成软干预 DII(旋转→在正交子空间 patch→旋转回去),以 interchange intervention accuracy (IIA) 为可微目标,冻结模型只学 。toy 任务上 DAS 拿到 brute-force(0.60)/ localist(0.73)都找不到的 1.00 IIA。

但 DAS 也把整段最深的问题摆上了台面:

  • 随机网络控制(方法论根上的警报):在随机初始化、行为 chance 的网络上,只要隐维 ≫ 输入维,DAS 也能把 IIA 搜到 0.64。这说明 有足够容量去拟合高层模型,而非纯粹发现网络已有的计算——「找到对齐」与「制造对齐」在高容量下难以区分。
  • 2025 Non-Linear Representation Dilemma:若允许 featurizer 任意强(非线性),几乎任何高层变量都能被「找到」编码在激活里,对齐搜索变 vacuous;要让结论有意义就必须限制容量,但「在哪划线」缺乏原则性依据。DAS 卡在这条线上。
  • 此外 DAS 是 confirmatory 的:错的假设验证不出来,但它不会告诉你正确的高层模型是什么

Through-line

这一段的主线:介入式可解释性用因果干预把 lens 的「读出」升级为「证出」。patching 给单个组件立因果证据,path patching + IOI 把组件拼成可验证的电路并立下 faithfulness/completeness/minimality 三判据,ACDC/EAP 把发现自动化,Causal Scrubbing 把验证严格化,DAS 把 mediator 从指定神经元升级成学出来的子空间。

但整段反复遇到同一个问题:单位多义。ACDC 的边画在多义的 head 上、DAS 必须靠一个容量可疑的旋转去凑子空间。根因都是 多义性superposition:模型把远多于维数的特征叠在同一批神经元里,所以「组件」从来不是一个语义干净的计算单位。而 2025 围绕 线性表示假说(DAS 与 SAE 共同押注的赌注)有效性的质疑,更让「在标准基/线性子空间里找电路」这件事的地基本身动摇。

要让电路里的节点单义、可命名、可验证,必须先解决「什么才是对的单位」。这就是下一段 找对单位:superposition 与特征字典 的起点。