因果抽象:机制可解释性理论基础

1. 背景:从电路发现到因果抽象

1.1 机制可解释性的挑战

机制可解释性(Mechanistic Interpretability)旨在理解神经网络如何计算:

  • 电路发现:识别实现特定功能的子图
  • 特征分析:理解单个神经元/方向的含义
  • 动态追踪:跟踪信息在网络中的流动

然而,缺乏统一理论框架导致:

  • 方法不系统,难以推广
  • 验证困难,缺乏可测试预测
  • 难以处理复杂的多层交互

1.2 因果抽象的引入

因果抽象(Causal Abstraction)由Geiger等人提出(JMLR 2025),为机制可解释性提供严格的形式化基础

  • 将神经网络解释为因果模型
  • 建立高层因果结构低层实现的联系
  • 提供可测试的预测

2. 因果抽象形式化

2.1 因果模型定义

高层因果模型

  • 变量集合
  • 因果图结构
  • 机制函数

低层实现

  • 神经网络层激活
  • 网络计算图
  • 激活函数和权重

2.2 实现映射

实现映射 将高层变量关联到低层激活:

2.3 因果抽象定义

定义:若存在实现映射 使得:

  1. 结构保持 中存在边 中存在因果路径
  2. 机制保持:干预效果一致

因果抽象


3. 干预变换与机制变换

3.1 硬干预 vs 软干预

硬干预-operator):强制变量取固定值

软干预:修改条件概率

3.2 机制变换

机制变换(Mechanism Transformation)是一类软干预

其中 是对概率分布的变换。

性质:机制变换保持因果结构但改变机制参数

3.3 抽象的稳定性

定理:如果 因果抽象 ,则 机制变换保持抽象

这解释了为什么神经网络的不同初始化仍能实现相同的因果算法。


4. ICL的因果解释

4.1 上下文学习作为因果推理

核心假设:Transformer的ICL(In-Context Learning)实现了隐式的贝叶斯因果推理

4.2 因果模型

设高层因果模型

Z_context → Z_task
Z_task → Z_output

其中:

  • :演示示例
  • :任务变量
  • :预测输出

4.3 实现验证

实验设计

def test_causal_abstraction(model, task_description):
    """
    测试模型是否实现了因果抽象
    """
    # 定义因果干预
    interventions = [
        # 干预1: 修改演示对的标签
        {"type": "hard", "variable": "Z_context", "value": counterfactual_context},
        # 干预2: 改变任务描述
        {"type": "soft", "variable": "Z_task", "distribution": shifted_distribution},
    ]
    
    # 收集预测
    predictions_before = model(original_prompt)
    predictions_after = model(intervened_prompt)
    
    # 计算因果效应
    causal_effect = predictions_after - predictions_before
    
    # 验证因果一致性
    return verify_causal_consistency(causal_effect, expected_effect)

4.4 关键发现

干预类型Transformer响应因果预测一致性
标签翻转预测翻转强因果效应
任务改变预测改变条件因果效应
演示顺序基本不变无因果效应

5. 可验证的电路发现

5.1 传统电路发现的局限

  • 手动分析耗时且易出错
  • 统计方法难以提供因果保证
  • 无理论框架连接发现和分析

5.2 因果抽象框架

框架流程

高层因果模型 → 因果预测 → 实现映射假设 → 实验验证 → 电路确认

5.3 具体案例:IOI任务

Indirect Object Identification(IOI) 任务的电路发现:

# 高层因果模型
class IOICausalModel:
    """
    IOI任务的因果模型
    """
    def __init__(self):
        # 变量定义
        self.S1 = "subject 1 token"
        self.S2 = "subject 2 token"
        self.IO = "indirect object token"
        self.END = "end of sentence"
        
        # 因果结构
        # S1 → Vocab Prediction
        # S2 → Attention to S1
        # IO → Output
    
    def predict_causal_effect(self, intervention):
        """预测干预的因果效应"""
        if intervention.type == "remove_S1":
            # 移除S1应该破坏对IO的预测
            return {"IO_prob": -0.8}
        return {}

已发现的电路

  • 名称移动头(Name Mover Heads):移动S1信息到输出位置
  • 备份头(Backup Heads):在主要头失效时接管
  • 抑制头(Inhibition Heads):抑制错误路径

6. 形式化验证算法

6.1 干预对应

算法:给定实现映射 ,验证干预对应

def verify_intervention_correspondence(model, causal_model, pi):
    """
    验证干预对应:高层干预与低层干预效果一致
    """
    results = []
    
    for intervention in causal_model.interventions:
        # 高层因果预测
        high_level_effect = causal_model.predict(intervention)
        
        # 构建低层对应干预
        low_level_intervention = build_low_level_intervention(
            intervention, pi, model
        )
        
        # 运行实验
        with model.set_intervention(low_level_intervention):
            low_level_output = model.forward(test_inputs)
        
        # 比较效果
        effect_match = compare_effects(high_level_effect, low_level_output)
        results.append(effect_match)
    
    return all(results)
 
 
def build_low_level_intervention(intervention, pi, model):
    """
    将高层干预转换为低层实现
    """
    if intervention.type == "hard":
        # 硬干预:直接修改对应激活
        target_activations = pi(intervention.variable)
        return {
            "target": target_activations,
            "value": intervention.value,
            "mode": "replace"
        }
    elif intervention.type == "soft":
        # 软干预:修改激活的分布
        target_activations = pi(intervention.variable)
        return {
            "target": target_activations,
            "distribution": intervention.distribution,
            "mode": "resample"
        }

6.2 抽象等价类

定理:实现相同因果抽象的网络形成等价类

这允许:

  • 跨模型比较:不同架构实现同一算法
  • 跨初始化比较:不同训练结果实现相同因果结构

7. 与其他理论框架的联系

7.1 与贝叶斯网络解释的联系

Transformer的贝叶斯网络解释(见transformers-bayesian-networks-belief-propagation)为因果抽象提供低层实现基础

  • 信念传播 = 计算后验概率
  • 消息传递 = 因果效应的量化

7.2 与因果表示学习的联系

因果表示学习(见causal-representation-learning)关注学习因果变量,而因果抽象关注验证因果结构

两者结合:

  • 表示学习:从数据中发现因果变量
  • 因果抽象:验证学习到的表示是否实现因果结构

7.3 与电路发现的联系

电路发现是因果抽象的实践方法

因果抽象电路发现
理论框架实现方法
形式化验证实验验证
抽象等价类具体电路

8. 开放问题与未来方向

8.1 可扩展性

当前局限

  • 仅验证小规模电路
  • 难以处理大规模Transformer

研究方向

  • 模块化抽象验证
  • 层次化抽象组合

8.2 自动化抽象发现

挑战:如何自动发现高层因果模型,而非手动指定?

初步探索

  • 基于因果发现的神经符号方法
  • 基于对比干预的变量识别

8.3 与LLM的关系

大型语言模型是否实现可解释的因果算法

  • 部分证据支持(IOI、induction heads等)
  • 但仍缺乏全面验证

9. 参考文献