図解Vision transformerの処理

43.1K Views

August 01, 23

スライド概要

Vision Transformerで行われるベクトルや行列の計算を図で説明しています.

profile-image

コンピュータを使って色々計算しています.個人的な技術に関するメモと講義資料が置いてあります.気が向いた時に資料を修正しています. 公立小松大学臨床工学科准教授 https://researchmap.jp/read0128699

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

図解 Vision transformerの処理 公立小松大学 藤田 一寿 Ver. 20241119 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scaleの図解

2.

Vision transformer (ViT)の特徴 • 画像識別のためのニューラルネットワークのモデル(アーキテクチャ)である. • 画像識別タスクでよく使われている畳み込みを使わない. • 畳み込みが無い方が良いかどうかはタスクによるだろう. • 画像をパッチ(小さい画像)に分けて処理する. • パッチの位置情報を保持する仕組みがないため,パッチの位置情報は消失する. • 顔画像の場合,目の部分がパッチとして切り出されたとすると,その目のパッチは鼻の上にある.しかし ,ViTは目が鼻の上にあるという情報は使えない. • しかし,パッチの位置情報は画像識別で重要なためViTではPosition embeddingsを導入することでパッチ の位置情報を取り込む. • パッチ数が増減してもネットワークの構造を変える必要がないため,パッチ数に制限ない (メモリが許 す限り). • ただし,position embeddingsを学習可能にするとパッチ数を可変に出来ない.しかし,ViTの著者は position embeddingsの値を補完することで対応している. • パッチ数に制限はないため,ViTに入力する画像のサイズに制限はない( メモリが許す限り). • 同じネットワークで様々なサイズの画像サイズを扱える.

3.

Vision Transformerの処理の概要 • 画像をパッチ(小さな画像)に分ける. • パッチからEmbeddingsを得る. • Transformer EncoderにEmbeddingsを入力する. • CLS embeddingを多層パーセプトロンに入力する.

4.

Vision Transformerの構造と処理 Clsトークンのみを用い, 多層パーセプトロンが識 別を行う. embeddingsが Transformer Encoder で処理される. 画像をパッチに 分ける. Class embedding (clsトー クン) が追加される. パッチがembeddingsに変換される.

5.

ViTの具体的な処理と配列の形 状

6.

1.Embeddingsの作成

7.

Embeddingの作成手順 𝑊𝐻 1. 画像𝑥を 𝑝 𝑝 個のパッチに分ける.パッチは𝑝 × 𝑝 × 𝑐の画像(3階テ ンソル)である.ここで𝑐はチャネルを表す. 2. パッチをベクトル𝒙𝑛𝑝 にし,行列𝑬をかける(𝒙𝑛𝑝 𝑬). 𝒙𝑛𝑝 𝑬 は𝑝2 𝑐次元 ベクトルで,𝑬は学習可能である. 𝒙𝑛𝑝 をembeddingと呼び,今後 embeddingsは個別に処理される. 3. それぞれのパッチから計算されたembeddingsにclass embedding 𝒙class を追加する. 4. Embeddingsにposition embeddings 𝑬posを足す.

8.

画像をパッチに分ける 𝑊 𝒙 ∈ 𝑅𝐻×𝑊×𝐶 𝑁 𝐶 𝐻 𝑃2 𝐶 画像を𝑃 × 𝑃の小さ な画像(パッチ) に分ける. 画像𝒙 ∈ 𝑅𝐻×𝑊×𝐶 は3階テンソルで ある. それぞれのパッ チをベクトルに する. パッチは𝑁 = 𝐻𝑊/𝑃2 個ある. それぞれのパッチは𝑅𝑃×𝑃×𝐶 の3階テ ンソルである.つまり,パッチは 𝑃 × 𝑃の画像である. 2 パッチはそれぞれ𝒙𝑛𝑝 ∈ 𝑅𝑃 𝐶 のベクトルに変換される.つま り, ベクトルが𝑁個できる.

9.

