VIT解説 Part2 Encoder
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(入力)
-
: keyのベクトルの次元数(Scale)d_k -
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です。
この正規化は入力
- 平均と分散
\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 で割ることでデータ分布が平均0、分散1に正規化されます。\sigma
\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