アテンション
アテンション
論文、arxiv: 1409.0473 Neural Machine Translation by Jointly Learning to Align and Translate,で提唱されたNMTの機構。 Transformerでも(頻繁に)使われる。
いろいろと変形があるが、基本的にはEncoder-Decoderモデルで、Encoderの最後の状態と現在生成しているDecoderのトークンのどこが対応しているかを、何らかのスコア(内積とか)で定義して、一番近いエンコーダーのアウトプットを特に重く見る、という仕組み。
定義

hの系列とのどこが対応しているかを調べて、その結果を入力に使う。 cの式はSoftMaxになっているので一番スコアの高いhが選ばれる。
scoreは元論文ではalignment modelと言われていて1層のNNが使われていたが、その後単なる内積が使われる事が多くなったと思う。 Encoder-Decoder以外でも広く使われるようになった現在では、単純にscoreと見ておくのが良いと思いそうした。
パラメータの数
scoreにはiが入っていない。つまり全てのhとsに対して同じ関数が使われる。 score自体にWが入っている事はあるが、iごとに別々のWを用意する事はしない。 つまり入力位置ごとに別々のパラメータを使ったりはしない。
当然hを作る過程ではそうしたパラメータは入りうるし、まさにアテンションを通してそれらのパラメータを学習するのがやりたい事でもあるが、 それらはアテンションというメカニズムの外の話。
Transformerブロックの方にFully connectedなパーセプトロンとの比較がある。(計算量の比較も)
3ステップの演算
登場時は上記のようにhidden stateとかコンテキストとかでhとかcとかが使われていたが、セルフアテンションなどはそういう前提とはかなり違う入力になるので、 単にn個のインプットとクエリのベクトル、と見る方が良い事もある。 上記の演算をセルフアテンションで見直す時にこの表記で3ステップに分けて考えておく方がいいので、以下にその表記をしておく。
qとの演算として書くと、上記の式は以下の3ステップの演算と考えられる。
- qと の内積をとる
- 1のSoftMaxをとる
- 2の結果との内積をとる
アテンションの直感的な説明
アテンションとは、n個の候補と、一つのベクトルqを入力として、n個の候補から一つを選ぶ仕組みと考えられる。 マルチプレクサみたいなものだが、qと似ているものを出力する、という所が違う。

n個の中から1つを選ぶ、というのが重要。なお、softmaxと平均なのでスコアが2位とか3位もちょっとだけ足し合わせたものになる。(ただし結果は一つのベクトルに要約される事には変わりない)
なおセルフアテンションはこのyの側もn個になるのでややこしいが、概念的にはやはりyが1つにつき1つを選ぶ、を念頭に、それがn個同時に動くと解釈するのが良いだろう。
Encoder-Decoderのダイアグラム
当初のEncoder-DecoderのRNNでどう使われていたかをメモしておく。
現在 を出そうとしている時に使うアテンション は以下。

Q, K, Vによる一般化(拡張)
原論文から解き明かす生成AIの3.3.2に詳しい。
アテンションはもともと
- qと の内積をとる
- 1のsoftmaxをとる
- 2の結果との内積をとる
という演算。この1と3のをKとVという別のシンボルを当てて違うものを選べるようにし、 さらに1のqをn個集めたQに拡張する。
- を求める
- 1をqの要素側(行方向)にsoftmaxする
- 2とVを掛ける
となる。
従来のアテンションではKとVは同じだが、この定式化ではクエリと類似を判定する要素とその結果lookupする対象を分けて別々に指定出来る拡張となっている。


Q, K, Vアテンションの図解


演習 3.4 QとかKを書き下してアテンションの式になるのを確認
セルフアテンションの前準備として、アテンションをQ, K, Vを使った式に拡張する。それが元と一致しているかを確認しておく。
原論文から解き明かす生成AIの演習3.4。Q, K, Vでの記述が便利なので、この定式化の計算を確かめておく。


ボツ図いろいろ
アテンションとセルフアテンションで喋るのに使った性質の一覧だが、ここに載せるほどの何かでは無い。消すのが惜しいので残しておく。

計算を図示してみたが、あんまり分かりやすくならなかった。

初期に書いた図。もう少しマルチプレクサっぽく描く方が良いと思い最近は違う描き方になったが消すのもなんなのでお蔵入り。
