長時間学習の結果/選手権以降にやったことのまとめ

要約

 2週間弱かけて1Mステップの学習を行ったところレート2600程度になった。パラメータとWindows向けバイナリはGitHubで公開している。

背景

 第29回世界コンピュータ将棋選手権以降、一通り試したいことはやったのでここで一度長時間の学習を行った。選手権時からの改良点をまとめると以下のようになる。

 雑に見積もってレートは+770となる。選手権時点では技巧2(深さ2)に対して勝率71%、レートにして1946.5だったので、だいたいR2700程度になると予想した。

実験設定

 ランダムに初期化したパラメータから1Mステップの強化学習を行った。

学習

項目
バッチサイズ 128
学習率 0.015(固定)
オプティマイザ Momentum(0.9)
TD(\lambda)の\lambda 0.75
優先度付き経験再生の\alpha 2.0
引き分けとする手数 512
学習スレッドのスリープ時間 1ステップごとに1秒
リプレイバッファサイズ 2^{20}
1局面あたりの探索回数 800
C_{PUCT} 2.5
Residualブロック内のCNNのチャンネル数 64
Residualブロックの数 10

 学習に使用したマシンはGTX1080を2枚搭載したものであり、データ生成速度は33.8 pos / secであった。スリープ時間が1秒、バッチサイズが128なので、1ステップあたりに生成する量に対してバッチサイズが4倍ほどであり学習データの重複は多めだと思われる。

検証損失

 floodgateの2016年の棋譜からレート2800以上同士の対局のみを抽出し、そこからランダムにサンプリングした409600局面についてPolicyとValueの損失を計算した。Policy損失の計算では棋譜上で指された手を教師信号とし、Value損失の計算では最終結果を教師信号とした。

検証対局

 100Kステップごとに得られたパラメータを用いて深さを制限した技巧2(定跡オフ)とそれぞれ500局の対局を行った。検証対局で使用したマシンはRTX2080tiを1枚搭載したものであり、探索速度は初期局面で10K NPSほどになる。Miacis側の持ち時間は0.25秒とした。対局は256手で引き分けとし、引き分けは0.5勝0.5敗として勝率を計算した。

実験結果

 学習にかかった時間は約302時間(2週間弱)であった。

検証損失

f:id:tokumini:20190625132252p:plain

 予想できていたことだが、1Mステップでもまだ収束しきっていないように見える。以前実験した通りバッチサイズと学習速度はほぼ比例するため、バッチサイズ4096で700KステップのAlphaZeroと同等の学習をするには、バッチサイズ128にした場合22.4Mステップが必要になる。AlphaZeroとは手法やモデルの大きさが違うことやそもそもAlphaZeroも後半350Kステップはほぼレートが伸びていないことを考えれば、この半分から1/4程度で許してもらえないかと考えたいところだが、それにしても5Mステップくらいは回し続けないといけないかもしれない。学習率の減衰をどう入れるかも悩ましいところである。

検証対局

 100Kから500Kステップまでは深さ4~6, 500Kステップ以降は加えて深さ7とした技巧2と対局を行った。図中で示す技巧2のレートはhttp://www.uuunuuun.com/englishに記載されているものとなる。

f:id:tokumini:20190626114658p:plain

 損失推移同様、まだ収束しきっている様子ではない。小さいネットワークを使っているのでそこまで伸びないとは思うがもっと長時間学習させてみた方が良さそうだ。

 本来はどの深さ制限の技巧で測っても全く同じEloレーティングが得られることが理想なのだが、実際には相性の問題や計測誤差があるため完全には一致しない。特に深さ4に対しては500K時点で勝率が90%を超えているため、信用度の低い測定になっているかもしれない。

 平均値では1Mステップ時点でR2618.1となる。深さ4に対しての計測で高めに出ていることを割り引いて考えて、だいたい2600といったところだろうか。予想してた2700よりはやや低いが、かなり雑に見積もっていたことからすればむしろ驚くくらいの伸びではある。

 気になる点としては、700Kステップ時点で一度レートが落ちていることと、900Kステップ時点で深さ6に対してだけ相性が悪いことがある。対局を見ていたところ、やや指し手に偏りがあり同じような戦型ばかりになっているのではないかと感じた。先日山岡さんが指摘していたように、データ生成時にルート局面以外のノードについて探索情報を再利用していることが影響している可能性もある。