追加学習による性能向上の検証

 今までは再現性や比較の観点から毎回ランダム初期化したパラメータから学習を行っていたが、WCSC29も迫ってきたということで最も強いパラメータに追加学習することで性能が伸びるか検証を行った。

 今まで最も性能が良いパラメータは評価値をカテゴリカル分布で出力するモデルを200kステップ学習したものとなる(アピール文書)。これをさらに200kステップの学習を3回追加で行った。つまり計800kステップの学習を行ったことになる。

 floodgate(2016年)のR2800以上同士の対局を検証データとした損失のグラフは次のようになった。

f:id:tokumini:20190428143636p:plainf:id:tokumini:20190428143643p:plain
左:Policy損失 右:Value損失

 わずがだが学習を重ねるほど損失が下がっている。Value損失は200kステップごとに(つまり学習をやり直すたびに)多少損失が上がっており、リプレイバッファでのデータのたまり方などが影響していると思われるが、詳しいことはわからない。

 Gikou2の探索深さを2に制限したもの(R1791)と対局することで性能の検証を行った。

累計学習ステップ数 勝率 相対レート
200k 53.5% 24.4
400k 52.0% 13.9
600k 60.2% 71.9
800k 71.0% 155.5

 200kから400kにおいて一度下がってしまってるが、これは100局という少ない局数での検証なのでブレの範囲内だと思われる。全体として学習を進めた方が勝率が上がっていっており、学習すればするほどまだ伸びる余地がありそうだ。また最後の200kステップではLearnerのスリープ時間を長く取ることで擬似的にActorの数を増やしている。そこでの伸びが大きいことも含め、やはり計算資源があればあるほど良いと結論付けられる。

おまけ:詳細な実験設定

 備忘録を兼ねて詳細な実験設定を記しておく。まず計4回の学習でのパラメータは次の表のようになる。

項目
Residualブロック数 10
CNNのフィルタ数 64
\lambda 0.925
バッチサイズ 64
学習率初期値 最初の3回は0.01、最後の1回は0.005
学習率減衰 100kステップ経つタイミングで1/10

 学習率が複数回の学習を通してどのような変化をしていたかをグラフとして残しておく。

f:id:tokumini:20190428143633p:plain

 また最初の3回はLearnerで1ステップ学習するごとに1秒の、最後の1回では2秒のスリープ時間を挟んだ。その間はActorがデータを生成することだけが行われるため、擬似的にActorの数を増やすことになる。学習を行ったマシンは2080tiを2枚搭載したものであり、2枚とも生成に当てているときは46.0 pos / secほどの生成速度となる。