あなたたち、先週の 「接客3ステップ」 は覚えていらっしゃるかしら。今日はその 中身 を、もう一段深く。お客様への接客は、頭の中で常に 3つの台帳 を同時に持っていますの。1冊目: 「いま私が知りたいこと」 のメモ、2冊目: 「過去に得た情報の見出し」 一覧、3冊目: その見出しに紐づく 「実際の情報」 本文。1冊目を見ながら、2冊目を検索して、合致した本文(3冊目)を引き出してくる。これを 0.5秒 でやる。
(また偶然、隣のソファにいたら聞こえてしまった…そして、これは完全に Q/K/V だ。Query=知りたいこと、Key=見出し、Value=本文。先週 川口が言っていた 「アテンションの行列実装」 の核心、まさにこれ。)
あら、凡田さん、また偶然?…ええ、たぶん同じ仕組みですわ。私の頭の中の 3冊の台帳 を、AIは 3つの行列 で持っている、と。だから接客の達人と AI が同じ精度で文脈を読める。…ただ、私の場合は 20年の現場経験 という 無料の訓練データ が前提ですから、AIに完全には負けない、とも思っていますわ。

- ひとことで言うと、各単語に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ステップ → 行列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
意味の対応:
- Q · K^T = ステップ① 関連スコア計算(全単語ペアの内積をまとめて行列に)
- ÷ √d_k = スケール調整(ベクトル次元数の平方根で割って数値暴走を防ぐ、詳細は数学コース)
- softmax(…) = ステップ② 重み付け(確率分布化)
- … · V = ステップ③ 加重平均(V の合成)
つまり 3ステップ全体が、行列演算 たったの3つ(掛け算→softmax→掛け算)で表現できる。これが Transformer の 計算上の美しさ。
なぜ Q と K と V を 「別の行列」 にするのか
素朴に考えると「単語ベクトルそのまま使えばいいのでは?」と思える。実際、初期のアテンション研究では Q=K=V(同じベクトル使う)というアイデアもあった。
だが、現在の Transformer は 必ず Q ≠ K ≠ V(3つの別行列に変換する)になっている。理由は 役割が違うから:
- Q(質問) として最適なベクトルと、K(見出し) として最適なベクトルは 別の最適化問題。「いま知りたいこと」を表現する空間と、「自分が何者か」を表現する空間は、必ずしも一致しない。
- K(見出し) と V(本文) も別空間。「検索しやすい見出し」と「実際に渡すべき情報」は違う。本のタイトルと本文が違う、と同じ。
- 3つを別行列にすると、各役割に最適な空間を独立に学習 できる。これが性能向上の鍵。
裏返すと、W_Q / W_K / W_V の3つの重み行列が 学習で更新される対象 = アテンションが「学習する」というのは、この3つの行列の中身が訓練データから自動調整されること、を意味する。
大蔵さん、昨夜の 「3冊の台帳」 比喩、本当に正確でした。AI 側では 3つの重み行列 として、訓練データから自動で最適な中身を学習する仕組みです。…で、これを当社の クライアント提案レビュー に応用すると、面白いことが起きそうで。
あら、興味深いですわね。AI が私の 「3冊の台帳」 を持つようになると…うちのアシスタント職、半分くらい、要らなくなりませんこと?…ちょっと、本気で 銀座カフェ Instagram の更新頻度を上げて、副業路線を確保した方が、よろしいかしら。
フッ、Q/K/V か。私のオーディオ系で言うと、これは レコード盤 = Value(本文)、ジャケット = Key(見出し)、「今夜何を聴くか」 の気分 = Query(質問)、ということだ。B&W 802 D4 の前で「いまはマーラーの気分」と思ったら、レコード棚から該当ジャケットを瞬時に検索して、針を落とす。人間も日常的に Q/K/V を回している ということだ。
(御託先輩のオーディオ比喩、今日はちゃんと技術と合っている。…ただ、当社のレコメンドエンジン案件で言えば、Q=ユーザーの直近行動、K=商品カタログのメタ情報、V=商品本体、という構造で、もう実装ベースで動いているので、説明資料に使えそうです。)

コンサル感覚 — 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 を複数組 用意して、並列に異なる視点から文脈統合する拡張