TadaoYamaokaの開発日記

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

将棋AI実験ノート:dlshogiと水匠で評価値の割れる局面の精度改善

第3回世界将棋AI電竜戦では、先手の角換わり定跡で、dlshogiが後手番で後手優勢と評価している局面から、定跡を抜けてから反省して負けることがあった。
dlshogiと水匠で評価が分かれる場合、dlshogiが正しくてそのまま勝ち切ることも多いが、特に中盤以降で読みが重要な局面で水匠に読み負けることがある。

電竜戦での例

8回戦の水匠とdlshogi with HEROZ 20bの対局では、85手目の先手の8三角をdlshogiは読めていなかった。

電竜戦 - 棋譜中継

この手は、水匠5でも1億ノードくらい読む必要がある。

エクスプロイタの学習

dlshogiの強化学習では、比較的少ない探索(1万ノード)で自己対局しているため、深く読むと評価が変わる手は指されない。
多少のランダムノイズも加えているが、選ばれる確率は低い。

対策として、評価値が低い手でも一定の確率で選ぶようにして棋譜を生成し、メインのモデルの弱点を見つけるモデルを学習する。
この方法で、メインのモデルに対して勝率の高いモデルを作成できることが確認できている。

ただし、それでも上記のような深い読みが必要な局面が改善されるには時間がかかる。

より直接的に修正する方法(提案手法)

より直接的に評価を誤る局面を修正するために、dlshogiと水匠で長めの思考時間で連続対局して、評価が割れる局面を抽出し、その局面を開始局面として棋譜を生成するようにする。

評価値を修正するには、正しい手を指された後の局面で、候補手のどれを指しても劣勢であることを学習する必要がある。
そのため、実際に指した手以外の手についても調べる必要がある。
ただし、すべての候補手を調べると局面数が増え過ぎるため、dlshogiの方策の確率が、実際に指した手以上の手について調べるようにする。
このように開始局面集を作成し、その開始局面集で連続対局を行った棋譜を学習することで、評価値が修正されることが期待できる。

上記の誤った局面について、この方法を試したことろ、比較的少ないノード数で正しい手を見つけられることが確認できた。

修正したいのは上記の局面だけではないので、過去に棋力測定のために水匠とdlshogiで連続対局対局した際の棋譜から、評価が割れる局面を抽出して開始局面集を自動作成した。

より一般化できないか

上記の方法は、水匠とdlshogiの連続対局から抽出しているが、水匠が固定だと限界があるため、できれば他のソフトを使わずに学習したい。
水匠の代わりに探索ノード数を増やしたdlshogiを使い、深く読んだ場合に評価が変わる局面を抽出することで同様の学習ができる可能性がある。

まとめ

現状のdlshogiは、中終盤の読みが重要な局面で評価を誤る場合がある。
自己対局のみでこれを改善するのは難しいため、より直接的に評価を修正する方法を考えた。
実際、評価を誤る局面一つを対象に、試したところ効果があることが確認できた。
この方法で、中終盤の精度を徐々に改善していきたい。