【将棋AI】「将棋AIで学ぶディープラーニング」を読む♪～やはり過学習なのか？？

<img width="200" style="float: left;" alt="将棋AIで学ぶディープラーニング" src="https://qiita-image-store.s3.amazonaws.com/0/233744/ded117b9-37c7-1b41-033d-960e63ca5fe1.jpeg">
第十九夜は、昨夜のつづきであのTryモデルの意外な展開。
###やったこと
（１）昨夜のTryのミスの修正をして追加学習
（２）現在の強そうなモデル間の総当たり戦
（３）そして、VGGLikeとS40と対戦してみた
（４）棋譜解析をしてみると。。
###（１）昨夜のTryのミスの修正をして追加学習
一応、ミスは`h2 = F.relu(self.conv2(h1))`の部分のreluだけだから追加学習してみました。やはりうまく継続して修正できて学習できました。
収束性は以下のような感じでうまくいっていそうです。
![figure_1-34log3000_try10_2016_2017.png](https://qiita-image-store.s3.amazonaws.com/0/233744/2014df06-b521-4657-81f0-9bd95744e1d6.png)
そして一致率等は、比較のために今までのものを並べてみると、以下のとおり
方策の一致率はきわめて高くなった。

| 名称 | loss | 一致率（方策） | 一致率（価値） |備考|
|:-:|:-:|:-:|:-:|:-:|
| [policy](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/Policy/policy.py) |1.682677|0.4226734| -  |方策ネットワークのみ|
| [Policy_Value;Layer13](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/Policy/policy_value.py)| 2.016|0.4204578|0.67033803|１３層の方策・価値ネットワークでMCTS|
| [ResnetSimple40※](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/ResnetSimple/policy_value_resnetSimple.py)|2.29075|0.4325099|0.6906338|Resnet２０block４３層|
| [ResnetSimple20](ー)　|2.308355|0.4326057|0.6941468|Resnet１０block２３層|
| [ResnetSimple10](ー)|2.360802|0.42507267|0.6948055|Resnet５block１３層|
| [ResnetVGGLike5](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/VGGLike/policy_value_VGGNet.py)|2.279315|0.43526843|0.69514084|ResnetVGGLike５block１９層|
| [ResnetTry30](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/ResnetTry/policy_value_resnetTry30.py)|2.27104|0.43431032|0.6986858|ResnetTri10block３３層|
| [ResnetTry](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/ResnetTry/policy_value_resnetTry.py)|1.965186|0.4312045|0.67467344|ResnetTri10block３３層epoch19|
| [ResnetTry](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/ResnetTry/policy_value_resnetTry.py)|2.3784263|0.43634507|0.6942187|ResnetTri10block３３層epoch28|
| [ResnetTry](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/ResnetTry/policy_value_resnetTry.py)|1.8439145|0.44418514|0.6781456|ResnetTri10block３３層epoch31|
| [ResnetTry](https://github.com/MuAuan/dlShogi-kai/blob/master/Network/ResnetTry/policy_value_resnetTry.py)|1.5742202|0.43192667|0.6731665|ResnetTri10block３３層epoch37|

###（２）現在の強そうなモデル間の総当たり戦
そして総当たり戦をやってみた結果が以下のとおりです。
S40はshogi686に1-0-1と善戦しましたが、
Try３０は全敗してしまいました。そして、負け方がなんとも接待将棋で負けるようにわざと打っているようです。

![yowaiTry.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/e1fffd66-ce3e-1933-fdda-7a8681c53dd8.jpeg)

使ったパラメータはepoch28です。それ以外のあらたに学習したものを使ってみましたが、やはり接待将棋レベル。
###（３）そして、VGGLikeとS40と対戦してみた
前回の結果はこれほど悪くなかった（Networkモデルはミスのままだった）ということで、それではということで昨夜のデータのepoch11を使って、一応強そうな両者と対戦した結果、VGGlikeとの対戦で引き分け。
![TuyoiTry.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/4efdb635-0c4e-6421-f40f-5a7ffb06f61c.jpeg)
そして、一番強いはずのResnetS40とは、7-0-3で勝利しました。
![TuyoiTryvsS40.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/0fc2ed6d-b5bb-1859-9f92-ef3aed166ed3.jpeg)
つまり、今一番強いのはTryなのかVGGLikeなのか。
以前以下の結果があるので、この三者はほぼ互角なんでしょう。
![VGGvsS40.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/b02dff60-0d45-f043-91f0-1dbb87c1bfef.jpeg)
###（４）棋譜解析をしてみると。。
このResnetS40 vs.Tryの最後の対戦の棋譜解析をしてみました。
![KaisekiTryvsS40.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/5a12e12b-c970-0a46-871d-88b94134e207.jpeg)
これを見ると黒番３３手の疑問手まで、前半戦はAperyの予測とかなり一致しています。
![KaisekiTryvsS402.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/b2569a20-7637-40d1-9847-772204c3af68.jpeg)
そして、３３－黒番５１手の一連の悪手がどうも勝敗に決定的だったようです。
![KaisekTryvsS403.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/4d27b3ac-2c8a-d2f8-645b-e8f9850b5469.jpeg)
終盤にも双方悪手があって、黒が投了しています。
ということで、上記のとおり、学習すればするほど賢くなるというのは神話で、この場合もたぶん過学習に陥っているのだと思います。
※Testデータのスコアが上がっていることから、単純な過学習とは言えず、ここはきちんと確認すべき大きな課題です
###まとめ
・Tryのコードを修正して追加学習した
・追加学習したパラメータは一致率等は改善したように見えるが、強くならなかった
・最初に学習したパラメータで強い将棋AIになった
・Gikou探索深さ１には勝てるようになった。そしてResnetS40が初めてshogi686に勝利した

・なんとかしてこの過学習と思われる現象を理解したい