Stockfish NNUEに関する主観的レビュー

前回記事では、Stockfish NNUE(以下SF NNUEと略す)に関する情報を、英語圏の人達に届けるために書いたので、将棋界隈の人達が知りたい情報ではなかった気がするので、今回は、将棋界隈の人たちのためにざっと流れを書いておきます。

SF NNUEの強さについて

最新のStockfishはバージョン11(SF11)で、これは一つ前のバージョンであるStockfish 10(SF10)とは70-80 eloの差があるそうです。(知りませんでした)

SF NNUEは、10日前の時点で、SF10とほぼ同等らしく、今日の時点でSF10よりは強くなっていて、最終的にはStockfish 11より+100 eloぐらい強くなるのでは?と噂されています。(この辺は、期待値込み?)

SF NNUEのコミュニティについて

Discordのほうで、SF NNUEに関するツール類もどんどん開発されていて、活発に議論がなされています。ログを追いかけるのがしんどいぐらいの速度で進行しています。ざっくり言えば、匿名掲示板のなんとかちゃんねるに似たノリではありますが、開発力と最低限度のモラルがある分、建設的な議論がなされていると感じます。

DiscordのSF NNUEのほうに、日本の将棋AIの開発者としては現時点で、(今回NNUEをSFにportingした)tanuki-の野田さん、Mizarさん、Qhapaqの澤田さん、elmoの瀧澤さんが参加されているようです。

将棋のほうでもNNUEをゼロから学習させた経験があるのはごくわずかの開発者だけで(ほとんどの開発者はtanuki- WCSC28からの追加学習)、このへんのノウハウ自体がそもそも日本人の将棋AI開発者の間で共有されていない状況ですが、SF NNUEのコミュニティのなかで今回、そこが詳らかにされるのかもしれませんね。

日本の将棋AIコミュニティについて

日本の将棋AI開発者も、SF NNUEのDiscordのような雰囲気で交流できる場所があれば良いように思いますが、将棋のSlack(Noviceのkumaさんが作成)のほうは、ほとんど書き込みがないままになっています。

まあ、現状、将棋AI開発者の主戦場は、ツイッター + ブログ記事 + WCSCのPR文書 + GitHub みたいな感じになっていて、それは仕方ないとしても、思考部の開発初心者・入門者用の受け皿が、なんとかちゃんねるしかないのは、とても残念なところです。

また、ツイッターですと開発者をフォローしても将棋AI以外のノイズが大量に流れてきて(私も、そういったノイズを流している側の一人ですが)、それが純粋に情報だけを追いかけたい人にとっては、とても迷惑なのだろうとは思います。

将棋AIの棋風について

将棋AI界隈では、評価関数の形(KPPT,NNUE,…)を自由に変更できて、かつ、その評価関数パラメーターを差し替えたり、探索部だけを差し替えたりすることによって、同じぐらいの強さの様々な棋風の将棋AIが生み出されてきました。Aperyが採用したKPPT型の評価関数フォーマットをやねうら王が読み込めるようにしたころから、その流れが加速したように思います。

やねうら王は、評価関数、探索部、定跡部などすべてがモジュール(部品)として構成されていて、自由にその部品を交換できるという設計思想のもとに開発していました。(技術的な問題から、綺麗に独立したモジュールとは言い難いですが、少なくとも評価関数の形を切り替えたり、Aperyの定跡フォーマットの定跡ファイルを読み込んだりはできます)

5年ぐらい前にPonanzaの山本君にこの話をした時、「そんなことすんの?」(自分は強さにしか興味ない)、みたいな感じでしたが、その設計思想の正しさが、5年の歳月を経て証明されたと言えそうです。

SF NNUEの棋風について

将棋AIでソフトごとに評価関数パラメーターが異なり、棋風が異なるのは当たり前であったので私はすっかり忘れていたのですが、SF界隈ではこれは当たり前ではなかったのです。

SF NNUEのほうは、追加学習させるごとに違った棋風(ある局面での指し手)になることに興奮している人たちがいるようで、これはSF界隈に大きなインパクトがあるようです。現時点でも、棋風がそれぞれ異なる、SF10と同程度の強さのソフトが大量生産できるような状況であるので、そりゃ興奮するのも無理ないだろう、ということです。

SFの従来の評価関数 と SF NNUE

SFの従来の評価関数はいかにも職人的に設計されたと言う感じの評価関数でした。GitHubでその修正履歴を追いかけるのが大変なほどに長い時間を費やされ、この評価関数が開発されてきました。それがSF NNUEのような、ニューラルネットワーク型の評価関数で置き換わるとしたら、それは歴史的な事件であると言えます。

評価関数を単純化して言えば、盤面情報(駒の位置情報)を入力として、その局面での同じ棋力のプレイヤー同士が対局を引き継いだときの勝率(期待勝率)を予測する、数学的な意味での関数です。SFでは精度はそれほど高くなくとも計算コストが非常に小さな評価関数を人間の職人が設計してきました。

このようなとても小さな評価関数ですら、職人がそれを懸命に設計するより、ニューラルネットワークのような、任意の関数の近似ができることが保証されている汎用的な手法を使ったほうが(層が浅いので、実際は任意の関数の近似はできないにせよ)、同じ計算コストでより良い近似ができる関数になるというのは、職人(人間)の敗北という感じではあります。

