3.

Attention (注意機構) とは?Q/K/V・Multi-Head の仕組み

編集

本稿は Attention(注意機構) に関する記事です。

この記事の要点
  • Attention は「重要な部分により注目する」重み付けの仕組み
  • Self-Attention は系列内の任意の位置同士の関係を直接学習する。Transformer の中核
  • 基本式: Attention(Q, K, V) = softmax(QKT / √d) V
  • Multi-Head Attention で複数の Attention を並列に走らせ、異なる関係を同時に捉える
  • 用途: LLM (GPT/Claude/Gemini)、画像 (ViT)、音声 (Whisper)、マルチモーダル全般
  • 計算量: 系列長 n に対して O(n²)。これが LLM コンテキストウィンドウ上限の主因
  • 長文対応の改良: FlashAttention / Sliding Window / Sparse Attention / Linear Attention

Attention とは?

Attention(注意機構) は、ニューラルネットワークが入力データの中で「どこに注目すべきか」を学習する仕組みです。「重み付き平均」をデータから動的に決める、と言い換えてもよいです。

もともと 2014〜2015 年に機械翻訳の Encoder-Decoder モデルで、長文翻訳の精度を上げる補助機構として提案されました。2017 年の 「Attention Is All You Need」 論文で、RNN を完全に置き換えて Attention だけで系列モデルを作る Transformer が提案され、現代 AI の基礎技術になりました。

身近な直感

補足: なぜ「注意」と呼ぶか
人間が文章を読むとき、すべての単語に均等に注目するのではなく、文脈に応じて重要な単語に「注意」を向けます。

例:「彼女はリンゴを買った。それは赤かった。」を読むとき、「それ」が指すのは「リンゴ」だと自然に判別します。これは「それ」と「リンゴ」に強い注意関係があるからです。Attention 機構は、この「重要な部分により強く向く重み」をデータから学習します。

Q / K / V の基本

Attention は各入力位置を 3 つのベクトルに変換します。

記号名称役割
QQuery(クエリ)「何を探しているか」を表す
KKey(キー)「自分が何の情報を持つか」のラベル
VValue(バリュー)「実際に運ぶ情報」

計算の流れ:

  1. 各クエリ Q が各キー K と内積(類似度)を計算
  2. √d でスケールして softmax で確率分布に変換(合計 1)
  3. その確率で V を重み付き平均

数式で書くと:

Attention(Q, K, V) = softmax(Q KT / √dk) V

√dk で割るのは、内積が次元数 d に比例して大きくなり softmax が極端になるのを防ぐためです。

Self-Attention と Cross-Attention

種類Q の出所K, V の出所用途
Self-Attention同じ系列同じ系列文脈の理解(LLM の中核)
Cross-Attentionある系列別の系列翻訳 (Encoder-Decoder)、画像 + テキスト
Masked Self-Attention同じ系列同じ系列(過去のみ)因果的生成(GPT 系)

Multi-Head Attention

1 つの Attention だけだと「ひとつの関係」しか学べないため、複数の Attention を並列に走らせ、異なる視点(語順 / 意味 / 構文など)を同時に捉えます。これを Multi-Head Attention と呼びます。

例: 1 つの Head は「主語と動詞の関係」、別の Head は「代名詞と先行詞の関係」、また別の Head は「対比語の関係」…のように、各 Head が違う種類の依存性を担当するように自動で分担されます(明示的に指定するわけではない)。

応用範囲(系列に限らない)

領域Attention の使われ方
自然言語処理文中の単語間の依存関係(LLM の中核)
画像 (ViT)画像を「パッチ」に分割し、パッチ間の Attention
音声 (Whisper)音声フレーム間の Attention
マルチモーダルテキストと画像トークン間の Cross-Attention
強化学習Decision Transformer の系列処理
グラフGraph Attention Network (GAT)
推薦システムユーザの過去行動系列を Attention で要約
タンパク質AlphaFold の構造予測

計算量とメモリの課題

注意: O(n²) の壁
標準の Self-Attention は系列長 n に対して計算量・メモリとも O(n²) です。系列長を倍にすると計算が 4 倍、メモリも 4 倍。これが LLM のコンテキストウィンドウ上限と、長文を扱う際のコスト・遅延の主因です。

長文対応の改良

改良概要
FlashAttentionGPU のメモリ階層を活かして同じ計算を高速化(数学的には等価)
Sliding Window Attention近傍だけ見る(Mistral 等で採用)
Sparse Attention一部のトークンだけ Attention(Longformer 等)
Linear Attention / Linformer計算を線形に近似
GQA (Grouped Query Attention)推論時の KV キャッシュを削減
MLA (Multi-head Latent Attention)DeepSeek の効率化手法
State Space Model (Mamba)Attention 自体を別構造に置き換える代替案

最小サンプル: PyTorch で Self-Attention

import torch, torch.nn as nn

# 標準の Multi-Head Attention
attn = nn.MultiheadAttention(
    embed_dim=512,
    num_heads=8,
    batch_first=True,
)

# 入力: (バッチ, 系列長, 次元)
x = torch.randn(2, 16, 512)
out, weights = attn(x, x, x)  # Self-Attention は Q=K=V=x

print(out.shape)    # (2, 16, 512)
print(weights.shape) # (2, 16, 16) attention 行列

運用上のヒント

Tips
  • 論文を読むときは「Attention の種類 (Self / Cross / Masked)」「Head 数」「位置エンコーディング」を確認
  • 大型モデル推論で速度に困ったら FlashAttention を有効化
  • 長文タスクで OOM なら Sliding Window勾配チェックポイント
  • Attention の可視化(重み行列のヒートマップ)でモデルが何を見ているか観察できる
  • 推論時の KV キャッシュ管理は大型 LLM のメモリの主因。GQA / MLA 採用モデルは省メモリ

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. LLM (大規模言語モデル)
  2. Transformer
  3. Attention (注意機構)
  4. Embedding (埋め込み)
  5. Prompt Engineering
  6. RAG (検索拡張生成)
  7. ファインチューニング
  8. AIエージェント
  9. マルチモーダルAI
  10. トークンとコンテキストウィンドウ
  11. Diffusion Model (拡散モデル)

最近更新/作成されたページ