-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale [paper-reading] #56
Comments
vision transformer の存在を知ってたけどちゃんと読んでいなかった。 |
この研究のモチベーション自体は全然面白くなくて、Transformer 型のモデルが NLP でめっちゃ優秀な性能を発揮してるので出来るだけそれをそのまま vision の方に持ってこようというもの。 実験結果とかを考慮しない場合、よくこれが研究のモチベーションになるよなという感じがする(めちゃくちゃ乱暴に言えば他分野で流行ってるモデルをこっちの分野にも適用してみます、という話なので)。 もう少し話を押し進めると、Transformer 型モデルには「なぜか」べき乗則(test loss がモデルサイズもしくはデータサイズのべき分布になっている)が成り立つので、それが vision においても成立するかということを確かめたいというものになっている。 Transformer 型モデルのべき乗則の背後に何があるのか、それを理解することで(現状理解されているべき乗則を超えた)有効なモデルが作れるのか、にはかなり興味がある。これは個人的な興味で、この論文ではそれについて何かを示唆しているわけではない。 |
あとちょっと分かってないのは Transformer 型モデルの計算効率性というのも推しているところ。 vision は元々 convolution が主流でこれは例えばチャンネル毎に並列計算可能なので、vision の文脈でいうところの計算効率性というのはどういうものなのだろうか。 |
モデルの話をする。
モデルの概念図は以下の通り。 Transformer Encoder 部分はどこに Layer Norm を入れるとかで選択肢があるけどここに書いてある情報だけで十分なので割愛。 モデルの input に関して。まず元の画像は $ x ∈ R^{H \times W \times C} $ とする。 この patch にして embedding する、というのはなかなか良い塩梅なのではないかと感じる。 これはなかなか過激だし、面白いし、個人的にはちょっと悲しい。 ちなみにこの論文では convolution を使って feature map を作ってからそれに対して embedding をするという hybrid モデルも試している。 ちょっと長くなったので pre-training に関しては別で書くか。 |
自分が Vision Transformer の話を最初に聞いた時に思ったのは「へ〜 pre-training はどうやってるんだろう?」というものだった。 NLP においては分布仮説を信じて masked language model で学習するというのは bet するのに十分有望な戦略だと思うけど、画像の場合にもそれってやれるんだっけ?とか思っていた。 結論から言うと、Vision Transformer では unsupervised pre-training はしてなくて、画像分類ラベルがついている画像データで supervised training をしていた!マジかよ! これは期待外れ(自分が勝手に期待してただけだが)の結果だが、この論文では unsupervised な方法も試した上で最終的に supervised の方がいいので supervised pre-training をしている。
ここはもうちょっと工夫しがいがありそうだけど、なんか論文ではこの方向性にそんなに熱心ではない感じがする。 ちなみに PyTorch 実装 https://github.com/lucidrains/vit-pytorch では Bootstrap Your Own Latent (BYOL) https://arxiv.org/abs/2006.07733 という手法で unsupervised 学習ができるようになってる。 |
実験結果を見る。 その前に JFT-300M という画像データセットを知らないのでちょっと調べておく。 このデータで pre-training して、各種 downstream タスクを解いた結果が以下。 精度が驚くほど向上したというものではなく、十分デカいモデルを使えば先行研究で性能の高いモデルと同等以上の性能を発揮できる、というものになっている。 注目すべきは学習が終わるまでに必要な計算時間で、ViT-H/14 で先行研究の 1/4 以下になっている(TPUv3-core-days で 2.5k なので普通の人には手が出せるレベルではないが)。これはバッチサイズとか epoch 数とかを合わせて学習しているので、学習の条件としてはモデル以外は同等になっているはず(他にも当然 weight decay とかも影響するのでその辺もできるだけ同じ条件にしてる)。 まず、パラメタ数は ViT-Huge で 6.32 億で、BiT は 9.3 億、EfficientNet-L2 は 4.8 億。 そしたら縦にたくさん積んでるので層毎の計算の依存が多いので遅いのかな〜と思ったけど、(学習じゃないけど)inference は同じくらいの速度だった。以下の図の左から ViT-H/14 と R152x4 は同等程度。右からはバッチサイズに関しては ViT-H/14 の方が多く持てそうだけど、学習時にはバッチサイズ揃えて計算してるはずなのでこれは効いてないはず。 ということで自分にはなぜ ViT の学習が他と比べてこれだけ速いのかはイマイチわからなかった。 |
データセットサイズに対する scaling について。 結果は以下の図の左。 右の図も学習サンプル数を増やすことで ViT の大きいモデルは特に 30M-100M で大きく性能を伸ばしていることが分かる。 同じような scaling を横軸を学習時の総演算回数でプロットしたものが以下の結果。 これは hybrid (token を作る前に resnet 構造を入れて feature map を抽出するモデル) もプロットされているが、十分に学習する前には convolution を明示的に入れたものが性能に寄与しているが、十分に学習すると convolution を入れても効果は特にないという結果になっている。 この図は Table 6 のモデルに対するプロットで R152x4 がないというのはやっぱり納得がいかないが、結果としてはデカいが強いで scaling してそうというものになってる。 論文では ViT は性能が saturate してなさそうだからもっと scaling させたいねって言ってるけど、それは BiT も同じだと思うけどな。 |
positional embedding に関しては
という結果。 |
他にも色々やってるけど、自分が一番興味があった部分はチェックできた(理解できてないところはあるけど)ので、だいたいこんなもんかな。 patch 化するところだけちゃんと把握できてれば Transformer 型モデルそのものに近い構造なので、これは確かに text と一緒に使いたくなってくるね。それを実現しておどくべき成果を発揮したのが DALL·E ということだと思うので、次はそこを理解したいね(論文は出てないけど)。 |
論文リンク
https://arxiv.org/abs/2010.11929
公開日(yyyy/mm/dd)
2020/10/22
概要
画像分類を (convolution を使わず) transformer 型モデルで実施した。
Visual Transformer (ViT) というモデル名。
入力は計算量を抑えるために pixel 毎に全て attention を張るのではなく、patch に分け、各 patch を flatten した後に線形変換をしてある次元のベクトルにしたものを全 patch 文並べて embedding を作っている。当然 learnable positonal encoding も足してる。
事前学習は class token の出力に MLP を生やして教師あり学習として実施している(教師なしの方法も提案しているが簡素すぎるからか性能は低い)。
CNN based な過去手法よりも計算コストがだいぶ低い(1/4 TPU days くらいになる)が、ImageNet くらいのサイズのデータサイズだと劣後し、10倍, 100倍としていくことで同等以上の性能を発揮するようになる。
GitHub repository は https://github.com/google-research/vision_transformer
The text was updated successfully, but these errors were encountered: