自己注意機構(Self-Attention) じこちゅういきこう(せるふあてんしょん)
自己注意機構Self-AttentionTransformerアテンション大規模言語モデル文脈理解
自己注意機構(Self-Attention)について教えて
自己注意機構(Self-Attention)とは
自己注意機構(Self-Attention) は、系列データの各要素が系列内の他のすべての要素との関連性(注意重み)を計算し、重み付き和として自分の表現を更新する機構です。2017年のTransformer論文「Attention Is All You Need」で核心技術として提案されました。
RNNが1ステップずつ順番に処理するのに対し、Self-Attentionは系列全体を一度に見てすべての位置間の関係を並列計算します。これにより「長距離の依存関係(文頭の単語と文末の単語の関係)」を1ステップで把握でき、かつGPU上での並列処理が可能になります。
Query(クエリ)・Key(キー)・Value(バリュー)の3つの行列に変換してアテンション重みを計算するQKV形式が特徴で、この設計がGPT・BERT・Claude・Geminiすべての大規模言語モデルの基盤となっています。
Self-Attentionの計算
各トークンを Q(質問), K(索引), V(内容)の3ベクトルに変換:
Q = X × W_Q
K = X × W_K
V = X × W_V
注意重みの計算(どのトークンに注目するか):
Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V
Q × K^T : QとKの内積(類似度スコア)
√d_k : スケーリング(次元数の平方根で除算)
softmax : 重みを確率に変換(合計=1)
× V : 注意重みでValueを重み付け和
import torch
import torch.nn as nn
class SelfAttention(nn.Module):
def __init__(self, d_model, n_heads):
super().__init__()
self.n_heads = n_heads
self.d_head = d_model // n_heads
# Q, K, V の線形変換
self.W_q = nn.Linear(d_model, d_model)
self.W_k = nn.Linear(d_model, d_model)
self.W_v = nn.Linear(d_model, d_model)
self.W_o = nn.Linear(d_model, d_model)
def forward(self, x):
Q = self.W_q(x)
K = self.W_k(x)
V = self.W_v(x)
# スケールドドット積アテンション
scores = torch.matmul(Q, K.transpose(-2, -1)) / (self.d_head ** 0.5)
attn = torch.softmax(scores, dim=-1)
return self.W_o(torch.matmul(attn, V))
歴史と背景
- 2015年:Bahdanauらがエンコーダデコーダ間のAttentionを提案(クロスアテンション)
- 2017年:Vaswaniら「Attention Is All You Need」でSelf-Attentionのみで構成されたTransformerを発表
- 2018年:BERT(双方向)・GPT(単方向)がSelf-Attentionを使いNLPのパラダイムシフト
- 現在:Claude・GPT-4・Geminiなどすべての主要LLMがSelf-Attentionを採用
Multi-Head Attentionとは
単一のSelf-Attentionではなく、複数のヘッド(異なるQ/K/V変換)を並列で実行して結合するのが「Multi-Head Attention」です。
| ヘッド数 | モデル規模 |
|---|---|
| 8ヘッド | BERT-base |
| 12ヘッド | GPT-2 |
| 16ヘッド | BERT-large |
| 96ヘッド | GPT-3 |
各ヘッドが異なる種類の関係(構文・意味・参照など)を学習します。
RNN vs Self-Attentionの比較
| 項目 | RNN (LSTM) | Self-Attention |
|---|---|---|
| 長距離依存関係 | 弱い(距離に反比例して減衰) | 強い(1ステップで全位置を参照) |
| 並列処理 | 不可能(逐次処理) | 可能(全位置を同時計算) |
| 計算量 | O(n) × ステップ | O(n²) × 並列 |
| 長い系列 | 遅い・精度低下 | メモリが必要だが精度高い |
関連用語
- 層正規化(Layer Normalization) — Self-Attentionとセットで使うAdd & Norm
- 残差接続(Residual Connection) — Transformerでattentionと組み合わせる構造
- Seq2Seq — Self-Attentionを使ったTransformerの応用
- 自己回帰モデル — GPT等のSelf-Attentionを使ったLLMの生成方式
- RNN(再帰型ニューラルネットワーク) — Self-Attentionが置き換えた系列処理モデル