Transformer の中身——Self-Attention と QKV
レッスン5:Transformer の中身——Self-Attention と QKV
このレッスンで学ぶこと
- 2017 年『Attention Is All You Need』が示した Transformer の位置づけを理解する
- Self-Attention を「文中の関連付け」の直観で把握する
- QKV(Query・Key・Value)を「検索と情報取り出し」の比喩で理解する
- Multi-Head Attention と位置エンコーディングの役割を押さえる
- Encoder / Decoder / Encoder-Decoder の 3 系統(BERT・GPT・T5)を区別できる
前回のレッスン 4 では、学習が進む原理を「損失関数・勾配降下・逆伝播」の 3 部品で整理しました。今回は、この学習の枠組みの上で動く「現代 LLM の中核アーキテクチャ」である Transformer に踏み込みます。2017 年に登場した Self-Attention の直観を、検索と情報取り出しの比喩で掴んでいきます。数式そのものは追わず、「なぜこれで文脈が扱えるのか」の骨格を押さえるのが目標です。
2017 年——「Attention Is All You Need」の衝撃
2017 年 6 月、Google の研究チーム(アシシュ・ヴァスワニほか)が論文「Attention Is All You Need」を発表しました。タイトルは「必要なのは Attention だけ」という意味で、当時主流だった RNN・LSTM の逐次処理を捨て、Self-Attention だけでシーケンス処理を組み上げる大胆な提案でした。
この論文が示した Transformer は、機械翻訳のベンチマークで当時の最先端を上回り、しかも学習が並列化できるという実装上の利点も持っていました。ここから 2018 年の BERT、2019 年以降の GPT シリーズ、そして 2022 年末の ChatGPT へと続く現代 LLM の系譜が始まります。
💡 ポイント Transformer の最大の発明は「並列に文脈を絡み合わせる仕組みを、Self-Attention という形で組み上げたこと」です。RNN の逐次処理という制約を外し、大規模な計算資源を使った並列学習を可能にした——この設計判断が、その後の LLM の巨大化を許容する土台になりました。
Self-Attention の直観——文中の関連付け
Self-Attention(自己注意機構)は、「文中の各単語が、同じ文中のほかの単語とどれくらい関係しているか」を、モデルが自ら計算する仕組みです。例えば「太郎は花子に本を渡した」という文で、「渡した」という動詞は「太郎(誰が)」「花子(誰に)」「本(何を)」のそれぞれと関連しています。Self-Attention は、こうした関連の強さを、学習によって獲得します。
RNN のように 1 単語ずつ順に読み込むのではなく、文全体を一度に見渡して「どこに注目すべきか」を決めるのが、Self-Attention の発想です。「Self(自己)」の名は、「自分自身の文の中で注意を配る」ことから来ています。
なぜ「並列」が価値なのか
RNN は「前の単語の出力を、次の単語の入力に戻す」構造上、シーケンスを順番に処理するしかありませんでした。100 単語の文を処理するには 100 ステップの計算を順に回す必要があり、途中を並列化しにくいのが弱点でした。Self-Attention は、文中の全単語ペアの関連度を「同時に」計算できます。GPU の並列計算能力をフルに活かせるため、学習速度も推論速度も大幅に上がります。
QKV——検索と情報取り出しの比喩
Self-Attention の内部では、Query(クエリ、質問)・Key(キー、鍵)・Value(バリュー、値)の 3 種類のベクトルが使われます。この 3 種類は、検索エンジンの動作に例えると理解しやすくなります。
- Query:知りたいこと・探したいことを表す「質問文」
- Key:検索対象の「見出し・タグ」
- Value:見出しに紐づく「本文・実データ」
検索エンジンで「東京の天気」と入力する(Query)と、システムはインデックスの見出し(Key)と Query を照合し、関連が強いページの本文(Value)を返します。Self-Attention も同じ流れです。
flowchart LR
Q[Query<br/>質問] --> M[Key との照合<br/>関連度スコア]
K[Key<br/>見出し] --> M
M --> S[softmax で<br/>重みに変換]
V[Value<br/>本文] --> W[重みで加重和]
S --> W
W --> O[出力ベクトル]
各単語は、それぞれ Query・Key・Value の 3 種類のベクトルを持ちます。ある単語の Query を、文中のすべての単語の Key と照合し、関連度スコアを出します。このスコアを softmax(合計が 1 になるように正規化する関数)で重みに変換し、各単語の Value を重み付きで足し合わせて出力を作ります。
softmax と内積が「見たことがあるレベル」で登場する箇所
論文では、この計算は「softmax(QK^T / √d) V」という短い式で書かれています。ここでは数式は追いませんが、部品だけ押さえておきます。
- 内積(QK^T):Query と Key の「向きの一致度」を数値化する演算
- √d で割る:数値が大きくなりすぎて softmax が極端な値に張り付くのを防ぐスケール調整
- softmax:合計が 1 になる確率分布に変換する関数
- 重み付き和(× V):関連度に応じて Value を足し合わせる
覚える必要はありませんが、他資料で「softmax(QK^T / √d) V」を見かけたときに「これは Self-Attention のことだ」と気づけるレベルで十分です。
📝 補足 Query・Key・Value の 3 種類はすべて、元の単語ベクトルに別々の重み行列を掛けて作られます。3 つを別々に学習することで、「質問の役割」「鍵の役割」「情報本体の役割」を分担できるようになっています。
Multi-Head Attention——複数の視点で同時に注目する
Self-Attention は「1 つの視点で関連を計算する」仕組みですが、実際の Transformer では Multi-Head Attention(マルチヘッド・アテンション、多頭注意機構)が使われます。文字通り「複数の頭(head)」を並列に用意し、それぞれ別の視点で Self-Attention を計算し、最後に結果を結合します。
複数の頭を持たせることで、あるヘッドは「文法的な関係(主語と動詞など)」に注目し、別のヘッドは「意味的な関係(人物と行為など)」に注目する、というように分業ができます。実務では 8 〜 96 のヘッド数がよく使われます。
位置エンコーディング——順序情報を後から埋め込む
Self-Attention の並列計算には、大きな副作用があります。「文中の順序情報が失われる」ことです。「太郎は花子に本を渡した」と「花子は太郎に本を渡した」は、単語の集合としてはまったく同じで、Self-Attention だけでは区別できません。
これを補うのが位置エンコーディング(positional encoding)です。各単語の埋め込みベクトルに「その単語が文中の何番目にあるか」の情報を、別のベクトルとして足し込みます。位置エンコーディングにはさまざまな方式があり、初期の Transformer では「sin と cos の波形」を使う方式が採用されました。最近のモデルでは、学習可能な位置埋め込みや、相対位置エンコーディング(Rotary Position Embedding、RoPE など)が主流です。
⚠️ 注意 「Transformer は並列処理なので順序が扱えない」という説明は誤解を招きます。並列処理そのものは順序を扱いませんが、位置エンコーディングで順序情報を注入することで、順序を扱えるようになります。「Self-Attention だけでは順序を扱えないが、位置エンコーディングと組み合わせて扱う」が正確な理解です。
Encoder・Decoder・Encoder-Decoder——3 系統の Transformer
オリジナルの Transformer は、Encoder(入力を理解する側)と Decoder(出力を生成する側)の両方を持つ Encoder-Decoder 構造でした。しかし、その後の発展で、目的に応じて Encoder だけ、Decoder だけを使うモデルも登場しました。現代の主要モデルは 3 系統に整理できます。
flowchart LR
A[入力文] --> E[Encoder]
E --> B[BERT<br/>入力理解特化<br/>分類・埋め込み]
A --> D[Decoder]
D --> C[GPT<br/>次単語生成特化<br/>チャット・生成]
A --> ED[Encoder-Decoder]
ED --> T[T5<br/>翻訳・要約<br/>入出力両方]
Encoder 系(BERT など)——入力の理解に特化
Encoder 系は、入力文全体を一度に読み込み、その内容を密なベクトルに変換することに特化しています。分類・検索・埋め込み生成などが得意です。代表例が 2018 年に Google が発表した BERT(Bidirectional Encoder Representations from Transformers、Devlin ら)で、単語の左右両方の文脈を同時に見る「双方向」の学習が特徴です。
Decoder 系(GPT など)——次単語生成に特化
Decoder 系は、これまでの文脈から「次に来る単語」を予測することに特化しています。生成が得意なので、チャット・文章作成・コーディング支援などに使われます。代表例が OpenAI の GPT シリーズです。「Generative Pre-trained Transformer」の頭文字で、事前学習で次単語予測を大量に行い、Post-training で対話に整えられます。
Encoder-Decoder 系(T5 など)——入出力両方を扱う
Encoder-Decoder 系は、Encoder で入力文を理解し、Decoder で別の出力文を生成する構造です。機械翻訳・要約・質問応答などに使われます。代表例が Google の T5(Text-To-Text Transfer Transformer)で、あらゆるタスクを「テキスト入力 → テキスト出力」に統一する設計思想が特徴です。
どれを使うかは目的次第
3 系統は優劣ではなく、目的に応じた使い分けです。ChatGPT や Claude のような対話モデルは Decoder 系が主流ですが、社内検索や分類タスクには Encoder 系(BERT 派生のモデル)がいまも活躍しています。翻訳や要約に特化したい場合は、Encoder-Decoder 系が良い選択になります。
Transformer が現代 LLM の骨格である理由
Transformer は、次の 3 つの特徴で現代 LLM の骨格になりました。
- 並列処理の実装しやすさ:GPU 大規模計算を活かせる
- 長距離依存の扱いやすさ:文中で離れた単語同士の関連も直接扱える
- 系統の柔軟さ:Encoder / Decoder / Encoder-Decoder の 3 系統で幅広い用途に対応
パーセプトロン以来の 60 年で、「深く積むほど強くなる」ディープラーニングの原理は変わっていません。Transformer はその原理の上に、Self-Attention という新しい積み方を提案しただけとも言えます。しかし、この「積み方」の変化が、大規模学習を実現可能にし、現代 LLM の飛躍を生みました。
まとめ
このレッスンでは、以下のことを学びました。
- 2017 年 Google の「Attention Is All You Need」が Transformer の起点であること
- Self-Attention は「文中の各単語が、同じ文中のほかの単語とどれくらい関係するか」を計算する仕組みであること
- QKV(Query・Key・Value)は検索と情報取り出しの比喩で理解でき、Query と Key で関連度を、Value で情報本体を扱うこと
- Multi-Head Attention は複数の視点で同時に注目する仕組みで、分業を可能にすること
- 位置エンコーディングが Self-Attention の順序情報の欠落を補うこと
- Transformer には Encoder 系(BERT)・Decoder 系(GPT)・Encoder-Decoder 系(T5)の 3 系統があり、目的に応じて使い分けること
次のレッスンでは、Transformer の入力側に踏み込みます。文字列がどうやってモデルの入力ベクトルになるのか、トークナイザーと埋め込み空間の話を、BPE と「king − man + woman ≈ queen」の直観で見ていきます。
確認クイズ
このレッスンの理解度をチェックしましょう。