Python
DeepLearning
データ分析
ディープラーニング
コンピュータ将棋

【将棋AI】「将棋AIで学ぶディープラーニング」を読む♪~学習次第で強くなる

将棋AIで学ぶディープラーニング
第廿七夜は、本書にこんなことは書いてないけど、学習に関してちょっと工夫してみたら、うまくいっているようなのでまとめておく。

やったこと

(1)Lossのバランスを変える
(2)学習データをまとめてみる

(1)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=300のままで
LesserKai(718)に対して、9-0-1で圧勝
Q22_300vsLkai.jpg
Gikou2D1(1512)に対して、3-2-5で惜敗
Q22_300vsGikou2D1.jpg
Gikou2D2(1799)に対して、1-0-9で大敗
Q22_300vsGikou2D2.jpg
これって、当初LesserKaiやGikou2D1に勝てなかったのと比べるとすごいと思う。

(2)学習データをまとめてみる

学習データの準備の仕方は、ほぼ前回の説明の通りです。
しかし、一か所工夫します。
つまり、Floodgateの2016の棋譜と2017の棋譜をまとめて学習させる工夫です。
以下のように、学習データを同じディレクトリ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に3-1-6でepoch=3が惜敗
Q22_16_1617_300vsGikou2D2.jpg
Gikou2D1にも4-0-6でepoch=4が惜敗、こっちはぶっちぎりのはずだったんだけど、。。
Q22_1617_e4_300vsGikou2D1.jpg
さらに、Try24層を同じように学習すると、
epoch=3、playout=300で、Gikou2D1に対して、5-0-5で引き分け
Gikou2D1vsTry161617e3.jpg
epoch=5、playout=300で、Gikou2D2に対して、3-0-7で惜敗(まあ、レート差200で24%なのでほぼかな)
Gikou2D2vsTry161617e5.jpg

まとめ

・学習の改善として、方策と価値のLossバランスと学習データの統合を実施して、強くなることを示した
・Playout=300でGikou2D2に10回対戦で、勝利を挙げられるようになった

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