@PlayChesscoach di Lichess: Tonton | Statistik | Tantangan (1+0 atau 0+1 hingga 15+10)
Chesscoach adalah mesin catur berbasis jaringan saraf yang mampu memberikan komentar bahasa alami. Ini memainkan catur dengan peringkat sekitar 3450 ELO, yang berarti biasanya harus mengalahkan bahkan pemain manusia terkuat di 2850 ELO, dan banyak mesin lainnya, tetapi sering kali akan kalah dari yang terkuat, seperti Stockfish 14 di 3550 ELO.
Seperti halnya semua mesin, Chesscoach bergantung pada memeriksa jutaan posisi catur untuk memutuskan langkah terbaik untuk bermain. Ini menggunakan jaringan saraf yang besar dan lambat seperti Alphazero atau Leela Chess Zero (LC0) untuk mengevaluasi setiap posisi, tidak seperti mesin klasik yang bertujuan untuk kecepatan dengan evaluasi yang jauh lebih sederhana, atau mesin NNUE yang lebih baru, yang merupakan hibrida yang lebih kuat dari kedua gaya.
Jaringan saraf pada inti mesin dilatih dengan bermain melawan dirinya sendiri, menggunakan siklus umpan balik untuk memulai dari hampir nol pengetahuan - hanya aturan catur - dan belajar cara -cara baru untuk mengalahkan dirinya sendiri saat tumbuh lebih kuat. Evaluasi jaringan saraf yang lebih kuat memungkinkannya mencari lebih baik, dan hasil pencarian yang lebih kuat memungkinkannya melatih evaluasi jaringan sarafnya secara lebih efektif.
Chesscoach juga dapat memberi makan pengetahuan caturnya ke dalam jaringan saraf tambahan untuk mengomentari gerakan dan posisi dalam bahasa Inggris. Ini tidak terlalu berwawasan dan sering salah tetapi menunjukkan beberapa janji untuk data terbatas yang dapat dilatihnya.
Saya mulai mengembangkan CHESSCOACH sebagai proyek dua hingga tiga bulan untuk melihat apakah saya menyukai pembelajaran mesin dan akhirnya mengambil hal-hal lebih jauh dari yang saya harapkan. Rencana asli memiliki tiga tujuan yang terlalu ambisius: mereplikasi mesin kecil seperti Alphazero, menambahkan komentar bahasa alami ke siklus umpan balik pelatihan, dan membuat beberapa tingkat pelatihan mungkin pada workstation gpu tunggal.
Setelah sedikit lebih dari satu tahun pengembangan, saya dapat mengklaim hampir tidak ada kemajuan metode pelatihan. Namun, saya senang dengan komentar yang dihasilkan Chesscoach, semua hal dipertimbangkan, dan terkejut dengan kekuatan mesin akhirnya.
Saya beruntung memiliki begitu banyak sumber daya publik yang tersedia, termasuk komputasi cloud gratis dan makalah, diskusi, dan data yang tersedia secara bebas. Saya juga sangat berterima kasih kepada sejumlah orang yang telah membantu dengan klarifikasi penting, diskusi, dan debugging.
Mesin catur di inti Chesscoach sangat mirip dengan Alphazero (Silver et al., 2018) atau LC0 (Linscott & Pascutto, 2018), dalam struktur jaringan saraf, jadwal pelatihan dan algoritma pencarian, tetapi dengan pendekatan praktis, rekayasa oleh kebutuhan, tidak memiliki luas dan kedalaman talenta riset yang lebih besar. Namun, saya berharap ada beberapa ide baru yang dapat bermanfaat di tempat lain.
Karya komentar berbahasa alami paling mirip dengan pekerjaan belajar untuk menghasilkan komentar move-by-move untuk permainan catur dari data forum sosial skala besar (Jhamtani, Gang, Hovy, Neubig & Berg-Kirkpatrick, 2018) dan Corsy Corsily yang lebih baik dengan mesin catur saraf (Zang, Yu & Wan, 2019), CHESS OTOMATIS, CHESS TRAY dengan saraf catur (Zang, Yu & Wan, 2019) meskipun dengan arsitektur yang lebih sederhana.
Chesscoach dirancang agar agak minim dan portabel. Ini berjalan di Linux dan Windows dan mendukung unit pemrosesan GPU, multi-GPU dan tensor (TPU) tunggal. Kode berorientasi kinerja ada dalam C ++ (10,5K line) dan kode jaringan saraf berada dalam Python (3,7K lines), mengandalkan TensorFlow 2. Kode Stockfish digunakan untuk manajemen posisi, pemindahan generasi dan penyelidikan markas endgame, tetapi tidak untuk pencarian atau evaluasi. Data pelatihan mandiri telah sepenuhnya dihasilkan dalam proyek Chesscoach, mengikuti jadwal Alphazero 44 juta pertandingan dan 700.000 batch pelatihan masing-masing 4.096 posisi.
Beberapa ide di luar Alphazero tetapi ada dalam literatur dan proyek -proyek seperti Katago (Wu, 2020) dan LC0 telah terintegrasi (sering kali saya pikir saya sedang mencoba sesuatu yang baru, tetapi ternyata orang pintar di LC0 telah mencoba hampir semuanya). Ini termasuk mate-proving, endgame table probing, endgame minimax, stochastic weight rata-rata (SWA), rata-rata bergerak tertimbang secara eksponensial (EWMA), berbagai insentif eksplorasi, caching prediksi, target pelatihan tambahan, dan distilasi pengetahuan.
Saya percaya bahwa beberapa ide itu baru. Yang pertama adalah metode pencarian yang bertujuan untuk menghindari jebakan taktis dan meminimalkan penyesalan sederhana melalui eksplorasi linier dan backpropagation selektif, diterapkan melalui eliminasi-sble-puct. Yang kedua adalah arsitektur saraf sederhana untuk komentar bahasa alami tentang posisi dan bergerak bersama dengan aplikasi tweak dari pengambilan sampel nukleus (top-p) yang berfokus pada kebenaran dengan varietas-pengambilan sampel yang mengumumkan.
Hasilnya adalah serangkaian alat untuk bermain catur, melatih jaringan saraf, mengoptimalkan parameter, kekuatan tes, data pelatihan proses, melihat dan men-debug data pelatihan, mengatur data pelatihan, uji unit, dan koordinat cluster. Untuk menyelesaikan proyek, bot diatur di https://lichess.org/@/playchesscoach untuk bermain game melawan penantang dan bot lainnya, dan memberikan komentar kepada penonton.
Pada V3-8 Cloud TPU VM VM yang lebih baru:
gui sebelum mencari.Beberapa file utama terletak di root, termasuk config.toml yang mendorong sebagian besar alat dan dibaca dari kode C ++ dan Python. Meson.build mendefinisikan Linux Build, dan CPP/CHESSCOACH.SLN dan CPP/**/*. VCXPROJ Tentukan Windows Build. Skrip setup.sh/.cmd dan build.sh/.cmd mengotomatiskan pengaturan dan pembangunan, meskipun langkah -langkah tambahan dapat diperlukan. DockerFiles di root menentukan gambar untuk setiap peran pekerja cluster, dan Docker-*. Skrip SH membantu membangun dan mengunggah gambar-gambar ini.
Di direktori cluster file .sh/.yaml mengelola cluster kubernetes pada tpus gaya lama, sedangkan py/alpha.py mengelola cluster pada cloud tpu vms gaya baru.
Direktori CPP berisi kode C ++, sebagian besar di CPP/Chesscoach. Kode Chesscoach C ++ terutama berorientasi pada kinerja. Perpustakaan pihak ketiga termasuk CPP/CRC32C, CPP/HUNSPELL, CPP/NUMPY, CPP/PROTOBUF-3.13.0, CPP/STOCKFISH, CPP/TCLAP, CPP/TOML11 dan CPP/ZLIB. Data pihak ketiga termasuk CPP/Kamus dan CPP/Kekuatan. Perpustakaan C ++ pihak ketiga tambahan diinstal menggunakan Alat Paket Advanced (APT) dan ditemukan oleh Sistem Meson Build di Linux, dan diinstal dan ditemukan menggunakan Nuget pada Windows. Perpustakaan CPP/Protobuf dihasilkan kode menggunakan alat protoc dan CPP/Protobuf/Chesscoach.proto.
Direktori PY berisi kode Python, diakses utama melalui network.py dari C ++, tetapi juga beberapa alat skrip mandiri. Kode Python Chesscoach terutama berkaitan dengan jaringan saraf dan penyimpanan cloud. Perpustakaan Python pihak ketiga tambahan diinstal menggunakan PIP.
Direktori JS berisi debug GUI yang digunakan di Chesscoachgui dan Chesscoachuci, mengandalkan CHESSBOARDJS.
Direktori Alat berisi cutechess-cli dan Bayeselo untuk menjalankan turnamen dan menghitung peringkat ELO peserta, serta biner mesin Stockfish 13 untuk bertindak sebagai lawan.
Direktori skrip berisi berbagai skrip dan kenyamanan situasional.
Direktori DOCS berisi dokumentasi dan aset pendukung.
Setelah instalasi, Chesscoach menempatkan data statis AT/USR/LOKAL/Bagikan/CHESSCOACH di Linux dan di samping biner di Windows. Ini menempatkan data dinamis di $ {xdg_data_home}/chesscoach, atau gagal, di ~/.local/share/chesscoach di linux, dan pada %localAppdata %/chesscoach di windows. Data dinamis juga dapat ditemukan di Google Cloud Storage; Misalnya, GS: // CHESSCOACH-EU/CHESSCOACH.
Jika berjalan di Google Cloud, ini dapat menyederhanakan pengaturan GPU untuk menggunakan gambar disk pembelajaran mendalam yang sudah dibangun dengan CUDA 11.
./setup.sh (mungkin perlu 30 menit untuk membangun protobuf dari sumber).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (mungkin perlu 30 menit untuk membangun protobuf dari sumber).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (mungkin perlu 30 menit untuk membangun protobuf dari sumber).pip3 install tf-models-official==2.5.0 (ini menggumpal TF-Install TF-Nightly).pip3 uninstall tensorflow tf-slim tf-nightly .--force-reinstall .sudo ./build.sh release install .conda activate chesscoach , tetapi tidak apa -apa jika ini gagal saat tidak menggunakan lingkungan virtual.setup.cmd (ini set CHESSCOACH_PYTHONHOME Setelah menjalankan Activate_Virtual_env.cmd).build.cmd .Chesscoach bergantung pada data yang diinstal ke $ {xdg_data_home}/chesscoach, atau gagal, di ~/.local/share/chesscoach di linux, dan di %localAppdata %/chesscoach di windows.
Pasang bobot jaringan saraf. Ini membutuhkan unduhan 372 MIB dan 406 ruang disk MIB.
scripts/download_install_data.sh .scripts/download_install_data.cmd .Secara opsional, instal Syzygy Endgame Tablebases. File untuk 3-4-5 buah membutuhkan sekitar 1 gib, dan file untuk 3-4-5 + 6 buah membutuhkan sekitar 150 gib. Proses instalasi agak teknis.
Dalam mode penyimpanan cloud, tabel syzygy secara otomatis direplikasi ke penyimpanan lokal saat peluncuran.
Script Scripts/RamDisk_Syzygy6.sh mengatur disk RAM pada mesin seperti Cloud TPU VMS gaya baru untuk meng-host tabel 3-4-5 + 6-piece, ketika memori tinggi tetapi ruang disk rendah. Saat menggunakan disk, yang terbaik adalah menempatkan tabel ini pada SSD untuk mempertahankan kecepatan pencarian. Script Scripts/RamDisk_Syzygy6.sh menggunakan path .../Chesscoach/syzygy6, mengandalkan perubahan konfigurasi di config.toml, tapi .../Chesscoach/Syzygy dapat digunakan sebagai gantinya.
export PROJECT_ID=<your Google Cloud project ID> .Jika menggunakan alpha.py (bagian ini sangat berantakan):
cluster/cluster-prep-creds.sh untuk membuat akun layanan dan file key.json yang sesuai.gsutil cp .Bagian pelatihan dan permainan mandiri yang didistribusikan dalam penjelasan teknis memiliki informasi lebih lanjut tentang mengelola cluster gaya lama dan gaya yang lebih baru.
Sebagian besar program Chesscoach bergantung pada config.toml yang dibangun dan diinstal. Sangat penting untuk mengatur parameter search_threads saat menjalankan Chesscoachuci, baik melalui config.toml pada waktu build atau opsi UCI saat runtime, untuk menghindari kelaparan utas dari penjadwalan prediksi yang tidak adil.
Biner Chesscoachuci dapat dimuat sebagai mesin UCI di berbagai GUI catur.
Namun, saat menggunakan lingkungan virtual untuk Python, mungkin perlu untuk:
Chesscoachuci menawarkan perintah khusus selain dari protokol UCI:
comment menghasilkan komentar bahasa alami untuk posisi saat ini dan langkah terakhir dimainkan. Yang terbaik adalah memberikan riwayat gerakan penuh dengan position startpos moves … perintah.gui menandai debug GUI untuk diluncurkan saat memulai pencarian (seperti yang ditunjukkan pada Gambar 9 dalam penjelasan tingkat tinggi).~ puct [moves …] [csv] menampilkan data debug GUI dalam bentuk teks.~ fen menampilkan posisi saat ini dalam notasi Forsyth -Edwards (FEN).Untuk bermain mandiri dan pelatihan, lihat proses mandiri dan pelatihan dalam dokumen data.
Untuk utilitas lain yang tercantum dalam program, cari komentar di config.toml untuk panduan konfigurasi. Banyak utilitas mendukung argumen --help . Isi skrip dalam direktori skrip dapat menunjukkan contoh. Saat menggunakan lingkungan virtual untuk Python, itu mungkin perlu diaktifkan sebelum menjalankan utilitas, meskipun beberapa tidak bergantung pada python.
Jalankan build/gcc/debug/ChessCoachTest ATAU build/gcc/release/ChessCoachTest .
Jalankan activate_virtual_env.cmd kemudian cpp/x64/Debug/ChessCoachTest.exe atau cpp/x64/Release/ChessCoachTest.exe .
Anda juga dapat menjalankan/men -debug proyek ChessCoachtest di dalam Visual Studio, atau menggunakan antarmuka Test Explorer dalam Visual Studio.
Program TPU Research Cloud (TRC) Google sangat murah hati dengan sumber daya komputasi yang memungkinkan proyek ini, dan saya berterima kasih kepada Jonathan Caton khususnya karena membuat sesuatu terjadi.
Saya sangat menghargai tim TPU Cloud Google untuk penggunaan Cloud TPU VMS, dan terutama Michael Banfield untuk bantuan teknik di seluruh alpha teknologi baru.
Saya dengan tulus berterima kasih kepada Karlson Pfannschmidt (Paderborn University), yang alat tuning catur dan implementasi Bayes-Skopt, dan saran tentang optimasi Bayesian sangat berharga dalam memperkuat mesin Chesscoach.
Saya sangat berterima kasih kepada Matthew Lai (DeepMind) karena menyediakan dalam kapasitas independen, klarifikasi penting pada kertas Alphazero.
Saya menyampaikan terima kasih kepada Pierre de Wulf karena memberikan kredit penelitian untuk ScrapingBee untuk memungkinkan pelatihan komentar bahasa alami di Chesscoach.
Terima kasih kepada Ted Li atas ide -ide dan diskusi yang berharga pada saat dimulainya proyek.
Terima kasih kepada Freya Wilcox untuk bantuan dengan prototipe diagram.
Dan terima kasih khusus kepada Gary Butner dan Lynelle Rafton untuk mengedit, mengoreksi dan mengoreksi dukungan.
Chesscoach dirilis di bawah lisensi GPLV3 atau yang lebih baru.
Chris Butner, [email protected]