【将棋AI】将棋所のデータで学習する♪

今回は、やっと将棋所のデータで学習できたのでまとめておこうと思う。
floodgateの棋譜をダウンロードして使わせていただいていたが、
①優秀なソフトも利用できるので、対戦させてその棋譜で学習する。
②強化学習でどんどん強くする
ということをやってみたいということでやってみました。
###やったこと
・棋譜をcsav2.2からv2に変更する
・Toryoで終了した棋譜のみにする
・学習する
・自己対戦で新たな棋譜を生成し学習する
###・棋譜をcsav2.2からv2に変更する
まず、CSA標準棋譜というv2.2の標準棋譜が以下にある。
[CSA標準棋譜ファイル形式](http://www2.computer-shogi.org/protocol/record_v22.html)
一方、以前のもの（v2）は以下のとおり
[CSA標準棋譜ファイル形式](http://www2.computer-shogi.org/wcsc12/record.html)
実際の将棋所の棋譜とFloodgateの棋譜を比較します。

```将棋所の棋譜.
V2.2
N+Gikou 2 (v2.0.2)
N-policy_player
P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI *  *  *  *  * -KA * 
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 *  *  *  *  *  *  *  *  * 
P5 *  *  *  *  *  *  *  *  * 
P6 *  *  *  *  *  *  *  *  * 
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA *  *  *  *  * +HI * 
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
P+
P-
+
+6978KI,T1
-3334FU,T1
+2726FU,T1
-3142GI,T1
+3948GI,T1
．．．
-0082KA,T1
+7181UM,T1
%TORYO,T1
```

```floodgate.
V2
N+3Aeval-Ryzen5-1600
N-sinbo-elmo
'Max_Moves:256
'Least_Time_Per_Move:0
'Increment:10
$EVENT:wdoor+floodgate-300-10F+3Aeval-Ryzen5-1600+sinbo-elmo+20171208180004
$START_TIME:2017/12/08 18:00:01
P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI *  *  *  *  * -KA * 
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 *  *  *  *  *  *  *  *  * 
P5 *  *  *  *  *  *  *  *  * 
P6 *  *  *  *  *  *  *  *  * 
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA *  *  *  *  * +HI * 
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
+
'rating:3Aeval-Ryzen5-1600+65b01fc0c3f1f281715ac70adea53388:sinbo-elmo+b08e315e662fb441f32bee7d0f4966e7
'black_rate:3Aeval-Ryzen5-1600+65b01fc0c3f1f281715ac70adea53388:3977.0
'white_rate:sinbo-elmo+b08e315e662fb441f32bee7d0f4966e7:3582.0
+7776FU
T0
'** 0
-3334FU
T0
'** 0 +2726FU
+2726FU
T0
'** 0
-8384FU
T0
'** 0 +2625FU
+2625FU
T0
'** 0
-8485FU
T0
．．．
'** 100000 +0075KI
+0075KI
T0
'** 100000
%TORYO
'P1 * +GI-KA *  *  * -GI * -KY
'P2+KI * +NG *  *  *  *  *  * 
'P3 * -FU-KE-FU *  *  *  * -FU
'P4-FU-OU *  *  *  * +UM-FU * 
'P5 *  * +KI * -KE *  * +FU * 
'P6+FU * +KI *  * +FU *  * +FU
'P7 * +OU+KE * +FU * -TO *  * 
'P8 *  *  * +GI *  * -RY *  * 
'P9+KY *  *  *  *  *  *  * +KY
'P+00FU00FU00FU00KI00KY
'P-00FU00FU00FU00FU00HI00KE
'-
'summary:toryo:3Aeval-Ryzen5-1600 win:sinbo-elmo lose
'$END_TIME:2017/12/08 18:23:52
```
####v2.2からのv2への変換
上記の仕様と上記のそれぞれの内容を比較すると、v2.2からv2への変換は以下二つのことをすればよいことがわかる。
①v2にはP+,P-がない
②v2.2は+6978KI,T1と,区切りだが、v2では\nで改行されている
③'** 0 +2726FUのように’で始まるコメント行は無視されるので特に追加しない
つまり、上の①と②だけ変換すればよい
コード例は以下のとおり
[dlShogi-kai/Data/convert2222.py](https://github.com/MuAuan/dlShogi-kai/blob/master/Data/convert2222.py)
###・Toryoで終了した棋譜のみにする
上記で変換はできるが、実は時々あのencoding errorが発生する。
それは時間切れで終了したり、３００手で引き分けになった場合、%時間切れや%持将棋などが発生してこれがs-jis記載でencoding errorをだす。
ということで、そもそも%TORYOで終了したものを学習したいので、%TORYO以外の棋譜を削除した。
コード例は以下のとおり
[dlShogi-kai/Data/filter_csa_toryo.py](https://github.com/MuAuan/dlShogi-kai/blob/master/Data/filter_csa_toryo.py)
###・学習する
GikouD9, GikouD10で５００回対戦（2min/battle）させて、またmctsで作成したものの棋譜などを１０００個集めてtrain_policy_value.pyで学習させてみました。
結果は以下のとおり、
![Figure_1_giko.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/dead4516-720a-8671-2c3f-f66503cfaafc.png)
一見学習できているようにも見えますが、。。。
lossは減少してますし、policyは0.3辺りまで学習できていますが、valueが0.5のままで全く学習できていません。
この原因がどこにあるのかは今のところ全く不明です。
###・自己対戦で新たな棋譜を生成し学習する
こっちはもっと悲惨です。
まだPlocyしか学習していませんが、Policyだと指し手が一意なのでバリエーションが全くでません。特に自己対戦では全く同じ手ばかりなので、これは学習のしようがないということです。ということで、一定の乱数要素を入れてMCTSで自己学習をやってみようと思います。
###まとめ
・将棋所のデータで学習してみた

・今の方法では強化学習が成功する可能性が低い
・棋譜が読めるようになったので、将棋所（dlshogi）で詰将棋も出来そうな気がする