チェスAIはNNUE導入以降、どう変わったのか?

やねうら王の評価関数にNNUE(差分計算可能な3層程度の全結合ニューラルネットワーク)が採用されて数年の時を経たのちに、チェスのAIであるStockfishにNNUEが導入された。

これによってチェスの世界はどのように変わったのであろうか?

将棋AIの世界ではNNUEが導入されて、確かに強くなったが「棋風がこう変わった」みたいなのはあまり聞かないのだけど、チェスの世界ではどうもそれとは様子が異なるようである。

将棋AIも、もしかしたらNNUE導入前と導入後とでは棋風が本当は大きく違ってるのだけど、それをレビューしている人がいないだけという可能性もある。将棋AIの棋風のレビューを本気でやっているライターの人はいないと思うのだけど、チェスAIだとそういうライターの人がおられるようであるから、そのへんの事情はあるのかも知れない。

あとは、将棋AIではNNUE以前はKPP(三駒関係)型の評価関数が主流であったのだが、チェスAIの世界は、PP(二駒関係) + α みたいな感じで将棋AIほどの表現力がなかったので、そこからNNUEへの飛躍だから、わりと評価値の出方のギャップが大きかったのかも知れない。

ともかく、このへんの事情が将棋AIとチェスAIの世界でわりと違うようで、NNUE以降のチェスAIのレビューが書いてある書籍などを読んでいると、色々と面白いことが書かれている。

例えば『The AI Revolution in Chess』によると、NNUE導入以降(2018年末以降)、トッププレイヤーたちの間でチェスの序盤と中盤の理解に大きな変化をもたらしているそうである。特に、より長期的な視座で評価できるようになっていて序盤ではGrünfeld DefenseやCatalan opening、Sicilian Defense Najdorf Variationなどでより早い段階で端のポーンを突く、中盤でポーン損の見返りに微妙な駒配置の利を選ぶ(旧来型はNNUE導入後よりも駒得を過大評価する)そうだ。

また、この本の6章ではclosed positionについて深く言及されている。

ここでclosed positionというチェスの概念をこのブログの読者に向けて説明しなければならないのだが、この概念、わりと難しい。私も正確に理解してる自信はないので興味のある人は自分で調べて欲しい。

一応、私にできる範囲で説明しておくと、チェスのpawnは将棋で言うと歩である。このpawnは、1つ前の升に進めるのだが、1つ前の升に相手の駒がある時、その駒を取れないのである。ここが将棋と違うところである

であるから、pawnが鎖のように絡まって、すべてのpawnの身動きができなくなるような局面になることがある。(その後方にpawn以外の駒が控えていて、それらはpawnの鎖が邪魔をしてpawnの鎖の向こう側には利きがないような状態。将棋では戦いが始まってからこのような膠着状態になることはほとんどないので、将棋はほぼすべての局面がopen positionだと考えられる。それゆえ、これを将棋で喩えるのは適切ではないのだ。将棋で喩えられたら、もう少し将棋ファンの理解が深まるところではあるのだが…。)

まあ、そのようにpawnが膠着状態にある局面のことをチェスではclosed positionと呼ぶ。

NNUEが導入される以前のチェスAIはclosed positionを非常に苦手としていた。

※ 私見だが、NNUE導入以降でもclosed positionはわりと苦手であったように思う。大きな一つ目の転換点はAlphaZero(とその再現プロジェクトのLC0)の登場だ。あと、NNUEでも最近、Stockfishにpawn hash tableというpawnの陣形に対する統計値(history stats)を持つようになって少し改善されたという話もある。

歴史的なことを言うとNNUEが導入される以前のチェスソフトであっても、2010年ごろにはすでにチェスのグランドマスターよりは遥かに強かったのだが、それでも当時、「人間が唯一勝てる方法があるとしたら、それはclosed positionに持ち込むことだ」と言われていた。

それほどチェスのAIはclosed positionを苦手としていたのである。

なぜclosed positionに対してチェスAIは弱かったのか?

この説明をクリアにできるほど私のチェスの理解度は高くはないので間違っていたらコメント欄等で指摘していただきたいのだが、私の理解の範囲で説明すると、pawnが動かせないのでその後方に控えている駒を組み替えたりして長い手数をかけてパズルのように理想形に近づけていく作業が必要になるからである。

