アテンション機構とTransformerの数学
ChatGPTやLLMの心臓部 — Query・Key・Valueの内積とSoftmaxによる文脈理解
- 1
- Transformerの革新は『単語と単語の関連度(注意スコア)』を内積計算で瞬時に求めるSelf-Attention機構にある
- 2
- Query(問い合わせベクトル)とKey(索引ベクトル)の内積を取り、ルート次元数で割ってSoftmaxにかけることで重み付き確率を算出
- 3
- 算出したアテンション重みでValue(意味ベクトル)を重み付き加算し、前後の文脈がブレンドされた高精度な単語表現を生成する
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
ChatGPTやClaude、Geminiなどの生成AIがなぜ人間のように自然な文章を読み書きできるのか。その中核は複雑な魔術ではなく、高校〜大学初年級で習う『ベクトルの内積』と『Softmax(正規化指数関数)』の組み合わせです。
身につく武器・思考力
最新AI(LLM)の理論基盤の理解、高次元ベクトル空間と行列積の直感的センス、AIエンジニアリングの実装力
実社会・ITでの活躍現場
- •ChatGPT・Claude等の大規模言語モデル(LLM)の基幹アーキテクチャ
- •Vision Transformer(ViT)による画像認識・医療画像診断
- •タンパク質構造予測AI(AlphaFold2)におけるアミノ酸配列の相互作用解析
- •音声認識・リアルタイム多言語機械翻訳モデル(Whisper等)
Layer 1 — 直感・シミュレーター
例文の各単語(Query)をクリックすると、他のどの単語(Key)に対してどれだけの注意(アテンション重み)を向けているかがヒートマップと接続線で可視化されます。ベクトルの類似度(内積スコア)がSoftmaxによって合計1.0の確率分布に変換される様子を観察しましょう。
「it」は何を指している? 単語をタップしてAIの「注意(アテンション)」を覗き見よう
AIは文中のすべての単語同士の内積を総当たり計算($QK^T$)し、文脈上の結びつきの強さをSoftmax確率として算出します。 特に「it(それ)」をタップすると、「animal(動物)」へ極めて強いアテンションが注がれていることが分かります。
Score = Q · K / √d_k
QueryベクトルとKeyベクトルの角度(コサイン類似度)を掛け算し、単語同士の関連度を抽出。
Weight = exp(S_i) / Σexp(S_j)
内積スコアを指数関数に入れ、合計が1.0(100%)になる確率分布に変換。
Output = Σ (Weight_i × V_i)
注意の強さに応じて各単語の意味(Value)を合成し、文脈を含んだ新たなベクトルを完成。
TransformerのScaled Dot-Product Attentionで、内積スコアを で割る最も重要な数学的・工学的理由はどれ?
Layer 2 — 定義・受験・証明
定義
**Scaled Dot-Product Attention(縮小付きドット積アテンション)**とは、入力された一連の単語トークンに対して、それぞれ3つの変換行列によって Query (), Key (), Value () を生成し、以下の数式によって文脈を考慮した新たなベクトル表現を出力する機構である。
公式・数理モデル
証明・導出
**なぜ で割るのか?(スケーリングの数学的理由)**
もし と の各要素が平均 、分散 の独立な確率変数であると仮定すると、次元数 のベクトルの内積 は平均 、分散 となる。
が大きくなると(例: 64や128)、内積の値が非常に大きな正または負の値をとる。これをそのまま に入力すると、勾配(微分値)が極めて小さくなる『勾配消失問題』が発生し、ニューラルネットワークの学習が停止してしまう。
そこで標準偏差である で割ることで、分散を常に に正規化し、安定した勾配計算を維持している。
押さえておきたいポイント
- Query(何を探しているか)と Key(何の情報を持っているか)の内積が単語同士の『関連度』を表す
- Softmax関数を通すことで、関連度が『合計100%の確率分布(アテンション重み)』に変換される
- Multi-Head Attentionでは、複数の視点(構文関係、代名詞の指示関係、感情など)を並列に学習する
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
PyTorchによるScaled Dot-Product Attentionのミニマム実装
大規模言語モデルの根幹をなすアテンション計算のPython/PyTorchコード例です。
1import torch2import torch.nn.functional as F3import math45def scaled_dot_product_attention(Q, K, V, mask=None):6 """7 Q: [batch_size, seq_len, d_k]8 K: [batch_size, seq_len, d_k]9 V: [batch_size, seq_len, d_v]10 """11 d_k = Q.size(-1)1213 # 1. QとKの転置の内積を計算: [seq_len, seq_len]14 scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k)1516 if mask is not None:17 scores = scores.masked_fill(mask == 0, -1e9)1819 # 2. Softmaxで正規化(合計1.0のアテンション重み)20 attention_weights = F.softmax(scores, dim=-1)2122 # 3. Valueの重み付き加算23 output = torch.matmul(attention_weights, V)24 return output, attention_weights
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元
数理モデル・概念が近い関連トピック
損失関数の地形(Loss Landscape)とオプティマイザの数理
AIはなぜ谷底へ辿り着けるのか? — SGD・Momentum・Adamの鞍点脱出と多変数微分