セルフアテンション
セルフアテンション
アテンションをConvの代わりに使おうというアイデア。Transformerで提唱された。
演習 3.4 QとかKを書き下してアテンションの式になるのを確認
原論文から解き明かす生成AIの演習3.4。Q, K, Vでの記述が便利なので、この定式化の計算を確かめておく。
図
Fully-connectedなパーセプトロンとのパラメータ数の比較
セルフアテンションとConvやRNNの比較は論文や原論文から解き明かす生成AIにあるが、 この辺は当時の状況からの比較であって、今から新しくこの辺を学ぶ人にとっては不要に難しい比較に思う。
素人の視点としては、Fully-connectedなパーセプトロンとの違いを見てみるのが教育的だろう。
Fully-connectedなパーセプトロン
一つのoutputにつき、トークン数、トークンの次元を512とする。
一つのトークンあたり、512次元のアウトプットを出すには512x512となる。 一つのアウトプットにつき512トークンを足し合わせるのだから、それが512個必要になる。
図
これが512個あるのだから、全体では512の4乗で、だいたい64G個(64Billion)となる。
Transformerブロック
MultiHeadとLayerNormとFFNで出来ている。LayerNormは大したこと無いので無視しよう。また多くの演算はW+Bの形式になるがWが512x512の時Bは512のオーダーなので、Wだけ見ていけば丼勘定としては十分。
図
という事で、64Giと2Mi、くらいの差(32*1024倍)がある。
計算量の比較
論文のセクション4や原論文から解き明かす生成AIに話題があるが、少し自分でも計算してみる。
内積とWとの積
まず大前提として、内積と、Wとの積の計算量から見る。内積がO(d)でWとの積は出力の次元によるが、入力と同じ次元を出力するのが基本とすると
図 図
マルチヘッドではd/8を8個出すので、d/8のケースも考えておくと、計算量は1/8だが、オーダーとしては結局d/8の項はdとなる。512程度でビッグO記法はどうなんだ、という話でもある。
マルチヘッドアテンションのQ, K, V
マルチヘッドのQ, K, Vの計算は先にも述べた通りビッグO記法では定数倍は影響が無いが、厳密に考えても1/8したものが8個あるのでやはり通常のアテンションと同じくらいになる。
なお、Q, K, VとWとの積の計算量は、KとVは行列との積がn個あると解釈して、となる。 Qはアテンションの種類によってクエリが1つかn個かの違いがある。
- クロスアテンション(Qは1つ):
- セルフアテンション(Qはn個):
これらがQ, K, Vを作るのに必要な計算量で、この後にQ, K, Vを使ってアテンションを計算する計算量が掛かる。