統計ロードマップ
2026-04-29·実装·⏱ 約 4

Transformer の数学 ─ Attention は何を計算しているのか

Transformer の核 Self-Attention を、行列積と softmax だけで読み解く。Q・K・V の意味から multi-head までを段階的に説明します。

Transformer は今や LLM ・ Vision ・ 音声で標準アーキテクチャ。中核の Self-Attention を数式と実装で読み解きます。

全体像 ─ 1 つの式に集約

Q(query)・K(key)・V(value)は同じ入力 X から を掛けて作る。

ステップ 1 ─ Q ・ K ・ V を作る

💡 Q ・ K ・ V の意味

Q = 『質問』、K = 『鍵』、V = 『答え』。各トークンが質問を持ち、他のトークンの鍵と照合して、関連する答えを取り出す。

ステップ 2 ─ 類似度行列 QK^⊤

トークン同士の類似度行列(n × n)。要素 は『 番目のトークンが 番目をどれだけ気にすべきか』。

で割るのは、次元が大きいと内積が大きくなりすぎて softmax が飽和するのを防ぐため。

ステップ 3 ─ softmax で重みに

各行が 1 に正規化された attention 重み トークン がトークン に注目する割合。

ステップ 4 ─ V の加重平均

重み × value で 文脈に応じたトークン表現 が得られる。これが attention の出力。

PyTorch で実装

Self-Attention の最小実装
import torch
import torch.nn as nn
import torch.nn.functional as F

class SelfAttention(nn.Module):
    def __init__(self, d_model, d_k):
        super().__init__()
        self.W_q = nn.Linear(d_model, d_k)
        self.W_k = nn.Linear(d_model, d_k)
        self.W_v = nn.Linear(d_model, d_k)
        self.scale = d_k ** 0.5

    def forward(self, x):
        Q, K, V = self.W_q(x), self.W_k(x), self.W_v(x)
        S = (Q @ K.transpose(-2, -1)) / self.scale
        A = F.softmax(S, dim=-1)
        return A @ V

# テスト
attn = SelfAttention(d_model=64, d_k=64)
x = torch.randn(2, 10, 64)  # batch=2, seq=10, dim=64
z = attn(x)
print(z.shape)  # torch.Size([2, 10, 64])

Multi-Head Attention

1 つの attention だけだと観点が単一。h 個の attention を並列実行 → 結合 することで、複数視点を同時に獲得します。

  • 各 head は独立した を持つ
  • head ごとに
  • GPT-3 や BERT は 12〜96 head

なぜ Transformer が強いか

  • 並列計算: RNN と違い時系列を一気に処理
  • 長距離依存: どの位置のトークンとも 1 step で関係付け
  • 柔軟性: 言語 ・ 画像 ・ 音声で同じアーキテクチャ

次のステップ

  • [線形代数を AI 視点で](/blog/linear-algebra-for-ai)
  • [E 資格 教科書](/certs/e-shikaku/textbook) ─ Transformer 関連の問題
  • [scikit-learn 入門](/blog/sklearn-introduction)
  • [AIエンジニア・ロードマップ](/roadmap)
Related Articles

関連記事