パッチをembedingに変換する 1 𝑃2 𝐶 𝒙1𝑝 × 𝑃2 𝐶 𝐷 𝐷 2 𝑬 ∈ 𝑅 𝑃 𝐶 ×𝐷 1 学習可能 𝒙1𝑝 𝑬 これが𝑁個ある サイズ𝑃2 𝐶のベクトルになったパッチに行列𝐸をかけて,サイズ𝐷のベクトルを作る.𝐷はembedding sizeである. 𝐸はニューラルネットワークの学習により得る.つまり𝐸はニューラルネットワークの重みである. 𝒙1𝑝 重み𝐸 𝑃2𝐶個 𝒙1𝑝 𝑬 𝐷個

10.

CLS embeddingを追加する 𝒛00 = 𝒙𝑐𝑙𝑎𝑠𝑠 1 𝐷 学習可能 𝑁個のパッチ+𝑥𝑐𝑙𝑎𝑠𝑠 だから𝑁 + 1個 追加 𝑥𝑝 𝐸 𝒙𝑝 𝑬 = 𝒙1𝑝 𝑬; 𝒙2𝑝 𝑬; … ; 𝒙𝑁 𝑝𝑬 𝐷 𝑁+1 𝑁 𝐷 𝒙𝑐𝑙𝑎𝑠𝑠 ; 𝒙1𝑝 𝑬; 𝒙2𝑝 𝑬; … ; 𝒙𝑁 𝑝𝑬 Class embedding(clsトークン) 𝑥𝑐𝑙𝑎𝑠𝑠 = 𝑧00 を学習可能なembeddingとして追加する. 識別の際, Transformer encodeにより処理された𝑥class のみ(CLS embeddingのみ)を 用い識別が行われる.

11.

Positional embeddings + 𝐷 𝐸𝑝𝑜𝑠 𝑁+1 𝐷 𝑁+1 𝑁+1 𝐷 𝒛0 学習可能 𝒙𝑐𝑙𝑎𝑠𝑠 ; 𝒙1𝑝 𝑬; 𝒙2𝑝 𝑬; … ; 𝒙𝑁 𝑝𝑬 𝒛0 = 𝒙𝑐𝑙𝑎𝑠𝑠 ; 𝒙1𝑝 𝑬; 𝒙2𝑝 𝑬; … ; 𝒙𝑁 𝑝 𝑬 + 𝑬𝑝𝑜𝑠 これがTransformer endocderの入力となる なぜ𝑬𝑝𝑜𝑠を足さねばならないか(positional embeddingsが必要か)は以降のスライドで説明する.

12.

Position embeddingsはなぜ必要か • Vision TransformerおよびTransformerは場所情報(順番情報)を扱え ない. • embeddingsを全結合層で処理するため,embedingの内部構造(順番や位 置)に意味がない. • しかし,画像であれ文章であれ位置は重要な情報を含んでいるはずで ある. • 位置情報が扱えないTransformerに位置情報を扱えるようにするため に,position embeddingsが用いられる.

13.

Position embeddingsとはなにか • 場所情報を持つ行列𝑬posをposition embeddingsと呼ぶ. • 𝑬posをembeddingsに加えることで,各embeddingsに場所情報を与え る. • Vision transformerでは𝑬posは学習により得る. • Transformerでは𝑬pos を正弦波で作る. • Vision transformerでも 𝑬pos に正弦波を用いることが可能である. • 𝑬posを学習しても正弦波にしても大きな性能の変化はない. • しかし 𝑬posを使わなければ性能は落ちる.

14.

𝑥 100000/𝐷 𝑃𝐸 𝑥, 1 = cos 𝑬10 pos … 𝑃𝐸 𝑥, 10 = sin 𝑥 100000/𝐷 𝑁 𝑬pos 𝑃𝐸 𝑥, 0 = sin 𝑥 𝑁 𝑬1pos 𝑬0pos 𝐷 𝑥 100005/𝐷 1D sinusoidal position embeddings … 1次元正弦波を用いたposition embeddingsは次の式で表される. 𝑥 𝑥 𝑃𝐸 𝑥, 2𝑖 = sin 100002𝑖/𝐷 ,𝑃𝐸 𝑥, 2𝑖 + 1 = cos 100002𝑖/𝐷 𝐷 𝑖は0,1,2, … , 2 − 1の整数である. 𝑥はパッチの場所(行番号),2𝑖と2𝑖 + 1 はembeddingの番号(列番号)であ る. 100002𝑖/𝐷 は波長を表す.波長はembeddingごとに異なる. Sinusoidal position embeddingsではclsトークンに𝐸𝑝𝑜𝑠 を加えても意味がないので,𝐸po sは𝑁 × 𝐷の行列にしている.

