TadaoYamaokaの開発日記

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

将棋AI実験ノート:20ブロックの学習

ResNet15ブロックのモデルで生成した教師データを用いて、20ブロックのモデルを学習し、精度と強さを比較してみた。

モデルサイズ

15ブロックのモデルは、15ブロック224フィルタ
20ブロックのモデルは、20ブロック256フィルタ
1ブロックは畳み込み2層
活性化関数はSwish

教師データ

15ブロックのモデルの学習に使用した約32億局面を学習した。
floodgateの棋譜や従来型の将棋AIで生成した棋譜も一部含んでいる。

学習条件

バッチサイズ:4096
学習率:0.04から1エポックごとに1/2
重複局面の平均化あり
評価値の補正あり
12エポック学習

学習時間比較

1バッチ学習を1ステップとして、1000ステップ学習にかかった平均時間は以下の通り。

時間(時:分:秒)
15ブロック 0:05:41
20ブロック 0:07:35 133%

20ブロックのモデルは、学習に約1.33倍時間がかかっている。

精度比較

2017年~2018年6月のfloodgateのR3500以上の棋譜からサンプリングした856,923局面(重複なし)を使用して精度を比較した。
教師データにはfloodgateの棋譜も含んでいるが、テストデータの期間の棋譜は含んでいない。

なお、学習にテストデータを含めてしまうと精度が大幅に良く出てしまうので注意が必要である。
第2回電竜戦のGCTでは、方策の精度が0.60、価値が0.79になったと聞いていたが、dlshogiのテストデータを使うとそれぞれ0.49、0.74くらいで、GCTのテストデータを学習に含めていたことで精度が良く見えていた(リークした)状態であった。

15ブロックのモデルは、教師データ継ぎ足しながら学習しているため、完全に同じではないが、精度を比較した。
SWAを適用した後のモデルで比較する。

エポック数 方策精度 価値精度
15ブロック 14エポック 0.5269174 0.7633635
20ブロック 12エポック 0.5374750 0.7670151

20ブロックのエポック数は15ブロックにまだ追いついていないが、精度は、15ブロックよりすでに大幅に良くなっている。

強さの比較

ブロック数が増えると、探索速度が落ちるため、強さの比較は、同一探索ノード数の条件、同一持ち時間での条件で比較した。

同一探索ノード数

探索ノード数を10万に固定して比較した結果は、以下の通り。
固定4000万ノードの水匠5も加えたリーグで測定した。

   # PLAYER             :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D     L  D(%)
   1 pre21-nodes100k    :    68.4   12.1  1010.0    1600    63     100  958  104   538     6
   2 pre17-nodes100k    :    14.2   11.7   843.5    1600    53     100  790  107   703     7
   3 suisho5-40m        :   -82.6   11.7   546.5    1600    34     ---  511   71  1018     4

White advantage = 95.31 +/- 7.34
Draw rate (equal opponents) = 6.38 % +/- 0.53

※pre21が20ブロック、pre17が15ブロック

20ブロックのモデルが、R+54.2になっている。
固定ノード数では、推論速度によらずモデルの精度のみで比較するため、テストデータでの精度比較の通り、20ブロックの方が強いという結果になった。

自己対局は、ノード数固定で行っているため、今後は20ブロックのモデルを使って自己対局を行うことにしたい。

同一持ち時間

持ち時間400秒、1手2秒加算で対局させて強さを比較した。
1GPU3スレッドのdlshogiとほぼ同じ強さになるように、32スレッド水匠5の持ち時間は1600秒として、リーグ戦で測定した。

   # PLAYER            :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 suisho5-32thx4    :     7.5   19.3   254.5     495    51      62  215   79  201    16
   2 pre17             :     2.4   19.8   253.0     501    50      76  217   72  212    14
   3 pre21             :    -9.9   19.7   238.5     496    48     ---  201   75  220    15

White advantage = 109.25 +/- 11.94
Draw rate (equal opponents) = 16.05 % +/- 1.46

※pre21が20ブロック、pre17が15ブロック

15ブロックの方が、R+12.3という結果になった。
ただし、CFS(信頼度)は76%であり、誤差の範囲である。

20ブロックは精度は高くなったが、同一持ち時間では、強さは15ブロックと同程度である。

NPSの比較

15ブロックと20ブロックで、探索速度(NPS)を比較した。
floodgateの棋譜からサンプリングした100局面で、8GPU4スレッドで1秒探索した際の結果は以下の通り。

               pre17          pre21
count     100.000000     100.000000
mean   380754.050000  303340.570000
std     38671.979844   22344.165674
min    250165.000000  223958.000000
25%    366500.750000  291622.500000
50%    391344.000000  306276.500000
75%    409446.500000  318108.250000
max    431834.000000  373004.000000

※pre21が20ブロック、pre17が15ブロック

20ブロックの方のNPSは平均で79.6%に低下している。

まとめ

15ブロックと20ブロックで同じ教師データを学習した場合のモデル精度と強さを比較した。
モデル精度は、20ブロックが大幅に高くなることがわかった。
強さは、同一ノード数の場合、20ブロックがR+54.2になり、同一持ち時間ではほぼ同じになった。

15ブロックのモデルは、追加学習しても強くならなくなっているため、今後は20ブロックのモデルで学習を行うつもりである。
現状では、モデル精度と探索速度が釣り合っている状態のため、大会の持ち時間で比較した上で、大会でどちらのモデルを使うか決めたい。

定跡作成は固定ノード数で行えるため、20ブロックのモデルで行った方がよさそうである。