最近はあまり新しい工夫を実装する時間がなく、とりあえず今の時点での学習に再現性があるかどうかを確認していた。
現状使えるマシンは、2080tiを2枚搭載しているものが1台、1080を2枚搭載しているものが2台となっている。実装上の都合によりマシン間でのデータのやりとりはできないので、これら3台をそれぞれ独立に学習させることしかできない。個人的にデスクトップマシン1台で学習できることを目標としているので、クラスタ化学習はあまり進んで実装する気になれないという事情もある。
これら3台でそれぞれ別にランダム初期化したパラメータから学習を初めて同じような結果になるかを確認した。2080tiと1080では速度が大きく違うが、スリープ時間を調整して1ステップあたりに生成する量を揃えることで、1080搭載マシンでも時間はかかるが同じ条件で実験できるようにした。
実験結果
学習時間
学習にかかった時間は2080tiのマシンが344時間(≒2週間)、1080のマシンが487時間、526時間(≒3週間)となった。2080tiと1080では本来もっと差があってしかるべきだが、そうなっていないのは実装上の問題でGPU利用率が100%になっていないからである。
Validation損失
floodgate2015年の棋譜からレート2800以上のソフト同士のものだけを抽出し、各局面について指し手と最終結果に対して損失を計算した。
どれでも損失としては大差なく、再現性がある結果だと言える。
本題とはずれるが、1.5Mステップ経過時点で学習率を1/10にすることを試したところ、そこで損失が大きく落ちるよく知られた現象が起きた。1.75Mステップ経過時点でも学習率を1/10にしたのだが、そちらの効果はよくわからない。
対局結果
1手0.25秒で技巧2(深さ10)と500局対局を行った。技巧2(深さ10)はuuunuuun氏のサイトによるとレート2808であり、それに対する相対Eloレートを示す。
どの学習でもほぼ技巧2(深さ10)と互角という結果になった。やはり再現性はある結果だと言える。
また性能面でも1.5Mステップにおける学習率の調整は効果があるようだ。
まとめ
とりあえず1手0.25秒でレート2800は安定的に出せることがわかった。1080マシンでも同じような結果が出ることが確認できたので、これらを使って上手く実験を進めていきたい。
余談
現状は諸事情により将棋だけでなくオセロでも検証できるように実装を進めている(multi_gameブランチ)。
できるだけ汎用的になるように実装したのでPositionクラスなどを適切に加えればたいていの二人零和有限確定完全情報ゲームには対応できそうだと期待しているが、どこまで上手くできているかはわからない。いずれは囲碁なども実装してみたい。