يوفر هذا المستودع تطبيقًا لورقة NeurIPS 2024 الخاصة بنا بعنوان "التخطيط المطفأ باستخدام محولات واسعة النطاق: دراسة حالة عن لعبة الشطرنج".
تستخدم هذه الورقة الشطرنج، وهي مشكلة تخطيط بارزة في الذكاء الاصطناعي، لتقييم أداء المحولات في مهمة تخطيط يكون فيها الحفظ عديم الجدوى، حتى على نطاق واسع. ولتحقيق هذه الغاية، قمنا بإصدار ChessBench، وهي مجموعة بيانات قياسية واسعة النطاق تضم 10 ملايين لعبة شطرنج مع تعليقات توضيحية للحركة القانونية والقيمة (15 مليار نقطة بيانات) مقدمة من Stockfish 16، محرك الشطرنج المتطور. نقوم بتدريب المحولات باستخدام ما يصل إلى 270 مليون معلمة على ChessBench من خلال التعلم الخاضع للإشراف وإجراء عمليات استبعاد واسعة النطاق لتقييم تأثير حجم مجموعة البيانات وحجم النموذج ونوع البنية وأهداف التنبؤ المختلفة (قيم الحالة وقيم الفعل والاستنساخ السلوكي). تتعلم أكبر نماذجنا التنبؤ بقيم العمل للوحات الجديدة بدقة تامة، مما يعني تعميمًا غير تافه إلى حد كبير. على الرغم من عدم إجراء أي بحث صريح، فإن سياسة الشطرنج الناتجة لدينا تحل ألغاز الشطرنج الصعبة وتحقق ضربة Lichess الخاطفة Elo القوية بشكل مدهش عام 2895 ضد البشر (مستوى الأستاذ الكبير). نحن أيضًا نقارن بين Leela Chess Zero وAlphaZero (المدربين دون إشراف عن طريق اللعب الذاتي) مع البحث وبدونه. لقد أظهرنا أنه على الرغم من أن التقريب الجيد بشكل ملحوظ لخوارزمية ستوكفيش القائمة على البحث يمكن استخلاصه إلى محولات واسعة النطاق من خلال التعلم الخاضع للإشراف، إلا أن التقطير المثالي لا يزال بعيد المنال، مما يجعل 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 جيجابايت (من 1.1 تيرابايت) | 34 جيجابايت | 36 جيجابايت | - |
امتحان | 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، الإصدار 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 الرسمية.