評価関数の追加学習

 前回は入玉対策として手動で適当にパラメータを変更しました。今回はそれを基に自己対局からの強化学習を行ってみます。

 100局単位で学習を行い、指数移動平均を取った勝率が55%を超えたら強くなったとしてパラメータをアップデートします。

 局面の多様性を確保するために最初の10手は各合法手を1手読みした値について温度を200としたボルツマン分布から手をサンプリングしています。

 教師局面を生成する探索深さは3で、学習率は0.2から100回連続アップデートが起こらなかったら1/2ずつにしていくという方式を取りました。

 12時間ほど学習させた指数移動平均勝率の推移は次のようになります。

f:id:tokumini:20180531120849p:plain

 30%になっている直前で一度アップデートが発生しているため、今回は147回後に1回アップデートが発生し,その後36回後にまたアップデートが発生したということになります。最初のアップデートまで100回以上過ぎているため学習率0.2は大きすぎ、学習率が0.1になってからでは47回および36回でアップデートが発生しているため、適切なのではないかと感じます。

 実際にこの評価関数を用いて学習前の評価関数と1スレッド1手2秒で対局させてみたところ、新しいパラメータ側から見て

対局数 勝利 引き分け 敗北 勝率(引き分けは0.5勝0.5敗)
606 355 77 174 64.9%

 となりました。レート差にして約106.8といったところでしょうか。うまく学習できていることがわかります。

 これでもまだWCSC28バージョンにはおそらく届かないくらいの棋力であり、自己対局のみによる学習の難しさを感じます。

 余談ですが、この自己対局検証はShogiGUIを4つ並列に起動して行いました。そこで気になる点として、それぞれで大きく勝率が違ったことが挙げられます。実際に606局の内訳は

番号 対局数 勝利 引き分け 敗北 勝率(引き分け除外)
1 147 85 26 36 70%
2 151 83 21 47 63%
3 149 97 14 38 71%
4 159 90 16 53 62%

 となっていました。

 ShogiGUI上では連続対局中、引き分けを除外した勝率が表示されるのですが、150局近い段階でもここまで大きくぶれるとなると少なくとも500局ほどは欲しいのかなと感じます。このぶれは、検証の対局においても6手までSoftmaxランダムで指させている影響が大きいのかもしれません。1スレッドで行っている関係上、指し手のランダム性が低いように思えるため初期局面でのばらつきを大きくしているわけですが、ここもちゃんと検証するべきポイントですね。

 学習中における100局ずつでの勝率計算もどれほど信用できるのか怪しい気もしてくるため、指数移動平均を取る係数を調節するなど工夫が必要かもしれません。推移グラフを見てもかなり不安定で、運の偏りによって55%を超えることもあるのかなと思えます。

 また学習用自己対局の生成速度ももっと改善したいところです。今回は約12時間で約2万局だったため、おおそよ0.46局/秒ほどの速度でした。枝刈り等の問題なのか探索深さを4などにすると相当遅くなってしまい、8やら10やらというのは夢のような話となっています。実際の対局にも関わってくる部分ですし、なんとか高速化はしていきたいところです。