Attention機構を動かす3つのベクトル、クエリ(Query)・キー(Key)・バリュー(Value)。本記事はその起点となる「クエリ」を解説します。クエリは、検索でいえばあなたが検索窓に打ち込む検索ワード——「探しに行く側」のリクエストです。ここが分かるとAttentionの計算全体が見通せます。
📖 ひと言でいうと
クエリとは、Attention機構において「今どんな情報を探しているか」を表す問い合わせ側のベクトルです。クエリを各キーと照合して関連度を測ることで、入力データのどこに注目すべきかが決まります。注目の出発点になるのがクエリです。
図書館の蔵書検索に例えると、あなたが検索窓に打ち込む検索ワードがクエリ、各本の背表紙に付いたタイトル・索引ラベルがキー、本の中身(本文)がバリューです。検索ワード(クエリ)が全ラベルと照合され、一致度の高い本の中身ほど強く反映される——この検索リクエストの役割がクエリです。
🖼 1枚でわかるクエリ
📘 公式テキストの説明
入力データの各要素を特徴づけるベクトルであり、クエリとの関連度を評価する際の基準となる。具体的には、クエリとキーの内積を計算し、その結果をソフトマックス関数で正規化することで、各キーに対する注意の重みが得られる。これにより、モデルは入力データ内のどの部分に注目すべきかを判断し、適切な出力を生成する。例えば、機械翻訳の文脈では、エンコーダが入力文の各単語に対応するキーを生成し、デコーダがクエリを通じてこれらのキーと関連付けることで、翻訳の精度を向上させる。
この説明の中心は「クエリとキーの内積→ソフトマックスで正規化→各キーに対する注意の重み」という計算の流れです。クエリとキーは関連度の評価でペアを組む関係にあり、冒頭の一文はその表裏一体の関係を述べたものです。整理すると、クエリは関連度評価の「基準・起点」となる問い合わせ側のベクトル、キーは照合を受ける側のベクトルです。
機械翻訳の例も重要です。エンコーダが入力文の各単語のキーを用意し、デコーダがクエリを投げてそれらと関連付ける——クエリが「デコーダ側から投げられる」という向きを押さえてください。
🔍 しっかり理解する
クエリが起点となる計算の流れ
この計算全体はScaled Dot-Product Attentionと呼ばれ、式は次のとおりです。
Attention(Q, K, V) = softmax(QK^T / √d_k) V
Qがクエリ(を並べた行列)、QK^Tがクエリと各キーの内積、d_kはキーの次元数です。内積が大きいほど「クエリの探しものとキーの目印が似ている」ことを意味し、√d_kで割ってスケールを整えたうえで、ソフトマックスにより合計1の重みに変換されます。クエリは、この照合の一方の当事者として計算全体の起点に立ちます。
クエリはどこから来るか——2種類のAttention
クエリの供給元は、Attentionの種類を見分ける決め手になります。
- Source-Target Attention(Encoder-Decoder Attention) — クエリはデコーダの現在の文脈情報から作られ、キーとバリューはエンコーダ側から来ます。「出力側が入力側へ問い合わせる」構図です。
- Self-Attention — クエリ・キー・バリューのすべてが同じ系列から作られます。文中の各単語が順番にクエリの立場になり、「自分は同じ文のどの単語と関係が深いか」を全単語に問い合わせます。
どちらの場合も、クエリ・キー・バリューは元の入力ベクトルにそれぞれ別の重み行列を掛けて変換したものです。同じ単語ベクトルでも「問い合わせ用」「照合用」「中身用」と役割別の姿に変換される、と理解してください。この変換行列は学習で獲得され、どんな問い合わせ方をすればタスクがうまく解けるかをモデル自身が学びます。
「1つのクエリ対すべてのキー」という総当たり
見落としがちですが、1つのクエリは特定のキー1つとだけ照合されるのではなく、すべてのキーと総当たりで照合されます。図書館でいえば、検索ワードが蔵書全冊のラベルと突き合わされるイメージです。厳密には、実際の検索が「最も一致する1冊を選ぶ」のに対し、Attentionは全部の本の中身を一致度の重みで混ぜ合わせる点が異なります。この「選ぶのではなく混ぜる」性質のおかげで、計算が微分可能になり、ニューラルネットワークの学習に組み込めるのです。
💡 具体例で考える
「それ」が何を指すかをクエリで解決する
「机の上にリンゴがあったので、それを食べた」という文をSelf-Attentionで処理する場面を考えます。「それ」という単語がクエリの立場になったとき、このクエリは「自分が指している対象はどれか」という問い合わせとして、文中の全単語のキーと照合されます。「リンゴ」のキーとの関連度が高く計算されれば、注意の重みが「リンゴ」に集まり、「それ」の表現に「リンゴ」の情報が混ぜ込まれます。指示語の解決という言語理解の難所が、クエリを起点とする照合として実現される好例です。
翻訳のステップごとに変わるクエリ
「I love cats」を訳すデコーダは、「私」を生成するときと「猫」を生成するときで異なるクエリを発行します。クエリは「いま何を探しているか」の表現なので、生成が進んで文脈が変わるたびに中身が更新されるのです。同じ入力文に対して注目先が動的に切り替わるのは、ステップごとにクエリが作り直されるからです。
⚠️ よくある誤解・紛らわしい用語
- キーとの混同 — クエリは「探しに行く側」、キーは「探される側」です。翻訳の例では、デコーダがクエリを持ち、エンコーダがキーを用意します。この向きを逆にした選択肢に注意してください。
- 「クエリは固定」は誤り — クエリは注目の主体が変わるたび、生成ステップが進むたびに作り直されます。
- データベースのクエリ(SQL)との混同 — 名前は検索の類推ですが、Attentionのクエリは学習で得られる連続値のベクトルで、条件文ではありません。
- 「クエリだけで注目先が決まる」は誤り — 注目の重みはクエリとキーの照合(内積)で決まり、出力はバリューの加重和で作られます。3者そろって初めて機能します。
📝 試験でのポイント
- 「クエリとキーの内積を計算し、ソフトマックス関数で正規化して注意の重みを得る」という計算手順は最頻出です。順序の並べ替えにも対応できるようにしましょう。
- 機械翻訳の例で「デコーダがクエリを通じてエンコーダのキーと関連付ける」という供給元の対応(クエリ=デコーダ側)が問われます。
- クエリ・キー・バリューの役割記述を入れ替えたひっかけ選択肢が定番です。「問い合わせの起点=クエリ」を軸に判別してください。
- Scaled Dot-Product Attentionの式で、√d_k(キーの次元数の平方根)で割る操作の有無・目的が問われる可能性があります。
📚 まとめ
- クエリは、Attention機構で「今なにを探しているか」を表す問い合わせ側のベクトルで、注目先を決める起点です。
- クエリとキーの内積をソフトマックスで正規化することで、各キーに対する注意の重みが得られます。
- 機械翻訳(Source-Target Attention)ではクエリはデコーダ側から、Self-Attentionでは各単語が順にクエリ役になります。
- クエリは探しに行く側、キーは探される側、バリューは持ち帰る中身——3点セットで覚えましょう。
