🐅

VIT解説 Part2 Encoder

2024/03/28に公開

VIT解説シリーズのPart2です。Part1

今回はEncoderを解説します。
前知識として、最初にVITにおけるSelf Attentionから紹介します。

0. Self Attention

VITにおけるSelf Attentionは、通常のTransformerのSelf Attentionと同じ役割を果たします。つまり、一次元化された画像トークンを並べた二次元配列をQKVとして扱い、似ている部分の情報に重みをつけたデータを抽出して、次の層に渡します。

  • Attention
    出力(output) = softmax(\dfrac{QK^T}{\sqrt{d_k}})V

  • Q: query(入力)

  • K: key(入力)

  • V: value(入力)

  • d_k: keyのベクトルの次元数(Scale)

  • softmax: 正規化関数

※Self Attentionの詳細はこちらで解説しています。

0.1 Multi-Head Self-Attention

VITもTransformer同様にMulti-Head Self-Attention(MHSA)を持ちます。
これはSelf Attentionを並列に接続したものです。
特にVITではMHSAのヘッド数に応じてQKVが分割され、それぞれの分割したデータに対してSelf Atentionを行い、その結果を結合します。

3. Encoder

Encoderは、主に計算処理を行う部分です。複数のEncoder Blockの積み重ねで構成されています。
全体像は次のようになっています。
・Encoder

ではEncoder Blockの中身について見ていきましょう。

3.1 Encoder Block

Encoder Blockは次のようなアーキテクチャです。
・Encoder Block

MHSAとMLPのSkip Connectionと、それらの前にLayerNorm層が入力されたもので、これがVITの本体といえるでしょう。
これを積み重ねることで、複数のAttentionによる特徴の抽出が繰り返し行われ最適化され、必要な情報がMLPに渡るようになります。

次はEncoder Blockの構成要素について解説します。

3.1.1 LayerNorm

最初はLayerNormalizationです。
よく利用される正規化にBtachNormalizationがありますが、この手法はバッチ全体を正規化するため、データごとにトークン数が異なるデータ(一文の単語数など)には適切ではありませんでした。

これを解決するために提案された正規化手法がLayerNormalizationです。
この正規化は入力x=(x_1,x_2,...x_N)に対して、平均\muと分散\sigmaを用いて次の式で表されます。

  • 平均と分散
    \mu = \dfrac{1}{N}\sum\limits^N_{i=1}x_i
    \sigma^2 = \dfrac{1}{N}\sum\limits^N_{i=1}(x_i-\mu)^2
  • 正規化後のx_i(=\hat{x}_i)
    各特徴x_iから平均\muを引き、分散\sigmaで割ることでデータ分布が平均0、分散1に正規化されます。
    \hat{x}_i = \dfrac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}}
  • LayerNromの出力y_i
    LayerNromの出力y_iは、\hat{x}_iに学習過程で調整されるパラメータ\gammaを乗算、\betaを加算して正規化の範囲を最適化したものです。
    y_i = \gamma \hat{x}_i \beta
    = \gamma \dfrac{x - \mu}{\sqrt{\sigma - \epsilon}} + \beta

LayerNormでは入力系列データ以外を考慮しないため、入力データ長にばらつきがあっても対応できます。VITでは系列長が揃っていることが一般的だと思いますが、元々のTransformerの名残なのかLayerNromを使用しています。

またBatchNormやLayerNromなどの正規化は、手法は異なれど目的は同じで、モデル内部の分布が学習時と訓練時で異なること(内部の共変量シフト)に起因する精度の低下を防ぐことです。

3.3 MLP

次にMLP(多層パーセプトロン)を解説します。
VITのMLPは以下のようなアーキテクチャを持ちます。

・MLP

  • Liner
    線形結合層。出力は重み付き線形和の配列
  • GELU
    Transformer系統モデルでよく利用される活性化関数。負の値でも完全に0にならないためReLUより情報の損失が少ないと言われている
  • DropOut
    一部のニューロンを無視する層

VITのMLPは、線型結合を利用した、二層のニューラルネットワークです。
改めて、Encoder Blockは
・MHSA
・LayerNorm
・MLP
によってEncoder Blockは構成されています。

Encoder Blockの機能としては、埋め込みによってベクトル化された画像の関連性を学習し、類似した情報をMLPに渡すことで、入力の特徴がよりよく表現された空間に転写しています。
この転写されたベクトルが次のMLPHeadに渡されるのです。

まとめ

上記のEncoder Blockを積み重ねたものが、VITのEncoder部分になります。積み重ねることで、より深く柔軟に画像の要素同士の関係性を学習する事ができます。
最後にアーキテクチャをもう一度示します。
・Encoder

今回は以上になります。最後まで読んでいただきありがとうございました。
次回はVIT最後の部品であるMLPHeadについて解説します。

参考

(1)原論文 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
(2)Vision Transformer 入門 株式会社技術評論社 2022/9/30 山本晋太郎,徳永匡臣,箕浦大晃,QIU YUE,品川政太郎

Discussion