@Playchesscoach sur lichess: Regardez | Statistiques | Défi (1 + 0 ou 0 + 1 jusqu'à 15 + 10)
ChessCoach est un moteur d'échecs basé sur le réseau neuronal capable de commentaires en langage naturel. Il joue aux échecs avec une note d'environ 3450 ELO, ce qui signifie qu'il devrait généralement battre même les joueurs humains les plus forts à 2850 ELO, et de nombreux autres moteurs, mais perd souvent contre les plus forts, comme Stockfish 14 à 3550 ELO.
Comme pour tous les moteurs, ChessCoach s'appuie sur l'examen de millions de positions d'échecs pour décider du meilleur coup à jouer. Il utilise un grand réseau neuronal lent tout comme Alphazero ou Leela Chess Zero (LC0) pour évaluer chaque position, contrairement aux moteurs classiques qui visent la vitesse avec une évaluation beaucoup plus simple, ou des moteurs NNUE plus récents, qui sont un hybride plus fort des deux styles.
Le réseau neuronal au cœur du moteur est formé en jouant contre lui-même, en utilisant un cycle de rétroaction pour commencer de presque zéro connaissance - juste les règles des échecs - et apprendre de nouvelles façons de se battre à mesure qu'elle se renforce. Des évaluations de réseaux neuronaux plus fortes permettent de mieux rechercher et des résultats de recherche plus forts le permettent de former plus efficacement son évaluation de réseau neuronal.
ChessCoach peut également alimenter ses connaissances d'échecs dans un réseau neuronal supplémentaire pour commenter les mouvements et les positions en anglais. Ce n'est pas très perspicace et souvent faux, mais montre une certaine promesse pour les données limitées sur lesquelles il a pu s'entraîner.
J'ai commencé à développer ChessCoach en tant que projet de deux à trois mois pour voir si j'aimais l'apprentissage automatique et j'ai fini par aller plus loin que ce à quoi je m'attendais. Le plan d'origine avait trois objectifs trop ambitieux: reproduire un petit moteur de type alphazer, ajoutant des commentaires en langue naturelle au cycle de rétroaction de la formation et rendant un certain degré de formation possible sur un poste de travail à GPU unique.
Après un peu plus d'un an de développement, je peux revendiquer presque aucun progrès sur les méthodes de formation. Cependant, je suis satisfait du commentaire que ChessCoach produit, toutes choses considérées et surpris par la force éventuelle du moteur.
J'ai eu la chance d'avoir autant de ressources publiques disponibles, notamment un calcul cloud gratuit et des articles, des discussions et des données disponibles gratuitement. Je suis également très reconnaissant à un certain nombre de gens qui ont aidé à des clarifications, des discussions et un débogage importants.
Le moteur d'échecs au cœur de ChessCoach est très similaire à celui d'Alphazero (Silver et al., 2018) ou LC0 (Linscott & Pascutto, 2018), dans la structure du réseau neuronal, de la calendrier de formation et de l'algorithme de recherche, mais avec une approche pratique et ingénierie par la nécessité, dépourvu de l'échelle et de la profondeur de la recherche d'un talent d'une plus grande équipe. Cependant, j'espère qu'il y a quelques nouvelles idées qui peuvent être utiles ailleurs.
Le commentaire en langage naturel ressemble le plus au travail d'apprentissage pour générer des commentaires déplacés pour les jeux d'échecs à partir de données sur le forum social à grande échelle (Jhamtani, Gangal, Hovy, Neubig & Berg-Kirkpatrick, 2018) et un commentateur de Chess automatisé propulsé par un moteur d'immeuble neural (Zang, Yu & Wan, 2019), mais RELIES sur un moteur à imprimer plus lourd et plus éloigné et plus Bien qu'avec une architecture plus simpliste.
ChessCoach est conçu pour être quelque peu minimal et portable. Il s'exécute sur Linux et Windows et prend en charge les unités de traitement à GPU, multi-GPU et tenseur (TPU). Le code axé sur les performances est en C ++ (lignes de 10,5k) et le code réseau neuronal est en Python (lignes de 3,7k), en s'appuyant sur TensorFlow 2. Le code de stockfish est utilisé pour la gestion de la position, la génération de déplacements et le sondage de base de table de jeu, mais pas pour la recherche ou l'évaluation. Les données de formation sur la lecture de la play ont été entièrement générées dans le projet ChessCoach, à la suite du calendrier Alphazero de 44 millions de jeux et 700 000 lots de formation de 4 096 positions chacun.
Certaines idées au-delà de l'alphazer mais existantes dans la littérature et des projets tels que Katago (Wu, 2020) et LC0 ont été intégrées (souvent je pensais que j'essayais quelque chose de nouveau, mais il s'avère que les gens intelligents de LC0 ont essayé presque tout). Il s'agit notamment de la fourniture de mateaux, du sondage de base de table de jeu, du minimax de fin de partie, de la moyenne du poids stochastique (SWA), des moyennes mobiles pondérées de façon exponentielle (EWMA), de diverses incitations d'exploration, de la mise en cache de prédiction, des cibles d'entraînement auxiliaires et de la distillation des connaissances.
Je crois que certaines idées sont nouvelles. Le premier est une méthode de recherche qui vise à éviter les pièges tactiques et à minimiser les regrets simples via l'exploration linéaire et la rétro-compagation sélective, appliquée via l'élimination - SBE-PUCT. Le second est une simple architecture neuronale pour les commentaires en langage naturel sur les positions et les mouvements en conjonction avec une application modifiée de l'échantillonnage du noyau (TOP-P) axée sur l'exactitude avec l'échantillonnage de la variété - Covet.
Le résultat est une suite d'outils pour jouer aux échecs, former les réseaux de neurones, optimiser les paramètres, tester la force, les données de formation de traitement, la vue et le débogage des données de formation, organiser les données de formation, le test unitaire et les grappes de coordonnées. Pour conclure le projet, un bot est mis en place sur https://lichess.org///playchesscoach pour jouer à des jeux contre les challengers et autres robots, et fournir des commentaires aux spectateurs.
Sur une machine virtuelle V3-8 Cloud plus récente:
gui avant de rechercher.Certains fichiers clés sont situés à la racine, y compris config.toml qui pilote la plupart des outils et est lu à partir du code C ++ et Python. Meson.build définit la construction Linux, et CPP / ChessCoach.sln et CPP / ** / *. VCXPROJ Définissez la construction Windows. Les scripts setup.sh/.cmd et build.sh/.cmd automatisent la configuration et la construction, bien que des étapes supplémentaires puissent être nécessaires. Dockerfiles à la racine définit les images pour chaque rôle de travailleur de cluster, et Docker - *. Les scripts SH aident à construire et à télécharger ces images.
Dans le répertoire de cluster, les fichiers .sh / .yaml gèrent les clusters Kubernetes sur des TPU de style plus ancien, tandis que Py / alpha.py gère les clusters sur les machines virtuelles cloud plus récentes.
Le répertoire CPP contient du code C ++, principalement dans CPP / ChessCoach. Le code CLESSCOACH C ++ est principalement orienté vers les performances. Les bibliothèques tierces incluent CPP / CRC32C, CPP / Hunspell, CPP / Numpy, CPP / Protobuf-3.13.0, CPP / Stockfish, CPP / TCLAP, CPP / TOML11 et CPP / ZLIB. Les données tierces incluent le CPP / dictionnaires et les tests de force CPP /. Des bibliothèques C ++ tierces supplémentaires sont installées à l'aide de l'outil de package avancé (APT) et découvertes par le système de construction Meson sur Linux, et installé et découvert à l'aide de Nuget sur Windows. La bibliothèque CPP / Protobuf est générée par le code à l'aide de l'outil Protoc et CPP / Protobuf / ChessCoach.proto.
Le répertoire PY contient du code Python, accessible au primaire via Network.py à partir de C ++, mais aussi quelques outils de script autonome. Le code Python ChessCoach est principalement préoccupé par le réseau neuronal et le stockage cloud. Des bibliothèques Python tierces supplémentaires sont installées à l'aide de PIP.
Le répertoire JS contient l'interface graphique de débogage utilisée dans ChessCoachgui et ChessCoachuci, en s'appuyant sur les échecs.
Le répertoire des outils contient la bouchette-CLI et Bayeselo pour diriger des tournois et calculer les cotes ELO des participants, ainsi que le binaire du moteur Stockfish 13 pour agir en tant qu'adversaire.
Le répertoire des scripts contient divers scripts et commodités situationnels.
Le répertoire DOCS contient des documents et des actifs de support.
Après l'installation, ChessCoach localise des données statiques à / usr / local / share / ChessCoach sur Linux et à côté du binaire sous Windows. Il localise des données dynamiques à $ {xdg_data_home} / chesscoach, ou à l'échec, à ~ / .local / share / chesscoach sur Linux, et à% localappdata% / chesscoach sur Windows. Les données dynamiques peuvent également être situées dans Google Cloud Storage; Par exemple, gs: // chesscoach-eu / chesscoach.
Si vous exécutez sur Google Cloud, cela peut simplifier la configuration du GPU pour utiliser une image de disque d'apprentissage en profondeur prédéfinie avec CUDA 11.
./setup.sh (il peut prendre 30 minutes pour construire Protobuf à partir de la source).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (il peut prendre 30 minutes pour construire Protobuf à partir de la source).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (il peut prendre 30 minutes pour construire Protobuf à partir de la source).pip3 install tf-models-official==2.5.0 (ceci vous accroche le TF-Nightly préinstallé).pip3 uninstall tensorflow tf-slim tf-nightly .--force-reinstall .sudo ./build.sh release install .conda activate chesscoach , mais il est normal que cela échoue lorsqu'il n'utilise pas un environnement virtuel.setup.cmd (cela définit CESSCOACH_PYTHONHOME après avoir exécuté Activate_Virtual_env.cmd).build.cmd .ChessCoach s'appuie sur les données installées sur $ {xdg_data_home} / ChessCoach, ou à l'échec, à ~ / .local / share / chesscoach sur Linux, et à% localappdata% / chesscoach sur Windows.
Installez les poids du réseau neuronal. Cela nécessite un téléchargement 372 MIB et un espace de disque MIB 406.
scripts/download_install_data.sh .scripts/download_install_data.cmd .Facultativement, installez des bases de table de jeu de syzygie. Les fichiers pour 3-4-5 pièces prennent environ 1 gib et les fichiers pour 3-4-5 + 6 pièces prennent environ 150 gib. Le processus d'installation est quelque peu technique.
En mode de stockage cloud, les tables de syzygie sont automatiquement reproduites au stockage local lors du lancement.
Le script Scripts / Ramdisk_Syzygy6.sh met en place un disque de RAM sur des machines comme les machines virtuelles TPU Cloud de style récent pour héberger des tables 3-4-5 + 6 pièces, lorsque la mémoire est élevée mais que l'espace disque est faible. Lorsque vous utilisez un disque, il est préférable de placer ces tables sur SSD pour maintenir la vitesse de recherche. Le script Scripts / Ramdisk_Syzygy6.sh utilise le chemin… / ChessCoach / Syzygy6, en s'appuyant sur un changement de configuration dans config.toml, mais… / ChessCoach / Syzygy pourrait être utilisé à la place.
export PROJECT_ID=<your Google Cloud project ID> .Si vous utilisez alpha.py (cette partie est particulièrement désordonnée):
cluster/cluster-prep-creds.sh pour créer un compte de service et un fichier Key.json correspondant.gsutil cp .La section Formation et auto-play distribuée dans l'explication technique comprend plus d'informations sur la gestion des clusters de style plus ancien et plus récent.
La plupart des programmes ChessCoach dépendent de la configuration construite et installée .toml. Il est particulièrement important de définir le paramètre Search_Threads lors de l'exécution de ChessCoachuci, via config.toml à l'heure de construction ou à l'option UCI à l'exécution, pour éviter la famine de threads à partir de la planification de prédiction déloyale.
Le binaire ChessCoachuci peut être chargé en tant que moteur UCI dans diverses GUS d'échecs.
Cependant, lorsque vous utilisez un environnement virtuel pour Python, il peut être nécessaire de: soit:
ChessCoachuci propose des commandes personnalisées en plus de celles du protocole UCI:
comment génère des commentaires en langage naturel pour la position actuelle et le dernier coup joué. Il est préférable de fournir un historique complet avec une position startpos moves … Commande.gui rapporte l'interface graphique de débogage à lancer lors du démarrage d'une recherche (comme le montre la figure 9 dans l'explication de haut niveau).~ puct [moves …] [csv] Affiche les données de GUI de débogage sous forme de texte.~ fen affiche la position actuelle dans la notation de Forsyth - Edwards (FEN).Pour l'auto-play et la formation, consultez l'auto-play et le processus de formation dans le document de données.
Pour les autres utilitaires répertoriés dans les programmes, recherchez des commentaires dans config.toml pour les conseils de configuration. De nombreux services publics soutiennent l'argument --help . Le contenu des scripts dans le répertoire des scripts peut montrer des exemples. Lorsque vous utilisez un environnement virtuel pour Python, il peut devoir être activé avant d'exécuter des services publics, bien que certains ne dépendent pas de Python.
Exécutez build/gcc/debug/ChessCoachTest ou build/gcc/release/ChessCoachTest .
Exécutez activate_virtual_env.cmd puis cpp/x64/Debug/ChessCoachTest.exe ou cpp/x64/Release/ChessCoachTest.exe .
Vous pouvez également exécuter / déboguer le projet ChessCoachtest dans Visual Studio, ou utiliser l'interface d'explorateur de test dans Visual Studio.
Le programme TPU Research Cloud (TRC) de Google a été exceptionnellement généreux avec les ressources informatiques qui ont rendu ce projet possible, et je remercie Jonathan Caton en particulier d'avoir fait bouger les choses.
Je suis très appréciable de l'équipe TPU Cloud de Google pour l'utilisation des VM Cloud TPU, et en particulier Michael Banfield pour l'aide d'ingénierie à travers l'alpha de la nouvelle technologie.
Je remercie sincèrement Karlson Pfannschmidt (Université de Paderborn), dont les outils de réglage d'échecs et la mise en œuvre de Bayes-Skopt et les conseils sur l'optimisation bayésienne étaient inestimables pour renforcer le moteur ChessCoach.
Je suis très reconnaissant à Matthew Lai (Deepmind) d'avoir fourni à une capacité indépendante, d'importantes clarifications sur le papier Alphazer.
Je remercie Pierre de Wulf d'avoir fourni des crédits de recherche pour StracingBee pour permettre une formation de commentaires en langage naturel à ChessCoach.
Merci à Ted Li pour ses précieuses idées et discussions au début du projet.
Merci à Freya Wilcox pour son aide au prototypage du diagramme.
Et un merci spécial à Gary Butner et Lynell Rafton pour l'édition, la relecture et le soutien.
ChessCoach est libéré sous la licence GPLV3 ou ultérieure.
Chris Butner, [email protected]