勾配降下党青年局

万国のグラーディエントよ、降下せよ!

ResNet vs Vision Transformer vs MLP-Mixer in おせろ

 画像認識系ディープラーニング界隈を盛り上げる三英傑を、オセロで比較してみました。実装は一応貼っておくけど・・・Python3.8が必要です。
GitHub - laksjdjf/DeepReversi: 趣味で作った深層オセロAI

モデル構造

全てのモデルがオセロの盤面(白黒の2チャンネル×8×8の画像データ)を入力として、方策確率(64次元ベクトルでそれぞれのマスに打つ確率)と価値(1次元ベクトルで有利か不利かを表す)の2つを返す構造になっています。

ResNet

畳み込み2層+残差結合のResNetブロックをいくつも重ねて作ります。一応以前説明記事を書いています。

ViT

オセロの場合パッチサイズは1、つまり各マスをトークンとします。クラストークンとあわせ65個のトークンがあり、パッチclassトークンは方策確率、クラストークンは価値を計算するのに使います。

MLP-Mixer

ViTと同様パッチサイズは1ですが、クラストークンはありません。出力はResNetとほぼ同じ構造です。

各モデルはchannelとblockの2つの設定(ほんとはもう一つあるけど)があります。channelはResNetの場合そのままチャンネル数、ViTやMLP-Mixerではパッチの埋め込み次元数になります。blockは単にResNetやTransformerブロックの数です。

学習について

以前作った自己対局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は割とありって感じでした。