TadaoYamaokaの開発日記

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

【dlshogi】QK RMSNormモデルの学習

来月の電竜戦に向けてQKNormを追加したモデルの学習を行った。

モデルアーキテクチャとサイズは、世界コンピュータ将棋選手権と同じで、モデルの差分はQKNormを追加しただけである。

訓練データは、終盤の精度を改善するため、終盤局面からNNUE系(氷彗)の自己対局で生成したデータを増やしている。

モデルアーキテクチャ

以前の記事で解説したResNet+Transformerのモデルに、QK RMSNormを追加した。

訓練データ

  • dlshogiの自己対局で生成したデータ
  • 60ブロック768フィルタのモデルから知識蒸留したデータ

に加えて、NNUE系(氷彗)の自己対局で生成したデータを加えた。

NNUE系の自己対局データ

定跡と棋力計測棋譜からdlshogiが評価を誤っていた約50万局面を抽出した。

それらの局面からランダムにサンプリングした局面を開始局面として、NNUE系(氷彗)で自己対局を行い、MultiPVの評価値から算出した方策の確率分布と、評価値、勝敗をhcpe3として出力した。
10PVで1億ノードで探索して、348万棋譜、2.3億局面を生成した。

生成スクリプト:
DeepLearningShogi/dlshogi/utils/usi_selfplay_multipv_to_hcpe3.py at master · TadaoYamaoka/DeepLearningShogi · GitHub


訓練データは、重複を平均化して、44.6億局面になった。

精度

評価データセットで評価した精度は以下の通り。

  • pre68_40x512 : 世界コンピュータ選手権のモデル
  • pre70_40x512 : QKNormを追加した今回のモデル

step val/policy_loss
pre68_40x512 9333303 1.248792648
pre70_40x512 9796439 1.242948532


step val/value_loss
pre68_40x512 9333303 0.707463503
pre70_40x512 9796439 0.708488047

step val/result_loss
pre68_40x512 9333303 0.43083781
pre70_40x512 9796439 0.430271864

step val/policy_accuracy
pre68_40x512 9333303 0.576049268
pre70_40x512 9796439 0.577958882

step val/value_accuracy
pre68_40x512 9333303 0.783946633
pre70_40x512 9796439 0.783714056

step val/policy_entropy
pre68_40x512 9333303 1.061317444
pre70_40x512 9796439 1.056276321

step val/value_entropy
pre68_40x512 9333303 0.462144673
pre70_40x512 9796439 0.461096942


方策の正解率が、約0.2%向上している。価値はほぼ同じである。

棋力測定

世界コンピュータ選手権のモデルは、温度パラメータの調整が必要だったため、今回も温度パラメータを変えて測定した。

終盤の精度を測りたいため、終盤互角局面(65万局面)を使用している。

   # PLAYER                  :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)     W    D     L  D(%)
   1 hayabusa-8th            :    32.8    7.5  4410.0    7995    55      89  4130  560  3305     7
   2 pre70_40x512_temp180    :    18.5   21.2   500.5     980    51      62   475   51   454     5
   3 pre70_40x512_temp140    :    13.5   21.1   506.0    1003    50      74   461   90   452     9
   4 pre70_40x512_temp150    :     2.7   20.9   497.5    1014    49      56   458   79   477     8
   5 pre70_40x512_temp170    :     0.2   20.8   487.0     999    49      55   456   62   481     6
   6 pre70_40x512_temp190    :    -1.8   20.1   482.0     994    48      66   443   78   473     8
   7 pre70_40x512_temp120    :    -8.1   20.3   472.0     990    48      66   434   76   480     8
   8 pre68_40x512            :   -12.6    7.7  3720.0    8007    46      59  3431  578  3998     7
   9 pre70_40x512_temp130    :   -15.4   21.1   468.5    1002    47      81   441   55   506     5
  10 pre70_40x512_temp160    :   -29.8   21.3   455.5    1014    45     ---   415   81   518     8

温度1.8で、世界コンピュータ選手権のモデルより、R+31.1になっている。

温度1.4もそれと同じ程度の強さである。

8GPUでの強さ

8GPUの場合、最適な温度パラメータが変わる可能性があるため、温度1.8と1.4で比較した。

   # PLAYER                  :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 hayabusa-32th           :    11.9   28.2   175.5     339    52      66  165   21  153     6
   2 pre70_40x512_temp140    :     1.4   28.1   170.5     339    50      73  157   27  155     8
   3 pre70_40x512_temp180    :   -13.3   27.6   163.0     340    48     ---  153   20  167     6

White advantage = 204.71 +/- 16.75
Draw rate (equal opponents) = 7.98 % +/- 1.26

8GPUでは、温度1.4の方が強い(CFS 73%)ことがわかった。

32スレッドの氷彗と終盤で互角程度の強さになっている(NN Cacheの改善も含む)。

以前は氷彗と相当差を付けられていたが、終盤精度でもだいぶ追い付くことができた。

dlshogiの弱点であった終盤精度も克服できつつある。

まとめ

来月の電竜戦に向け、ResNet+TransformerにQKNormを追加し、終盤強化用のNNUE系自己対局データを含む44.6億局面で学習した。
従来モデルと比較して方策の正解率が約0.2ポイント向上し、終盤局面での棋力も最大R+31.1改善した。
8GPU環境で、32スレッドの氷彗と終盤でほぼ互角となり、dlshogiの弱点だった終盤精度の改善が確認された。