ViTについての実験をいくつか。
10ブロック、256chを長期学習
Google Colab Pro+を使って7日かけていつもの10倍、1.6Mステップ回した。
Policy損失はResNet(20ブロック・256ch)より良くなる。Value側がひどい。
速度差もあるので対局させたら多分大差だと思う。モデルが変わってしまったので対局やるのがちょっと面倒。まぁいずれやるかも。
ResNetでの対局結果(1手1秒)
Self-Attention後のMLPでチャンネル数を増やさないようにする
露骨に精度が落ちる。
大きくする
かなり大きくしてみる(20ブロック512ch)。
まともに学習ができていなさそうだったので撤退。
速度の検証
手元でTensorRT変換したViTの速度表できた(学習はしてないランダムパラメータ)。一番小さいsサイズでも重めのResNetよりかなり遅い
— t (@tokumini_ss) 2022年1月8日
いくらネットワーク大きくして精度良くなってもNPSが300とかではまともに探索できるわけがないと思うんだけど pic.twitter.com/iT0DBvcacN
まずsサイズを試すのが常識的なラインかなと思っている。
ブロック数を10blockから6に減らす
ちゃんと精度は落ちるが、ギリギリ許容範囲内かなぁというところか。
Poolformer
多少CNNに近いものなのでなんとかなるかと思ったら全然ダメだった。
学習量試算
ViTの学習をいろいろ試した論文の、sサイズモデルについての学習結果である表19を見ていた。
データサイズとしては300Mが一番近い。その場合(そうじゃない場合でも)2Mステップくらいまでは上がっていっていそう。
この論文ではバッチサイズ4096で学習が行われているそうだ。消費データ量を一致させる法則からすると、手元でできる最大限のバッチサイズが512で1/8なので、ステップ数は8倍するので16Mステップ。
今、よくやっているのが160Kステップ。なので100倍回せば良い。この記事冒頭の1.6Mステップから見れば10倍。
雑に計算すると70日〜80日くらい回せばなんとか達成できそう。簡単にやれるものではないが、腹を括ればできないものでもない。