TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

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

以前に、dlshogiの自己対局でノードの再利用を行うと、テスト損失が上昇する(過学習する)という問題が起きたことを書いた。

方策の分布を学習するようにしたため、問題も起きにくくなっている可能性があるので、ノードの再利用(ルートノードはクリア)を行うオプションを追加した(--reuseオプション)。

比較

再利用ありとなしで1.5億局面生成して、精度を比較してみた。
学習済みモデルに対して、方策の分布を学習するようにして追加学習を行った。
8回測定を行い平均をとった。
テストデータに、floodgateのレート3500以上の対局の棋譜からサンプリングした856,923局面を使用した。

再利用 テスト方策損失 テスト価値損失 テスト方策エントロピー
なし 1.61784394 0.466380099 1.305249458
あり 1.60676804 0.463773155 1.315900149

考察

再利用ありの方が、方策、価値ともにテスト損失が下がっており、精度が上がっている。
以前に起きたようなテスト方策エントロピーの低下も起きていない。

強さの比較

持ち時間1分1秒加算、2GPUで対局して強さを比較した結果は、以下の通り。

   # PLAYER           :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 reuse            :    13.9   10.5   913.0    1725    53      61  821  184  720    11
   2 noreuse          :    11.3   10.4   903.5    1725    52     100  814  179  732    10
   3 susho3kai18th    :   -25.1   10.3   770.5    1724    45     ---  693  155  876     9

有意差はなかった。

生成速度

GPUあたり4スレッド、8GPU

再利用 nodes/sec
なし 276.1
あり 153.9

GPUあたりのスレッド数が同一だと、生成速度は55.7%になった。
ゲーム木が深くなるため、ノード選択の回数が増えるためと考えられる。
再利用する場合は、GPUあたりのスレッド数を増やす必要がある(その分ハードの制約が厳しくなる)。

まとめ

自己対局時にノードを再利用することで、テスト局面に対する精度が上がることが確かめられた。
ただし、精度の向上が強さには反映されることは測定できていない(持ち時間をかえる、強化学習を世代を増やすなど条件を変えてみる必要がある)。

ノードを再利用する局面の生成速度が落ちるため、質をとるか量をとるかのトレードオフになる(どっちが良いかは確認できていない)。