探索なしでグランドマスター級のチェス
(github.com/google-deepmind)- Google DeepMindの
searchless_chessは、NeurIPS 2024論文 Amortized Planning with Large-Scale Transformers の実装で、チェスを用いて大規模Transformerが明示的な探索なしに計画問題をどの程度こなせるかを評価する - 中核データセットである ChessBench は、Stockfish 16が提供した合法手と価値アノテーションを含む1,000万局のチェスゲーム、合計150億データポイントで構成される
- 最大 2億7,000万パラメータ のTransformerを教師あり学習で訓練し、データセットサイズ・モデルサイズ・アーキテクチャ種別・予測目標を変えて影響を比較する
- 最大モデルは未知の盤面で action-value をかなり正確に予測し、明示的な探索なしに難しいチェスパズルを解き、人間相手のLichess blitzでElo 2895を達成した
- Stockfishの探索ベースのアルゴリズムを大規模Transformerへかなりうまく蒸留できるが、完全な蒸留にはまだ至っておらず、ChessBenchは後続研究向けベンチマークとして残る
プロジェクトの目的と論文の文脈
searchless_chessは Amortized Planning with Large-Scale Transformers: A Case Study on Chess の実装である- チェスはAIにおける代表的な 計画問題 として使われており、このプロジェクトは大規模でも暗記が意味を持たないタスクでTransformerの性能を評価する
- 研究では、探索ベースのチェスエンジンの挙動をTransformerに 教師あり学習 で蒸留できるかをチェスで検証する
ChessBenchデータセット
- ChessBench はStockfish 16が提供した合法手と価値アノテーションを含む
- チェスゲーム数: 1,000万局
- 全データポイント: 150億個
- Stockfish 16は最新水準のチェスエンジンとして使われる
- データセットは予測目標別に分かれる
-
Action-Value
-
Behavioral Cloning
-
State-Value
- パズル評価用
puzzles.csv - ダウンロードサイズの例は次のとおり
- Train Action-Value: 最初のshard 1.2GB、全体1.1TB、合計2148 shard
- Train Behavioral Cloning: 34GB
- Train State-Value: 36GB
- Test Action-Value: 141MB
- Test Behavioral Cloning: 4.1MB
- Test State-Value: 4.4MB
- Puzzles: 4.5MB
- パズル評価用
-
モデルと実験設定
- Transformerは最大 270Mパラメータ まで学習される
- 学習はChessBenchベースの 教師あり学習 として行われる
- 実験では次の要素の影響を比較する
- データセットサイズ
- モデルサイズ
- アーキテクチャ種別
- 予測目標: state-values、action-values、behavioral cloning
- 最大モデルは未知の盤面で action-values をかなり正確に予測し、単なる暗記を超える汎化を示す
探索なしの性能と比較対象
- 最終的なチェス方策は 明示的な探索なしに 難しいチェスパズルを解く
- 人間相手のLichess blitzで Elo 2895 を達成し、グランドマスター級の性能を示す
- 比較対象にはLeela Chess ZeroとAlphaZeroが含まれる
- 両システムはself-playで学習されたモデルとして比較される
- 探索を使う場合と使わない場合の両方を比較する
- Stockfishの探索ベースのアルゴリズムを大規模Transformerへ非常によく近似して蒸留できるが、完全な蒸留 はまだ可能ではない
リポジトリ構成と実行フロー
- 主なディレクトリとファイルは次の役割を持つ
src/engines: Stockfish、Leela Chess Zero、ニューラルネットワークエンジンのインターフェースsrc/transformer.py: Decoder-only Transformersrc/train.py: サンプル学習・評価スクリプトsrc/puzzles.py: パズル評価スクリプトsrc/tournament.py: Eloトーナメントスクリプトsrc/searchless_chess.ipynb: モデル挙動分析ノートブックsrc/tokenizer.py: チェス盤面のトークン化
- 事前学習済みチェックポイントは
9M、136M、270Mモデルとして提供される - モデル挙動分析ノートブックでは、すべての合法手の勝率計算のような分析を実行できる
インストールと依存関係
- 実行環境は Python 3.10 を要求する
pip install -r requirements.txtで必要な依存関係をインストールする- GPUがあれば、高速な学習のためCUDA対応JAXのインストールが推奨される
- 例ではCUDA 12向けの
jax[cuda12_pip]インストールコマンドを使う - JAXのバージョンは使用中のCUDAインストールと一致している必要がある
- 例ではCUDA 12向けの
- 外部エンジンとツールのインストールが必要
評価と使い方
- ローカル学習は
srcでpython train.pyを実行する- チェックポイントは
/checkpoints/localに保存される
- チェックポイントは
- パズル評価は
python puzzles.py --num_puzzles 10 --agent=localの形で実行する puzzles.pyが対応するエージェントは次のとおり- ローカル学習モデル:
local - 事前学習済みモデル:
9M、136M、270M - Stockfish:
stockfish、stockfish_all_moves - Lc0:
leela_chess_zero_depth_1、leela_chess_zero_policy_net、leela_chess_zero_400_sims
- ローカル学習モデル:
- Elo計算は
python tournament.py --num_games=200でゲームを生成した後、BayesEloでdata/tournament.pgnを読み込んで算出する
ライセンスと制限
- ソフトウェアは Apache License 2.0 で配布される
- モデル重みは Creative Commons Attribution 4.0 ライセンスに従う
- データセットの一部はlichess.orgのCreative Commons CC0 public domainライセンスに従い、残りはCC-BYライセンスに従う
- 配布物は明示的または黙示的な保証なしに
"AS IS"ベースで提供される - このプロジェクトはGoogleの公式製品ではない
1件のコメント
Hacker Newsのコメント
オフトピックですが、GMではないレベルのコンピュータチェスは今どこまで来ているのか気になります
自分の実力に近い相手、あるいはトレーニング用に自分よりレーティングが100点ほど高い相手と指したいことがあります
ほとんどのエンジンは探索深度を下げれば弱くできますが、たいていうまく機能しません。十分に下げれば半分くらい勝てるようにはなっても、ほとんどの対局はずっとこちらが押され続け、エンジンが1、2回大きなミスをして勝つ、という感じが残ります
欲しいのは、こちらが選んだレベルで指しつつ、そのレーティング帯の典型的な人間プレイヤーのように感じられるコンピュータの相手です。そういうエンジンがあるのか気になります
伝統的な探索アルゴリズムなら簡単に避けるような罠なのに、人間なら引っかかりそうな罠にはまるなど、実際に「人間っぽい」と感じる瞬間が何度かありました
調整可能ではありませんが、レーティングの異なるバージョンがいくつかあります。ただし範囲は広くありません
https://www.maiachess.com/
https://lichess.org/@/maia1
プレイヤーのレーティングが上がるほど、直感的な手の選択だけでなく探索過程そのものをモデル化する必要があるため、次の手の予測が難しくなります
特定プレイヤーの棋譜だけで学習させ、さらにパーソナライズすることも可能です
Maiaと似たアプローチを使っていますが、別のニューラルネットワークなので着手一致性能が少し良く、そこに期待値最大化アルゴリズムを載せて、ボットがこちらのミスを突くようにしました
十分に安定して指せなければ、そのまま負けました
私の見る限り、この機能はなくなったようです。プレッシャーを受けたときに人間らしいミスをする感じで、コンピュータのように指しておいてランダムにばかな手を指すのとは違い、唯一、本物の相手のように感じられたコンピュータでした
相手もよくやったが、自分が全体的に少しだけ上回って正当に勝った、という感覚はごくまれです
ほとんどいつも、自分が勝ったというより相手が負けたように見えます。これは人工知能だけの問題ではありません
対称ゲームで満足のいく形で負けてくれて、敗北からも満足のいく形で学ばせてくれる人工知能を作れたら、10億ドル規模のビジネスになるでしょう。真剣な心理学研究なしには難しいと思います
このテーマで発表し、その内容も記事にまとめました[1]。この論文は知識蒸留の良い例です
チェスそのものに関する論文というより、専門家が調整した複雑な非線形探索関数を、チェスのように標準化された入力ではほぼ線形に近いTransformerモデルへ蒸留できることを示す論文に近いです
[1]: https://hlfshell.ai/posts/deepmind-grandmaster-chess-without...
そのため、時間が要因である可能性が高いです。人間は時間切迫でフラッグが落ちたり、残り時間が少ないとミスしたりする可能性が高いです
探索なしでも非常に良い評価関数を学習したという点は、今でも見事です。ただ、Stockfishへのフォールバックが働いた対局は除いて見たかったです。人間にとっても2手メイトと10手メイトは、時間切れ負けの観点では勝ちと引き分け/負けの差になります
探索深度を制限したStockfishとの直接対決も見てみたかったです。そうすれば、この評価関数が探索木のどの程度を蒸留したのか、おおよそ分かったはずです
チェスのニューラルネットワークに入門したい人には、このリポジトリを強くおすすめします: https://github.com/sgrvinod/chess-transformers
読みやすいPyTorchコードで典型的な実装方法に沿っており、構造も現在性能の良いチェス用ニューラルネットワークと似ています
https://lczero.org/blog/2024/02/how-well-do-lc0-networks-com...
最高のニューラルネットワーク・チェスエンジンの作者たちが、このDeepMind論文について書いた記事です
学習に使われた巨大な合成データセットは、結局のところ多くの伝統的な探索によって作られたものです。なので少しおかしな面はありますが、それでも素晴らしいです
GMでチェス著者でもあるMatthew Sadlerが、トレーニングゲーム用にLeela Zeroを実質的に直感だけで指すようにし、探索をほとんどしない、あるいはまったくしない設定にしていたと記憶しています
たいていは彼が勝っていましたが、いつもそうだったわけではありません。おそらくThe Silicon Road to Chess Improvementにあったと思います
すべてのゲームのすべての盤面について Stockfish を走らせて学習データを作るなら、結局 探索木を Transformer モデルにエンコードしているだけではないのか?
そうすると、モデルのパラメータ数を増やすほど探索木をより多く収められて性能が上がるはずで、あまり面白くは見えない
このリポジトリは、私たちの論文 Grandmaster-Level Chess Without Search の実装を提供するもの: https://arxiv.org/abs/2402.04494
近年の機械学習のブレークスルーは、主にスケール、つまり大規模なアテンションベースの構造と前例のない規模のデータセットから生まれている。この論文では、チェスにおける大規模学習の影響を調査する
複雑なヒューリスティック、明示的な探索、またはその組み合わせに依存する従来のチェスエンジンとは異なり、1,000万局のチェス対局データセットで 2.7億パラメータの Transformer モデルを教師あり学習した
データセット内の各盤面には、強力な Stockfish 16 エンジンが提供した行動価値を注釈として付け、約150億データポイントになった
最大のモデルは人間相手の Lichess ブリッツ Elo 2895 に到達し、ドメイン特化の調整や明示的な探索アルゴリズムなしに難しいチェスパズルを解いた
また、MCTS なしの AlphaZero の方策・価値ネットワークや GPT-3.5-turbo-instruct を上回った。モデルとデータセットのサイズを体系的に調査した結果、十分な規模でのみ強いチェス性能が現れることが分かった。設計上の選択とハイパーパラメータについても広範なアブレーション実験を行った
人間のようにもっと考えるエンジンがあるとよい。この方式は Stockfish の注釈付き棋譜を使うので、基本的にはコンピュータのように考えることになりそう
人間のように考えるなら、ゲームレビューで各局面ごとに何を見るべきかを、自分の Elo に合わせて指摘してくれるのでとても良いはず
Magnus Carlsen がすごいのは、コンピュータと比べると莫大な時間・計算の制約の中で現在のチェスの実力に到達したからだ。彼の学習効率はどのチェスエンジンと比べても並外れている
デモシーンのプログラムのような感じ。実際に動作する 1KB のチェスプログラムも存在する
チェスを完全に解くと、現在計算するには大きすぎる木ができる。およそ 10^80 くらいと記憶しているが、間違っているかもしれない
その木に勝ち/負け/引き分けを注釈付けすれば、探索なしでも最適プレイヤーが可能になる
圧縮と最適化の明白な2つのアプローチは、木を近似すること、または注釈を近似することだ。この2つの方法がどれほど機能するかは、木構造に大きく左右される
この結果は、学習アプローチ自体の絶対的な力というより、チェスのゲーム木がこの2つのアプローチにどれほどよく適合するかを相対的により多く示しているように思う。私が得た結論は、その木の妥当な近似が 2.7億語規模のデータで可能だということだ
チェスは盤上に駒が7個残った状態なら 18.4TB のデータベースで解かれており、ここで説明されている: https://lichess.org/@/lichess/blog/7-piece-syzygy-tablebases...