ResNet vs Vision Transformer vs MLP-Mixer in おせろ
画像認識系ディープラーニング界隈を盛り上げる三英傑を、オセロで比較してみました。実装は一応貼っておくけど・・・Python3.8が必要です。
GitHub - laksjdjf/DeepReversi: 趣味で作った深層オセロAI
モデル構造
全てのモデルがオセロの盤面(白黒の2チャンネル×8×8の画像データ)を入力として、方策確率(64次元ベクトルでそれぞれのマスに打つ確率)と価値(1次元ベクトルで有利か不利かを表す)の2つを返す構造になっています。
ResNet
畳み込み2層+残差結合のResNetブロックをいくつも重ねて作ります。一応以前説明記事を書いています。
学習について
以前作った自己対局34万試合分のデータを使います。dlshogiの学習則をほぼそのまま利用しています。
3つのモデルすべて128チャンネル(埋め込み次元)、10ブロックでやりました。モデルサイズはResNetが20MB、ViTが8MB、MLP-Mixerが12MBくらいになってます。
でまあここで本当は学習ログなど貼るべきなのですが、色々試したりコードを変えながらやったのでありません。学習結果については、検証データの方策正解率や価値正解率は3つのモデルでだいたい同じになりました。ただし学習時間はかなり差があり、パラメータ数が一番小さいViTが一番時間かかりました。もうやりたくないレベルでかかりました。
結果、edaxというすごいオセロAIの5レベル(5手読み)を入れて総当たり戦で比較してみます。こちらは1000プレイアウトです。私のモデルは同じ結果にならないように10%の確率で次善手を打ちます。
モデル | 勝敗 | Elo rating | 思考時間合計(秒) |
ResNet | 160勝140敗 | 1533 | 2584 |
ViT | 147勝153敗 | 1486 | 3052 |
Mixer | 152勝148敗 | 1500 | 2744 |
Edax 5 | 141勝159敗 | 1481 | 25※ |
※edaxは小数点3ケタしか返してくれないので丸め誤差あり。
どのモデルもあまり差がないですね。同じデータセットで同じくらいの正解率なので当たり前と言えば当たり前ですが。一応一番強くて一番思考時間が少ないのはResNetで、結局畳み込みが優秀なんじゃんという話になりました。実装も一番簡単ですしね。モデルのデータ量はResNetが一番大きいのですがそれでも20MBにしかならないのでどうでもいいです。ViTは実装も難しく学習時間も長いのでうんちです。MLP-Mixerは割とありって感じでした。