ふかうら王 3kn(3000ノード固定,評価関数GCT) VS 水匠 300kn(30万ノード固定)での対局で、これがほぼ互角のようなので、詰将棋ルーチンを無くすとどれだけ強さが変わるのかを検証してみた。
ふかうら王側、root node(探索開始局面)のdfpn(長手数詰将棋ルーチン)をなくすと -R10
ふかうら王側、leaf node(探索の末端局面)の5手詰めなくすと -R25
ふかうら王側、leaf nodeの5手詰め(固定手数の詰将棋ルーチン)をdfpn 300ノードに変更すると -R5 // 計測誤差かも
ふかうら王側、leaf nodeの5手詰めをdfpn 3000ノードに変更すると +R10
結局、5手詰めで+R25程度しか稼げてないので、これ頑張っても仕方ないのではないかと…。
あと、dfpn 3000ノード(7手詰めか9手詰めに相当)ですら+R10にしかならないので、leaf nodeで7手詰めに変更したところで+R5ぐらいしか稼げないように思う。
チェスでは終盤、駒が少なくなっていくので、チェスのソフトではテーブルベース(tablebase)という終盤の定跡データベースを利用している。7駒以下は解析が完了しているらしい。
将棋では、そのようなデータベースを用いることは出来ないので、詰将棋ルーチンは欲しいところではあるが、上述の実験結果からすると、わずかの差しかなく、詰将棋ルーチンの呼び出しのせいで探索速度が稼げないのであれば、leaf nodeの5手詰めを3手詰めか1手詰めぐらいにしたほうがマシだと言えそうである。
詰将棋ルーチンが効果があるのは、強化学習のために自己対局で教師を最初に作る時だ。leaf nodeでの5手詰めがないと詰みがわからないので終局までの手数が長くなり、自己対局のための計算資源が余分に必要になる&詰みを逃して逆転されてしまう(対局の勝敗も含めて学習に利用するので、誤った勝敗情報はなるべく少なくしたい)ということがある。
逆に、教師生成のための自己対局用の計算資源が豊富にあるのならば、詰将棋ルーチンはなくとも問題なさそうではある。(だからこそ、AlphaZeroが詰将棋ルーチンなしに強くなったのだと言うことはできそう)
また、学習を進めていくと、対局時の詰将棋ルーチンの有無による棋力差はさらに小さくなるものと思われる。結論的には、こんなところ頑張ってないで、まずは、大会の本番環境(AWSのA100×8のP4インスタンス?)できちんと性能が出るように頑張れと言うことになりそう。
// ふかうら王がその探索性能でdlshogiに負けると悔しいので、私は詰将棋ルーチンも頑張るが、お前ら(他の開発者)は、俺の屍を乗り越えてゆけ。
「詰みがありそうかどうか」を事前に判定して、可能性に応じて詰将棋ルーチンを動かすかどうか、またはどのくらいの深さで動かすかを決めるというのはどうでしょう。
チェスの場合は、たとえば「いまの駒数」を用いてtablebaseを使うかどうかを判定してるんですよねきっと。
チェスと違って事前の判定そのものが重たい場合は、めちゃくちゃ逆効果の可能性もありますが。もともと通常の局面の優劣に用いられてるであろうパラメータのうちから、詰みに関わりうるものをピックアップするような仕組みなら、追加のコストは少ないような気もします。(適当)
ほとんどの局面は詰まないので、簡単に不詰が証明できるので、SVMを用いて詰みがありそうかを調べようにも(2004年ごろにそういう研究がよくありました。「SVM を用いた将棋の詰み有無の予測の学習」などでググっていただければと)、ほとんどの局面では詰まないと返ってくるだけでして…その呼出しコストが無視できないような…。
あーまさにそういう研究があったのですね。
Hello. I’m new to Shogi engine development. In implementing DFPN, is SmallTreeGC required? Moreover my DFPN + SmallTreeGC failed to solve the “Astonishing Wilderness”. Is this natural?
> is SmallTreeGC required?
It’s better to have it…
BTW , Astonishing Wilderness (驚愕の曠野) was solved by DFPN (+ some GC) in 2005.
see : http://toybox.tea-nifty.com/memo/2005/05/post_3535.html