TadaoYamaokaの開発日記

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

将棋AIの進捗 その39(リーグ戦)

年末にCPUを3970Xに変えてから、USIエンジンをリーグに加えた強化学習を行っている。
USIエンジンを各探索スレッドにつき2つ、GPUにつき探索スレッドを3つ、3GPUで探索を行っているので、合計18プロセス起動している。
メモリの制約が厳しくこれ以上は起動できなかった。

リーグの構成は、1/8はUSIエンジンと対局して、残りは自己対局を行っている。
1手500msだと局面生成速度は、リーグなしと比べて7割くらいになる。
USIエンジンには、elmo(WCSC28)を使用した。

タスクマネージャの様子
f:id:TadaoYamaoka:20200119000643p:plain
GPU使用率にCUDAの使用率は反映されていない。

リーグ戦の効果測定

リーグ戦を開始してから、途中でdropoutを削除する変更と、未探索ノードの初期値の変更を行ったため、リーグ戦のみの効果は測定できていないが、リーグ戦導入後の損失、floodgateの棋譜に対する正解率、USIエンジンに対する勝率は以下のようになった。

訓練損失

f:id:TadaoYamaoka:20200119001457p:plain

テスト損失

f:id:TadaoYamaoka:20200119001510p:plain

テスト正解率

f:id:TadaoYamaoka:20200119001533p:plain

USIエンジンに対する勝率

f:id:TadaoYamaoka:20200119001948p:plain

考察

リーグ戦を開始したモデルは、既に200サイクル学習したモデルで、テスト損失はほぼ横ばいになっていた。
リーグ戦で学習するとテスト損失は上昇傾向がある。
210epochで急に上昇しているのは、dropoutを削除したためである。
それ以外の区間ではやや上昇している。

方策の正解率は、0.3%程上昇している。
価値の正解率は、ほぼ横ばいである。

テスト損失が上がって、正解率が上がるという結果からは良くなっているのか悪くなっているのか判断がつかない。

USIエンジンとの勝率は、218epochで未探索ノードの初期化方法を変えたことで大幅に上昇した。
それ以外の区間でも少しずつ上昇している。

技巧2との対局

技巧2と1手3秒で100対局した結果は以下の通りである。

結果 勝率 信頼区間
76勝20敗4分 79% 70.0%-86.09%

未探索ノードの初期化方法を修正した同じ対局プログラムして、213epoch時点のモデルを使用すると、

結果 勝率 信頼区間
67勝27敗6分 71% 61.4~79.4%

だったので、強くなっていそうである。

Apery(WCSC28)との対局

技巧2に8割近く勝てるようになったので、Apery(WCSC28)とも対局させてみた。

結果 勝率 信頼区間
55勝41敗4分 57% 47.3%-66.72%

※CPUはCore i7 4コア、GPUは2080Ti 1枚

Apery(4コア(8スレッド))と互角の強さになっていた。
f:id:TadaoYamaoka:20200119091724p:plain

まとめ

USIエンジンをリーグに加えて強化学習を行った効果かは追加で検証しないとわからないが、他の変更の効果も合わせて、Apery(WCSC28)と互角レベルの強さにすることができた。
MCTSは終盤が弱いという課題も克服できつつあると思う。

2019/1/19 追記

やねうら王のEvalShareオプションをtrueにすると、メモリ使用量を減らせることに気付いた。
設定すると、コミット済みが119GBだったが、84GBまで減った。
メモリに余裕ができたので、USIのプロセスを探索スレッドあたり3に増やした。
局面生成速度は、数%速くなった。