Causal Tracing(因果追跡)(コーザルトレーシング)
LLMが特定の事実(「エッフェル塔はパリにある」等)をどの層・どのトークン位置に格納しているかを因果介入実験で特定する手法。ROMEモデル編集の基盤技術。ROME論文(2022)で提唱。
Causal Tracingとは
「LLMが知識をどこに保存しているか」を実験的に突き止める手法。ファクト(例:「エッフェル塔の所在地 = パリ」)の表現が特定のニューロン群に局在しているかどうかを確認できる。
基本手順
3ステップの実験:
- クリーンラン: 通常の入力
s = "エッフェル塔はどこにありますか?"でフォワードパスを実行し全活性化を保存 - 破損ラン: 主体(subject)トークンをランダムノイズで置換した
s_corrupt = "[NOISE]はどこにありますか?"でラン(モデルは正解を出せない) - パッチラン: 破損ランを実行しながら、特定の(Layer l, Token t, Component c)のみクリーンランの活性化に置換。出力の回復度合いを測定
回復度(AIE: Average Indirect Effect) = P(正解 | patch) - P(正解 | corrupt)
AIEが高い (Layer, Token, Component) が「その事実を格納している場所」を示す。
ROME論文の主要発見(GPT-J-6B, 2022)
| 所在 | Component | Layer範囲 | AIEピーク |
|---|---|---|---|
| 事実の主体トークン | MLP (中間層) | Layer 3-8 | 0.42 |
| 最終トークン | Attention (深い層) | Layer 14-20 | 0.31 |
| 主体最終文字 | MLP (浅い層) | Layer 0-2 | 0.12 |
解釈: MLPは「辞書的知識」、Attentionは「文脈の統合」を担う傾向がある。
各アーキテクチャでの比較(2022〜2024研究)
| モデル | 事実格納の主な場所 | 特徴 |
|---|---|---|
| GPT-2 (124M) | MLP Layer 2-5 | 非常に浅い層に集中 |
| GPT-J (6B) | MLP Layer 3-8 | 中間MLPが主体 |
| Llama-2 (7B) | MLP Layer 5-12 | GPT-Jより深い |
| Llama-3 (8B) | Attention + MLP Layer 8-16 | よりAttention依存 |
| Mistral (7B) | MLP Layer 6-14 | Llama類似 |
実装例(ROME公式コード)
# ROMEリポジトリ: github.com/kmeng01/rome
from experiments.causal_trace import (
ModelAndTokenizer, predict_token, trace_with_patch
)
mt = ModelAndTokenizer("EleutherAI/gpt-j-6B", low_cpu_mem_usage=True)
know = dict(
prompt="{}はどの国に位置していますか",
subject="エッフェル塔",
attribute="フランス"
)
# 因果追跡の実行
result = trace_with_patch(
mt,
prompt=know["prompt"].format(know["subject"]),
noise_level=0.1, # ノイズ強度
trace_layers=range(28) # 全レイヤーをスキャン
)
print(f"最大AIEレイヤー: {result.argmax()}") # 例: Layer 5
print(f"最大AIEコンポーネント: mlp")
# 可視化(ヒートマップ)
result.plot_heatmap()
Causal Tracingの限界
1. 分散格納問題 実際の知識は単一レイヤーでなく複数レイヤーに分散していることが多い。特定の事実はLayer 5に80%、Layer 10に20%という形で格納される。
2. 知識の種類依存
- 固有名詞の所在: MLPが主(ROME型)
- 数値的関係(「3 × 4 = 12」): 計算に特化したニューロン群が関与
- 手続き的知識(コード作成方法): 分散的、特定化困難
3. モデル改良で局在が変化 Llama-3 vs Llama-2で同じ事実でも格納場所が大幅に変化。RoPEやGrouped-Query Attentionの違いが影響。
モデル編集との接続
Causal Tracingで特定された「事実格納MLPニューロン」を直接書き換えるのがモデル編集(Model Editing)。
- ROME(Rank-One Model Editing): 1件の事実をMLP行列への低ランク更新で書き換え。計算コスト: ~0.5秒/1件
- MEMIT(Mass-Model Editing in the Tens of Thousands): 数千件を同時更新。
- AlphaEdit: ROME/MEMITの制約最適化改良版(副作用20%低減)
FAQ
Q: Causal TracingでモデルのバグをデバッグできるQ&A? 可能。特定の誤回答がどのレイヤーから生じているかを追跡し、ターゲットを絞ったファインチューニングや編集で修正できる。
Q: GPT-4などクローズドモデルに使える? フォワードパス中の活性化へのアクセスが必要なため、APIのみのモデルには適用不可。ロジット出力のみを使う「ブラックボックス」版の研究も進行中(2025)。
Q: Causal TracingとXAI(説明可能AI)の違い? XAIは主にモデルの入出力関係の説明に注力するが、Causal TracingはモデルのIN内部の「因果的」メカニズムを特定する点でより根本的なアプローチ。