このような長期的視座に立った組み換えは、人間はわりと読みやすい。pawnは鎖のようになっていて動かないから激しい取り合いみたいなのを読む必要はないのも人間にとって都合が良い。

そんなわけで、closed positionは人間にとっては戦略を立てやすく、その逆にチェスAIにとっては先のほうまで読まないと上手い指し手が指せないようなとても厄介な局面であったわけだ。pawnが固定化されている時に、控えている駒の微妙な位置関係に対して正確に形勢を評価値に反映するほどの局面の評価精度がなかったとも言える。

それが、(この上で挙げた書籍によると)NNUE導入以降(もうちょっと大きい括りで言うとDeep Learning型の評価関数導入以降)は、大きく変わったらしい。

AlphaZeroが登場した時に、その斬られ役(?)としてStockfishとの対局棋譜が公開された。(当時のStockfishはNNUEを採用するより前)

その棋譜のなかに、AlphaZeroがclosed positionでうまくStockfishをやり込める棋譜があるらしく、closed positionに対するAIの解像度(理解度)の違いが顕著に現れている。(のだそうだ)

まあ、そんなわけで、2010年以降、ご家庭のPCで動くようなチェスのソフトがグランドマスターより強くなってからトッププレイヤー同士の対局においても、ソフトでの序盤研究が進み、その研究されているところをいかに避けながら戦うか(これはプロ将棋界でもそういう戦い方をしている棋士の方は多数おられる)にシフトしていったのだが、しかし、closed positionみたいなのは、チェスAIにDeep Learningが導入されるまで(2018年後半にNNUEが導入まで)は、それまでのソフトの評価が間違っていたわけであって、要するに研究自体が正しくなかったわけだし、そんな間違った評価しかできないソフトを用いていたのでは、(closed positionが絡む局面は)ろくに研究できていなかったということになる。

いままで「ソフトが不利って言うから避けてたけど、新しいソフトにしたら、違う結論を提示してきた!」みたいな感じで、より強いソフト、より正しく局面を評価しているソフトの必要性を示したとも言えるな。

このことは、序盤研究をするのに、人間より十分強いソフトさえあれば良いということでは決してないという例として知っておいてもらえればと思う。AIを用いた序盤研究においては、序盤評価の精度は高ければ高いほど良いのである。

そのように序盤研究に適した将棋AIは、局面評価に対して高い精度を持つことが重要である。その開発のためには、Deep Learningが必須で、それも大きなネットワークモデルを用いれば用いるほど評価の精度が高くなるのだが、そのような大きなネットワークモデルの学習には非常に大量の棋譜(教師データ)が必要になり、その棋譜の生成コストが馬鹿にならないのである。

やねうら王プロジェクトでは、今年に入ってから将棋AIの機械学習のためにGeForce RTX 4090を2個買ったのだが、全然追いつかないのでもっとたくさんのGPUが欲しいところである。(ご支援いただける方は、このブログの上のほうにあるグローバルメニューの「やねうら王を支援する」からお願い致します。)

チェスAIはNNUE導入以降、どう変わったのか?」への3件のフィードバック

  1. おそらく考察から見落としている、もしくは紙面の都合上書かなかった点として、ポーン(pawn)と将棋の歩には大きな違いがあります。
    チェスの場合はポーンはクイーンになれます。そのためなれる可能性がある、なれることが確定しているポーンと歩には大きな差があるのではないでしょうか。(私もチェスについてさほど詳しくはないものの)

    それはさておきいい記事だと思いました!

    • オープンポジション・クローズドポジションの説明に成れるコマの違いは重要じゃないから書かなかっただけじゃね?

  2. 最近、渡辺九段が端歩の突き越しの大きさをツイートしてましたが、
    チェスでも端ポーンを早めに突く効果が言及されてるんですね。
    https://twitter.com/watanabe_1984/status/1776017597328482308

    端歩を早めに突くで個人的に思い出すのはelmo vs. AlphaZeroの72番目の棋譜72.csaです。
    72手目の端攻めあたりから急に当時のソフトが反省してた覚えがあります。
    alphazeroの評価値がわからないのでいつから端歩の効果を理解していたのかはわからないけど
    空恐ろしい感じを受けました。

コメントを残す

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