夕方、銀座のホテルラウンジ、大蔵が再び後輩アシスタント2人に 「接客の中身」 を教えている。たまたま隣のソファに凡田が…
大蔵(アシスタントマネージャー・35)

あなたたち、先週の 「接客3ステップ」 は覚えていらっしゃるかしら。今日はその 中身 を、もう一段深く。お客様への接客は、頭の中で常に 3つの台帳 を同時に持っていますの。1冊目: 「いま私が知りたいこと」 のメモ、2冊目: 「過去に得た情報の見出し」 一覧、3冊目: その見出しに紐づく 「実際の情報」 本文。1冊目を見ながら、2冊目を検索して、合致した本文(3冊目)を引き出してくる。これを 0.5秒 でやる。

凡田(チームリーダー・38, 主人公)

(また偶然、隣のソファにいたら聞こえてしまった…そして、これは完全に Q/K/V だ。Query=知りたいこと、Key=見出し、Value=本文。先週 川口が言っていた 「アテンションの行列実装」 の核心、まさにこれ。)

大蔵

あら、凡田さん、また偶然?…ええ、たぶん同じ仕組みですわ。私の頭の中の 3冊の台帳 を、AIは 3つの行列 で持っている、と。だから接客の達人と AI が同じ精度で文脈を読める。…ただ、私の場合は 20年の現場経験 という 無料の訓練データ が前提ですから、AIに完全には負けない、とも思っていますわ。

