将棋AIの2024年は大規模定跡時代

将棋AIの2024年は大規模定跡時代の幕開けだ!(大航海時代みたいなノリで言ってます)

従来、将棋AIに搭載している定跡と言うと、数万~数十万局面程度が限度であった。

人の手で数十万局面規模の定跡を編集してる時点で職人芸ではあるのだが、そろそろそれも限界で、定跡の自動生成に舵を切るチームが増えてきた。

しかし定跡の自動生成には非常にお金がかかる。なぜお金がかかるのかと言うと、将棋AIに思考させないといけないからである。

例えば、従来手法には、floodgate(将棋AIの対局場)の棋譜のうち、そこからの勝率の良い局面を抽出して定跡とする方法があった。確かにこの方法なら、勝率を集計するスクリプトを書くだけで定跡が生成できた。

しかしそれでは局面数に限界があるし、定跡の精度もさほど高くはならない。また、振り飛車の定跡が欲しいとしても、振り飛車は勝率が高くないからと、従来手法だと切り捨てられてしまう。

このような事情から、将棋AIに思考させて、それをもとに定跡を生成する方法に切り替える開発者が増えてきた。完全自動生成しているか、開発者が何らか判断をしながら定跡を編集しているかに多少の違いはあれど、自らの計算資源を投じて定跡を生成するように切り替りつつある。

例えば、振り飛車の定跡を熱心に掘っているのはHoneyWaffleの開発者で、毎月7万円程度AWSに使っているそうである。将棋AIの世界、振り飛車は飛車を振った時点で評価値が(居飛車側から見て)+200とか出るので居飛車楽勝と思われてる節はあるのだが、HoneyWaffleはかなり深くまで振り飛車の定跡が整備されている。だから、こちらが対振り飛車の定跡を全く搭載していないと80手目付近で持ち時間が10倍ぐらいの差があることがあり、10倍も差があるとレーティング換算でR200か300ぐらいの棋力差となっているので、容易に逆転されうる。やねうら王はfloodgateでHoneyWaffleと何度か対局したが、「これは定跡なしでは勝負にならない」と私は実感した。

このように定跡の整備、そして自動生成が必須というのがここ1,2年の将棋AI界の大きなムーブメントなのだが、しかし、思考させるためには、計算資源が必要だ。これには多額の費用がかかる。

この理由を説明するのは実は容易ではないのだが、今回はそこを掘り下げて書く。長文になると思うのであらかじめ覚悟をしていただきたい。

まず、定跡を生成しているのは、将棋AIの大会で勝ちたいからである。将棋の真理を突き止めたい人だとか、振り飛車が好きすぎて振り飛車の定跡が欲しいからという人もいるかも知れないが、まあ、半数ぐらいの開発者は大会で勝ちたいから定跡を生成している。

ところが、将棋AIの大会では、AWSやGCPのようなクラウドコンピューターを借りるのが当たり前になっている。10数年前ならば、手元のPCが4コアで、大会もそのマシンで参加する、みたいな状況であったのだが、クラウドでハイスペックなマシンが容易に借りられるようになった現在、手元の開発用のPCは4コアでも大会では192vCPUを使う、みたいな状況は珍しくもない。

192vCPUだと、やねうら王の場合、1秒間に1億ノード(局面数)ぐらい探索することができる。大会では1手につき平均的には15秒ぐらい思考する時間が与えられるので15億ノード読めるということである。

1局面につき、15億ノードも読める世界で戦うのに、(1局面につき)1000万ノードしか読んでいない定跡で事足りるのか?そんな定跡だと、定跡を抜けたところで自分が必敗になっていてもおかしくはないだろう。普通に考えると怖くて使えない、無い方がマシと言えるような定跡であろう。

では、(1局面につき)100億ノードずつ調べて100万局面分の定跡を生成するコストはいかほどなのか。

AWSでこれをやろうと思うと、私のざっくりした試算によると192vCPUで10年ほど要して、7500万円ほどかかるようだ。
// c6a.metalを2つ(2.88USD/h × 2)を10年。

このように(大会で使うために)クラウドでハイスペックなマシンが容易に借りられるようになってしまったがために、そこで戦える定跡を生成するコストは莫大なものになってしまったのである。

また、登録局面数が100万でも定跡としてはかなりスカスカで、全く十分ではないことがすでにわかっている。だからと言って1局面当たりの探索ノード数を減らして、(精度が)カスカスな定跡にするのがいいのだろうか?やはり1局面当たりの探索ノード数を増やしてスカスカな定跡にするべきか?

これが、いま開発者を悩ましている「定跡をスカスカにするかカスカスにするか」問題である。

例えば、いま、1兆ノードを探索するだけの計算資源が与えられて、これを用いて定跡を生成する時のことを考えよう。なるべく出現頻度が高いとわかっている局面について思考させるのがいいだろうけど、だからと言って、平手の初期局面1つを1兆ノード探索させたところで、結果が26歩か76歩になるのは目に見えている。初期局面の26歩しか登録されていない定跡DBが完成してしまう。

このことからわかるように、1兆ノードを探索する計算資源があるなら、N局面を1兆/Nノードずつ探索させて定跡を作成した方が得である。この時の最適なNを求めるという資源の最適分配問題となる。

Nがあまりに小さいなら、人間が作った定跡の方がマシである。初期局面付近ではそこまで形勢の差はつかないので、そんなところの定跡がしっかりしていても仕方がないからである。

しかしNがあまりに大きいなら、定跡抜けた時点で必敗、みたいな変化が出てくる。ないほうがマシな定跡である。

