MIB:机制可解释性基准
概述
MIB (Mechanistic Interpretability Benchmark) 是ICML 2025提出的首个系统性评估机制可解释性方法的基准。长期以来,机制可解释性领域缺乏统一的评估标准,导致不同方法之间的比较困难、结果难以复现。MIB的提出填补了这一空白。
核心贡献:
- 首个标准化、可复现的机制可解释性评估框架
- 涵盖电路定位和因果变量定位两大Track
- 提供公共测试集和私有测试集的双轨评估
框架设计
双轨架构
┌─────────────────────────────────────────────────────────┐
│ MIB 基准框架 │
├─────────────────────────────────────────────────────────┤
│ │
│ Track A: 电路定位 (Circuit Localization) │
│ ├─ 目标:识别任务相关的模型组件 │
│ ├─ 方法:归因修补、边剪枝、信息流分析 │
│ └─ 指标:CPR, CMD, AUROC │
│ │
│ Track B: 因果变量定位 (Causal Variable Localization) │
│ ├─ 目标:将隐藏向量与语义概念对齐 │
│ ├─ 方法:SAE、DAS、PCA、DBM │
│ └─ 指标:IIA (Interchange Intervention Accuracy) │
│ │
└─────────────────────────────────────────────────────────┘
数据集构成
| 任务 | 数据集 | 描述 | 样本数 |
|---|---|---|---|
| IOI | Indirect Object Identification | ”When John and Mary went out, John gave an apple to ___“ | 1,000 |
| MCQA | Multi-Choice QA | 颜色/物体4选1问题 | 500 |
| Arithmetic | 算术运算 | 1-2位数字加减法 | 1,000 |
| ARC | AI2 Reasoning Challenge | 科学常识推理 | 500 |
评估模型
| 模型 | 参数量 | 来源 | 说明 |
|---|---|---|---|
| GPT-2 Small | 117M | OpenAI | 基准模型 |
| Qwen-2.5 | 0.5B | Qwen | 小型模型 |
| Gemma-2 | 2B | 中型模型 | |
| Llama-3.1 | 8B | Meta | 大型模型 |
| InterpBench | - | 定制 | 含已知真值电路 |
Track A:电路定位
评估方法
1. 归因修补 (Attribution Patching)
原理:通过梯度近似计算每个注意力头和MLP神经元对输出的贡献。
其中 是第 层第 个组件的激活值。
2. ACDC (Automatic Circuit Discovery)
原理:递归地移除对输出影响最小的边,保留核心电路。
def acdc(model, task, threshold=0.01):
circuit = initialize_full_circuit(model)
while True:
# 计算每条边的归因分数
attributions = compute_attributions(model, circuit)
# 找到贡献最小的边
min_edge = find_min_attribution(attributions)
# 如果贡献小于阈值,则移除
if attributions[min_edge] < threshold:
circuit.remove_edge(min_edge)
else:
break
return circuit3. 边剪枝 (Edge Pruning)
原理:学习每个边是否应该保留的二元掩码。
评估指标
CPR (Circuit Performance Ratio)
定义:忠实度曲线下的归一化面积。
其中忠实度曲线表示移除不同比例边时的性能变化。
解读:
- CPR = 1:完美的电路定位
- CPR > 0.8:高质量定位
- CPR < 0.5:随机定位
CMD (Circuit-Model Distance)
定义:忠实度曲线与完美直线之间的面积。
解读:
- CMD = 0:完美定位(每移除p%的边,性能下降p%)
- CMD越大:定位越不精确
实验结果
| 方法 | IOI CPR | MCQA CPR | 平均 CPR | 平均 CMD |
|---|---|---|---|---|
| Random | 0.31 | 0.29 | 0.30 | 0.69 |
| Activation Patching | 0.72 | 0.68 | 0.70 | 0.31 |
| ACDC | 0.68 | 0.71 | 0.69 | 0.33 |
| Attribution Patching | 0.78 | 0.74 | 0.76 | 0.25 |
| Edge Pruning | 0.75 | 0.72 | 0.73 | 0.28 |
关键发现:归因修补(Attribution Patching)在此基准上表现最佳,超过了更复杂的ACDC方法。
Track B:因果变量定位
评估方法
1. 稀疏自编码器 (SAE)
原理:将神经元激活分解为更细粒度的特征。
其中 是稀疏激活, 是字典向量。
2. DAS (Direct Feature Attribution)
原理:通过直接干预验证特征的因果作用。
def das_feature_score(feature, model, intervention_pairs):
scores = []
for (clean, corrupted, expected_diff) in intervention_pairs:
# 激活干净样本
act_clean = model.forward(clean, layer=feature.layer)
# 干预激活值
act_intervened = act_clean.clone()
act_intervened[feature.index] = model.forward(corrupted)[feature.index]
# 测量效果
effect = model.predict(act_clean) - model.predict(act_intervened)
scores.append(abs(effect - expected_diff))
return -mean(scores) # 负MSE,越高越好3. DBM (Disentanglement Metric via Benchmarking)
原理:基于解耦质量的基准测试。
指标:IIA (Interchange Intervention Accuracy)
定义:对识别的因果变量进行交换干预,验证是否产生预期行为变化。
其中 是干预后的实际输出, 是预期输出。
实验结果
| 方法 | IOI IIA | MCQA IIA | Arithmetic IIA | 平均 IIA |
|---|---|---|---|---|
| SAE | 0.58 | 0.52 | 0.61 | 0.57 |
| DAS | 0.72 | 0.69 | 0.75 | 0.72 |
| PCA | 0.45 | 0.43 | 0.48 | 0.45 |
| DBM | 0.63 | 0.58 | 0.67 | 0.63 |
关键发现:DAS在因果变量定位上显著优于SAE,表明监督方法优于非监督方法。
综合分析
方法对比总览
| 方法类别 | 代表方法 | 优点 | 缺点 |
|---|---|---|---|
| 梯度方法 | Attribution Patching | 快速、近似准确 | 近似可能不精确 |
| 剪枝方法 | ACDC、Edge Pruning | 忠实度高 | 计算量大 |
| 字典学习 | SAE | 可扩展 | 不总能找到规范单元 |
| 监督方法 | DAS | 精确 | 需要标注数据 |
关键洞察
- 简单方法的威力:归因修补等简单梯度方法在电路上表现优异
- 边级别优于节点级别:细粒度的边定位优于粗粒度的节点定位
- SAE的局限性:SAE并不总能找到”规范单元”,特征一致性差
- 高方差问题:SAE在不同运行、不同任务间表现不一致
任务难度分析
| 任务 | 发现难度 | 定位难度 | 验证难度 |
|---|---|---|---|
| IOI | 中 | 中 | 低 |
| MCQA | 高 | 高 | 中 |
| Arithmetic | 低 | 低 | 低 |
| ARC | 高 | 高 | 高 |
使用指南
1. 选择合适的方法
def select_method(task_type, compute_budget):
if compute_budget < 10: # 有限计算
return "AttributionPatching"
elif compute_budget < 100: # 中等计算
return "EdgePruning"
else: # 充足计算
return "ACDC"2. 评估流程
def evaluate_circuit_discovery(method, model, task_data):
# 1. 电路发现
circuit = method.discover(model, task_data)
# 2. 计算CPR
cpr = compute_cpr(model, circuit, task_data)
# 3. 计算CMD
cmd = compute_cmd(model, circuit, task_data)
# 4. 综合评估
return {
"cpr": cpr,
"cmd": cmd,
"method": method.name,
"compute": method.compute_cost
}3. 结果解读
def interpret_results(results):
cpr = results["cpr"]
cmd = results["cmd"]
if cpr > 0.7 and cmd < 0.3:
return "High Quality: Circuit is well-identified"
elif cpr > 0.5 and cmd < 0.5:
return "Moderate Quality: Partial circuit found"
else:
return "Low Quality: Method may not be suitable"与现有工作的关系
与BlackboxNLP的关系
MIB借鉴了BlackboxNLP的共享任务模式,提供:
- 公共排行榜
- 标准评估协议
- 方法复现指南
与SAE-Lens的关系
SAE-Lens提供了SAE特征分析工具,MIB补充了:
- 标准化评估框架
- 跨方法比较协议
- 质量度量标准
局限性与未来方向
当前局限
- 任务覆盖有限:仅4个任务类型
- 规模限制:主要在1B以下模型验证
- Ground Truth稀缺:仅InterpBench有真值
未来扩展
- 更多任务:代码推理、长文本理解
- 更大模型:扩展到70B+模型
- 动态电路:时序任务的电路发现
- 跨层电路:多层协作的复杂电路
相关阅读
- circuit-discovery — 电路发现方法
- sparse-autoencoders — 稀疏自编码器
- feature-geometry — 特征几何分析
- open-problems-mechanistic-interpretability — 机制可解释性开放问题