自然言語処理

自己注意機構(Self-Attention) じこちゅういきこう(せるふあてんしょん)

自己注意機構Self-AttentionTransformerアテンション大規模言語モデル文脈理解
自己注意機構(Self-Attention)について教えて

簡単に言うとこんな感じ!

「彼女はケーキを食べた。それはおいしかった」の「それ」が何を指すか——自己注意機構はこれを解決する仕組みだよ!文中の各単語が「自分と他の全単語の関連度(注意重み)」を計算することで、「それ=ケーキ」という文脈のつながりを捉えるんだ。GPTBERTの心臓部だよ!


自己注意機構(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²) × 並列
長い系列遅い・精度低下メモリが必要だが精度高い

関連用語