dlshogiにはStochastic Ponderという機能がある。もともと将棋ソフトではponder(相手の手番で思考する)という機能があった。それのstochastic(確率論的)なやつだ。どういうことなのか?
普通、ponder機能は、自分が思考した指し手を返す時に相手の一手を予測して返すことで実現されている。
思考エンジン部からGUIへの応答は次のようになされる。
bestmove 7g7f ponder 8c8d
// 「最善手は76歩、相手の指し手は84歩と予想します」の意味
そうするとGUI側からは、この84歩を指した直後の局面を送ってきて、go ponder(相手番だけど、いま思考していいよ)というコマンドがやってくる。これがUSIプロトコル(という将棋ソフトが用いているプロトコル)でのponderの仕組みである。
ところが、これだと、ponderが外れると読みが無駄になってしまう。相手が長考している場合、相手の指し手を一手に限定して考えるのはちょっともったいない意味もある。
また、MCTSを使った将棋ソフト(≒dl系の将棋ソフト)は、対局によって局面が進行したときに、その局面に至る以外の経路の探索済みの局面の情報を捨ててしまう。(メモリがもったいないため) そうすると、ponderが外れると2手前で調べていた局面の情報すら捨ててしまっていることになる。
従来の将棋ソフトだと、探索済みの局面の情報は置換表という表にある程度記憶されているので、ponderが外れたところでそこまで大きなオーバーヘッドではなかった。しかし(いまの)dl系の将棋ソフトはそうではないのである。
さらに悪いことがある。
MCTSはある局面を評価するためにGPU側にお願いするわけだが(Deep Learningで言うところの「推論」を呼び出す)、その応答が返ってくるまでその先の局面を展開することはしない。なので、探索開始局面まわりは思考開始直後は遅遅として推論が進まない。(GPUからの応答を待たないとその先の局面を展開できないため) それなのに、上のように、ponderが外れて、探索開始局面について何の情報もない(推論を呼び出していない状態)だと、その時の損失が大きいのである。
ここで大きな損失を被るなら、ponderしないほうがマシという話もある。
そこで、相手がponderの指し手を指したあとの局面(自分の手番)ではなく、自分が直前の手(bestmove)を指した直後の局面(ponder用の局面の1手前。ここは相手番の局面)でponderさせて欲しいわけである。
これは本来は、GUI側にそういう機能があって、そうさせてくれるのがよろしいと思うのだが、USIプロトコルはこんな状況を想定していないので仕方があるまい。
そこで、go ponder(相手番だけど、いま思考していいよ)というコマンドが送られてきたときに、現在の思考対象局面を1手前に戻して、そこでponderするというのが、Stochastic Ponderという機能である。
// 相手の指し手を1手のみ予測してそれに対してponderするのではなく相手のすべての指し手を(MCTSで探索するので)実現確率に基づいて予測し、それに対してponderしているようなものであるから、stochasticとついている。
これを最初に実装した将棋ソフトはdlshogiである。これがあるのとないのとではR30か50ぐらい違うと思うのだが、効果の計測はできてない。
とりあえず、これがなくては話にならん!と思い、やねうら王にも今朝、30分ぐらいで実装した。(やねうら王のGitHubに反映済み)
これ、大会の当日の朝に30分ほどで実装して、テストほとんどせずに完璧動作してるの、すごすぎひん?
などと思っているのだが、このエンジンオプション、実は、ふかうら王(dl系評価関数)だけではなく、通常のやねうら王(NNUE系評価関数)の探索部でも使える…はずである。テストすらしてないので明日の大会で使って大爆死しても知らないが。
ともかく、毎度、大会の前日(当日?)に探索部に強くなるアップデートが何かしらGitHubに降ってくるのが、やねうら王である。
ちなみに、相手番で思考して読み筋を返すことになるのだが、GUI側は自分手番で思考した読み筋が返ってくることを期待しているため、読み筋の表示がおかしいことになる。初心者はこんな状態になったら、大恐慌(?)になりかねないため、デフォルトではこの機能はオフにしてある。(dlshogiではデフォルトでオンになっているが…)
さすがにコレは取り込まないです。^^;
なぜなのじゃ…。
// 読み筋がおかしくなるから?
// あるいはMultiPonder搭載ならすでにその機能を内包しているとも言えそうな。
第6回電王トーナメント用にやねうら王に実装テストしてた話しませんでしたっけ?ソースどっかいってしまいましたけど
>> しかし(いまの)dl系の将棋ソフトはそうではない
置換表使わずに「過去に探索済みの局面」が出現したら、同じ動きを繰り返してしまうまように思えるが