夕方の銀座ホテルラウンジで大蔵が3冊の台帳(Query/Key/Value 想起の本)を後輩アシスタントに示し、凡田が隣のソファで気づきの表情
この記事の要約(3行)
  • ひとことで言うと、各単語に3つの役割(Q/K/V)を持たせて文脈を統合する仕組み。Q=「いま知りたいこと」、K=「自分の見出し」、V=「自分の中身」。
  • これが アテンションの実装本体。3ステップ(#031)を「具体的にどう数値計算するか」に落とすと、この3つの役割に行き着く。
  • イメージは 図書館の検索。Q=探したい質問、K=各本の見出し(背表紙)、V=各本の中身。質問と見出しを照らし合わせ、合う本の中身を集めてくる(計算の詳細は本文で)。

アテンションの動作を「3ステップ」(#031)で扱った。関連スコア計算 → 重み付け → ベクトル更新。本記事はその 具体的な行列実装、すなわち Q / K / V の話。

「アテンション = ある単語が他の単語を見て自分を更新する」というコンセプトを、コンピュータで実装するには 具体的な数値計算 に落とす必要がある。その正体が、各単語のベクトルから派生する 3つの行列 = Q / K / V。

Q / K / V の3役割 — 各単語が同時に持つ3つの顔

Transformer に入る各単語のベクトル(例: 512次元)は、3つの 線形変換(つまり3つの重み行列 W_Q / W_K / W_V を掛ける)によって、3つの別ベクトル に変換される。これが Q / K / V。

名前 役割 意味するもの
Q (Query) 質問者 「私はいま、何を知りたいか」
K (Key) 見出し 「私はこういう情報を持っています」
V (Value) 本文 「実際に取り出される中身」

各単語が 3つの顔 を同時に持つ、と理解する。「機械学習」という単語は、自分が 質問する側(Q)でもあり、他の単語に 見出しを見せる側(K)でもあり、選ばれた時に 本文を渡す側(V)でもある。

単語ベクトルから3つの線形変換 W_Q/W_K/W_V で Q/K/V が生成され、それぞれ「質問」「見出し」「本文」の役割を持つ図

図1: Q/K/V の生成 — 各単語ベクトルから3つの重み行列で「質問・見出し・本文」3役を引き出す

3ステップ → 行列1本への対応

アテンションの3ステップ (#031) を Q/K/V で書き直すと、こうなる:

① 関連スコア計算 = Q と K の内積

「私はいま、何を知りたいか(Q)」と「あなたは何を持っていますか(K)」を 内積 (#005) で照合する。内積が大きい = 質問とその単語の見出しが 「似ている」 = 関連スコア高い。

1つの単語の Q が、文中の 全単語の K と内積を取る。結果は数値のリスト(=各単語との関連スコア)。

② 重み付け = softmax(スコアを確率分布に変換)

関連スコアを 正規化(#018) 的な処理、具体的には softmax に通す。これで各単語へのスコアが 合計1の確率分布 になる(= 重み)。「いまの私の質問にとって、各単語がどれくらい重要か」のパーセンテージ表現。

③ ベクトル更新 = V の加重平均

各単語の V(本文) に、②で得た 重み を掛けて足し合わせる(=加重平均)。これが 更新後の 「私のベクトル」。質問(Q)に対して、関連する単語の本文(V)が 重み付きで合成 されて、新しい自分の意味になる。

1本の式に集約 — softmax(QK^T / √d_k) V

3ステップを 行列演算でまとめ書き すると、有名な式になる:

Attention(Q, K, V) = softmax(Q · K^T / √d_k) · V

意味の対応:

つまり 3ステップ全体が、行列演算 たったの3つ(掛け算→softmax→掛け算)で表現できる。これが Transformer の 計算上の美しさ

softmax(Q·K^T/√d_k)·V の式の各部分が3ステップ(関連スコア/重み付け/加重平均)に対応する図

図2: 1本の式に集約 — 3ステップが行列演算3つで書ける、Transformer 計算の核心

なぜ Q と K と V を 「別の行列」 にするのか

素朴に考えると「単語ベクトルそのまま使えばいいのでは?」と思える。実際、初期のアテンション研究では Q=K=V(同じベクトル使う)というアイデアもあった。

だが、現在の Transformer は 必ず Q ≠ K ≠ V(3つの別行列に変換する)になっている。理由は 役割が違うから:

裏返すと、W_Q / W_K / W_V の3つの重み行列が 学習で更新される対象 = アテンションが「学習する」というのは、この3つの行列の中身が訓練データから自動調整されること、を意味する。

翌朝の銀座、大蔵オフィスで凡田が 「3行列の話」 を持ち込む…
凡田

大蔵さん、昨夜の 「3冊の台帳」 比喩、本当に正確でした。AI 側では 3つの重み行列 として、訓練データから自動で最適な中身を学習する仕組みです。…で、これを当社の クライアント提案レビュー に応用すると、面白いことが起きそうで。

大蔵

あら、興味深いですわね。AI が私の 「3冊の台帳」 を持つようになると…うちのアシスタント職、半分くらい、要らなくなりませんこと?…ちょっと、本気で 銀座カフェ Instagram の更新頻度を上げて、副業路線を確保した方が、よろしいかしら。

御託(シニアコンサル・39)

フッ、Q/K/V か。私のオーディオ系で言うと、これは レコード盤 = Value(本文)ジャケット = Key(見出し)「今夜何を聴くか」 の気分 = Query(質問)、ということだ。B&W 802 D4 の前で「いまはマーラーの気分」と思ったら、レコード棚から該当ジャケットを瞬時に検索して、針を落とす。人間も日常的に Q/K/V を回している ということだ。

川口(アナリスト・22)

(御託先輩のオーディオ比喩、今日はちゃんと技術と合っている。…ただ、当社のレコメンドエンジン案件で言えば、Q=ユーザーの直近行動、K=商品カタログのメタ情報、V=商品本体、という構造で、もう実装ベースで動いているので、説明資料に使えそうです。)

銀座オフィスで大蔵が3冊の台帳を凡田に示し、御託がレコード盤を持ち、川口がレコメンドエンジン設計図を出す4人会議

コンサル感覚 — Q/K/V は 「察し」 の構造を可視化する

本記事の核心メッセージは 「Q/K/V は 「察し」 の構造を、3つの役割に分解して可視化した発明」

大蔵が20年で身につけた「お客様の表情と季節を見て、頭の中の引き出しから関連情報を瞬時に取り出す」という暗黙の動作は、実は 3つの行列演算 で完全に記述できる。これを Vaswani et al. (2017) が 「Attention Is All You Need」 で発明・公開し、その後の GPT/Claude/Gemini のすべてが、この3行列構造をベースに動いている。

コンサルとしての示唆: クライアント提案で 「AI で文脈理解」 を語る時、3つの役割(質問・見出し・本文)を区別できるかどうか が、設計の精度を決める。検索やレコメンドの提案を Q/K/V の3役で再整理すると、ベンダー実装の妥当性も評価しやすくなる。

深掘り記事 ・ 公開中マルチヘッドアテンション (#036)同じ単語に対して Q/K/V を複数組 用意して、並列に異なる視点から文脈統合する拡張