TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

将棋でディープラーニングする その49(再学習)

ResNetのブロック数を10にして、elmoで生成した深さ8の局面を使って、学習をやり直しています。
クラッチからの学習も試したいところですが、モデルの性能を評価するには、既存将棋ソフトで生成した棋譜は役に立ちます。

tanhバージョン

はじめ、vlaue networkの出力をtanhにしたモデルで学習していましたが、3.4億局面学習してもGPSfishに1勝もできないので以前より弱くなりました。
policyの一致率は45.2%、valueの一致率は77.8%と一致率の数値は、以前のモデルの3.4億局面学習時がpolicyが42.9%、valueが77.6%であったのに比べて高い数値になっています。
一致率は高いのに弱くなった理由について調べたところ、polciyの予測する指し手が以前に比べて絞られすぎており、数手の予測手以外の手をMCTSで探索しないようになっていました。
学習データにフィットしすぎていて、policyが尖った状態になっていました。
policyの損失関数は同じなのに、valueの出力がsigmoidからtanhに変わって損失が交差エントロピーからMSEに変わったことで、policyにも影響が出たようです。
policyとvalueの損失の割合を変えるなどで解決できるかもしれませんが、tanhを使うのはやめることにしました。

sigmoidバージョン

続いて、以前と同様にvalue networkの出力にsigmoidを使って、ResNetのブロック数を5から10にしたモデルで学習をやり直しました。
4億局面学習した時点で、GPSfishに1手3秒で、50回対局で38%勝つようになりました。

Eloレーティングでは、GPSfishのレーティングを2800とすると、
2800-400 \log_{10}(\frac{100}{38}-1) = 2714
となり、以前のdlshogiと同等の強さになっています。
以前のdlshogiは、35.8億局面を3エポック学習していたのに対して学習効率が大幅に向上しています。

ResNetのブロック数を増やしたことで、過学習するのではないかという懸念がありましたが、そのようなことはないようです。
[1710.03667] High-dimensional dynamics of generalization error in neural networksによると、DNNの場合、大規模にしても学習データが十分にあると汎化性能を失わないそうです。

以前のdlshogiのモデルはバグがあったので、ResNetのブロック数だけの効果が測れていないので別途検証をする予定です。