前回までのあらすじ) 先手番専用定跡s-book_blackが優秀すぎた。私が2年前に開発したテラショック定跡生成手法では到底太刀打ちできなかった。そこでやねうら王プロジェクトでは、新たにスーパーテラショック定跡生成手法というのを考案し、やねうら王に実装したのであった。
前回記事 : 先手番専用定跡s-book_blackの厚い壁
https://yaneuraou.yaneu.com/2021/11/01/thick-walls-of-s-book_black/
テラショック定跡生成手法のおさらい
まず簡単にテラショック定跡手法をおさらいし、何が悪かったのかを書き、今回それをどう改善したのかを書く。
テラショック定跡は与えた棋譜の各局面に対して長い時間をかけて思考させる。1局面につき探索1スレッド×1時間でやっていた。1スレッドにしているのは、将棋ソフトは並列化効率が悪いからで、スレッド数を増やしてもその平方根ぐらいの実効値しか出ないと言われている。(実際にはもう少しいいとも言われているが) よって1スレッドで探索すると最大効率が出るわけである。
そのようにして、各局面を思考し、定跡DBに登録する。ここまでは棋譜を与えてその局面について思考させているだけなので、従来のコマンドで可能である。(やねうら王の”makebook think”コマンド)
このあと、得られた定跡DBに対してテラショック化という作業を行う。
これは、与えられた定跡ツリー上でmin-max探索を行い、ベストな変化を探す工程である。(やねうら王の”makebook build_tree”コマンド)
min-max探索を知らない人に簡単に説明しておくと、将棋は先手がまず着手する。先手にとって、評価値が最大となる指し手がいいわけだ。次に後手が指す。後手も自分にとって評価値が最大となる指し手を選びたい。後手にとって最大ということは、先手にとって最小ということである。このように、1手深くなるごとに先手から見て、最大、最小、最大、最小…というように局面を選んでいく。だから、これをmin-max探索と呼ぶわけだ。要するに、先後、双方が最善を尽くした時に、末端の局面で先手にとって一番評価値が高くなるような変化手順(最善応手列)を選んでいきたいわけだ。
この末端の局面のことをleaf nodeと呼ぶ。nodeは節点の意味で、グラフ理論の用語だが、ここでは局面のことだ。leaf(葉=木の末端)のnode(局面)ということである。
要するに定跡DBをテラショック化すれば、leaf nodeの評価値が一番良いところを目指す(別の)定跡DBが作られるということである。
テラショック定跡生成手法の欠点
ところが、このテラショック手法で生成した定跡、すこぶるs-book_blackに対して弱かったのである。弱かった原因はいくつもあるのだが、代表的なものを書いていく。
・定跡を生成するのに従来の評価関数(NNUE評価関数)を用いていたのだが、いま流行りのDeep Learning系の将棋ソフトと比べると序盤が弱く、その評価の精度に問題があった。
・思考対象局面としてfloodgateの棋譜を与えていた。すなわち、floodgateの棋譜上の局面でmin-max探索をしていた。これだと、与えた棋譜に出現した局面に至る指し手しか自分も相手も指さない想定になってしまうが、一部の指し手を封じられているも同じである。これは、じゃんけんでグーを出すなと言っているようなもので、いい影響があるはずがない。
実際は、テラショック化した定跡を用いて自己対局させて棋譜を生成して、またその棋譜の局面について思考させて…というのを繰り返して定跡を生成していたのだが、その部分を自動化はしていなかったのでそれほど何回もPV(Principal Variation = 最善応手列。定跡上の読み筋のこと)周りの定跡を掘っていくことができなかった。このため、s-book_blackに対して、定跡の長さでも負けていた。
また、逆に、s-book_blackは定跡抜けた局面で短い時間で自己対局させて実際の勝率を検証しているようで、評価値は互角ぐらいであったとしても、そのあと実際に勝ちやすい局面を選定しているようであった。定跡生成の時も、そのように実際の対局シミュレーションを行うべきだったのかも知れない。
あと、それとは別に、大きな欠点として、従来の探索部を用いる場合、候補手が1つしか得られない。MultiPVという機能を用いることで上位N個の候補手が得られるので、MultiPV = 4で探索していたのだが、そうすると5番目以降の候補手が漏れてしまうという欠点があった。これはさきほどのグーが封じられたじゃんけんと同じ理屈により、ちょっと損である。
また、MultiPVの機能は、MultiPV = 4だと4倍近く(同じ深さの)探索に時間がかかるようになるので、非効率であった。例えば、取る1手の局面でMultiPV = 4で探索したところで、2番目以降の指し手は1番目の指し手と比べると非常に悪い評価値しかつかないので、その調べる時間がもったいない。2番目の指し手を調べるのは仕方がないとしても、このとき3番目と4番目の指し手を真面目に思考するのは時間の無駄である。
このように、テラショック定跡手法にはさまざまな欠点があった。よくもまあ、そんな定跡を使って、WCSC29(第29回世界コンピュータ将棋選手権)でやねうら王は優勝できたものであるな。将棋ソフトのたぬきシリーズの開発者の野田さんはテラショック定跡のことを「テラショック定跡はやね師匠しか使えない呪われた装備では」と評していたが、私も呪われていると知っていたら、そんな装備は使わないのである。(笑)
テラショック定跡生成手法の改良点
以上の反省を踏まえ、定跡を生成する時にDeep Learning系のソフト(ふかうら王)を用いることにした。ふかうら王はやねうら王プロジェクトで開発した、dlshogiの互換エンジンである。
また評価関数のモデルファイルは、水匠の開発者のたややんさんが用意してくれた。このモデルファイルは、現時点で公開されているdlshogiの最強の評価関数のモデルファイルにも互角以上の評価精度を誇るようである。
あと、Deep Learning系の将棋ソフトでは、探索したときに追加コストなしに全合法手の評価値が得られる。つまりは、普通に探索すれば良くて、MultiPVのようにMultiPV 4だから4倍の思考時間がかかる、みたいなことはしなくて良いのである。
それから、今回の定跡は、GeForce RTX 3090で1局面およそ1秒(NodesLimit 30000)で思考させることにした。1秒は短いようだが、局面数を稼ぎたい意味がある。前回のテラショック定跡を生成していた時の経験からすると100万局面ほど調べたところで、角換わりの入り口ぐらいにしか到達しなかった。100万局面だと少なすぎたようである。ただ、今回は、棋譜を与えてそれを掘る(「掘る」というのは、思考して定跡の枝を進めていくこと)のではなく、PV(初手から双方が最善を尽くした時の読み筋)まわりを中心に掘っていくので、そこまで無駄な掘り方はしないはずだから、200万局面を目標に掘っている。
スーパーテラショック定跡生成手法
上の改良点に加えて、今回は、PVまわりを自動的に掘るという機能を用意した。千日手が絡むのでこの部分、わりと難しく、2年前の私では高速な実装をすることが出来なかった。今回は、局面についてふかうら王で思考しながら、そのバックグラウンド(別スレッド)で、次に掘るべき局面を選定するという作業を行い、その選定時間が極めて短くて済む(100万局面時でも0.1秒未満)ようにすることができた。
そのために様々な技術とテクニックを導入したのだが、ここに書ききれないので、詳しい技術的な内容は次の電竜戦のPR文書にでも書くとして、大きく3つの特長があるのでその紹介をしておく。
特長その1)
ranged alpha beta searchという技術を開発した。alpha beta search(αβ探索)というのは、よくゲーム理論の教科書に載っているmin-max探索の改良版である。しかし、ふかうら王の思考中の局面を選んではならないので、ふかうら王で思考中の局面のleaf nodeの評価値は少し減点する(例えば -100する)ことにした。これにより、その局面を避けて探索してくれる。これにより、思考と思考対象局面の選出を完全に並列化できるわけである。
特長その2)
棋譜を外部から与えてその棋譜上の局面を思考ことができる。ただし、PVに関係しなさそうなところを延々と掘っても時間の無駄である。そこで、上記のranged alpha beta searchの過程で、そのleaf nodeに棋譜の局面が出現した時に、棋譜の指し手に加点する(例えばその指し手の評価値に +100する)のである。こうすることによって、PVに絡みそうな棋譜の局面だけが延長され自動的にふかうら王の思考対象となる。
特長その3)
root局面(探索開始局面)を与えられる。上のranged alpha beta searchの時の開始局面を自由に設定できる。例えば、角換わりの棋譜上の局面だけを与えることも出来る。この時、棋譜上の各局面を開始局面として、思考対象局面を探すので、棋譜周辺の局面が重点的に思考されることになる。そうした場合、角換わりのスペシャリストのようになるだろう。
s-book_black対策
例えば、s-book_blackがそんなに優秀であるなら、s-book_black上のすべての局面を上記の特長2の機能によって、棋譜として与えてやれば、PVまわりでs-book_blackに出現する局面は積極的に掘っていけることになる。また、上記の特長3のroot局面として指定やれば完全に狙い撃ちみたいなことも出来る。
このようなことを実現するために、定跡DBから局面を抽出するコマンド”makebook extract_sfen_from_db”をやねうら王に新たに追加した。
これによって、特定の定跡をスナイプ(狙い撃ち)する定跡を生成したり、人間が、自分の対戦相手の棋譜を与えて、その棋譜まわりを重点的に掘って研究に用いたりすることが出来るようになった。
完全に自力で採掘してs-book_blackに勝つ
しかし、そのようなことをしなくとも、すなわち、外部棋譜を一切与えずに完全に自力での採掘のみでs-book_blackに勝てはしないのだろうか?それが今回の目標である。
定跡を掘り始めて1週間ほど経ったのだが、いまだs-book_blackに勝てたかどうかはよくわかっていないのでこれについては後日別の検証記事を書く。いずれにせよ、s-book_blackは非常に優秀で、簡単には勝たせてもらえそうにない。この精度まで定跡を高めてもなかなか勝たせてもらえないのだから、2年前のテラショック定跡では到底歯が立たなかったのも道理である。
スーパーテラショック定跡2手目
定跡を掘り始めて1週間。現在のスーパーテラショック定跡の内容を確認したところ、先手の76歩に対する後手34歩が大悪手だと主張している。
// 上のツイート、「横歩取りも相掛かりも」と書いているが、「横歩取り、一手損角換わり、振り飛車」の間違いです。失礼しました。
後手34歩には26歩と突いて、横歩取りか一手損角換わりかまあ何かそんな変化になるのだろうが、それが駄目だと言っている。まだまだ定跡を掘っている最中なのでそれが本当に駄目なのかは私にはよくわからない。
PALの開発者の山口さんのツイートを紹介する。山口さんは、NHK将棋トーナメントで導入されている検討用の将棋ソフトの開発者でもある。(そして、将棋ソフトの大会に参加している開発者のなかでは現時点で一番高い将棋の棋力をお持ちのはず…)
2手目34歩のあとの先手勝率は60%だそうで(これは説明のための仮の数字?)、将棋ソフトの序盤戦術はこの2手目の34歩を咎めるところまで来ているというのは確かなようである。
また、そのような定跡を外部の棋譜を用いずに自力で発見したというスーパーテラショック定跡生成手法はかなり優秀なのではないかと思う。
Deep Learning型の将棋ソフトを用いた序盤研究
上の結果が正しいとして、Deep Learning型の将棋ソフトを用いて(検討モードで使用して)プロ棋士が序盤を研究する場合、駒を動かして局面を行ったり来たりしながら時間を掛ければ上と同じ結論に到達すると思う。そういう意味では、Deep Learning系の将棋ソフトを導入したプロ棋士が、遅かれ早かれ上の結論に到達するのは自然である。
スーパーテラショック定跡生成手法は、人間がやるべき序盤研究のための検討の操作を自動化したものだと考えることもできる。検討モードで駒を動かさずして、その局面の結論(長時間かけて思考させた結果)が一瞬で表示されるという意味で、人間の序盤学習用途として優れているのではないだろうか。
スーパーテラショック定跡生成コマンド
スーパーテラショック定跡生成コマンドは”makebook stera”である。(詳しい説明は、やねうら王のGitHubのdocs/解説.txtに書いてある。)
このコマンド、現時点で使えるようにしてあるので、試してみたい人は自力で定跡を掘って遊んでみるのも良いだろう。(まだ改良中のコマンドなので仕様が変わっても泣かないように。)
私はこのあと半年ほど定跡を掘ってみる予定である。定跡ファイルはおそらく10GB程度になると思われるので一般公開はしないつもりだが、パッケージ版『将棋神やねうら王2』のおまけとして購入してくれた人がダウンロードできるようにはするつもりではある。
2021/11/6 2:30 追記
dlshogiの山岡さんがfloodgateの序盤3手とその勝率について統計を調べたそうです。その結果、出現頻度と勝率は一致していないことがわかったとのこと。つまりは、勝率が高くない指し手を定跡として選んでしまっているということなのだろうか…。
floodgateの序盤3手の統計 – TadaoYamaokaの日記
を読んでみました
>> これは将棋ソフトの序盤にはまだ課題があることを示唆しているのかもしれない。
な、なんだって~!
それにしても名前がナウくない。前回は『100テラショック』だったので今回は『シン・仮面ライダー』みたいにシン・100テラショックみたいなオシャレな名前に
スーパーロボット大戦の世代なので、スーパーとついていれば何でもナウくてヤングだと思っている世代でございます。
レーティング断トツ1位の藤井聡太が先手番横歩取りと後手番角換わり腰掛け銀の勝率が1番悪いのだから人間レベルには関係ない差ですね。
どちらも誘導しやすくてはめ易いという意味では人間的にはかなり優秀でしょうね。
YaneuraOu7.0.0になってからBookOnTheFlyをTrueにすると、sort済みの定跡ファイルを使用しているにもかかわらず、ヒットしたりしなかったりと、おかしな挙動になりました。BookIgnoreRateは0になっています。BookOnTheFlyをFalseにすると正常に定跡ヒットします。
アップデートでBookOnTheFlyの定跡ヒットするようになったみたいです。まさかたぬきさんのプルリクがこんないいタイミングで来てたとは。
Bontaさんも、Discordに参加しませんか?
私にメールいただければと…。→ yaneurao@gmail.com
スーパーテラショック手法で思考局面を蓄積させて、最後にペタショック化させたらまた面白そうな定跡ができるのかなと思ったのですが、どうなんでしょうか。
s_tera系はふかうら王系列でしか使えなかった気がするので、序盤は網羅されるものの、中終盤に関わる定跡の分岐がスカスカになるんでしょうかね?
あと、s_tera系の説明が解説DocからWikiへの移行の際に抜け落ちているようです。
https://github.com/yaneurao/YaneuraOu/wiki/定跡の作成
s_teraコマンド、ペタショックコマンドが上位互換なので要らんかなと思いまして…。
まあそうですよね。
今回スーパーテラショック関係のコマンドを再確認するために関連記事や過去Commit等を参照しましたけども、内容はペタショックコマンドで代用できるなとは思ったので、ふかうら王でペタショックが動くなら特に必要ではないと点には同意です。
ちなみに今月はNews Letter更新はない感じでしょうか。
News Letterは、いま鋭意作成中です。(News Letter用のスクリプト書いたり動画作ったり..)
明日発行予定。
急かすような形になってしまいすみませんでした。NewsLetter配信ありがとうございました!
業務輻輳している時期ですと毎月1回配信のニュースレターも大変かと存じます。
購読者の立場から恐縮ではありますが、やねさんからすればブログやXに投稿するに足らない内容でも、
読むほうからすれば得るものがあるかもしれませんので、簡素な雑文であっても月一の配信はなんとか続けていただけると嬉しいです。
ご検討のほどよろしくお願いします。
(月$25以上のプランや熱烈応援プランは配布物もあるので余計大変でしょうが)