TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【dlshogi】40ブロック512フィルタモデルの学習

dlshogiは直近では1年近く定跡生成に取り組んでいたため、モデルの大きな改善はなかった。
定跡生成が一段落したので、最近はモデルの改善に取り組んでいる。

終盤の読み抜け対策

ディープラーニング系のモデルには、終盤で読み抜けが比較的起こりやすいという課題がある(誤解されないように書いておくと、ほとんどの局面では精度は高い)。
その課題に対処するには、自己対局による強化学習のみで解決することは難しいと考えており、まず精度の高い定跡を作成し、その定跡を活用して終盤の課題に対処した方がよいと考えている。
そのために1年近くかけて定跡生成を行ってきた。

dlshogiの定跡生成手法では、実戦で指される頻度が高いほど深くまで掘られるようになっている。
また、深くまで掘ることで誤りに気付いた手順は自動で修正されるようになっている。
そのようにして生成した定跡を元に互角局面集や、評価が誤っていた局面を抽出し、それを初期局面集として連続対局を行うことで、終盤の課題に特化した訓練データを作成できる。
36手以上80手以下の範囲で互角な局面に絞っても50万局面近く抽出でき、バリエーションに富み、かつ実戦で現れやすい局面を多く含む訓練データを生成できる。

より大きなモデル学習

dlshogiのこれまで学習したモデルの傾向として、モデルサイズが大きいほど強くなることが確認できている。
直観的にはモデルサイズが大きいほどNPSが低下するため終盤で不利になるように思うが、モデル精度が上がることで読み抜けが減るメリットの方が上回る。
そのため、モデルサイズを大きくする方向で進化させていくべきと考えている。

これまでは30ブロック384フィルタのモデルが最大であったが、より大きなモデルを学習するには1GPUでは同じバッチサイズ4096ではメモリが不足して学習できない(バッチサイズを小さくすると学習時間がかかり過ぎるのと、BatchNormalizationの影響で精度が低下する)。
そこで、マルチGPUでデータパラレルで学習できるようにPyTorch Lightning対応を準備してきた。

40ブロック512フィルタのモデル

終盤対策の訓練データと、8GPUでの学習環境の準備ができたので、40ブロック512フィルタのモデルを学習した。

精度

収束するまで学習した際の精度は以下の通りとなった。
訓練データが同じではないが、比較のために30ブロック384フィルタのモデルの精度も示す。

評価データは、2017年~2018年6月のfloodgateのR3500以上の棋譜からサンプリングした856,923局面を使用した。

モデル 方策評価損失 価値評価損失 方策正解率 価値正解率
30ブロック384フィルタ 1.3060 0.4401 0.5585 0.7765
40ブロック512フィルタ 1.2670 0.4351 0.5691 0.7796

方策正解率は約1%、価値正解率は約0.3%向上している。

強さ

dlshogi互角局面集を使用して、持ち時間400秒、2秒加算で連続対局を行い、強さを比較した。
H100 1GPUを使用した。
また、NNUE系ソフトも持ち時間を10倍にしてリーグに加えて連続対局した。

# PLAYER           :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
1 pre53            :    39.1   44.4   138.5     275    50      96  124   29  122    11
2 pre44            :     0.0   ----   114.0     270    42     ---   97   34  139    13

※pre53が40ブロック512フィルタのモデル、pre44が30ブロック384フィルタのモデル
※NNUE系ソフトは、持ち時間を調整しており比較の意味はないため非表示にしている

40ブロック512フィルタのモデルの方がR+39.1強いという結果になった。

プレイアウト数を固定した場合についても測定した。
初期局面集には、定跡から抽出した36手目から80手目の互角局面を使用した。
プレイアウト数は、20万から55万とした。
30ブロック384フィルタのモデルは定跡から作成した方策とのアンサンブルモデルを使用している。
A100 1GPUを使用した。

# PLAYER         :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
1 pre53          :    37.9   81.2    44.5      82    54      82   39   11   32    13
2 bp             :     0.0   ----    41.0      90    46      88   37    8   45     9

※pre53が40ブロック512フィルタのモデル、pre44が30ブロック384フィルタのアンサンブルモデル

都合により比較しにくい測定条件になっているが、40ブロック512フィルタのモデルの方がR+37.9強いという結果になった。
また、中終盤の初期局面で強くなっていることが確認できた。

パラメータ数

30ブロック384フィルタのモデルと40ブロック512フィルタのモデルのパラメータ数は以下の通り。

モデル パラメータ数
30ブロック384フィルタ 80,516,418
40ブロック512フィルタ 189,763,522

40ブロック512フィルタのモデルは、30ブロック384フィルタのモデルに対して、約2.36倍である。

NPS

floodgateの棋譜からランダムで抽出した100局面に対して、A100 8GPU、2スレッド、3秒探索した際のNPSは以下の通り。

pre44 pre53 pre53/pre44
初期局面 116626 64133 0.550
平均 119712 64297 0.537
中央値 118273 64005 0.541
最大 197333 83557 0.423
最小 113785 58931 0.518

※pre53が40ブロック512フィルタのモデル、pre44が30ブロック384フィルタのモデル

NPSは半分程度になる。

まとめ

40ブロック512フィルタモデルを学習した。
終盤対策向けの訓練データを使用し、マルチGPUを活用して学習した。
30ブロック384フィルタのモデルよりも同一持ち時間でR+39.1近く強くなることが確認できた。
訓練データの違いはあるが、モデルが大きいほど強くなるという仮説を裏付ける結果となった。

今後、40ブロック512フィルタモデルを小さなモデルに蒸留することでNPSを上げることで強くなるか検証したい。
また、Transformerのモデルも試しているので、大規模なモデルではResNetとTransformerのどちらがスケールするか検証していきたい。