前回、nnue-pytorchでdlshogiの棋譜を学習して、floodgateの棋譜でテストを行うと、評価損失(val_loss)が上昇する事象が起きることを書いた。
いろいろ条件を変えて実験したところ、最適化をデフォルトのRanderから、Momentum SGDに変更すると評価損失(val_loss)が下がることがわかったため、精度と強さの比較を行った。
Momentum SGD実装
PyTorchのデフォルトのtorch.optim.SGDを使用し、パラメータはdlshogiの学習で使用しているものと同じ値(momentum=0.9、nesterov=True、weight_decay=0.0001)とした。
訓練データ
dlshogiの学習で使用したデータをqsearchでフィルタした約32億局面を使用した。
訓練条件
- 標準NNUE(HalfKP)
- バッチサイズ:8192(デフォルト)
- 学習率:0.001、75エポックごとに0.3(デフォルト)
- 1エポック:100,000,000ステップ(デフォルト)
- エポック数:500
強さ
1手3秒で、互角局面集を使い連続対局を行った。
水匠5も加えたリーグ戦の結果は以下の通り。
ranger_e500 vs sgd_e500: 418-0-0 (100.0%) Black vs White: 209-209-0 (50.0%) ranger_e500 playing Black: 209-0-0 (100.0%) ranger_e500 playing White: 209-0-0 (100.0%) sgd_e500 playing Black: 0-209-0 (0.0%) sgd_e500 playing White: 0-209-0 (0.0%) ranger_e500 vs suisho5: 37-370-8 (9.9%) Black vs White: 210-197-8 (51.6%) ranger_e500 playing Black: 23-183-2 (11.5%) ranger_e500 playing White: 14-187-6 (8.2%) suisho5 playing Black: 187-14-6 (91.8%) suisho5 playing White: 183-23-2 (88.5%) sgd_e500 vs suisho5: 0-413-0 (0.0%) Black vs White: 206-207-0 (49.9%) sgd_e500 playing Black: 0-207-0 (0.0%) sgd_e500 playing White: 0-206-0 (0.0%) suisho5 playing Black: 206-0-0 (100.0%) suisho5 playing White: 207-0-0 (100.0%)
考察
Momentum SGD(sgd_e500)は、Ranger(ranger_e500)と水匠5(suisho5)に対して1勝もしていない。
Momentum SGDは、floodgateの棋譜に対する損失が低く汎化できていそうであるが、対局すると非常に弱いことがわかった。
Rangerの方は、水匠5にも同一思考時間である程度勝てるようになった。
Momentum SGDより、Randerの方がfloodgateに対する損失は高いが強いということは、NNUE系は過学習した方が強いことを示唆していそうである。
Rangerと水匠5のレーティング差は、以下の通り。
# PLAYER : RATING ERROR POINTS PLAYED (%) CFS(%) W D L D(%) 1 suisho5 : 195.0 27.9 374.0 415 90 100 370 8 37 2 2 ranger_e500 : -195.0 27.9 41.0 415 10 --- 37 8 370 2 White advantage = 33.29 +/- 26.85 Draw rate (equal opponents) = 3.32 % +/- 1.17
水匠5とは、390のレーティング差がある。
しかし、前回4.5億局面を100epochしたときよりも格段に強くなっている。
前回は、水匠5を1手100msにしても約440のレーティング差があった。
まとめ
nnue-pytorchの最適化をMomentum SGDにした場合の精度と強さを、デフォルトの最適化Rangerと比較した。
結果、Momentum SGDの方はfloodgateの棋譜に対して損失が低下し、汎化性能が高いようだが、対局すると非常に弱いことがわかった。
Rangerの方は、floodgateの棋譜に対して損失が上昇し、訓練データに対して過学習しているようだが、対局すると強いことがわかった。
今回dlshogiの学習で使用した約32億局面を使用し、500エポック学習したが、水匠5に対してはレーティング差はまだ390ある。
dlshogiのモデルを活用してNNUEを強くするという目標に対してはまだ工夫が必要である。
nodchip氏によると、tanuki-のNNUEの学習には80億局面を使用しているということなので、訓練データの数の不足が一因としてありそうである。
dlshogiの強化学習と同じ条件で80億局面を生成するのは現実的でないため、NNUE系で生成したデータでの事前学習が必要になりそうである。
別途、NNUE系で生成したデータでの事前学習を試したい。