AI・機械学習
上級

Self-Attention(自己注意機構)(セルフアテンション)

Transformerアーキテクチャの中核をなす機構で、入力シーケンス内の各トークンが他の全トークンとの関連度(Attention Weight)を計算し、文脈に応じた表現を動的に生成する仕組み。Query・Key・Valueの3つの射影行列を用いて計算される。

0 回閲覧
0 いいね

Self-Attention(自己注意機構)とは

Self-Attention(自己注意機構)は、Transformerモデルの根幹をなす計算機構です。入力シーケンス内の各トークンが、同じシーケンス内の他の全トークンとの関連性を動的に計算し、文脈を反映した表現ベクトルを生成します。2017年のGoogle論文「Attention Is All You Need」で提案されて以来、GPT-4o・Claude 4・Gemini 2.5など現代のLLMすべてがこの機構に基づいています。

計算の仕組み

Query・Key・Valueの3要素

Self-Attentionは各トークンの入力ベクトルを3つの異なる線形変換で射影します。

要素役割直感的な比喩
Query (Q)「何を知りたいか」を表す検索エンジンに入力するクエリ
Key (K)「どんな情報を持っているか」を表す文書のインデックスキー
Value (V)「実際の情報内容」を表す文書の本文

計算手順

  1. 入力ベクトル X に対し、重み行列 W_Q, W_K, W_V をそれぞれ乗算して Q, K, V を生成
  2. Q と K の転置行列の内積を計算(各トークンペア間のスコア)
  3. スコアを √d_k(Key の次元数の平方根)で割ってスケーリング
  4. Softmax関数で正規化し、Attention Weight(注意重み)を得る
  5. Attention Weight と V の行列積で最終出力を計算

数式で表すと: Attention(Q, K, V) = softmax(QK^T / √d_k) V

スケーリングの理由

d_k が大きいとQK^Tの内積値が極端に大きくなり、Softmaxの出力がほぼone-hot(1つだけ1で残り0)になってしまいます。√d_k で割ることで勾配が安定し、学習が円滑に進みます。GPT-4クラスのモデルでは d_k = 128 程度が一般的で、√128 ≈ 11.3 で除算します。

計算量とメモリ

Self-Attentionの計算量はシーケンス長 n に対して O(n²) です。これが長文処理のボトルネックになります。

シーケンス長Attention行列サイズFP16メモリ(1ヘッド)
2,0484M要素8 MB
8,19267M要素128 MB
32,7681,073M要素2 GB
131,07217,179M要素32 GB
1,000,0001T要素1.9 TB

この二乗スケーリングが、FlashAttentionやGrouped-Query Attentionなどの効率化手法が研究される動機です。

Masked Self-Attention(因果的注意)

GPTなどのデコーダモデルでは、未来のトークンを参照できないようにマスクをかけます。Attention行列の上三角部分を -∞ に設定し、Softmax後に0にすることで、各位置が自分より前のトークンのみを参照する「因果的(causal)」な制約を実現します。

一方、BERTなどのエンコーダモデルではマスクなしの双方向Self-Attentionを使い、文全体の文脈を双方向に捉えます。

RNNとの比較

特性Self-AttentionRNN/LSTM
長距離依存O(1)パス長O(n)パス長
並列化全位置を同時計算可能逐次処理必須
計算量O(n²d)O(nd²)
メモリO(n²)O(n)
学習速度高速(GPU並列)低速(逐次依存)

Self-Attentionは長距離の依存関係を1ステップで捉えられる反面、シーケンスが長くなるとメモリ使用量が急増します。この特性がLinear AttentionやState Space Model(Mamba等)の研究動機になっています。

よくある質問

Q1: Self-AttentionとAttentionの違いは何ですか?

A1: Attentionは2つの異なるシーケンス間(例:翻訳の入力文と出力文)の関連を計算する汎用概念です。Self-Attentionはその特殊ケースで、同一シーケンス内のトークン同士の関連を計算します。

Q2: なぜSelf-AttentionはRNNより優れているのですか?

A2: 最大の利点は並列計算が可能な点です。RNNは前のトークンの処理完了を待つ必要がありますが、Self-Attentionは全トークンを同時に処理できるため、GPUの並列性能を最大限活用できます。

Q3: Self-Attentionの計算量O(n²)を改善する方法はありますか?

A3: FlashAttention(IO最適化)、Grouped-Query Attention(ヘッド共有)、Linear Attention(カーネル近似)、Ring Attention(分散処理)など多数の手法が提案されています。2026年現在、FlashAttention-3が実用的な標準手法です。