Transformer

「Attention Is All You Need」(2017)― RNNを使わず注意機構だけで構築した革命的モデル

1なぜTransformerが必要だったか

それまでの系列処理の主役だったRNNには2つの大きな問題がありました。

RNNの問題点 ① 逐次処理で遅い 1単語ずつ順番に処理するので並列化できない ② 長距離の依存関係が苦手 文が長いと、最初の方の単語の情報が 最後まで届きにくい(勾配消失と同じ問題) Transformerの解決策 ① 全単語を同時に並列処理 順番に処理しないのでGPUで高速並列化可能 ② Attentionで全単語間を直接結合 どんなに離れた単語同士でも直接関係を 計算できる → 長距離依存を捉えられる

2Transformerの全体構造

エンコーダ (入力を理解する側) 入力埋め込み(Embedding) + 位置エンコーディング × N Self-Attention (マルチヘッド) Add & Layer Norm Feed Forward NN (全結合層 × 2) Add & Layer Norm エンコーダ出力 「私 は 猫 が 好き」 デコーダ (出力を生成する側) 出力埋め込み(右シフト) + 位置エンコーディング × N Masked Self-Attention (未来の単語を見ない) Add & Layer Norm Cross-Attention (エンコーダ出力を参照) K, V を送る Add & Layer Norm Feed Forward NN Add & Layer Norm Linear + Softmax 「I like cats」
構造のポイント:
・エンコーダとデコーダの両方にSelf-AttentionFeed Forward NNのペアがある
・各ペアに残差結合(Add)+ Layer Normが付く(ResNetのスキップ結合と同じ発想)
・デコーダにはCross-Attention(エンコーダの出力を参照する層)が追加
・元論文ではN=6(6層ずつ積み重ね)

3Self-Attention と Query・Key・Value

Self-Attentionは「各単語が、文中の他の全ての単語とどれだけ関連があるかを計算する」仕組みです。これをQuery(質問)・Key(索引)・Value(内容)の3つの役割で実現します。

日常の例え:図書館での本探し

Query(質問) 「AI関連の本ありますか?」 = あなたが知りたいこと 今注目している単語から 生成される「問い合わせ」 Key(索引) 各本の背表紙のタイトル = 各本が何について書かれているか 各単語から生成される 「自分はこういう情報です」 Value(内容) 本の中身そのもの = 実際に伝えたい情報 各単語から生成される 「実際に渡す情報の中身」 Q と K を照合して「関連度」を求める → 関連度に応じて V を重み付けして受け取る = 質問に合う本を見つけ、その本の中身(重要度に応じて)を受け取る

具体例:「私は猫が好き」でSelf-Attentionを計算

「好き」という単語が、他の全単語にどれだけ注目するかを計算する流れです。

Step 1:各単語からQ, K, Vを生成 「私」 →Q₁,K₁,V₁ 「は」 →Q₂,K₂,V₂ 「猫」 →Q₃,K₃,V₃ 「が」 →Q₄,K₄,V₄ 「好き」 →Q₅,K₅,V₅ Step 2:「好き」のQ₅と、全単語のKの内積を計算(関連度スコア) Q₅ · K₁ 2.1 Q₅ · K₂ 0.5 Q₅ · K₃ 8.3 Q₅ · K₄ 1.2 Q₅ · K₅ 3.0 Step 3:Softmaxで確率に変換(Attention重み) 「私」 2% 「は」 0.4% 「猫」 85% 「が」 0.7% 「好き」 12% Step 4:Attention重みでVを加重平均 → 出力 出力 = 0.02×V₁ + 0.004×V₂ + 0.85×V₃ + 0.007×V₄ + 0.12×V₅
この例の意味:「好き」が文中の他の単語を見渡した結果、「猫」に85%の注意を向けた。つまり「好き」という単語の意味を解釈するとき、「猫」の情報を最も多く取り入れたということです。人間が「何が好きなの?→猫が好き」と理解するのと同じ直感です。
Attention(Q, K, V) = softmax(Q × Kᵀ / √d) × V
Q × Kᵀ = 関連度スコア | √d で割る = スコアが大きすぎてSoftmaxが極端にならないように安定化 | × V = 重み付き平均

4マルチヘッドAttention

1つのAttentionだけだと「1つの観点」でしか単語間の関係を見られません。マルチヘッドでは複数のAttentionを並列に走らせ、異なる観点から関係を捉えます。

ヘッド1 「好き」→「猫」に注目 (何を好きか) ヘッド2 「好き」→「私」に注目 (誰が好きか) ヘッド3 「好き」→「が」に注目 (文法構造) 結合(Concat) + 線形変換
要点:元論文では8ヘッドを使用。各ヘッドが異なるQ,K,Vの重み行列を持ち、「意味的関連」「文法的関連」「近接性」など多角的な関係を同時に学習します。

5位置エンコーディング(Positional Encoding)

Self-Attentionは全単語を同時並列に処理するので、語順の情報が失われます。「猫が私を好き」と「私が猫を好き」の区別がつかなくなる。

これを解決するために、各単語の埋め込みベクトルに「位置を表す信号」を足し算します。

単語の意味ベクトル + 位置の信号 = 意味 + 位置 の情報を持つ 例:「猫」= [意味ベクトル] + [「3番目の単語」を表す信号] 元論文ではsin/cosの波形で位置を表現(学習不要)

6Transformer内の3種類のAttention

種類場所Q, K, V の出所意味
Self-Attention エンコーダ内 Q, K, V全て同じ入力から 入力文の各単語が他の全単語との関連を見る
Masked Self-Attention デコーダ内 Q, K, V全てデコーダ入力から 出力を生成するとき未来の単語を見ないようにマスクする
Cross-Attention デコーダ内 Q = デコーダから
K, V = エンコーダ出力から
デコーダが「入力文のどこに注目すべきか」を決める
Cross-Attentionのイメージ:翻訳で「cats」を出力するとき、デコーダから「Q=今から動物に関する単語を出したい」という問い合わせを出し、エンコーダ出力のK(索引)を検索して「猫」のV(内容)を重点的に取得する。

7Transformerから生まれた3系統

Transformer(2017) エンコーダ + デコーダ エンコーダのみ BERT 文の「理解」が得意 分類・質問応答・感情分析 エンコーダ+デコーダ T5, BART 「理解」と「生成」の両方 翻訳・要約 デコーダのみ GPT 文の「生成」が得意 文章生成・対話・コード生成

📋 全体まとめ

G検定での出題ポイント

基本 2017年Google「Attention Is All You Need」。RNNを使わずAttentionだけで系列処理を実現
Q, K, V Query=問い合わせ、Key=索引、Value=内容。QとKの内積で関連度を計算し、Vを加重平均
Self-Attention 全単語間の関連を並列に計算。RNNの逐次処理と異なり高速。長距離依存も直接捉えられる
位置エンコーディング 並列処理で失われる語順情報を補うためにsin/cosの位置信号を加算
マルチヘッド 複数のAttentionを並列に実行し、異なる観点(意味・文法など)の関係を同時に学習
3種のAttention Self-Attention(入力内)/ Masked Self-Attention(未来を見ない)/ Cross-Attention(エンコーダ参照)
派生 エンコーダのみ=BERT(理解)/ デコーダのみ=GPT(生成)/ 両方=T5(翻訳・要約)