ChatGPTの仕組みから学ぶG検定対策講座③
Transformerは文章のどこに注目するのか?Self-AttentionとQ・K・V【第3回】
こんにちは。ゆうせいです。
前回は、入力された文章がトークンに分割され、それぞれが数値ベクトルへ変換されるまでを説明しました。
ただし、トークンを数値に変換しただけでは、文章の意味を十分に理解できません。
例えば、次の文章を考えてみましょう。
この山は高い。
この商品は高い。
どちらにも「高い」という言葉が使われていますが、一つ目は高さを、二つ目は価格を表しています。
「高い」の意味を判断するには、周囲にある「山」や「商品」との関係を調べる必要があります。
Transformerで、トークン同士の関係を調べる中心的な仕組みが、Self-Attentionです。
今回は、Transformer Explainerを操作しながら、Self-Attentionと、そこで使われるQuery、Key、Valueの役割を説明します。
Transformer Blockを開く
Transformer Explainerを開き、画面を「Transformer Block」までスクロールしてください。
Transformer Blockには、主に次の二つの処理があります。
- Multi-Head Self-Attention
- MLP(Multi-Layer Perceptron)

Self-Attentionは、トークン同士で情報をやり取りする役割を持ちます。
一方のMLPは、Self-Attentionによって更新された各トークンの情報を、さらに変換する役割を持ちます。
Transformer Explainerで使用されているGPT-2 smallでは、このTransformer Blockが12個積み重ねられています。トークンの表現は、Blockを通過するたびに更新されていきます。
Attentionとは何か
Attentionは、日本語では「注意機構」と訳されます。
人間が文章を読むときも、すべての単語を同じ重要度で見ているわけではありません。
例えば、次の文章を考えてみましょう。
太郎は新しいパソコンを購入した。それを仕事で使う予定だ。
「それ」という言葉の意味を考えるとき、特に注目すべきなのは「新しいパソコン」です。
「太郎」や「仕事」も文章の理解には必要ですが、「それ」が何を指しているのかを判断するうえでは、「パソコン」との関係が強くなります。
Attentionは、あるトークンを処理するときに、ほかのトークンをどの程度重視するかを数値として計算します。
なぜSelf-Attentionと呼ぶのか
Self-Attentionの「Self」は、同じ文章の中にあるトークン同士でAttentionを計算することを表しています。
例えば、次の文章が入力されているとします。
Data visualization empowers users to
この文章が6個のトークンに分割された場合、それぞれのトークンが、同じ文章中のほかのトークンとの関係を調べます。
「Data」は、ほかのどのトークンと関係が強いのか。
「visualization」は、どのトークンを重視すべきなのか。
「users」は、それ以前のどの情報を取り込むべきなのか。
このように、自分と同じ入力列の中にあるトークンを参照するため、Self-Attentionと呼ばれます。
Self-Attentionでは三つのベクトルを作る
Self-Attentionでは、各トークンの埋め込みベクトルから、次の三つのベクトルを作ります。
- Query(Q)
- Key(K)
- Value(V)
日本語では、それぞれ次のように訳せます。
| 名称 | 日本語のイメージ | 主な役割 |
|---|---|---|
| Query | 問い合わせ | どの情報を探しているかを表す |
| Key | 検索用の手掛かり | Queryとの関連度を調べる |
| Value | 実際の内容 | 関連度に応じて取り込まれる情報 |
この三つは、Self-Attentionを理解するうえで重要な概念です。
検索エンジンに例えて考える
Transformer Explainerでは、Query、Key、Valueを検索エンジンに例えて説明しています。
検索エンジンで「新人エンジニア Java 研修」と検索した場合を考えてみましょう。
Queryは検索キーワード
Queryは、検索欄に入力する言葉に相当します。
新人エンジニア Java 研修
つまり、Queryは「どのような情報を探しているのか」を表します。
Keyは検索結果のタイトル
Keyは、検索結果に表示されるページタイトルのようなものです。
- 新人向けJava研修カリキュラム
- Java開発環境の構築方法
- 管理職向けリーダーシップ研修
検索エンジンは、検索キーワードと各ページのタイトルや特徴を比較し、関連度を判断します。
「新人エンジニア Java 研修」というQueryに対しては、「新人向けJava研修カリキュラム」というKeyの関連度が高くなるでしょう。
Valueはページの実際の内容
Valueは、検索結果を開いた先にある実際の情報です。
関連度の高いページが見つかったら、そのページに含まれるカリキュラム、説明、演習内容などを取得します。
Self-Attentionでも、QueryとKeyを比較して関連度を求め、その関連度に応じてValueの情報を取り込みます。
Q・K・Vを図書館に例える
別の例として、図書館で本を探す場面を考えてみましょう。
| 要素 | 図書館での例 |
|---|---|
| Query | 「Transformerの入門書を読みたい」という目的 |
| Key | 本のタイトル、分類番号、キーワード |
| Value | 本の中に書かれている実際の内容 |
QueryとKeyがよく一致する本ほど、目的に合った情報を持っている可能性が高くなります。
そして、その本のValueである本文の情報を利用します。
ただし、検索エンジンや図書館の例は、Q・K・Vの直感的な役割を理解するためのものです。
実際のTransformerでは、Q・K・Vはすべて多数の数値が並んだベクトルとして計算されます。
埋め込みベクトルからQ・K・Vを作る
前回説明したように、GPT-2 smallでは、一つのトークンが768次元のベクトルで表されています。
Self-Attentionでは、この埋め込みベクトルに、それぞれ異なる重みを掛けて、Query、Key、Valueを作ります。
Query = 埋め込みベクトル × Query用の重み
Key = 埋め込みベクトル × Key用の重み
Value = 埋め込みベクトル × Value用の重み
同じ埋め込みベクトルを出発点にしていますが、掛ける重みが異なるため、Q、K、Vはそれぞれ異なる数値になります。
Q、K、Vの重みは、人間が手作業で設定するものではありません。
大量の文章を使った学習によって、次のトークンを適切に予測できるように調整されます。
Q・K・Vを一度に計算する
Transformer Explainerでは、入力された埋め込み行列に、大きなQKV用の重み行列を掛けています。
GPT-2 smallの埋め込み次元は768です。
Query、Key、Valueをそれぞれ768次元としてまとめて計算するため、出力側の大きさは次のようになります。
768 × 3 = 2304
そのため、QKVをまとめた重み行列の形は、おおよそ次のように表せます。
768 × 2304
入力文が6トークンの場合、入力埋め込みの行列は次の形です。
6 × 768
これにQKV用の重み行列を掛けると、次の形になります。
6 × 2304
この2304次元の結果を三つに分けると、Query、Key、Valueが得られます。
Query:6 × 768
Key:6 × 768
Value:6 × 768
Transformer Explainerでは、各トークンの埋め込みがQKV用の重みと掛け合わされ、Q、K、Vへ変換される様子を視覚的に確認できます。
QueryとKeyを比較して関連度を求める
Queryは「何を探しているか」を表し、Keyは「どのような情報を持っているかを判断する手掛かり」を表します。
そこで、あるトークンのQueryと、各トークンのKeyを比較します。
この比較には、内積という計算が使われます。
簡単な3次元ベクトルで考えてみましょう。
Query = [1, 2, 1]
Key = [2, 1, 0]
内積は、同じ位置の数値を掛けて足し合わせます。
1 × 2 + 2 × 1 + 1 × 0
= 2 + 2 + 0
= 4
一般には、QueryとKeyの向きや特徴が近いほど、内積が大きくなる傾向があります。
Transformerでは、この内積を、トークン同士の関連度を表す点数として利用します。
この点数を、Attention Scoreと呼びます。
すべてのトークンの組み合わせを調べる
入力文に6個のトークンがある場合、それぞれのQueryと、それぞれのKeyを比較します。
つまり、次のような組み合わせを計算します。
- 1番目のQueryと、1~6番目のKey
- 2番目のQueryと、1~6番目のKey
- 3番目のQueryと、1~6番目のKey
- 4番目のQueryと、1~6番目のKey
- 5番目のQueryと、1~6番目のKey
- 6番目のQueryと、1~6番目のKey
その結果、Attention Scoreは次のような6行6列の正方行列になります。
6 × 6
| トークン1 | トークン2 | トークン3 | トークン4 | トークン5 | トークン6 | |
|---|---|---|---|---|---|---|
| トークン1 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 |
| トークン2 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 |
| トークン3 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 |
| トークン4 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 |
| トークン5 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 |
| トークン6 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 | 関連度 |
Transformer ExplainerでAttentionの部分にマウスポインターを合わせると、どのQueryとどのKeyを比較しているのかを確認できます。
なぜMulti-Headなのか
Transformerでは、Attentionを一つだけ計算するのではありません。
複数のAttentionを並行して計算します。
これが、Multi-Head Self-Attentionです。
Headは、文章を見る視点のようなものだと考えられます。
文章中には、さまざまな関係があります。
- 主語と述語の関係
- 動詞と目的語の関係
- 代名詞と、それが指す名詞の関係
- 近くにあるトークン同士の関係
- 離れた場所にあるトークン同士の関係
- 意味的に関連するトークン同士の関係
一つのAttentionだけですべての関係を捉えようとするよりも、複数のHeadで異なる関係を並行して調べたほうが、文章を多面的に処理できます。
Transformer ExplainerのGPT-2 smallでは、12個のAttention Headが使われています。各Headは、トークン間の関係をそれぞれ異なる視点から学習できます。
768次元を12個のHeadに分ける
GPT-2 smallでは、768次元のQ、K、Vを12個のHeadに分割します。
768 ÷ 12 = 64
そのため、一つのHeadが扱うQ、K、Vは、それぞれ64次元になります。
| 項目 | 次元数 |
|---|---|
| 分割前のQuery | 768次元 |
| Headの数 | 12 |
| 1 Head当たりのQuery | 64次元 |
KeyとValueについても同様です。
12個のHeadが、それぞれ64次元の空間でAttentionを計算します。
各Headの出力は最後に結合され、再び768次元の表現としてまとめられます。
複数の専門家が文章を読むイメージ
Multi-Head Self-Attentionは、複数の専門家が同じ文章を異なる観点から読む様子に例えられます。
例えば、次の文章を複数の専門家が読むとします。
新人社員は講師からJavaの課題を受け取り、それを翌日までに提出した。
それぞれの専門家は、次のような観点に注目するかもしれません。
| 専門家 | 注目する関係 |
|---|---|
| 専門家A | 「新人社員」と「提出した」の主語・述語関係 |
| 専門家B | 「それ」が「Javaの課題」を指す関係 |
| 専門家C | 「翌日までに」という期限の情報 |
| 専門家D | 「講師から」と「受け取り」の関係 |
実際のAttention Headに、このような明確な担当名が付いているわけではありません。
しかし、複数のHeadを用意することで、異なる種類の関係を並行して学習できる点が重要です。
Valueはどこで使われるのか
QueryとKeyは、トークン同士の関連度を計算するために使われます。
一方、Valueは、実際に取り込む情報として使われます。
処理の流れを整理すると、次のようになります。
- あるトークンのQueryを用意する
- 各トークンのKeyと比較する
- 関連度を表すAttention Scoreを求める
- 関連度に応じて、各トークンのValueを取り込む
例えば、あるトークンが別のトークンと強く関連していれば、そのトークンのValueを大きく取り込みます。
関連が弱ければ、Valueから取り込む情報も小さくなります。
つまり、QueryとKeyは「どの情報をどの程度重視するか」を決め、Valueは「実際に受け渡す情報」を担当します。
Self-Attentionによってトークンの表現が変化する
Embeddingの直後では、各トークンは主に次の情報を持っています。
- そのトークン自体の基本的な意味
- 文章中の位置
Self-Attentionを通過すると、ほかのトークンの情報が取り込まれます。
例えば、「高い」というトークンの最初の表現は、「高さがある」「価格が高い」など複数の可能性を含んでいます。
「山」というトークンから情報を取り込めば、高さを表す意味が強くなります。
「商品」というトークンから情報を取り込めば、価格を表す意味が強くなります。
Self-Attentionによって、トークンは単独の意味だけでなく、文章の文脈を反映した表現へ変化します。
Transformer Explainerで確認するポイント
Transformer Explainerの「Multi-Head Self-Attention」を開き、次の点を確認してください。
- 各トークンの埋め込みからQ、K、Vが作られる
- QKVをまとめた出力が2304次元になっている
- Q、K、Vがそれぞれ768次元に分けられる
- 768次元が12個のHeadに分割される
- 一つのHeadでは64次元のQ、K、Vを扱う
- QueryとKeyの組み合わせから正方形のAttention行列が作られる
- トークンにマウスポインターを合わせると、対応する計算が強調表示される
Transformer Explainerでは、入力文を変更すると、Q、K、VやAttentionの数値もその場で更新されます。Attention Mapを操作すると、各トークンがどのトークンに注目しているのかを視覚的に確認できます。
今回のまとめ
- Self-Attentionは、文章中のトークン同士の関係を計算する仕組みである
- Selfは、同じ入力列の中でAttentionを計算することを表す
- 各トークンの埋め込みからQuery、Key、Valueを作る
- Queryは探している情報、Keyは関連度を調べる手掛かり、Valueは実際に取り込む情報に相当する
- QueryとKeyの内積からAttention Scoreを計算する
- トークンが6個なら、Attention Scoreは6行6列の行列になる
- Multi-Head Self-Attentionでは、複数の視点からトークン間の関係を調べる
- GPT-2 smallでは、768次元を12個のHeadに分ける
- 一つのHeadが扱うQ、K、Vは、それぞれ64次元になる
- Self-Attentionによって、各トークンの表現に文脈が取り込まれる
次回は、QueryとKeyから求めたAttention Scoreに対して、なぜマスクを掛ける必要があるのかを説明します。
Transformer ExplainerのAttention行列を操作しながら、未来のトークンを見せないCausal Mask、Softmaxによる確率化、Valueの重み付き平均までを解説します。
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。
最新の投稿
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座⑥
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座⑤
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座④
山崎講師2026年7月26日ChatGPTの仕組みから学ぶG検定対策講座③
