A
AIエージェントの仕組み
ch3-s3 · Attention Mechanism

Attention 機構

約 15 分

この回のゴール

1. 前回の限界と動機

前回の埋め込みは「1 単語 = 1 ベクトル」で 静的 でした。

「その銀行から 100m 先の銀行に行く」

この文で最初の「銀行」と 2 番目の「銀行」は全く違う意味の可能性(川岸 vs 銀行)。同じ単語でも文脈次第で意味が変わる

👉 各単語の表現を 文脈に応じて動的に 作り替えたい。そのために「文中の他の単語のうち、どれにどれだけ注目するか」を決める仕組みが Attention です。

2. 人間の直感的な理解

「彼女はそのリンゴを食べた、なぜなら それ が熟れていたから」

「それ」 が何を指すか → 周囲の単語をスキャンして「リンゴ」に注目する。この「どの単語にどれだけ注目するか」を数式で定式化したのが Attention。

3. Q, K, V: 情報検索のメタファー

Attention は ソフトな情報検索 と見なせます:

記号 役割 検索システムで言うと
Query (Q) 「何を探しているか」 検索クエリ
Key (K) 「各候補が持つ索引」 各文書のタグ
Value (V) 「各候補の中身」 各文書の本文

各単語は 3 つのベクトルを持つ:

$$ Q = X W^Q, \quad K = X W^K, \quad V = X W^V $$

ここで $X$ は入力埋め込み、$W^Q, W^K, W^V$ は学習される重み行列。

4. Scaled Dot-Product Attention

核心の式 (論文 "Attention is All You Need" より):

$$ \text{Attention}(Q, K, V) = \text{softmax}\left( \frac{Q K^\top}{\sqrt{d_k}} \right) V $$

これを分解すると:

ステップ 1: 関連度スコア

$$ S = Q K^\top $$

各クエリ(行)と各キー(列)の内積 → どれくらい似ているか のスコア行列。

ステップ 2: スケーリング

$$ S' = S / \sqrt{d_k} $$

$d_k$ は key の次元。次元が大きいと内積も大きくなり、softmax が極端になる。$\sqrt{d_k}$ で割って安定化。

ステップ 3: Softmax で確率化

$$ A = \text{softmax}(S') $$

各行が「どの単語にどれだけ注目するか」の確率分布(合計 1)。

ステップ 4: Value の加重和

$$ \text{出力} = A V $$

各クエリごとに、Value を注目重みで足し合わせる。結果として 文脈を取り込んだ新しい表現 ができる。

5. Causal Mask — GPT 系の工夫

GPT 系(自己回帰モデル)は「次の単語を予測」するので、未来の単語を見てはいけない。softmax の前に 未来の位置を $-\infty$ に置換:

$$ S'{ij} = \begin{cases} S'{ij} & i \ge j \ -\infty & i < j \end{cases} $$

これで「過去の単語にしか注目できない」状態になる。

6. Multi-Head Attention

1 つの Attention だけでは「文法」「意味」「長距離依存」など 複数の関係 を同時に扱えない。 👉 複数の Attention を並列 に走らせる:

$$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) W^O $$

各ヘッドは別々の $W^Q, W^K, W^V$ を持ち、別々の関係性 を学習する。

可視化すると Head 1 は構文(主語-動詞)、Head 2 は指示語の解決、Head 3 は長距離の文脈、のように ヘッドごとに異なる役割 を担います。

7. 計算量と文脈長の限界

Attention の計算量は系列長 $N$ に対して $O(N^2)$($QK^\top$ が $N \times N$)。

👉 これが コンテキスト長が伸ばせない本質的な理由。Claude 4 (200K tokens) でさえ、内部では FlashAttention、sparse attention など様々な効率化を組み合わせています。


まとめ

この回の限界(次への動機)

Attention 単体は 1 回の情報集約 しかできません。実用 LLM では何十層も重ねます。 👉 次回「Transformer の全体像」で、Attention + FFN + 残差 + LayerNorm + 位置エンコーディング を組み合わせた 完全なブロック構造 を学びます。

参考文献

📝 理解度クイズ (3 問) 💡 ログインすると進捗が保存されます

💬 このサブステップの Q&A

まだ質問はありません。最初の質問を投稿してみましょう。

質問の投稿にはログインが必要です。