DeepLearningによる将棋の学習10~現状の最高性能~

 前回は損失の比を調整することでPolicyの損失曲線とValueの損失曲線がだいたい同じタイミングで底を打つようにできるのではないかということを実験しました。

 今回はそれを踏まえて現状での最高性能を出す条件で実験してみました。

 ResidualBlock5つ、フィルタ数192、フィルタサイズ3、バッチサイズ128で、損失比はPolicy:Value = 1: 0.25、optimizerはNesterovとしました。結果は以下の様になります。

Epoch Total Loss Policy Loss Value Loss Policy Accuracy Value Accuracy
1 3.2068 3.0597 0.5885 0.3082 0.6442
2 2.8337 2.6939 0.5595 0.3465 0.6683
3 2.6670 2.5285 0.5538 0.3637 0.6728
4 2.5773 2.4384 0.5555 0.3755 0.6759
5 2.5006 2.3640 0.5463 0.3846 0.6810
6 2.4791 2.3428 0.5451 0.3869 0.6830
7 2.4457 2.3097 0.5443 0.3912 0.6827
8 2.4357 2.2999 0.5434 0.3948 0.6849
9 2.4231 2.2876 0.5421 0.3957 0.6874
10 2.4307 2.2953 0.5418 0.3977 0.6872
11 2.4323 2.2964 0.5436 0.3984 0.6856
12 2.4357 2.2991 0.5466 0.3971 0.6862

f:id:tokumini:20180429100859p:plain

 Policyの損失が最小になったタイミングとValueの損失が最小になったタイミングに1エポックしかズレがなく、そこそこ良い学習になっているのではないでしょうか。性能としてもPolicyの一致率39.57%はこれまでにない高い確率となっています。SGDからNesterovへ変更した恩恵も大きそうです。

 ちなみに本家dlshogiはWCSC28のアピール文書にあるデータと比較すると(使用データがfloodgateではなくelmoで生成した自己対局データのようですが)

Model Policy Accuracy Value Accuracy
dlshogi 45.6% 78.1%
今回の実験結果 39.6% 68.7%

 とのことで、やはり精度は段違いのように思えます。

 今回の実験で得たモデルを既存の海底最新版と対局させてみたところ、中盤まではかなり良い勝負をする、優位を築くことさえあるとわかりました。しかし、やはり最終盤での詰みが関わってくる局面で弱さを見せ、なかなか勝ち切るには至りませんでした。理想的にはニューラルネットワークの質を高めて終盤にも対応できるようにするのが良いのでしょうが、現実的にはWCSC28のアピール文書でいくらかのチームが提示していたように、終盤では使うエンジンを切り替えるなどの工夫をしていくのが良いのかもしれません。まぁ僕は今回のWCSC28でDeepLearningを使用したエンジンを使う気はないのですが……。