一文要約: 行列積には幾何学的な意味があります。それは「ベクトルの投影」です。これが見えるようになると、Attentionの中核にある内積はもはや謎ではなくなります。
8.1 なぜAttentionの前にこれを学ぶのか
Attentionは行列積で満ちています。これを「行と列の掛け算」としてだけ捉えていると、QKVの仕組みは記号操作にしか見えません。幾何学として捉えれば、アーキテクチャ全体が腑に落ちます。
Transformer内で行列積が登場する場所を地図にすると、次のとおりです。
- Embeddingの参照(token ID → d_model次元のベクトル)
- Attention内のQ、K、Vの投影行列
- FFNの拡張層と縮小層
- 最終的な語彙への投影(LM Head)
行列積はあらゆる場所に現れます。 これを幾何学的に理解することは、第9章に進む前にできる最もレバレッジの高い投資です。
8.2 スカラー、ベクトル、行列
先に進む前に、用語を整理しておきましょう。
8.2.1 スカラー
スカラーとは1つの数です。
5
温度、学習率、ある位置のAttentionスコア。これらはすべてスカラーです。
8.2.2 ベクトル
ベクトルとは順序付きの数のリストです。
[3, 2, 9, 84]
ベクトルはほとんど何でも表現できます。3次元位置 [x, y, z]、RGB色 [255, 128, 0]、あるいは4096次元空間でのトークンの意味表現。重要な性質は、順序が意味を持つ ことです。
8.2.3 行列
行列とは数の2次元の表です。
3 × 4 行列:
┌─────────────────┐
│ □ □ □ □ │
│ □ □ □ □ │
│ □ □ □ □ │
└─────────────────┘
行列は行ベクトルを縦に積み重ねたものとも、列ベクトルの集まりとも見ることができます。
8.2.4 Transformerにおいて
| 対象 | 例 |
|---|---|
| スカラー | 学習率、温度、1つのAttentionスコア |
| ベクトル | 1トークンのembedding(形状: [d_model]) |
| 行列 | 全トークンのembeddingをまとめたもの(形状: [seq_len, d_model])、あるいは重み行列 [d_model, d_model] |
Transformerを流れていくトークンの表現は、形状 [seq_len, d_model] の行列です。1行が1トークン、1列が1つの特徴次元に対応します。
8.3 行列積: 計算の手順
8.3.1 次元のルール
行列積の次元のルールは次のとおりです。
[A, B] × [B, C] = [A, C]
内側の次元(両方の B)が一致しなければなりません。出力の形状は外側の2つの次元になります。
8.3.2 計算例
[4, 3] × [3, 4] の積を計算してみましょう。結果は [4, 4] です。
結果の最初の要素(0行0列)は次のように求めます。
左行列の0行目: [0.2, 0.4, 0.5]
右行列の0列目: [2, 1, 7]
内積: 0.2×2 + 0.4×1 + 0.5×7
= 0.4 + 0.4 + 3.5
= 4.3
基本演算は 内積 です。対応する要素を掛けて足し合わせます。
Python/NumPy/PyTorchではこう書きます。
C = A @ B # @ は行列積の演算子
8.3.3 なぜ「内積」と呼ぶのか
この呼び名は数学記法 A · B に由来します。同じ長さの2つのベクトルに対して:
A · B = a₁b₁ + a₂b₂ + a₃b₃ + ... + aₙbₙ
行列積とは、こうした内積をたくさんグリッド状に並べたものに過ぎません。
8.4 同じ演算を見る2つの視点
同じ演算には、便利な2つの捉え方があります。
8.4.1 視点その1: 内積(行列 × 行列)
[4, 3] × [3, 4] = [4, 4]
2つの行列を掛け合わせます。出力の各要素は、左行列のある行と右行列のある列との内積です。
この視点は、両方の被演算子がデータであるとき、たとえばトークンベクトル間のすべてのペアワイズ類似度を計算するときに役立ちます。
8.4.2 視点その2: 線形変換(行列 × ベクトル)
[4, 3] × [3, 1] = [4, 1]
重み行列が1つのベクトルを変換します。入力次元は3から4に変わります。
この視点は、片方がデータでもう片方が学習済みの重み行列であるときに役立ちます。重み行列はベクトル空間に対する学習された変換を定義します。
8.4.3 線形変換の直観
「線形変換」というと専門的に聞こえますが、幾何学的な発想は単純です。
重み行列はベクトルをある空間から別の空間へと移します。次元を変えたり、回転させたり、伸縮させたり、低い次元へと投影したりします。
Transformerにおいては:
- Embedding表は token ID(整数)を
d_model次元の空間へ写像します。 - Q、K、Vの重み行列は
d_model次元のベクトルを別のd_model(またはd_key)次元空間へと移し、異なる側面を強調します。 - FFNの拡張層はベクトルを
d_modelから4 × d_modelの空間へ移します。
線形変換がいたるところに現れるのは、同じデータを異なる「視点」から見たベクトル同士を比較することこそ、モデルが学習する内容だからです。
8.5 幾何学的意味: ベクトル空間
ここからがAttentionを腑に落とすための本題です。
8.5.1 3次元空間における単語ベクトル
3つのトークンしかない簡略化した語彙を考え、それぞれを3次元ベクトルで表します。
cat = [7, 7, 6]
fish = [6, 4, 5]
love = [-4, -2, 1]
これを原点から伸びる矢印として3次元空間にプロットします。
catとfishはおおむね同じ方向を指します。どちらも具体的な名詞です。loveは大きく異なる方向を指します。抽象的な動詞だからです。
この方向の類似性には意味があります。モデルは意味的に関連するトークンが似た方向に並ぶように学習します。
8.5.2 行列積は類似度を計算する
トークン全体の行列を1つのベクトルに掛けたとき、何が起きるかを見てみましょう。
トークン行列 [n, d] @ クエリベクトル [d, 1] = 類似度スコア [n, 1]
出力の各要素は、あるトークンのベクトルとクエリとの内積です。内積は2つのベクトルが似た方向を指しているとき大きく、反対方向を指しているとき小さく(あるいは負に)なります。
具体例として、3つのトークンをクエリトークン "PR" に対してスコアリングしてみます。
| トークンのペア | 内積スコア | 解釈 |
|---|---|---|
agent · PR | 100 | 高い類似度 — どちらもコードレビューの中心 |
merged · PR | 100 | 高い類似度 — マージはPRに対する直接の操作 |
playlist · PR | 22 | 低い類似度 — 領域が異なる |
これらの方向はモデルが訓練を通じて学んだものです。数値は手で書き込んだのではなく、agent、merged、PR がよく一緒に現れ、playlist はそうではない、というテキストへの暴露から立ち上がってきます。
これが、Attention内部で行列積が現れる理由です。1回の演算で、トークン間の全ペアワイズ類似度を計算できるのです。
8.5.3 d_model 次元
d_model は、各トークンの表現が持つ次元数です。
| モデル | d_model |
|---|---|
| GPT-2 Small | 768 |
| GPT-2 Large | 1,280 |
| GPT-3 | 12,288 |
| LLaMA-7B | 4,096 |
次元数が多いほど表現は豊かになります。区別を符号化できる「方向」が増えるからです。一方で重み行列も大きくなり、計算量も増加します。
8.6 内積はコサイン類似度
8.6.1 ベクトル間の角度
内積はベクトル間の角度と次の式で結ばれています。
これを変形すると:
ここで:
|A|はベクトルAの長さ(大きさ)。|B|はベクトルBの長さ。θは両者のなす角度。
8.6.2 幾何学的な直観
| 状況 | cos(θ) | 内積 | 解釈 |
|---|---|---|---|
| 同じ方向 | ≈ 1 | 大きな正値 | きわめて類似 |
| 90°開く | 0 | ≈ 0 | 無関係 |
| 反対方向 | -1 | 負値 | 対立 |
これによって内積の幾何学的な読み方がはっきりします。内積は2つのベクトルが方向としてどれだけ一致しているかを測るのです。
8.6.3 具体例
A = "this" = [3, 5]
B = "a" = [1, 4]
計算します:
A · B = 3×1 + 5×4 = 3 + 20 = 23
|A| = √(9 + 25) = √34 ≈ 5.83
|B| = √(1 + 16) = √17 ≈ 4.12
cos(θ) = 23 / (5.83 × 4.12) ≈ 23 / 24.0 ≈ 0.96
この2つのベクトルのコサイン類似度は0.96。ほぼ平行で、非常に似ています。
8.6.4 これがAttentionの核心
Attentionにおいて:
- Queryベクトルは「私は何を探しているか」を尋ねます。
- Keyベクトルは「私はこれを持っている」と答えます。
- 両者の内積は、Queryの問いとKeyの広告がどれだけ合うかを測ります。
内積が大きい → 類似度が高い → Softmaxを通したあとのattention重みが大きくなる。
Attentionとは、学習されたベクトル表現に対する内積による類似度計算そのものです。 残りはすべて、この発想の周りにあるエンジニアリングに過ぎません。
8.7 投影: もう1つの幾何学的な見方
8.7.1 投影とは何か
内積にはもう1つ幾何学的な解釈があります。それが 投影 です。
A · B = |A| × (BをAの方向へ投影した影の長さ)
あるいは同じことを別の言い方で:
A · B = |B| × (AをBの方向へ投影した影の長さ)
投影は次のように問いかけます。あるベクトルの「中身」のうち、どれだけが別のベクトルの方向にあるか?
8.7.2 投影のイメージ
2次元の素描で考えます。
- ベクトルA(赤い矢印)を描く。
- ベクトルB(青い矢印)を描く。
- Bの先端からAの直線に垂線を下ろす。
- 原点から垂線の足までの長さがBのAへの投影です。
内積はこの |A| × 投影の長さに等しくなります。
8.7.3 言語にとってなぜ重要か
高次元のトークン空間では:
- 「king」と「monarchy」は互いに大きく投影し合います。「王権」という成分を強く共有しているからです。
- 「king」と「algorithm」の投影は小さい。共有する成分がほとんどないからです。
モデルには「王権」や「抽象度」とラベル付けされた次元が明示的にあるわけではありません。訓練データから、こうした区別を捉える方向を空間内に学んでいくのです。行列積、すなわち内積こそが、その学ばれた方向への一致度を測る道具なのです。
8.8 Attentionへの接続
8.8.1 Attentionの式のプレビュー
Attentionの中核(詳細は第9章で扱います):
QK^T の項は行列積です。これによってすべてのQueryベクトルとすべてのKeyベクトルとの内積が同時に計算されます。結果は類似度スコアの行列になります。
8.8.2 Q、K、Vを幾何学的に読む
Q = X WQ
K = X WK
V = X WV
これは次のように読めます。入力 X を3つの 学習された幾何学的レンズ で覗き込むのだ、と。各投影行列 WQ、WK、WV は同じデータを回転させ伸縮させ、別の座標系へ移します。
WQは「私は何を探しているか」の空間に投影します。WKは「私は何を広告しているか」の空間に投影します。WVは「私はどんな情報を提供するか」の空間に投影します。
QとKのベクトルの内積は、これら2つの投影空間の間の一致度を測ります。一致度が高い → attention重みが高い → そのトークンのValueがより多く出力に混ざります。
8.8.3 幾何学的な読み方のまとめ
| 数学 | 幾何学的意味 | Attentionでの役割 |
|---|---|---|
A · B | 類似度 / 投影 | Query-Keyの一致を測る |
行列積 AB | 内積を一括計算 | すべてのペアワイズスコアを一度に求める |
| Softmax | 確率に正規化 | スコアを重みに変換 |
8.9 章のまとめ
8.9.1 重要な概念
| 概念 | 意味 |
|---|---|
| スカラー | 1つの数 |
| ベクトル | 順序付きの数のリスト。点や方向を表す |
| 行列 | 2次元の表。変換やベクトルの集まりを表す |
| 内積 | 要素ごとの積の総和。ベクトルの方向の一致度を測る |
| 線形変換 | 重み行列でベクトルを回転、伸縮、投影すること |
| コサイン類似度 | ベクトルの長さで正規化した内積。純粋な角度の指標 |
| 投影 | あるベクトルが他方の方向にどれだけあるか |
8.9.2 重要な式
内積:
A · B = a₁b₁ + a₂b₂ + ... + aₙbₙ
コサイン類似度:
BのAへの投影:
A · B = |A| × (BをAに投影した長さ)
行列積の次元のルール:
[A, B] × [B, C] = [A, C]
8.9.3 核心となる学び
行列積は抽象的な記号操作ではありません。幾何学的に見れば、2つのベクトルがどれだけ同じ方向を指しているかを測る演算です。Attentionはこれをそのまま使います。QueryベクトルとKeyベクトルの内積は、両者が「合致しているか」を語ります。合致度が高ければattention重みも高い。発想はそれだけです。
章のチェックリスト
この章を終えたあと、あなたは次のことができるはずです。
- 行列積の次元のルールを述べ、小さな例を手で計算する。
- 内積をベクトルの方向の一致度の尺度として説明する。
- 投影を平易な言葉で説明する。あるベクトルが他方の方向にどれだけあるか。
- トークンベクトル間のすべてのペアワイズ類似度を計算するのに、なぜ行列積が正しい道具なのかを説明する。
- 内積をAttention内部のQuery-Key一致と結びつけて説明する。
次の章でお会いしましょう
これが幾何学です。2本の矢印を描いて「両者の内積は大きい」と言い、それがなぜattention重みの高さにつながるのかを説明できるのなら、もう第9章の準備は整っています。
第9章ではループを閉じます。幾何学的直観と実際のAttentionの式を組み合わせ、attention heatmapが何を明かすのかを観察し、なぜ他の類似度尺度ではなく内積が標準となったのか、その理由に答えます。
ここまでお疲れさまでした。次章でまたお会いしましょう。