AI・機械学習
上級

Induction Heads(帰納的注意機構)(インダクションヘッズ)

Transformerの2層以上のモデルで自発的に出現する回路。[A][B]→[A]のパターンを学習し、文脈内学習(in-context learning)の基盤となる注意ヘッドのペア。Anthropic 2022年の発見。

0 回閲覧
0 いいね
2026/6/1 更新
関連タグ
mechanistic-interpretability
in-context-learning
transformer
attention
circuits
LLM

Induction Headsとは

Anthropicが2022年に発表した論文「In-context Learning and Induction Heads」で提唱された概念。Transformerモデルが**文脈内学習(ICL: In-Context Learning)**を実現する仕組みを回路レベルで説明する。

ICLとの関係

ICLとは「プロンプト例を見せるだけでタスクを学習する」現象。なぜファインチューニングなしに例から学べるのか?答えがInduction Headsにある。

仕組みの骨格:

  1. 入力に ...フランス語: 「こんにちは」→ 英語: Hello / フランス語: 「ありがとう」→ 英語: が現れる
  2. Previous Token Head(Layer 0)が「各トークンの直前」情報を記録
  3. Induction Head(Layer 1+)が過去に同パターンを探し「Hello」「ありがとう」→「Thank you」を予測

回路構造の詳細

ヘッド種レイヤー位置機能
Previous Token Head浅い層(Layer 0-1)トークンBの直前にAがある情報を生成
Induction Head本体やや深い層(Layer 1-3)過去の[A][B]パターンを参照し次のBを予測
Anti-Induction Head中間層パターン過学習を防ぐ抑制ヘッド(一部モデルで発見)

実験で確認された特性

Phase Change現象: Transformerの学習中、突然の性能ジャンプ(loss spikes)の直後にInduction Headsが出現する。学習ステップ数が2B→4Bトークン付近でGPT-2のlossが急激に改善するのはInduction Heads形成と一致。

サイズへの堅牢性:

  • GPT-2 Small (117M): Layer 1-Head5
  • GPT-2 Medium (345M): Layer 2-Head7
  • GPT-Neo 1.3B: Layer 3-Head12

2層以上のどんなTransformerでも出現する普遍的な回路。

検出コード(TransformerLens)

from transformer_lens import HookedTransformer
import torch

model = HookedTransformer.from_pretrained("gpt2")

def detect_induction_heads(model, seq_len=50):
    """Induction Headを反復トークンシーケンスで検出"""
    # [A B C ... A B C] のような繰り返しシーケンスを作成
    rand_tokens = torch.randint(1000, 10000, (1, seq_len))
    repeated = torch.cat([rand_tokens, rand_tokens], dim=1)  # 長さ100
    
    _, cache = model.run_with_cache(repeated)
    
    # 後半シーケンスで前半と同じ位置への注意が高いヘッドを探す
    results = []
    for layer in range(model.cfg.n_layers):
        pattern = cache["pattern", layer][0]  # [heads, seq, seq]
        # 後半(50-100)から前半(0-50)への注意スコア
        for head in range(model.cfg.n_heads):
            induction_score = pattern[head, seq_len:, :seq_len].diagonal(-1).mean()
            if induction_score > 0.5:
                results.append((layer, head, induction_score.item()))
    return results

results = detect_induction_heads(model)
print(f"検出されたInduction Heads: {results}")
# 出力例: [(4, 4, 0.73), (5, 1, 0.81), (5, 5, 0.89)]

応用研究

インダクション回路のアブレーション(切除)実験: Induction Headsをゼロアウトすると...

  • ICLの性能が40-60%低下(モデルサイズによる)
  • 長文脈タスクで特に顕著
  • few-shot promptingの効果が消失に近い

Llama系モデルへの拡張: 2023-2024年の研究でLlama-2/Mistralでも同様の回路が確認。しかし複数のInduction Headが並列動作する「ヘッドアンサンブル」構造が追加で見つかった。

関連する回路群

  • Bigram/Trigram Head: 頻出N-gramパターンを記憶する補助ヘッド
  • Successor Head: 数列やアルファベットの「次の要素」を予測するヘッド
  • Copy-Suppression Head: コピーしすぎを防ぐ抑制ヘッド

FAQ

Q: Induction Headsさえあればモデルは全て学習できる? ICLの多くはInduction Headsで説明できるが、複雑な推論タスクは別の回路(算術回路、知識格納ニューロンなど)も必要。

Q: 削除すると何が壊れる? few-shot学習、文書の要約、コードの補完(特に繰り返しパターン)が著しく劣化する実験結果がある。

Q: RAGとの関係は? RAGで取得した文書をプロンプトに含めると効果的なのは、Induction Headsが文書内の[question][answer]パターンを活用するためと解釈される。

この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/1