พื้นที่เก็บข้อมูลนี้นำเสนอการใช้งานการวางแผนตัดจำหน่ายกระดาษ NeurIPS 2024 ด้วยหม้อแปลงขนาดใหญ่: กรณีศึกษาเกี่ยวกับหมากรุก
บทความนี้ใช้หมากรุก ซึ่งเป็นปัญหาการวางแผนที่สำคัญใน AI เพื่อประเมินประสิทธิภาพของหม้อแปลงไฟฟ้าในงานการวางแผนที่การท่องจำนั้นไร้ประโยชน์ แม้จะในปริมาณมากก็ตาม ด้วยเหตุนี้ เราจึงเปิดตัว ChessBench ซึ่งเป็นชุดข้อมูลเกณฑ์มาตรฐานขนาดใหญ่ของเกมหมากรุก 10 ล้านเกมพร้อมการเคลื่อนไหวทางกฎหมายและคำอธิบายประกอบที่มีคุณค่า (จุดข้อมูล 15 พันล้านจุด) ที่จัดทำโดย Stockfish 16 ซึ่งเป็นกลไกหมากรุกที่ล้ำสมัย เราฝึกหม้อแปลงที่มีพารามิเตอร์มากถึง 270 ล้านพารามิเตอร์บน ChessBench ผ่านการเรียนรู้ภายใต้การดูแล และดำเนินการลบล้างอย่างกว้างขวางเพื่อประเมินผลกระทบของขนาดชุดข้อมูล ขนาดแบบจำลอง ประเภทสถาปัตยกรรม และเป้าหมายการคาดการณ์ที่แตกต่างกัน (ค่าสถานะ ค่าการดำเนินการ และการโคลนนิ่งเชิงพฤติกรรม) แบบจำลองที่ใหญ่ที่สุดของเราเรียนรู้ที่จะทำนายค่าการดำเนินการสำหรับบอร์ดใหม่ค่อนข้างแม่นยำ ซึ่งบ่งบอกถึงลักษณะทั่วไปที่ไม่สำคัญอย่างยิ่ง แม้ว่าจะไม่มีการค้นหาที่ชัดเจน แต่นโยบายหมากรุกที่เป็นผลลัพธ์ของเราก็สามารถไขปริศนาหมากรุกที่ท้าทายได้ และบรรลุการโจมตีแบบสายฟ้าแลบ Lichess Elo ที่แข็งแกร่งอย่างน่าประหลาดใจที่ระดับ 2895 ต่อมนุษย์ (ระดับปรมาจารย์) นอกจากนี้เรายังเปรียบเทียบกับ Leela Chess Zero และ AlphaZero (ฝึกฝนโดยไม่มีการควบคุมผ่านการเล่นด้วยตนเอง) โดยมีและไม่มีการค้นหา เราแสดงให้เห็นว่า แม้ว่าการประมาณที่ดีอย่างน่าทึ่งของอัลกอริธึมการค้นหาของ Stockfish สามารถกลั่นเป็นหม้อแปลงขนาดใหญ่ผ่านการเรียนรู้แบบมีผู้สอนได้ แต่การกลั่นที่สมบูรณ์แบบยังอยู่นอกเหนือการเข้าถึง ดังนั้น 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
จะติดตั้งการขึ้นต่อกันที่จำเป็นทั้งหมด วิธีนี้ทำได้ดีที่สุดภายในสภาพแวดล้อมแบบคอนดา ในตอนท้ายให้ติดตั้ง Anaconda จากนั้นสร้างและเปิดใช้งานสภาพแวดล้อม conda:
conda create --name searchless_chess python=3.10
conda activate searchless_chess
ติดตั้ง pip
และใช้เพื่อติดตั้งการอ้างอิงทั้งหมด:
conda install pip
pip install -r requirements.txt
หากคุณมี GPU พร้อมใช้งาน (แนะนำเป็นอย่างยิ่งสำหรับการฝึกฝนที่รวดเร็ว) คุณสามารถติดตั้ง JAX พร้อมรองรับ CUDA ได้
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 ด้วยเครือข่ายที่ใหญ่ที่สุดที่เป็นไปได้จากแค็ตตาล็อกแบบจำลองของ Lc0 เช่น เครือข่าย Large
หากต้องการดาวน์โหลดเครือข่ายนั้น ให้รันคำสั่งต่อไปนี้:
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 | - |
ทดสอบ | 141 เมกะไบต์ | 4.1 ลบ | 4.4 ลบ | 4.5 ลบ |
หากต้องการดาวน์โหลดโมเดลที่ฝึกไว้ล่วงหน้าไปยังตำแหน่งที่ถูกต้อง ให้รันคำสั่งต่อไปนี้:
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 สำหรับตัวแทนที่แตกต่างกัน ให้จัดการแข่งขันเพื่อเล่นเกมระหว่างพวกเขา จากนั้นคำนวณ Elo สำหรับไฟล์ PGN ที่สร้างโดยทัวร์นาเมนต์ (ข้อมูลเพิ่มเติมเกี่ยวกับ 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 Technologies Limited
ซอฟต์แวร์ทั้งหมดได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 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
ชุดข้อมูลบางส่วนเป็นสาธารณสมบัติโดยใบอนุญาต Creative Commons CC0 จาก lichess.org ส่วนที่เหลือของชุดข้อมูลได้รับอนุญาตภายใต้ Creative Commons Attribution 4.0 (CC-BY) คุณสามารถขอรับสำเนาใบอนุญาต CC-BY ได้ที่: https://creativecommons.org/licenses/by/4.0/legalcode
เว้นแต่กฎหมายที่บังคับใช้กำหนดไว้หรือตกลงเป็นลายลักษณ์อักษร ซอฟต์แวร์และวัสดุที่เผยแพร่ภายใต้ใบอนุญาต Apache 2.0 หรือ CC-BY จะได้รับการแจกจ่าย "ตามที่เป็น" โดยไม่มีการรับประกันหรือเงื่อนไขใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อจำกัดภายใต้ใบอนุญาตเหล่านั้น
นี่ไม่ใช่ผลิตภัณฑ์อย่างเป็นทางการของ Google