15.

1D sinusoidal position embeddings 𝑥 それぞれ,Embedding sizeが256,24 × 24パッチに 対する𝐸𝑝𝑜𝑠である.上の図のような1次元の正弦波 が各列 𝑥𝑝𝑑 𝐸に足される.Enbeddingの番号が増える 𝑑 の値を対応する ほど波長が長くなる.右図は 𝐸𝑝𝑜𝑠 画像の場所に配置したときの強度分布である.

16.

2D sinusoidal position embeddings 1 𝐷 𝑥 𝑊/𝑝 𝐻/𝑝 𝑬pos 𝑁 𝑁 𝑦 入力画像上の パッチの位置 1次元正弦波を用いたpositional encodingは次の式で表される. 𝑥 𝑥 𝑃𝐸 𝑥, 𝑦, 2𝑖 = sin , 𝑃𝐸 𝑥, 𝑦, 2𝑖 + 1 = cos 100004𝑖/𝐷 100004𝑖/𝐷 𝑦 𝑦 𝑃𝐸 𝑥, 𝑦, 2𝑗 + 𝐷/2 = sin , 𝑃𝐸 𝑥, 𝑦, 2𝑗 + 1 + 𝐷/2 = cos 100004𝑗/𝐷 100004𝑗/𝐷 𝐷 𝑖, 𝑗は0,1,2, … , 4 − 1の整数である. 𝑥, 𝑦はパッチを2次元に配置したときの場所(行番号),4𝑖などは はenbeddingの番号(列番号)である. 100004𝑖/𝐷 と 100004𝑗/𝐷 は波長を表す.波長はenbedding ごとに異なる.

17.

2D sinusoidal position embeddings 𝑑 の値を対応する画像の場所に配置したときの強度分布である. 右図は 𝐸𝑝𝑜𝑠

18.

2. Transformer encoderの処理

19.

Transformer Encoderの処理 MLPの出力に 𝑧𝑙′ が足される.𝑧𝑙 = MLP LN 𝑧𝑙′ + 𝑧𝑙′ 多層パーセプトロン(MLP)で処理される.MLP LN 𝑧𝑙′ MSAの出力に𝑧𝑙−1 が足される. 𝑧𝑙′ = MSA 𝐿𝑁 𝑧𝑙−1 + 𝑧𝑙−1 Multi-head self attentionが行われる. MSA LN 𝑧𝑙−1 Layer normalizationが行われる. LN ⋅

20.

Multi-head self attentionの処理 Multi-Head Attention 全結合ネットワークで処理する. 𝑨𝒗の計算をする. 各ヘッドを統合する. 𝑨 = softmax LN 𝒛𝑙−1 がℎヘッドに分かれる. 各ヘッドは𝒒, 𝒌, 𝒗行列からなる. 𝒒𝒌T 𝐷ℎ 𝒒𝒌Tの計算をする. Multi-Head Attention consists of several (Vaswani et al., 2017, Attention is all you need)

21.

Layer normalization 𝒛𝑙−1 𝐷 𝑁+1 𝑁+1 𝐷 LN 𝒛𝑙−1 データを一つづつ正規化する. 𝑦𝑖 = 𝛾𝑥ො𝑖 + 𝛽 = 𝐿𝑁 𝑥𝑖 1 𝜇𝑖 = 𝐻 σ𝐻 𝑗 𝑥𝑖𝑗 , 𝜎𝑖 = 𝑥 −𝜇 2 1 𝐻 σ𝑗 𝑥𝑖𝑗 − 𝜇𝑖 , 𝑥ො𝑖 = 𝑖𝑗 𝑖 𝐻 𝜎𝑖 𝐻は𝑥𝑖 に含まれる要素の数,𝑖はデータの番号である. Layer normalization (Ba, Kiros, and Hinton, 2016) はデータごとに正規化している. Batch normalizationは各チャネルをバッチごとに正規化している. https://paperswithcode.com/method/layer-normalization

