一文要約: 行列積は単なる「行×列」ではありません。線形写像を適用し、多数の内積を一括計算できます。そして内積そのものは、角度と投影から理解できます。
8.1 なぜAttentionの前にこれを学ぶのか
Attentionは行列積で満ちています。これを「行と列の掛け算」としてだけ捉えていると、QKVの仕組みは記号操作にしか見えません。幾何学として捉えれば、アーキテクチャ全体が腑に落ちます。
Transformer内で行列積が登場する場所を地図にすると、次のとおりです。
- Embeddingの参照(通常はindexing。one-hotベクトル × embedding表と等価)
- Attention内のQ、K、Vの投影行列
- FFNの拡張層と縮小層
- 最終的な語彙への投影(LM Head)
学習される投影には、行列積があらゆる場所に現れます。 LayerNormとSoftmaxは別の演算ですが、行列積を幾何学的に理解することは、第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層は通常、表の1行をindexingで取り出します。token IDをone-hotベクトルで表せば、同じ参照はembedding表との行列積としても書けます。
- Q、K、Vの重み行列は
d_model次元のベクトルを別のd_model(またはd_key)次元空間へと移し、異なる側面を強調します。 - FFNの拡張層はベクトルを
d_modelから4 × d_modelの空間へ移します。
線形変換がいたるところに現れるのは、同じデータを異なる「視点」から見たベクトル同士を比較することこそ、モデルが学習する内容だからです。
8.5 幾何学的意味: ベクトル空間
ここからがAttentionを腑に落とすための本題です。
8.5.1 3次元空間における単語ベクトル
手作りの小さな3次元空間を用意し、4つのベクトルで幾何学を見てみましょう。
cat = [7, 7, 6]
fish = [6, 4, 5]
love = [-4, -2, 1]
eat = [6, 5, 7]
これを原点から伸びる矢印として3次元空間にプロットします。
catとfishはおおむね同じ方向を指します。loveは大きく異なる方向を指します。
この数値は図を描きやすくするために選んだもので、実モデルの測定値ではありません。実際のトークン表現は文脈やレイヤーで変わります。方向の構造が意味情報を担うことはありますが、この玩具図だけで2語が必ず近いとは断言できません。
8.5.2 行列積で内積を一括計算する
n 個のベクトルを X の行として積み、1回の行列積ですべてのペアの内積を求めます。
X [n, d] @ X.T [d, n] = S [n, n]
S[i,j] はベクトル i と j の内積です。上の玩具値なら、cat · fish = 100、love · fish = -27、eat · fish = 91 です。
内積は方向だけでなく、ベクトルの大きさにも左右されます。学習された適合度スコアとして使えますが、純粋なコサイン類似度ではありません。Attentionで行列積が現れる理由はここにあります。QKᵀ がすべてのQuery-Keyペアのスコアを一度に計算します。
8.5.3 d_model 次元
d_model は、各トークンの表現が持つ次元数です。
| モデル | d_model |
|---|---|
| GPT-2 Small | 768 |
| GPT-2 Large | 1,280 |
| GPT-3 | 12,288 |
| Llama 2 7B | 4,096 |
次元数が多いほど、一般には表現容量が増えます。区別を符号化できる「方向」が増えるからです。ただしモデルが自動的によくなる保証ではなく、重み行列と計算量は大きくなります。
8.6 内積とコサイン類似度
8.6.1 ベクトル間の角度
内積はベクトル間の角度と次の式で結ばれています。
これを変形すると:
ここで:
|A|はベクトルAの長さ(大きさ)。|B|はベクトルBの長さ。θは両者のなす角度。
8.6.2 幾何学的な直観
| 状況 | cos(θ) | 内積 | 解釈 |
|---|---|---|---|
| 同じ方向 | 1 | 正値 (` | A |
| 90°開く | 0 | 0 | 幾何学的に直交 |
| 反対方向 | -1 | 負値 (`- | A |
これで内積の幾何学的な読み方が見えます。内積は方向の一致度とベクトルの大きさを組み合わせます。コサイン類似度は大きさを取り除き、角度だけを残します。なお、直交が自動的に「意味的に無関係」、逆向きが自動的に「反義語」を意味するわけではありません。
8.6.3 具体例
A = [3, 5]
B = [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で、ほぼ平行です。特定の単語のembeddingを測った値ではありません。
8.6.4 これがAttentionの核心
Attentionにおいて:
- Queryベクトルは「私は何を探しているか」を尋ねます。
- Keyベクトルは「私はこれを持っている」と答えます。
- 両者の内積は、QueryとKeyの学習された適合度スコアを与えます。
1つのQueryについて、maskされていないKeyの相対スコアが高ければ、縮尺調整とSoftmaxのあとでattention重みも通常は高くなります。
Attentionは内積でQuery-Keyの適合度を採点します。 QとKの長さでは正規化しないので、これはコサイン類似度ではありません。
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| × 符号付きスカラー投影に等しくなります。投影ベクトルそのものは次式です。
proj_A(B) = (A · B / |A|²) A
8.7.3 言語にとってなぜ重要か
訓練されたモデルでは、QとKへの投影そのものが学習されます。ある方向がタスクに役立つことはあっても、通常は「王権」や「抽象度」ときれいに名札の付いた単独の座標軸があるわけではありません。投影は式を理解するための幾何学的直観であり、1つのニューロンや次元へ人間の概念をそのまま割り当てる根拠ではありません。
8.8 Attentionへの接続
8.8.1 Attentionの式のプレビュー
Attentionの中核(詳細は第9章で扱います):
QK^T は、すべてのQueryとKeyの内積を同時に計算します。結果は適合度スコアの行列です。M はcausal maskまたはpadding maskで、許可する位置には0、遮断する位置にはSoftmaxの前に負の無限大を加えます。
8.8.2 Q、K、Vを幾何学的に読む
Q = X W_Q
K = X W_K
V = X W_V
これは、入力 X を3つの 学習された幾何学的レンズ で見る、と読めます。W_Q、W_K、W_V は同じ入力表現を、役割の異なるベクトルへ写します。
W_Qは「私は何を探しているか」の空間に投影します。W_Kは「私は何を広告しているか」の空間に投影します。W_Vは「私はどんな情報を提供するか」の空間に投影します。
QとKの内積が学習された適合度スコアになります。√d_k で割り、maskを加え、Softmaxを通したあと、相対スコアが大きいほどそのトークンのValueが出力に強く混ざります。
8.8.3 幾何学的な読み方のまとめ
| 数学 | 幾何学的意味 | Attentionでの役割 |
|---|---|---|
A · B | 大きさを含む方向の一致 / 投影 | Query-Keyの適合度を採点する |
行列積 AB | 内積を一括計算 | すべてのペアワイズスコアを一度に求める |
| Softmax | 指数正規化 | 各行を合計1の重みに変換 |
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ペアを採点し、縮尺調整・mask・正規化を経て重みにします。
章のチェックリスト
この章を終えたあと、あなたは次のことができるはずです。
- 行列積の次元のルールを述べ、小さな例を手で計算する。
- 内積をベクトルの方向の一致度の尺度として説明する。
- 投影を平易な言葉で説明する。あるベクトルが他方の方向にどれだけあるか。
- すべてのQuery-Keyペアの適合度スコアを計算するのに、なぜ行列積が適しているかを説明する。
- 内積をAttention内部のQuery-Key一致と結びつけて説明する。
次の章でお会いしましょう
これが幾何学です。2本の矢印を描き、内積が角度と長さの両方に依存することを説明し、その相対スコアが縮尺調整・mask・Softmaxを通って重みになるまで追えれば、第9章の準備は整っています。
第9章ではループを閉じます。幾何学的直観と実際のAttentionの式を組み合わせ、attention heatmapが何を明かすのかを観察し、なぜ他の類似度尺度ではなく内積が標準となったのか、その理由に答えます。
ここまでお疲れさまでした。次章でまたお会いしましょう。