AIの心臓部「アテンション(Attention)」を数値で理解する
投稿日: 2025年8月20日 | 著者: 月影
GPTやBERTの驚異的な能力を支える「アテンション機構」。なんとなく「重要な単語に注目する」と理解していても、その内部でどのような計算が行われているのかを掴むのは容易ではありません。
この記事では、「オリジナルカクテル作り」という比喩と、具体的な計算ステップを通じて、アテンションの仕組みをスッキリと解き明かします。
アテンションの計算プロセス:自己アテンション編
文「猫がマットに座る」において、「座る」の文脈をどう理解するかを追います。これは、座る主体(主語)、座るのはどこかを調べようとするものです。
【専門的な補足】「文脈の理解」とは「主語の特定」のこと?
アテンションが「座る」の文脈を理解するプロセスは、言語学的な「動作の主体(主語)を特定する」作業を、数学的な重み付けとして実行していると言い換えられます。
1. 情報の引き寄せ(情報のブレンド)
「座る(Query)」が「猫(Key)」と強くマッチすることで、計算後の「座る」ベクトルの中には「猫(動物、生物、四足歩行)」という情報が流れ込みます。これにより、単なる抽象的な動作だった「座る」が、この文における『猫の座り方』という具体的な意味に固定されます。
2. 主語以外の周辺情報
アテンションの強力な点は、主語だけでなく「場所(マット)」や「様態(静かに)」といった情報も同時に、グラデーションを持って引き寄せられる点にあります。
| 注目対象 | もたらされる文脈情報 |
|---|---|
| 猫 (主語) | 「誰が」座るのか(動作主の特定) |
| マット (場所) | 「どこに」座るのか(接地感・環境の付与) |
つまり、Transformerにとっての「理解」とは、文中の全単語からエッセンスを抽出し、その時限りの「専用の単語定義」を動的に作り直す作業なのです。
猫:[1, 5] / マット:[6, 1] / 座る:[3, 3]
※ここでの数値は、計算の仕組みを分かりやすく説明するための仮の値です。実際のAIでは数百次元の複雑な数値(分散表現)が使われますが、本質的な計算のプロセスは同じです。
Step 1: 3つの役割(Q, K, V)への変換各単語のベクトルに専用の行列を掛け、3つの役割を持った「新しいベクトル」を作ります。
k_猫 = [1, 5] × Wk = [1, 15] (Key)
k_マット = [6, 1] × Wk = [6, 3] (Key)
v_猫 = [1, 5] × Wv = [16, 22] (Value)
v_マット = [6, 1] × Wv = [9, 16] (Value)
内積によってQueryと各Keyの「近さ」を測ります。
score_マット: (6 * 6) + (6 * 3) = 54
ソフトマックス関数で合計1の割合に変換します。
重み結果 ➡ 猫: 98.5% / マット: 1.5%
Step 4: 情報のブレンド重みに従ってValue(意味の本体)を混ぜ合わせます。
💡 なぜこの数値が「猫がマットの上で」を意味するの?
計算結果の [15.895, 21.91] は、元の v_猫 [16, 22] に極めて近い数値です。
- 「主に猫が」: 重みの98.5%が猫であるため、出力ベクトルの情報のほとんどが「猫」のエッセンスで占められています。
- 「マットの上で」: 残り1.5%の「マット」の情報が微量に混ざることで、場所の文脈がうっすらと付け加えられています。
このように、アテンションは単語を「重みに従って混ぜ合わせる」ことで、文脈を反映した新しい意味を合成しているのです。
デコーダーでの応用:マスクとクロスアテンション
1. マスク付き自己アテンション ✍️
翻訳中、AIはまだ生成していない未来の単語(例:「sits」(座るのは何か?)の後の単語)をカンニングできません。
未来の単語をマスク(⛔) することで、過去の情報だけに基づいた正しい推論を強制します。
2. クロスアテンション 🕵️♂️➡️✍️
翻訳器のデコーダー(英語側)が、エンコーダー(日本語側)の読解メモを参照するステップです。
デコーダーのQueryが日本語のKeyを検索し、「今、日本語のどの単語を訳すべきか?」を動的に判断します。