前回の宿題を開ける
前回の Attention の話で、単語はそれぞれ問い(Q)・見出し(K)・中身(V)という三つの表を持つものとして使いました。その三つを照らし合わせて、どの語に注目するかを決める。話の最後で、一つ宿題を残していました。この三つの表は、そもそもどこから来るのか。それはまた今度、と。
今回はその宿題を開けます。
思い出してほしいのは、埋め込みの回のことです。あのとき単語は、意味の空間に置かれた一本のベクトルでした。「甘いもの好き度」と「辛いもの好き度」のように、いくつかの数を並べれば、その単語がどちらを向いているかが決まる。一本で足りていたはずなんです。
なのに Attention では、同じ単語が Q・K・V という三つの姿で現れます。一本だったベクトルが、急に三人に分かれている。なぜ一本では足りないのか、その三つはどうやって作られるのか。ここを開けていきます。
検索カウンターで役割を確かめる
三つの役割を、前回と同じく図書館の蔵書検索で確かめておきます。
いま自分が探している問い。これが Q(query)です。棚に並ぶ本がそれぞれ掲げている見出しやラベル。これが K(key)。そして、その本が実際に持っている中身。これが V(value)です。
やることは単純です。手元の問い(Q)を、並んでいる見出し(K)と照らし合わせる。合ったものを見つけたら、その見出しに対応する中身(V)を受け取る。問いで探し、見出しで当て、中身を返す。この三つがそろって、はじめて検索が成り立ちます。

Q・K・V は、探す問い、探される見出し、受け渡す中身、という三つの役に分けただけのものです。
同じ単語が三役を同時に演じる
検索の比喩を一歩進めると、面白いことが起きます。
図書館なら「探す人」と「探される本」は別々でした。でも Attention では、ある単語は探す側(Q)でありながら、同時に探される側(K)でもあり、受け渡される中身(V)でもあります。一人が三役を兼ねている。
交流会を思い浮かべると近いかもしれません。参加者は誰もが、探している相手像(Q)と、自分の名札(K)と、自分自身の中身(V)を同時に携えています。互いに探し、互いに探される。同じ人が、場面によって三つの顔を使い分けている。単語もこれと同じで、一つの語が用途に応じて三つの顔を持ちます。
三つの顔はどこから来るか
では、その三つの顔はどこから来るのでしょうか。
もとにあるのは、単語の埋め込み $x$ が一本だけです。前回まで見てきた、あの向きを持つベクトルです。この一本を、三つの別々の行列にかけます。
$$q = xW_Q, \quad k = xW_K, \quad v = xW_V$$
$x$ が単語の埋め込み、$W_Q, W_K, W_V$ が三つの行列です。$xW_Q$ は「入力 $x$ を、$W_Q$ という変換に通して、問いの姿にする」と読めます。同じように $xW_K$ は見出しの姿へ、$xW_V$ は中身の姿へ。同じ $x$ に、かける行列を変えるだけで、三つの顔が生まれます。
大きさで確認しておきます。$x$ が $1 \times d_{model}$ の横一列、$W$ が $d_{model} \times d_k$ の表のとき、かけ算の結果 $q$ は $1 \times d_k$ の横一列になります。一本のベクトルが、また一本のベクトルに変換される。それが三方向に起きているだけです。

ここで一つ大事な点があります。$W_Q, W_K, W_V$ は最初から決まっている表ではなく、学習で調整されます。大量のデータを見ながら、「問い・見出し・中身へどう振り分ければうまくいくか」を少しずつ決めていく。だとすると、単語の意味を三役に振り分けているのは、単語そのものではなく、この三つの変換 $W$ の側だ、ということになります。
三つの顔は、結局ぜんぶ行列のかけ算
もう一つ、後ろを振り返っておきます。
三つの顔を作るのは $xW$ という行列のかけ算でした。この先で問い(Q)と見出し(K)を照らし合わせるのも、中身(V)を混ぜ合わせるのも、正体はどれも行列のかけ算です。
行列のかけ算は、結果の各マスが互いの答えを待たずに計算できます。独立だから、何千個の計算機にそのまま配れて、いっせいに走らせられる。Transformer が GPU と相性がいいのは、中身が独立な行列のかけ算の積み重ねだからです。
行列のかけ算がなぜ並列にできるのか、その仕組みは別の記事でくわしく見ました。
さらに一段だけ。もし $W_K$ を、人があらかじめ決めた固定の見出し表にしてしまうと、そこから先は融通が利きません。$W_K$ を学習で決めると、データに合わせて「どう照合すれば注目がうまく効くか」まで調整できます。固定の見出しより、こちらのほうが表現の幅が広いわけです。
三つの顔は、どう使われ、どう学ばれるのか
三つの顔がそろいました。この顔を使って「どの語をどれだけ見るか」を決める仕組みは、実は前回の Attention でひらいたとおりです。問い(Q)と見出し(K)を照らし合わせ、その合い具合の配分で中身(V)を混ぜ合わせる。あの話でした。
照らし合わせに使うのは、以前の「長さを捨てて、向きだけで似ているを測る」という内積の考え方です。問い(Q)と見出し(K)がどれだけ同じ方向を向いているかで、注目の重みが決まる。三つの顔は、こうして実際に働きます。
残るは一つです。この振り分けを担う三つの行列 $W_Q, W_K, W_V$ は、どうやってその振り分け方を覚えたのか。ここまで「学習で決まる」と何度か言ってきましたが、その中身、つまりどう少しずつ直していくのかには、まだ触れていません。それはまた別の回に開けます。
同じ単語が、AI の中では問い・見出し・中身という三つの顔を持っていました。そのどれもが、一本のベクトルを学習された行列に通しただけのもの。顔を三つに増やしたのは、単語ではなく変換の側だったわけです。では、その変換たちは、どうやってその振り分け方を覚えたんでしょうね?
あわせて読みたい関連記事。



