TransformerとAttentionを改めて学び直す
はじめに
ChatGPTの爆発的な普及から当たり前となった言語モデルですが、ベース技術はTransfomerです。
今では画像や音声にも使われていますし、マルチモーダルモデルにも当たり前のように使われています。
改めてTransformerって何か、Attentionとは?を数式はなるべく少なくまとめようと思います。
Transformerとは
原論文はこちら
論文では以下ように精度が上がったことが紹介されていて、かつAttentionを使うことで高速に学習と推論ができたということが記載されています
- 英語からドイツフランス語への翻訳タスクでBLEUが28.4
- 英語からフランス語への翻訳タスクでBLEUが41.8
BLUEスコアについて詳細説明は調べていただければと思いますが、プロの翻訳とどれだけ近いかを数値化したもので、100に近いほど良い、というものです。
だいたい40以上だと高品質くらいのイメージを持っていればいいかと思います。
モデル構造
こんなモデルが2017年に登場しましたが、モデルがどんな仕組みなのか見てみましょう。
順に見ていきましょう。
- Inputs
任意のベクトルが入力されます(言語タスクなら単語の配列) - Positional Encording
位置
を示す情報を三角関数(ある種のフーリエ変換)を通して入力します - 右下のoutputs
モデルがこれまでに予測した結果を入力します(k+1
単語を予測する場合はk
単語までの予測結果を入力、厳密にはAutoregressiveの場合) - 中の四角で囲まれた部分...
ここにAttentionが入っています。- 最初の四角がEncoderの役割で、文章から意味を取り出します
- 後半の四角がDecoderの役割で、意味から文章にします
-
Add&Norm
はResidual Connectionで足し算をして、後は高速化の工夫としてLayer Normalizationをしています -
Feed Foward
はMLPを適用しています(画像の1x1畳み込みとほとんど同じ) - Multi-Head Attentionは次の章で...
Multi-Head AttentionとScaled Dot-Product Attention
Multi-Head Attention
Multi-Head Attentionの構造は以下のようになっています。いろいろ記号もありますし、そもそもScaled Dot-Product Attentionってなんだ...?という気持ちになります。
Scaled Dot-Product Attention
こちらがScaled Dot-Product Attentionの図になります。
ややこしい図がきた...と思っちゃいますが、
- MatMulは行列の掛け算
- Scaleは定数の掛け算
- Maskは何かを消すような処理
- SoftMaxはDeepLearningではお馴染みの処理
なので、Q, K, V
が何かわかればScaled Dot-Product Attentionは理解できそうな気になってきます。
Qは入力のn
個のベクトルなので、1個のベクトルについて考える際はq
とします。(Kも同様)
- Q: Query
- 入力されたそれぞれのベクトルを線形変換して得られる
\bm{q} = W^Q \bm{x} - 他のベクトルと関連があるか、Attentionをすべきかの検索をするためのquery
- K: Key
- あるベクトルがもつQueryに対して類似度を計算するためのベクトル
\bm{k} = W^K \bm{x}
q
とk
の積が類似度となり、これをa
とします
- V: Value
- 次の計算Stepで渡したい値
\bm{v} = W^V \bm{x}
上記で計算された a
とv
の重みつき和を計算し、元のベクトルに足されます(Residual Connection)
簡単な図で表すと以下のようになります。ここでは4つのベクトルが入力される例を示しています。
これがScaled Dot-Product Attentionになります。
ではMulti-Head Attentionは...
改めて戻ると...
上記のScaled Dot-Product Attentionを複数の行列を使って処理するのが、Multi-Head Attentionになります。
これを踏まえて再度図を見ると、少し優しく見えてきたのではないでしょうか
締め
Transformerを通してMulti-Head AttentionやScaled Dot-Product Attentionをまとめました。
少しでも図が優しく見えてくるようになったら幸いです。
Discussion