TadaoYamaokaの開発日記

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

将棋AIの実験ノート(自己対局時のノード再利用)

以前に自己対局時にノードを再利用することで一時的に精度が上がったが、その後学習を続けるとpolicyのテスト損失が上昇する現象が起きた。

ノード再利用とバッチサイズの変更(1024→2048)を同時に行ったので、どちらが原因で発生したのかわからなかったため、バッチサイズを戻してノード再利用の有無で比較を行った。

比較のために以前と同じサイクル(173サイクル目から15サイクル)だけ、自己対局と学習のサイクルを回した(1か月以上かかった・・・)。

測定条件

  1. バッチサイズ2048 + ノード再利用あり (b2048_reuse) ※以前の条件
  2. バッチサイズ1024 + ノード再利用あり (b1024_reuse)
  3. バッチサイズ1024 + ノード再利用なし (b1024_noreuse)

測定結果

訓練損失(policy+value+eval)

f:id:TadaoYamaoka:20190608153648p:plain

テスト損失
  • policy

f:id:TadaoYamaoka:20190608153806p:plain

f:id:TadaoYamaoka:20190608153820p:plain

  • eval(評価値)

f:id:TadaoYamaoka:20190608153904p:plain

テストaccuracy
  • policy

f:id:TadaoYamaoka:20190608153928p:plain

f:id:TadaoYamaoka:20190608153939p:plain

テストデータを推論した際のエントロピー
  • policy

f:id:TadaoYamaoka:20190608154015p:plain

f:id:TadaoYamaoka:20190608154027p:plain

考察

ノード再利用あり

ノード再利用を行った場合、バッチサイズによらずほぼ同じ傾向になっている。
ノード再利用を行うと、valueのテスト損失が下がるが、policyのテスト損失はしばらく横ばい後上昇している。
評価値のテスト損失は上昇し続けており、勝率予測が0か1に近い方に偏る傾向が出ている。
テストデータを推論した際のエントロピーは、ノード再利用をするとpolicy、valueともに下降を続けており、方策と勝率予測が決定論的になっていることがわかる。

ノード再利用なし

ノード再利用を行わないと、policy、valueのテスト損失はともに徐々に下降しており学習が進んでいる。評価値のテスト損失もほぼ一定である。
テストデータを推論した際のエントロピーは、policyはわずかに上昇しており、強化学習により新しい手を学習できている。


この結果から、ノード再利用は行わない方が良いことがわかった。


AlphaZeroでは、ノード再利用を行っているため、学習方法の違い(方策を分布ではなく指し手を学習、正則化の有無)が影響しているものと思う。
もしかしたらAlphaZeroでもノード再利用を行わない方がよいのかもしれない(論文では特にノード再利用については説明されていない)。

Leela Chess Zeroではノード再利用しないことを決めたということだが、その理由についてはGitHubのissueに書かれていた。
Port tree re-use over from Leela Zero · Issue #37 · glinscott/leela-chess · GitHub

There is a problem with tree reuse and Dirichlet noise. Suppose we reuse 790 visits from the previous tree. We add Dirichlet noise, but now there are only 10 visits left that use the noised values. I think it might be better to not do tree-reuse for self play games.

ノード再利用するとディリクレノイズを加えてもノイズの効果がなくなる(新しい手を試さなくなる)というのが理由のようだ。

追記

187サイクル学習したモデルで、技巧2とやねうら王互角局面集を使用して100回対局した際の勝率は以下の通りとなった。

条件 勝敗数 勝率 信頼区間(95%)
b2048_reuse 21勝68負11分 23% 0.333938203~0.159823214
b1024_reuse 27勝71負2分 27% 0.371162243~0.196794269
b1024_noreuse 29勝60負11分 32% 0.428659671~0.237438285

ノード再利用なしで自己対局を行った場合が、(有意差があるとは言えないが)一番勝率が高くなっている。

なお、信頼区間の計算は、ここを参考にさせてもらった。

2019/6/9 追記

ノード再利用ありで強化学習したモデルとノード再利用なしで強化学習したモデル同士で対局させてみた。

勝敗数 勝率 信頼区間(95%)
55勝42負3分 56% 0.661201007~0.467714044

※ノード再利用なし基準

(有意差があるとは言えないが)ノード再利用なしの方がわずかに強くなっている。