🧙‍♀️

TransformerとAttentionを改めて学び直す

2025/01/15に公開

はじめに

ChatGPTの爆発的な普及から当たり前となった言語モデルですが、ベース技術はTransfomerです。
今では画像や音声にも使われていますし、マルチモーダルモデルにも当たり前のように使われています。

改めてTransformerって何か、Attentionとは?を数式はなるべく少なくまとめようと思います。

Transformerとは

原論文はこちら
https://arxiv.org/abs/1706.03762

論文では以下ように精度が上がったことが紹介されていて、かつAttentionを使うことで高速に学習と推論ができたということが記載されています

  • 英語からドイツフランス語への翻訳タスクでBLEUが28.4
  • 英語からフランス語への翻訳タスクでBLEUが41.8

BLUEスコアについて詳細説明は調べていただければと思いますが、プロの翻訳とどれだけ近いかを数値化したもので、100に近いほど良い、というものです。
だいたい40以上だと高品質くらいのイメージを持っていればいいかと思います。

モデル構造

こんなモデルが2017年に登場しましたが、モデルがどんな仕組みなのか見てみましょう。

順に見ていきましょう。

  1. Inputs
    任意のベクトルが入力されます(言語タスクなら単語の配列)
  2. Positional Encording
    位置を示す情報を三角関数(ある種のフーリエ変換)を通して入力します
  3. 右下のoutputs
    モデルがこれまでに予測した結果を入力します(k+1単語を予測する場合はk単語までの予測結果を入力、厳密にはAutoregressiveの場合)
  4. 中の四角で囲まれた部分...
    ここに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ってなんだ...?という気持ちになります。

Multi-Head 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}

qkの積が類似度となり、これをaとします

a = softmax(\frac{q^t k}{\sqrt{d}})
  • V: Value
    • 次の計算Stepで渡したい値
    • \bm{v} = W^V \bm{x}

上記で計算された avの重みつき和を計算し、元のベクトルに足されます(Residual Connection)

簡単な図で表すと以下のようになります。ここでは4つのベクトルが入力される例を示しています。

これがScaled Dot-Product Attentionになります。

ではMulti-Head Attentionは...

改めて戻ると...
上記のScaled Dot-Product Attentionを複数の行列を使って処理するのが、Multi-Head Attentionになります。
これを踏まえて再度図を見ると、少し優しく見えてきたのではないでしょうか

Multi-Head Attention

締め

Transformerを通してMulti-Head AttentionやScaled Dot-Product Attentionをまとめました。
少しでも図が優しく見えてくるようになったら幸いです。

Discussion