22.

Multi-head self attention 𝐷 × × × × × × 1 𝑁 + 1個 Transformer encode 内で𝑈は一つで, embeddingごとに 同じ𝑈をかける. 𝑼 ∈ 𝑅𝐷×3𝐷 𝐷 学習可能 3𝐷 𝐷/ℎ 𝐷/ℎ 𝐷/ℎ 𝒒 𝒌 𝒗 𝐷/ℎ 𝐷/ℎ 𝐷/ℎ 𝒒 𝒌 𝒗 ℎ個ある 𝑁+1 LN 𝒛𝑙−1 𝑁+1 𝑁 + 1個 𝑁+1 𝑁+1 𝐷 3𝐷 𝐷/ℎ 𝐷/ℎ 𝐷/ℎ 𝒒 𝒌 𝒗

23.

Multi-head self attention 𝑁+1 𝐷/ℎ 𝐷/ℎ 𝐷/ℎ 𝒗 SA × 𝒌 𝑁+1 𝒒 𝐷/ℎ 𝐴 = softmax 𝑨 × 𝑞𝑘 𝑇 𝐷ℎ SA 𝒛 = 𝑨𝒗 SA 𝑧 はℎ個あるのでそ れを結合する. 𝐷 𝑁+1 𝑁+1 𝑁+1 SA SA SA SA [SA1 𝒛 , … , SAℎ 𝒛 , ]

24.

Multi-head self attention 𝐷 𝐷 × 𝐷 𝑼𝑚𝑠𝑎 ∈ 𝑅𝐷×𝐷 𝑁+1 𝑁+1 𝐷 MSA 学習可能 MSA LN 𝒛𝑙−1 = SA1 LN 𝒛𝑙−1 , … , SAℎ LN 𝒛𝑙−1 SA1 LN 𝒛𝑙−1 , … , SAℎ LN 𝒛𝑙−1 重み 𝑼𝑚𝑠𝑎 𝐷個 𝑼𝑚𝑠𝑎 ∈ 𝑅𝐷×𝐷 はこの全結合ニューラル ネットワークを用い学習する. 𝐷個 𝑼𝑚𝑠𝑎

25.

MLP LN 𝒛′𝑙 Φ 𝑥 :ガウス分布の累積分布関数 erf: Gaussian error function 𝐷 𝐷 𝑁+1 𝑥 𝑥 1 + erf 2 2 𝐷個 𝐷個 GELU (Gaussian Error Linear Unit) ℎ 𝑥 = 𝑥Φ 𝑥 = GELU + 𝒛𝑙−1 LN 𝒛′𝑙 MLP LN 𝒛′𝑙 + 𝒛′𝑙 𝐷 𝑁+1 𝒛′𝑙 = MSA LN 𝒛𝑙−1 + 𝒛′𝑙 𝑁+1 𝑁+1 𝑁+1 𝒛𝑙−1 𝐷 𝑁+1 𝐷 𝐷 MSA Layer Normalization MHSA後の処理 𝒛𝑙 𝒛𝑙 = MLP LN 𝒛′𝑙 + 𝒛′𝑙

26.

3.MLPの処理

27.

識別 𝑁+1 𝐷 𝒛𝐿 clsトークンを取 り出す. 𝐷 1 𝒛0𝐿 識別結果 Layer Normalization 𝒚 = LN(𝒛0𝐿 ) 𝐾個 𝐷個 𝐾クラスあるとする. MLP 𝒚 clsトークン 𝑧𝐿0 のみ抽出し,それを用い識別する.他のembeddingsは使用しない. Fine-tuningのときはMLPを取り除き,0で初期化された𝐷 × 𝐾のフィードフォワード層 をつける.つまり,classification headが3層から2層に変更される(MLPからLinearへ 変更).