【将棋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">
第廿七夜は、本書にこんなことは書いてないけど、学習に関してちょっと工夫してみたら、うまくいっているようなのでまとめておく。
###やったこと
（１）Lossのバランスを変える
（２）学習データをまとめてみる
###（１）Lossのバランスを変える
これは、以前から方策ネットワークの学習と価値ネットワークの学習が、方策は学習しやすいが、価値ネットワークの学習がなかなか進まないという現象があった。
そこで、一番簡単な工夫は価値ネットワークのLossの重みを大きくして、より価値ネットワークを学習しやすくするということである。
ところが、これをやると方策ネットワークのAccuracyが上がってこない、さらに価値ネットワークのAccuracyも実はもとより悪い。
ということで、逆に価値ネットワークはあきらめて、方策ネットワークのLossの割合を増やしてみた。これだと勿論方策ネットワークのAccuracyがあがった。さらに価値ネットワークのAccuracyもあまり下がらないようだ。
結果は以下のとおり
※同じNetworkモデルじゃないので比較しずらいが、少ない層で同等な精度が出ている

| network | loss | policy_accuracy |value_accuracy|note|
|:-:|:-:|:-:|:-:|:-:|
|Quad32|2.054025|0.41139683|0.65907264|epoch=8、32層|   
|Quad32|2.34428|0.42745194|0.6892166|epoch=11、32層|   
|Quad22_16|3.071567|0.41298786|0.66631365|epoch=8、22層※1|
|Quad22_16|3.28406|0.42357165|0.6909092|epoch=11、22層※1|
※1；$Loss=1.6Loss_{policy}+0.4Loss_{value}$としている

また、レーティングはPlayout＝３００のままで
LesserKai(718)に対して、９－０－１で圧勝
![Q22_300vsLkai.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/8e33e371-8100-229a-739a-edda532c85e1.jpeg)
Gikou2D1（1512）に対して、３－２－５で惜敗
![Q22_300vsGikou2D1.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/4c2f12ba-ce40-fb35-69ab-b9a5ba8812a4.jpeg)
Gikou2D2（1799）に対して、１－０－９で大敗
![Q22_300vsGikou2D2.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/c492b6f0-7718-afec-4f4d-60f17f6c0df0.jpeg)
これって、当初LesserKaiやGikou2D1に勝てなかったのと比べるとすごいと思う。
###（２）学習データをまとめてみる
[学習データの準備の仕方は、ほぼ前回の説明の通りです。](https://qiita.com/MuAuan/items/54c827a09b88475802cc)
しかし、一か所工夫します。
つまり、Floodgateの２０１６の棋譜と２０１７の棋譜をまとめて学習させる工夫です。
以下のように、学習データを同じディレクトリwdoor2017に格納します。

```
wdoor2017
　｜－2016
　｜－2017
```

そして、以前と同じように以下で実行します。

```
>python utils\make_kifu_list.py D:\wdoor2017 kifulist3000
```
このTrainデータとTestデータを利用して学習すると

| network | loss | policy_accuracy |value_accuracy|note|
|:-:|:-:|:-:|:-:|:-:|
|Quad32|2.054025|0.41139683|0.65907264|epoch=8、32層|   
|Quad32|2.34428|0.42745194|0.6892166|epoch=11、32層|   
|Quad22_16|3.071567|0.41298786|0.66631365|epoch=8、22層※1|
|Quad22_16|3.28406|0.42357165|0.6909092|epoch=11、22層※1|
|Quad22_1617|3.38789|0.41730803|0.6915467|epoch=3、22層※1|
|Quad22_1617|3.261292|0.42490402|0.69353837|epoch=4、22層※1|
|Quad22_1617|2.951929|0.43959206|0.679099|epoch=10、22層※1|
|Try24_1617|3.26445|0.42895943|0.69723386|epoch=3、24層※1|
|Try24_1617|3.076979|0.44028142|0.69179535|epoch=5、24層※1|
※1；$Loss=1.6Loss_{policy}+0.4Loss_{value}$としている
Gikou2D2に３－１－６でepoch=3が惜敗
![Q22_16_1617_300vsGikou2D2.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/817b46e4-e4d4-b5ef-f3d3-4ba5927d818a.jpeg)
Gikou2D1にも４－０－６でepoch=4が惜敗、こっちはぶっちぎりのはずだったんだけど、。。
![Q22_1617_e4_300vsGikou2D1.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/7d33005c-0fd9-d9b7-ff0f-f4f03cb951f0.jpeg)
さらに、Try２４層を同じように学習すると、
epoch=3、playout=300で、Gikou2D1に対して、５－０－５で引き分け
![Gikou2D1vsTry161617e3.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/689f9228-5265-ad98-62b0-681a57f68940.jpeg)
epoch=5、playout=300で、Gikou2D2に対して、３－０－７で惜敗（まあ、レート差200で２４％なのでほぼかな）
![Gikou2D2vsTry161617e5.jpg](https://qiita-image-store.s3.amazonaws.com/0/233744/b152dfcb-d38b-c12b-11c0-3c260b647fe7.jpeg)
###まとめ
・学習の改善として、方策と価値のLossバランスと学習データの統合を実施して、強くなることを示した
・Playout＝３００でGikou2D2に１０回対戦で、勝利を挙げられるようになった

・最適化はまだまだできていない