Attention機構 — 「どこを見るか」を学習する
文の意味を理解するには、いま処理している単語から関係の深い単語へ視線を向ける必要があります。その「視線の配り方」自体を学習可能にしたのが Attention。Transformer と現代の LLM を支える最重要部品を、図書館のメタファーから数式まで一気に動かして理解します。
1. なぜ Attention が必要か — RNN のボトルネック
前レッスンまでの RNN は、文を左から右へ読みながら固定長の隠れ状態1本にすべてを詰め込みます。文が長くなるほど昔の情報は薄まり、「文頭の主語」と「文末の動詞」のような遠距離の関係が壊れていきます。
Attention の発想は大胆です — 詰め込むのをやめて、必要なときに全単語を直接見に行けばいい。各単語が他の全単語に「問い合わせ」をして、関係の深さに応じて情報を集める。距離1の単語も距離100の単語も、等しく1ステップで届きます。
2. 図書館で本を探す — Query・Key・Value
Attention の計算は3種類のベクトルで動きます。図書館にたとえると:
- Query(クエリ) — 探したい内容。「猫の気持ちが知りたい」という質問。
- Key(キー) — 各本の背表紙。検索に照合されるための見出し。
- Value(バリュー) — 各本の中身。実際に取り出される情報。
Query と各 Key の内積で「関係ありそう度」を測り、softmax で合計100%の注目度に変換し、その重みで Value を混ぜ合わせたものが出力です。下のデモをステップ実行してみてください。
3. 自分の文に注目する — Self-Attention
Self-Attention では、同じ文の全トークンがそれぞれ Q・K・V の3役を兼ねます。各トークンが Query となって文中の全トークン(Key)に問い合わせ、自分の意味表現を作り直す。これを可視化したのが attention 行列です。
左列のトークンをクリックしてみてください。特に「それ」や「彼女」のような代名詞を選ぶと、Attention が文中の指し先を見つける様子 — 照応解決 — が観察できます。
4. なぜ √d で割るのか — Scaled Dot-Product
Attention の式には √dk で割るという一見地味な操作が入っています。実はこれが学習の成否を分けます。d 次元のランダムなベクトル同士の内積は、分散が d に比例してどんどん大きくなる。巨大なスコアを softmax に入れると出力がほぼ one-hot に飽和し、勾配が消えて学習が止まってしまうのです。
5. まとめ
- RNN は固定長の記憶がボトルネック。Attention は全トークンへの直接参照で解決する。
- Query=質問、Key=見出し、Value=中身。内積 → softmax → 重み付き和の3段構え。
- Self-Attention は文中の全ペアの関係を n×n 行列として一度に並列計算する。
- √dk で割るのは softmax の飽和(=勾配消失)を防ぐため。