これは、ML(機械学習)の一つのムーブメントとして、今後、幾度となく取り上げられることでしょう。

情報ソース

Discord for Stockfish
https://discord.gg/aefaxmq

Discord #sf-nnue-dev
https://discord.com/channels/435943710472011776/718853716266188890

SF NNUE #2728(Official Stockfish GitHub)
https://github.com/official-stockfish/Stockfish/issues/2728

Stockfish NNUEに関する主観的レビュー」への15件のフィードバック

  1. お久しぶりです。
    >層が浅いので、実際は。。。
    の部分、囲碁や将棋全体を1つのネットワークで対応させようとするから、層をふかくしないといけないのではと考えています。
    例えば、48層のネットワークを学習するよりも、12層のネットワークを4個学習する方が、効率的ではないかと思っています。
    で一局を4個に分けて(例えば、30手まで、31~60手、61~90手、91以降手以降に分けて)学習させるのはいかがでしょうか。

    • 進行度で分けてというのは誰かがやってたような。ただ、将棋の場合、わりと序盤でも終盤っぽい変化に突っ込んでしまうことはあるので、それやってもなかなか…。

      あとKPPTやNNUE halfKPなどでは元々、玉の位置で配列を分けていることにはなるので、将棋の終盤で玉が3段目以上に上がっていく場合は、別の配列を見ていることになるので評価関数を分ける必要がないですね。

      それから、将棋の場合、終盤は駒得だけしか見ない評価関数であってもわりと正確に指せるので、終盤は評価関数の質の向上が勝率に結びつかない意味もあって…。

      • そうですね。将棋は、最初から最後まで、駒の数が40枚で変わらないので、そうなりそう。

        ただ、囲碁は、盤上の石の数がどんどん増えていくのに、1つのネットワークで序盤から終盤まで学習するのは、効率が悪い気がしています。

        • 囲碁の場合は、AlphaZeroに代表されるようなResNetを使う場合、表現力のほうが高すぎて、教師を作る計算資源のほうが追いついてないので、序盤・中盤・終盤に分けて教師を3倍近く生成しないといけなくなるのであれば、それは無視できないかなと…。

  2. 大変興味深く拝読いたしました。Stockfishの従来の評価関数は職人的に設計された評価関数、とのことですが、Bonanza以前の将棋の評価関数のように、機械学習を利用していなかったという理解で合ってますでしょうか?

    もう一点、ご存じでしたらご教示いただければと思いますが、将棋ではNNUE登場以前は3駒関係+強化学習が主流だったかと思います。その時期に3駒関係型の評価関数をSFに移植しようという試みはなかったのでしょうか?また、当時それを試みたとしたら、オリジナルのSFを抜ける可能性はあったのでしょうか。

    • Stockfishの従来の評価関数についてですが、Stockfishには、FisttestというTesting Frameworkがありまして、探索部/評価関数に関してパラメーターにしておけば、そのパラメーターがいくらのときに勝率が最大になるかは求めてくれるんです。なので、10や20のパラメーターでしたら、それを使って最適値を求めることができます。Stockfishの従来の評価関数は、そうやって最適値を求めてあるはずです。100程度のパラメーター数で構成されているなら、そうするのがベストでしょうね…。

      3駒関係はStockfishでは誰か本家の人がテストしてた気がしますが、成功しなかったのでは。2駒関係とは計算コストが段違いですし、チェスでは駒がすべて、将棋で言うところの大駒ですので、3駒の関係はあまり重要ではないのでしょうね。

  3. 職人が厳選した多数の評価項目についてチューニングを行うという点では、従来のStockfishに近い将棋ソフトはGPSfishあたりが該当するのでしょうか。
    記事の直接的な感想ではないのですが、SF-NNUEが既存SFを置き換えうるというのは、T.N.KがNNUEを引っ提げて環境を激変させた2年前に似たものを感じます。
    当時はKPPTの将来は明るくないものの非線形の評価関数はどうもうまく行かないという雰囲気が強かったように思います。(実際過去記事を読み返すとそういう記述は多いですし、習甦が孤軍奮闘してたのも印象的です)
    NNUEがそれ以前の非線形評価と違ってブレイクに成功した理由について、やねさんの考えがあればお聞きしたいです。

    • 習甦は、玉の固さ、駒割、駒の働き、みたいないくつかの計算は線形に計算して、それを合算するときに浅い層のニューラルネットワークを用いているだけであった気がします。

      普通のニューラルネットワークはNNUEが初めてじゃないですかね。

  4. たややんさんの藤井くんの31銀ツイートがバズってましたが、やねうら王で読み込ませるとどうなるのか知りたいです!

    • 昔のソフト(elmoなど)のほうが遥かに早く見つけますね。まあ終盤が弱いソフトほど早く見つけるのでは(枝刈りが甘いので..)

      あと、記事本文と無関係なコメントは24時間後に手動的に消滅するです..(´ω`)

  5. The latest binaries of StockfishNNUE seems to have fixed an unknown bug.

    SFNNUE is stronger than SFdev now, by at least 30 elo.

コメントを残す

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