TadaoYamaokaの開発日記

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

【dlshogi】dlshogiモデルでNNUEの評価値を付け替える その3

前回、NNUE系で生成した教師データの方策と評価値をdlshogiのモデルで推論した結果に付け替えることで、方策と評価値ともに精度が上がることを確認した。

今回は、学習の損失の勝敗項についても、モデルで推論した価値に付け替えることで、精度が上がるか試した。

勝敗項

学習の損失は、方策の交差エントロピーと評価値(Q値)の交差エントロピーと勝敗の交差エントロピーの3つの項の重み付き和で計算する。

評価値の項 L_{val} と勝敗の項 L_{result} は、パラメータ \lambda_{val} を使用して、
 \lambda_{val} L_{val} + (1 - \lambda_{val}) L_{result}
で、按分する。

dlshogiのデフォルトでは、\lambda_{val} = 1/3 に設定されており、評価値の項より勝敗の項の方が重視されている。

勝敗項の付け替え

前回作成した方策と評価値を付け替えたデータを流用して、\lambda_{val} の値を変更して、勝敗項の重みを減らした場合に、精度が上がるか確認する。
\lambda_{val} = 1 の場合、勝敗項を使わないことを意味する。

精度評価

教師データ

前回同様、2020年にNNUE系で生成した教師データ65,267,650局面を使って検証する。
キャッシュを作成する際に、同一局面の平均化を行うので、訓練データ数は、63,965,555局面になる。

学習条件

前回と同じ条件とする。

  • バッチサイズ: 4096
  • エポック数: 8
  • 学習率: 0.04から1エポックごとに半減
  • オプティマイザ: MomentumSGD
  • 同一局面は平均化
  • モデル: ResNet 20ブロック256フィルタ
  • 評価値の付け替えに使用するモデル: dlshogiの40ブロック512フィルタのモデル
学習結果

テストデータに、2017年~2018年6月のfloodgateのR3500以上の棋譜からサンプリングした856,923局面(重複なし)を使用して、評価した結果は以下の通り。

\lambda_{val} 方策損失 価値損失 方策正解率 価値正解率
1 1.5752 0.4888 0.4932 0.7438
0.95 1.5841 0.4913 0.4894 0.7419
0.9 1.5735 0.4892 0.4917 0.7435
0.7 1.5778 0.4883 0.4923 0.7428
0.5 1.5819 0.4910 0.4918 0.7411
0 1.6117 0.7419 0.4830 0.7006

\lambda_{val} = 0.9 のとき、方策の損失が最小になり、\lambda_{val} = 0.7 のとき、価値の損失が最小となった。
\lambda_{val} = 1 のとき、方策、損失がバランスよく小さくなっている。

\lambda_{val} = 0 のとき、つまり評価値の項を使わず勝敗の項のみを使用した場合が最も精度が低かった。

勝敗の項についても付け替えを行った方がよいことが分かった。

まとめ

NNUE系で生成した教師データの勝敗の項もモデルの推論結果で付け替えた方がよいか検証した。
結果、勝敗の項も付け替えた方が、方策と価値ともに精度が上がることが確認できた。

今回までの一連の実験では、2020年にNNUE系で生成した教師データを使用したが、nodchip氏が公開している最近のNNUEで生成した教師データでも同じ傾向になるか追加で検証したい。