AIは「それ」が何を指すか、どう分かるのか

AIは「それ」が何を指すか、どう分かるのか
目次

「それ」は、どうやって「骨」だと分かるのか

「犬が骨をくわえて、それを埋めた」。この一文を読んで、自分たちは何のためらいもなく「それ=骨」だと分かります。犬を埋めたわけではないし、くわえるという動作を埋めたわけでもない。埋められたのは骨です。当たり前すぎて、そこに判断があったことにすら気づきません。

面白いのは、ChatGPT に同じ文を渡しても、たいてい正しく「骨」だと答えることです。では、AI は「それ」が何を指すかを、どうやって決めているのでしょうか。

ここで前回の話が効いてきます。単語は、意味の空間に置かれた一本のベクトル、つまり埋め込みなのでした。ただ、各語を埋め込みとして持っているだけでは、「それ」がどの語を指すかまでは決まりません。埋め込みは一語ずつの意味の”置き場所”を与えますが、文の中でどの語とどの語が結びつくかは、そこには書かれていないからです。

答えのかなめは、文中のどの語に注目するかを、その都度決めている、というところにあります。この仕組みが Attention(注目)と呼ばれるもので、その心臓部はたった1本の式で書けます。見た目は少し込み入っています。

$$\text{Attention}(Q,K,V)=\text{softmax}\!\left(\dfrac{QK^\top}{\sqrt{d_k}}\right)V$$

ただ、この式を読み解く道具は、実はもう揃っています。内積は「似ている度」を測るものだという話、そしてシグモイドは2択版の softmax だという話です。今回はその道具を手に、この式を内側から開けてみます。

注目の材料は、問い・見出し・中身の三つ

注目する語を決めるために、Attention はまず、文中の各単語を三つの役に翻訳します。辞書を引くときの動きを思い浮かべると、そのまま対応が取れます。

  • Q(クエリ) は、いま考えている語、ここでは「それ」が差し出す問いです。「自分が指しているものは何だろう」という検索語にあたります。
  • K(キー) は、各語が掲げている見出しの札です。辞書の見出し語のように、「自分はこういう語ですよ」と示すラベルです。
  • V(バリュー) は、各語が実際に渡す中身です。見出しの奥にある本文にあたります。

辞書引きで言えば、Q が検索語、K が見出し、V が説明本文です。「それ」の問い(Q)が「骨」の見出し(K)と強く合致すれば、「骨」の中身(V)が濃く引き出される。これが注目の基本の動きです。

なお、Q・K・V は、各語のベクトルを学習で決まった三通りの変換にかけて作ったものです。その一段の作り方自体もそれなりに面白い話なのですが、今回の焦点は式の読み方に絞りたいので、ここでは「与えられた三つの表」として扱い、由来の話は別の機会に譲ります。

「それ」の問い(Q)が各語の見出し(K)と照らし合わされ、最も合う「骨」へ注目が集まる。矢印の太さが注目の強さ。
「それ」の問い(Q)が各語の見出し(K)と照らし合わされ、最も合う「骨」へ注目が集まる。矢印の太さが注目の強さ。

似ている度で、注目の重みを作る

三つの材料が揃ったら、いよいよ注目の重みを計算します。やることは、「それ」の Q と、各語の K との内積を取ることです。

内積は、二つのベクトルがどれだけ同じ方向を向いているか、つまり「似ている度」を測る道具でした。似ているかどうかは距離ではなく向きの問題だ、という話を以前しましたが、まさにそれがここで効いてきます。

「それ」の Q を、犬・骨・くわえて・埋めた、それぞれの K と内積を取ると、語の数だけスコアが並びます。このスコアの列を softmax に通すと、合計がちょうど1になる注目の配分に変わります。シグモイドは2択版の softmax でしたが、ここではそれを全語版に広げて、注目をどの語にどれだけ振り分けるかを決めているわけです。

式の中で $\sqrt{d_k}$ で割っているのは、ベクトルの次元 $d_k$ が大きいとスコアの値がどんどん膨らんでしまうので、それを抑えるための調整です。もし割らずにスコアが大きくなりすぎると、softmax の出力が一つの語にべったり張り付いて、ほとんど動かなくなってしまいます。ちょうど温度を下げすぎたときのような硬直で、それを避けるための一手間です。

結果として、「それ」の注目は「骨」に大きく集まります。

内積スコアを softmax に通すと、合計1の注目配分になる。「骨」に重みが集中する。
内積スコアを softmax に通すと、合計1の注目配分になる。「骨」に重みが集中する。

込み入った式を、道具で読み切る

ここまで来れば、冒頭の式はもう手順書として読めます。

$$\text{softmax}\!\left(\dfrac{QK^\top}{\sqrt{d_k}}\right)V$$

読む向きは、内側から外へ。まず $QK^\top$ で、クエリと各キーの内積、つまり似ている度の総当たり表を作ります。次に $\sqrt{d_k}$ で割って値を整え、softmax で合計1の注目の配分に変え、最後にその配分で各語の中身 $V$ を混ぜ合わせる。順に追うと、次の四部品に分かれます。

式の部品何をしている
$QK^\top$クエリと各キーの内積=「似ている度」の総当たり表
$\div\sqrt{d_k}$スコアが膨らみすぎないよう整える(温度調整)
$\mathrm{softmax}(\cdots)$スコアを合計1の「注目の配分」に変える
$(\cdots)\,V$その配分で各語の中身(value)を加重平均

こうして分解してみると、この式がやっているのは、前の節までにやったことを全単語ぶん一度に行列で書いただけだと分かります。一語ずつ「問いと見出しを照らし合わせ、中身を混ぜる」動きを、$Q$・$K$・$V$ という表にまとめて、まとめて計算しているのです。込み入って見えたのは、たくさんの手続きを一箇所に畳んだからでした。

「それ」が骨を指せる、その正体

「それ」が「骨」を指せるのは、AI が文の意味を分かっているからではありません。「それ」の問いと各語の見出しの似ている度で注目の重みを作り、その重みで各語の中身を加重平均している。ただそれだけです。

以前の「似ているは向きの話だった」が、ここで効きました。あの込み入って見えた式は、その一連の手つきを、一度にまとめて書いた一文だったのです。

最後に、一つ宿題を残しておきます。ここまで Q・K・V を「与えられた三つの表」として使ってきましたが、この三つは、同じ単語からどうやって作られるのでしょうか。同じ語が、問い・見出し・中身という三つの顔を持つ、その作り方は、次回のテーマにします。

あわせて読みたい関連記事。

よかったらシェアしてね!
  • URLをコピーしました!
目次