とは言っても、定跡で進むとこちらは思考時間が0で指せて、相手だけ一方的に思考時間が奪われるという特徴がある。だから、形勢を大きく損ねない程度なら定跡の精度は多少低くとも、相手の思考時間を奪えて得だと言う意味もある。

また、将棋は初期局面付近ほど、形勢を損わないという特徴がある。例えば、初期局面なら0.1秒しか思考しなくとも26歩か76歩を指すだろうし、これによって形勢を損なうことは考えられない。

つまりは、初期局面付近は雑な定跡であっても、相手の思考時間が奪えるし、形勢を大きく損なうことはないし、実現確率(実戦でその局面に遷移する確率)が高いし、ある程度網羅してある方が得なのである。

このあたりの事情を考えるとNをある程度大きくとりたいところではある。

それで、色々実験した結果、1局面あたり1000万ノードぐらいで定跡を生成するのがバランスが良いと言うことがわかった。大会で1局面15億ノードも読めるのに、その1/150しか読まずに大丈夫なのか?と言われるだろう。正直、大丈夫ではない。大丈夫ではない変化も多々あるのだが、それでもアルゴリズムを工夫すれば、無い方がマシな定跡にはならないようである。

実際、ここ2ヶ月ほど使って私は1局面1000万ノードの探索で1000万局面ほどの定跡を生成した。(AWS換算で75万円ぐらいの計算資源を使用)

floodgateでレートを計測したところ、floodgateの過去レーティング、2週間レーティングで1位になった。(petaと名前についているのが、私が今回自動生成している「ペタショック定跡」を搭載したやねうら王である。14Mなら1400万局面搭載の意味。)

R4660で1位になったのは、たまたま上振れしただけだが、それでもR4500ぐらいの実力があることは間違いなさそうである。3700Xは、8コア16スレッドのCPUで、R4500前後は16コアのCPUで参加している人が多いなか、それと互角に渡り合っているのは、定跡で+R100~200ぐらいの上乗せがあるからだと考えられる。

大きな定跡は、ファイルサイズも大きく、例えば10億局面だとやねうら王の標準定跡フォーマットだと230GB程度にもなる。1600万局面の現時点でも3GB程度あって、わりとでかい。このような大きな定跡はメモリに乗り切らないので、メモリに載せずに処理するような技術や、循環や合流のある10億ノード規模の巨大グラフに対してminimax探索相当のことを行うようなアルゴリズムが必須となる。

私は数ヶ月かけてこれを研究・開発していたのだが(これについてはいずれ別の記事か論文として発表する)、ようやく形になったので、本格的に定跡の自動生成に踏み切ったわけである。

技術的にはすでに10億局面掘れるだけの状況が整っている。ただ、実際に10億局面掘るとなると、AWS換算で7500万円ほど要する。どこまでやるかは私のお財布事情次第であるが、とりあえず1年ほどかけて1億局面までは掘ろうと思っている。誰か寄付してくれる人がいれば、もう少し掘れる。寄付は大歓迎である。

ただ、いまの方法で本当に定跡を抜けて頓死するような変化が出てこないのかは疑問も残るところである。そこで、この1000万局面時点のペタショック定跡をGitHub Sponsors/FANBOXで寄付してくれている人全員にレビューのために提供する。(今月21日に配信するやねうら王News Letterにダウンロードリンクを掲載する。)

いまからでも間に合うので、ペタショック定跡が欲しい人はいくらでも良いので寄付して欲しい。寄付の金額を問わず、ペタショック定跡を提供する。(以前に寄付してくださった方にも、メールもらえれば提供します)

そのようなわけで、やねうら王プロジェクトに支援を検討していただける方は、このブログのメニューの「やねうら王を支援する」ところから辿っていただけると幸いである。

将棋AIの2024年は大規模定跡時代」への6件のフィードバック

  1. つまり、序盤はすべて既出な定跡を使うだけのペーストが流行る時代もあるってことですか?w

  2. コンピュータ将棋定跡の歴史(自分の理解なので間違っていたらすみません)

    人間の定跡を利用(プロの棋譜で3回以上出現した場面を定跡として登録)
    古い棋譜も使われているので結論が出ている局面に突入してそのまま負ける事案が発生(角換わり富岡流、ゴキゲン中飛車超級戦など)
    そこで定跡に登録する前に探索をかけて評価値が一定以下のものは登録しないようにした
    あらかじめ自動生成した定跡を使用するソフトが登場(やねうら王メガショック定跡など)
    人間が指さない戦型も定跡に入っているので自分だけ時間を使う展開に、他のソフトも定跡自動生成定跡に追従する
    ソフトのレーティング上昇が早すぎて、大会前に定跡を作っても大会出場よりも弱いソフトで作った定跡になってしまうため、どのバージョンで定跡を作るか定跡チキンレースが発生
    定跡なしで出場したポナンザが電王戦で優勝
    持ち時間の長い電王戦では定跡なしが流行することに
    人力でソフトの穴を見つけて突いてくるs-book blackが流行(評価値と実際の勝率が異なる局面を人力で探し出して登録することで勝率を上げている)
    人力で登録するのはもう無理なので自動生成に

  3. DL系で定跡を掘ることは有用だったりしますか?
    角換わりの激しい将棋と振り飛車ではまた違うかとも思いますが。

    • DL系で定跡を掘った方が評価値のブレが少ないので精度が良いものができます。その代わり、GPUがたくさん必要で、そのGPUがないので仕方なくNNUE系で掘っています。

      まあ、そうは言っても終盤はDL系はわりと読み抜けをするので、終盤の入り口ぐらいまで定跡を掘った時にその読み抜けがどう効いてくるかという問題が…。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です