TadaoYamaokaの開発日記

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

将棋AIの進捗 その59(第3回電竜戦で見つかった課題と対策検討)

第3回電竜戦では、水匠が準備した先手番角換わりの長手数の定跡が、dlshogiの盲点を突いていて定跡を抜けた時点で大差になっていた。

具体的には、以下の局面の85手目の8三角打が先手優勢であることをdlshogiが見つけらず、盲点となっていた。

8三角打から進んだ87手目まで進めると、9七玉で先手有利を見つけることができる。

85手目は、水匠5では8三角打が最善手で先手優勢であること見つけており、dlshogiと水匠5で評価が割れる局面となっている。

モデル精度の課題

モデル精度が上がればこのような盲点も減らすことができると考える。

自己対局でモデル精度を改善する場合は、自己対局中に現在見落としている手もある程度選ばせる必要がある。
自己対局中には、ルート局面で方策に一様ランダムなノイズを加えているため、見落としている手を選ぶ可能性がある。
ただ、その確率はかなり低い。

そこで、以下の改善方法を考えている。

エクスプロイターの学習

自己対局のみでは、盲点に気付く確率は低いため、盲点を探してそこを突く別の対局相手が必要になる。
そのためには、現在のモデルの盲点を突くことを学習する別のモデルを学習することが有効だと考える。

現在のモデルを固定して、ある程度ランダム性を持たせた相手を用意し、連続対局で棋譜を生成する。
ランダムで手を選ぶ際は、一定の割合で評価値が下がる手も選ぶようにする。
対局相手で使用するモデルは、その棋譜のみを学習する。
それを繰り返すことで、盲点を突くことに特化したモデルが学習できる。

対局で生成した棋譜は、メインのモデルの方の学習にも混ぜるようにすることで、盲点をふさぐことができる。

定跡作成の課題

上記の85手目の局面のように、数手先まで手を進めると反省する局面になるのを回避するには、さらに何手か戻って手を変える必要がある。
何手まで戻ればよいかは自明ではない。

現在、dlshogiの定跡作成では、dlshogiで事前に深く探索した手を登録することで定跡を作成している。
上記のようにdlshogiが気付いていない手は、数手先まで進めば気付いたとしても、定跡に登録済みの局面には反映することができない。
定跡の手を伸ばした後に、前の局面にさかのぼって定跡を修正する仕組みが必要である。

Min-Maxによる修正

やねうら王の定跡作成で実装されている作成済み定跡をMin-Maxで探索して評価値を修正する方法が、低コストで実現できる案である。
葉ノードの誤差がルートに伝播する問題があり、これまではあまり採用したくなかった。
しかし、定跡作成中に常に更新し続けることで、誤差は減らすことができるので、上記課題の対策として採用したいと考えている。

現在、dlshogiは、定跡を作成する手番側の手は、定跡を作成済みの局面では常に最善手を選択して手を伸ばしている。
一度間違った手が登録されると修正されない問題があるため、定跡に登録された最善手の代わりに、定跡をMin-Maxで探索した手を選択するようにする。
通常は最善手と手は同じになるはずだが、数手先に反省した局面があるとそれが反映されるはずである。
また、現在のdlshogiの定跡作成の最善手に絞って深く手を伸ばしていく特性も残すことができる。

まとめ

第3回電竜戦で見つかった、モデル精度と定跡作成の課題について、対処方法を検討した。
今後、これら2点の課題について改善に取り組むつもりである。
定跡については大会向けの対策になるが、dlshogi自体を強くするためにやはりモデル精度の向上の方を目指したい。