Noesworthy

ViTのしくみ

Vision Transformer(ViT)は画像の内容を理解するモデル

昔はCNNっていうのが使われてたけど、こっちの方いろいろメリットがあって最近は主流みたい

仕組みざっくり調べてみた

学習時

画像をパッチにぶった切る(Patchify)

例えば 224×224 の画像があったら 16×16 の小さなブロックに切る

すると 14×14 = 196個のパッチになる

パッチをベクトルにして埋め込む(Patch Embedding)

一個のパッチの全てのピクセルのRGBを繋げてベクトルにする

16×16のパッチだったら 16×16×3で768次元になる

[ r,g,b, r,g,b, r,g,b, ... ] ← 768次元

これを線形変換(Wx + b)で 学習可能な埋め込みに変える。

このWを学習する

この時点で768次元のベクトルが縦に196個並んでるマトリックスができる

パッチ同士に位置情報を足す(Positional Embedding)

さきほどのマトリックスに位置情報を足し算する

足し算てどういうこと?って思ったら、位置情報自体もベクトルで、196個分それぞれもとのマトリクスに足し合わせるらしい

この位置情報のベクトル算出モデルみたいなのも多分学習する

画像のRGBと位置情報混ぜちゃって大丈夫なのぃ?って思ってるけどいったんスルーするぃ

Self-Attentionで画像の文脈を読む(Transformer Encoder)

ここからはお馴染みのアテンショ〜ン

みたいな感じで仲良し同士が近くなるエモの魔法をかけます

重みを学習します はぃ

推論時(分類タスク)

画像ぶった斬り→ベクトル化→Transformer通す

Transformerが教えてくれるのは、

っていう「全体の意味」(猫とは言わない)

それを分類ヘッドで受け取って、

みたいに出力する

#ai #tech