該儲存庫提供了我們的 NeurIPS 2024 論文《Amortized Planning with Large-Scale Transformers: A Case Study on Chess》的實作。
本文使用國際象棋這一人工智慧中具有里程碑意義的規劃問題來評估 Transformer 在規劃任務中的表現,在該任務中,記憶是徒勞無功的——即使是大規模的規劃任務。為此,我們發布了ChessBench,這是由最先進的國際象棋引擎Stockfish 16提供的包含1000萬盤國際象棋棋局的大規模基準數據集,具有合法的走法和價值註釋(150億個數據點) 。我們透過監督學習在ChessBench 上訓練具有多達2.7 億個參數的Transformer,並執行廣泛的消融來評估資料集大小、模型大小、架構類型和不同預測目標(狀態值、動作值和行為克隆)的影響。我們最大的模型學會相當準確地預測新董事會的行動價值,這意味著高度非平凡的概括。儘管沒有明確的搜索,但我們得出的國際象棋策略解決了具有挑戰性的國際象棋難題,並在對抗人類方面取得了令人驚訝的強大 Lichess blitz Elo 2895(大師級別)。我們也與搜尋和不帶搜尋的 Leela Chess Zero 和 AlphaZero(透過自我對弈在沒有監督的情況下訓練)進行了比較。我們表明,雖然 Stockfish 基於搜尋的演算法的非常好的近似值可以透過監督學習提煉成大規模的 Transformer,但完美的提煉仍然遙不可及,因此使 ChessBench 非常適合未來的研究。
.
|
├── BayesElo - Elo computation (need to be installed)
|
├── checkpoints - Model checkpoints (need to be downloaded)
| ├── 136M
| ├── 270M
| └── 9M
|
├── data - Datasets (need to be downloaded)
| ├── eco_openings.csv
| ├── test
| ├── train
| └── puzzles.csv
|
├── lc0 - Leela Chess Zero (needs to be installed)
|
├── src
| ├── engines
| | ├── constants.py - Engine constants
| | ├── engine.py - Engine interface
| | ├── lc0_engine.py - Leela Chess Zero engine
| | ├── neural_engines.py - Neural engines
| | └── stockfish_engine.py - Stockfish engine
| |
| ├── bagz.py - Readers for our .bag data files
| ├── config.py - Experiment configurations
| ├── constants.py - Constants, interfaces, and types
| ├── data_loader.py - Data loader
| ├── metrics_evaluator.py - Metrics (e.g., Kendall's tau) evaluator
| ├── puzzles.py - Puzzle evaluation script
| ├── searchless_chess.ipynb - Model analysis notebook
| ├── tokenizer.py - Chess board tokenization
| ├── tournament.py - Elo tournament script
| ├── train.py - Example training + evaluation script
| ├── training.py - Training loop
| ├── training_utils.py - Training utility functions
| ├── transformer.py - Decoder-only Transformer
| └── utils.py - Utility functions
|
├── Stockfish - Stockfish (needs to be installed)
|
├── README.md
└── requirements.txt - Dependencies
將原始碼複製到本地目錄:
git clone https://github.com/google-deepmind/searchless_chess.git
cd searchless_chess
該儲存庫需要 Python 3.10。 pip install -r requirements.txt
將安裝所有必要的依賴項。最好在 conda 環境中完成此操作。為此,安裝 Anaconda。然後,創建並啟動 conda 環境:
conda create --name searchless_chess python=3.10
conda activate searchless_chess
安裝pip
並使用它來安裝所有依賴項:
conda install pip
pip install -r requirements.txt
如果您有可用的 GPU(強烈建議用於快速訓練),那麼您可以安裝支援 CUDA 的 JAX。
pip install --upgrade " jax[cuda12_pip] " -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
請注意,jax 版本必須與您希望使用的現有 CUDA 安裝相對應(上例中的 CUDA 12)。請參閱 JAX 文件以了解更多詳細資訊。
下載並編譯最新版本的Stockfish(適用於類別Unix系統):
git clone https://github.com/official-stockfish/Stockfish.git
cd Stockfish/src
make -j profile-build ARCH=x86-64-avx2
cd ../..
請按照 Lc0 下載說明進行操作,即
git clone -b release/0.30 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
然後按照 Lc0 建構說明中的描述建構引擎。
我們使用 Lc0 模型目錄中最大可能的網路(即Large
網路)來評估 Lc0。要下載該網絡,請執行以下命令:
cd lc0/build/release
wget https://storage.lczero.org/files/768x15x24h-t82-swa-7464000.pb.gz
gzip -d 768x15x24h-t82-swa-7464000.pb.gz
cd ../../..
為了計算不同代理的 Elos,我們需要 BayesElo,它可以如下安裝:
wget https://www.remi-coulom.fr/Bayesian-Elo/bayeselo.tar.bz2
tar -xvjf bayeselo.tar.bz2
cd BayesElo
make bayeselo
cd ..
若要將我們的資料集下載到正確的位置,請執行以下命令:
cd data
./download.sh
cd ..
我們還在下表中提供了各個資料集的下載連結(由於其大小,操作值資料集被分成 2148 個文件,下面僅列出了第一個分片的連結):
分裂 | 行動價值 | 行為複製 | 狀態價值 | 謎題 |
---|---|---|---|---|
火車 | 1.2 GB(1.1 TB) | 34GB | 36GB | - |
測試 | 141MB | 4.1MB | 4.4MB | 4.5MB |
若要將預訓練模型下載到正確的位置,請執行以下命令:
cd checkpoints
./download.sh
cd ..
在運行任何程式碼之前,請確保啟動 conda 環境並設定PYTHONPATH
:
conda activate searchless_chess
export PYTHONPATH= $( pwd ) /..
要在本地訓練模型,請執行以下命令:
cd src
python train.py
cd ..
模型檢查點將會儲存到/checkpoints/local
。
要評估模型的拼圖準確性,請執行以下命令:
cd src
python puzzles.py --num_puzzles 10 --agent=local
cd ..
puzzles.py
支援以下代理:
local
9M
、 136M
和270M
stockfish
和stockfish_all_moves
leela_chess_zero_depth_1
、 leela_chess_zero_policy_net
和leela_chess_zero_400_sims
要計算不同代理的 Elo,請運行錦標賽以在它們之間玩遊戲,然後計算錦標賽生成的 PGN 文件的 Elo(有關 BayesElo 的更多信息可以在此處找到):
cd src
python tournament.py --num_games=200
cd ../BayesElo
./bayeselo
> ...
ResultSet > readpgn ../data/tournament.pgn
> N game(s) loaded, 0 game(s) with unknown result ignored.
ResultSet > elo
ResultSet-EloRating > mm
> 00:00:00,00
ResultSet-EloRating > exactdist
> 00:00:00,00
ResultSet-EloRating > ratings
> ...
cd ..
要研究模型的行為(例如,計算所有合法棋步的獲勝百分比),請啟動筆記本伺服器,然後在瀏覽器中開啟src/searchless_chess.ipynb
:
jupyter notebook
@inproceedings{ruoss2024amortized,
author = {Anian Ruoss and
Gr{ ' {e}}goire Del{ ' {e}}tang and
Sourabh Medapati and
Jordi Grau{-}Moya and
Li Kevin Wenliang and
Elliot Catt and
John Reid and
Cannada A. Lewis and
Joel Veness and
Tim Genewein},
title = {Amortized Planning with Large-Scale Transformers: A Case Study
on Chess},
booktitle = {NeurIPS},
year = {2024}
}
版權所有 2024 DeepMind 技術有限公司
所有軟體均根據 Apache 授權 2.0 版 (Apache 2.0) 授權;除非遵守 Apache 2.0 許可證,否則您不得使用此文件。您可以在以下位置取得 Apache 2.0 授權的副本:https://www.apache.org/licenses/LICENSE-2.0
模型權重根據 Creative Commons Attribution 4.0 (CC-BY) 授權。您可以透過以下網址取得 CC-BY 授權副本:https://creativecommons.org/licenses/by/4.0/legalcode
資料集的某些部分透過 lichess.org 的知識共享 CC0 授權屬於公共領域。資料集的其餘部分已根據知識共享署名 4.0 (CC-BY) 授權。您可以透過以下網址取得 CC-BY 授權副本:https://creativecommons.org/licenses/by/4.0/legalcode。
除非適用法律要求或書面同意,否則根據 Apache 2.0 或 CC-BY 許可分發的軟體和材料均以「原樣」分發,不附帶任何明示或暗示的保證或條件。請參閱特定語言的許可證,以了解這些許可證下的權限和限制。
這不是 Google 官方產品。