小さいバッチサイズに対する学習率設定

 Miacisではバッチサイズ64で学習を行っている。GPUメモリが小さいのでバッチサイズを大きくできないためだが、Learnerが学習するデータ量とActorがデータを生成する量のバランスが重要なのではないかという根拠のない勘もある。

 経験的にバッチサイズを変えると学習率も変えなければ上手く学習が進まない。いくつかの学習率で実験した結果を以下に記す。

実験設定

項目 内容
Optimizer Momentum(0.9)
1局面の探索回数 800
引き分け手数 512
LearnerのSleep 1sec / step
リプレイバッファサイズ 1048576(=2^{20}) 局面
学習率減衰 100kステップ時点で1/10
使用GPU 1080 二枚
データ生成速度 38.0 pos / sec

 学習途中の性能評価として自己対局を行うと非常にコストがかかるので、教師あり学習におけるValidationのような形で簡易的な評価を行っている。具体的にはfloodgateの2016年の棋譜から両ソフトがレート2800以上であるものを抽出し、そこからランダムに抽出した40960局面についてPolicyとValueそれぞれの損失を計算する。ターゲットはPolicyは棋譜で指された指し手をOnehot表現したもの、Valueは対局結果に応じた値(勝ち:1, 負け:-1)である。

実験結果

f:id:tokumini:20190410162444p:plainf:id:tokumini:20190410162447p:plain
左:Policy損失 右:Value損失

 損失からは初期学習率0.005で学習したものが最も良い結果であると判断できる。損失と棋力がどの程度相関するかは不明だが、少なくとも学習初期においては信頼できるものと想定している。学習率0.005で学習したものを用いて学習率0.02で学習したもの及びLesserkaiとそれぞれ100局対局させた。

対戦相手 勝率(%) レート差
初期学習率 0.2 56.5 45.4
Lesserkai 87.0 330.2

 初期学習率0.2との対局について、勝ち越してはいるが100局と試行回数が少ないので有意差があるとは言えない。Lesserkaiに対して9割前後という結果は今までの結果と概ね一致している。

考察

学習率

 理屈は難しくてわからなかったが、最適なバッチサイズは学習率(と訓練データ集合のサイズ)に比例するという論文がある(日本語での紹介スライド)。AlphaZeroがバッチサイズ4096で学習率0.2であり、本記事で結果が良かった学習率がバッチサイズ64に対して0.005なので、バッチサイズを0.015625倍して学習率は0.025倍したことになる。比例関係が良いという理屈と概ね合っている結果となっている。訓練データ集合のサイズをExperience Replayのバッファサイズと同一視して良いものかはわからない。

Value損失

 学習率によらず、Policyの損失はなだらかに減少していくがValueの損失は最初上がって100kステップを超えたあたりから下がり始める傾向がある。100kステップは学習率を1/10にする地点ではあるが、初期学習率を変えても同じ傾向があることから単に学習率の大小による問題ではなさそうだ。100kステップを超えたあたりというのはPolicyの学習が進まなくなってきた段階だともみなすことができる。AlphaZeroと同じように途中まで同じネットワークでPolicyとValueを学習させているわけだが、その影響なのかもしれない。そもそもValueの学習が遅れる現象が悪いことなのかも判断付きかねるが、一応対策を考えたい。