2 points par GN⁺ 2024-10-19 | 1 commentaires | Partager sur WhatsApp
  • Le searchless_chess de Google DeepMind est l’implémentation de l’article NeurIPS 2024 Amortized Planning with Large-Scale Transformers et évalue dans quelle mesure de grands Transformers peuvent résoudre des problèmes de planification aux échecs sans recherche explicite
  • Le jeu de données central, ChessBench, se compose de 10 millions de parties d’échecs avec des coups légaux et des annotations de valeur fournis par Stockfish 16, soit 15 milliards de points de données au total
  • Des Transformers allant jusqu’à 270 millions de paramètres sont entraînés par apprentissage supervisé, en comparant l’effet de la taille du jeu de données, de la taille du modèle, du type d’architecture et de l’objectif de prédiction
  • Le plus grand modèle prédit assez précisément les action-values sur de nouveaux plateaux, résout des puzzles d’échecs difficiles sans recherche explicite et atteint un Elo blitz Lichess de 2895 contre des adversaires humains
  • L’algorithme fondé sur la recherche de Stockfish peut être distillé de façon très convaincante dans de grands Transformers, mais la distillation complète n’est pas encore atteinte, si bien que ChessBench reste un benchmark pour les recherches futures

Objectif du projet et contexte de l’article

  • searchless_chess est l’implémentation de Amortized Planning with Large-Scale Transformers: A Case Study on Chess
  • Les échecs servent de problème de planification emblématique en IA, et ce projet évalue les performances des Transformers sur une tâche où la mémorisation n’a pas de sens, même à grande échelle
  • L’étude vérifie, sur le cas des échecs, s’il est possible de distiller par apprentissage supervisé dans un Transformer le comportement d’un moteur d’échecs fondé sur la recherche

Jeu de données ChessBench

  • ChessBench inclut des coups légaux et des annotations de valeur fournis par Stockfish 16
    • Nombre de parties d’échecs : 10 millions
    • Nombre total de points de données : 15 milliards
    • Stockfish 16 est utilisé comme moteur d’échecs de tout premier plan
  • Le jeu de données est divisé selon l’objectif de prédiction
    • Action-Value

    • Behavioral Cloning

    • State-Value

      • puzzles.csv pour l’évaluation des puzzles
      • Exemples de tailles de téléchargement :
      • Train Action-Value : premier shard 1.2GB, total 1.1TB, 2148 shards au total
      • Train Behavioral Cloning : 34GB
      • Train State-Value : 36GB
      • Test Action-Value : 141MB
      • Test Behavioral Cloning : 4.1MB
      • Test State-Value : 4.4MB
      • Puzzles : 4.5MB

Modèles et configuration expérimentale

  • Des Transformers sont entraînés jusqu’à 270M paramètres
  • L’entraînement est réalisé par apprentissage supervisé sur la base de ChessBench
  • Les expériences comparent l’influence des éléments suivants
    • taille du jeu de données
    • taille du modèle
    • type d’architecture
    • objectif de prédiction : state-values, action-values, behavioral cloning
  • Le plus grand modèle prédit assez précisément les action-values sur de nouveaux plateaux, montrant une généralisation au-delà de la simple mémorisation

Performances sans recherche et points de comparaison

  • La politique d’échecs finale résout des puzzles d’échecs difficiles sans recherche explicite
  • Elle atteint 2895 Elo en blitz sur Lichess contre des adversaires humains, soit un niveau de grand maître
  • Les comparaisons incluent Leela Chess Zero et AlphaZero
    • Les deux systèmes sont comparés comme modèles entraînés par self-play
    • Les cas avec recherche et sans recherche sont tous deux comparés
  • L’algorithme fondé sur la recherche de Stockfish peut être très bien approché et distillé dans un grand Transformer, mais une distillation complète n’est pas encore possible

Structure du dépôt et flux d’exécution

  • Les principaux répertoires et fichiers ont les rôles suivants
    • src/engines : Stockfish, Leela Chess Zero, interface pour moteurs neuronaux
    • src/transformer.py : Transformer decoder-only
    • src/train.py : script d’exemple pour l’entraînement et l’évaluation
    • src/puzzles.py : script d’évaluation des puzzles
    • src/tournament.py : script de tournoi Elo
    • src/searchless_chess.ipynb : notebook d’analyse du comportement du modèle
    • src/tokenizer.py : tokenisation du plateau d’échecs
  • Des checkpoints préentraînés sont fournis pour les modèles 9M, 136M et 270M
  • Le notebook d’analyse du comportement du modèle permet d’effectuer des analyses telles que le calcul du taux de victoire pour tous les coups légaux

Installation et dépendances

  • L’environnement d’exécution requiert Python 3.10
  • Les dépendances nécessaires s’installent avec pip install -r requirements.txt
  • En présence d’un GPU, l’installation de JAX avec support CUDA est recommandée pour accélérer l’entraînement
    • L’exemple utilise la commande d’installation jax[cuda12_pip] pour CUDA 12
    • La version de JAX doit correspondre à l’installation CUDA utilisée
  • L’installation de moteurs et outils externes est nécessaire

Évaluation et mode d’emploi

  • L’entraînement local s’exécute depuis src avec python train.py
    • Les checkpoints sont enregistrés dans /checkpoints/local
  • L’évaluation des puzzles s’exécute sous la forme python puzzles.py --num_puzzles 10 --agent=local
  • Les agents pris en charge par puzzles.py sont les suivants
    • modèle entraîné localement : local
    • modèles préentraînés : 9M, 136M, 270M
    • Stockfish : stockfish, stockfish_all_moves
    • Lc0 : leela_chess_zero_depth_1, leela_chess_zero_policy_net, leela_chess_zero_400_sims
  • Le calcul Elo se fait en générant des parties avec python tournament.py --num_games=200, puis en lisant data/tournament.pgn avec BayesElo

Licence et limitations

  • Le logiciel est distribué sous Apache License 2.0
  • Les poids du modèle suivent la licence Creative Commons Attribution 4.0
  • Une partie du jeu de données suit la licence Creative Commons CC0 public domain de lichess.org, le reste étant sous licence CC-BY
  • La distribution est fournie en l’état, sur une base "AS IS", sans garantie explicite ni implicite
  • Ce projet n’est pas un produit officiel de Google

1 commentaires

 
GN⁺ 2024-10-19
Avis de Hacker News
  • C’est hors sujet, mais je me demande où en est aujourd’hui le jeu d’échecs informatique à un niveau non-GM
    Il m’arrive de vouloir jouer contre un adversaire proche de mon niveau, ou environ 100 points de Elo au-dessus de moi pour m’entraîner
    On peut affaiblir la plupart des moteurs en réduisant la profondeur de recherche, mais en général ça ne marche pas très bien. Si on la réduit suffisamment, on finit bien par gagner environ la moitié des parties, mais la plupart du temps on a l’impression d’être dominé toute la partie, puis de gagner parce que le moteur commet une ou deux grosses bourdes
    Ce que je voudrais, c’est un adversaire ordinateur qui joue au niveau que j’ai choisi, mais qui donne l’impression d’être un joueur humain typique de cette tranche de Elo. Je me demande si un tel moteur existe

    • Maia s’en sort plutôt bien. On peut l’affronter sur Lichess
      Il y a eu plusieurs moments où il m’a vraiment semblé « humain », par exemple en tombant dans des pièges qu’un algorithme de recherche traditionnel éviterait facilement, mais dans lesquels un humain pourrait se faire prendre
      Ce n’est pas réglable, mais il existe quelques versions avec des Elo différents. La plage n’est toutefois pas très large
      https://www.maiachess.com/
      https://lichess.org/@/maia1
    • J’ai déjà créé quelque chose de similaire : chessmate.ai. Ça fonctionne bien tant que le Elo n’est pas trop élevé
      Plus le Elo du joueur monte, plus il devient difficile de prédire le coup suivant, car il faut modéliser non seulement le choix intuitif des coups, mais aussi le processus de recherche lui-même
      On peut aussi entraîner le système uniquement sur les parties d’un joueur donné pour le personnaliser davantage
      L’approche est proche de Maia, mais avec un autre réseau de neurones ; la correspondance des coups était un peu meilleure, et j’y ai ajouté un algorithme de maximisation de l’espérance pour que le bot exploite mes erreurs
    • Aux échecs, gagner revient finalement à ça : minimiser les erreurs
    • Il y a longtemps, j’utilisais le moteur Fritz de ChessBase, qui avait une fonction de sparring. Si l’on jouait solidement, il offrait en milieu de partie des occasions ressemblant à des puzzles tactiques, avec la possibilité d’activer ou de désactiver les alertes
      Si l’on ne jouait pas de façon suffisamment stable, on perdait tout simplement
      À mon avis, cette fonction a disparu. Comme il donnait l’impression de commettre des erreurs humaines sous pression, c’était le seul ordinateur qui m’ait vraiment semblé être un véritable adversaire, contrairement à un moteur qui joue comme une machine puis fait arbitrairement un coup idiot
    • C’est pour ça que je n’aime pas beaucoup gagner dans les jeux multijoueurs. En général, quand je gagne, j’ai l’impression que l’adversaire a joué plusieurs fois de façon ridiculement mauvaise, ou bien qu’il a bien joué mais que j’ai eu énormément de chance à quelques moments
      Il est très rare d’avoir le sentiment que l’adversaire a bien joué, mais que j’ai globalement joué un peu mieux et mérité ma victoire
      Presque toujours, cela ressemble moins à une victoire de ma part qu’à une défaite de l’adversaire. Ce n’est pas un problème propre à l’intelligence artificielle
      Si quelqu’un parvenait à créer une IA qui perde de manière satisfaisante dans des jeux symétriques, tout en rendant la défaite satisfaisante et formatrice, ce serait une affaire à un milliard de dollars. Je pense que ce serait difficile sans une recherche sérieuse en psychologie
  • J’ai fait une présentation sur ce sujet, et j’en ai aussi rédigé le contenu[1]. Cet article est un bon exemple de distillation de connaissances
    Plutôt qu’un article sur les échecs eux-mêmes, c’est davantage un article montrant qu’une fonction de recherche non linéaire complexe, réglée par des experts, peut être distillée, pour des entrées standardisées comme aux échecs, en un modèle Transformer presque linéaire
    [1]: https://hlfshell.ai/posts/deepmind-grandmaster-chess-without...

    • Je pense qu’il faut considérer les résultats contre des humains avec beaucoup de prudence. Ce sont des parties blitz, et le Elo de ce moteur était beaucoup plus élevé contre les humains que contre les autres bots
      Le temps est donc probablement un facteur. Les humains sont plus susceptibles de tomber au temps, ou de commettre des erreurs lorsqu’il leur reste peu de temps
      Le fait d’avoir appris une très bonne fonction d’évaluation sans recherche reste impressionnant. J’aurais toutefois aimé que les parties où le repli vers Stockfish s’est déclenché soient exclues. Pour les humains aussi, un mat en 2 coups et un mat en 10 coups peuvent faire la différence entre une victoire et une nulle/défaite du point de vue de la défaite au temps
      J’aurais aussi voulu voir un affrontement direct contre Stockfish avec une profondeur de recherche limitée. Cela aurait donné une idée approximative de la quantité de l’arbre de recherche que cette fonction d’évaluation a distillée
  • Pour quelqu’un qui veut se lancer dans les réseaux de neurones pour les échecs, je recommande vivement ce dépôt : https://github.com/sgrvinod/chess-transformers
    Le code PyTorch est facile à lire, suit une implémentation classique, et l’architecture ressemble aussi à celles des réseaux de neurones d’échecs actuellement performants

  • https://lczero.org/blog/2024/02/how-well-do-lc0-networks-com...
    Un billet écrit par les auteurs du meilleur moteur d’échecs neuronal à propos de cet article de DeepMind

    • Depuis que Stockfish a ajouté NNUE en 2020, LC0 n’est plus le meilleur moteur d’échecs neuronal
  • L’immense jeu de données synthétiques utilisé pour l’entraînement a finalement été produit au moyen de beaucoup de recherche traditionnelle. Il y a donc un côté un peu amusant, mais cela reste impressionnant

    • C’est de la distillation de connaissances. Ensuite, on peut utiliser un modèle plus petit et plus efficace à la place du grand modèle
    • Au contraire, cela montre les limites des réseaux de neurones. Le cerveau humain peut apprendre avec beaucoup moins d’exemples
    • La recherche n’a été faite qu’une seule fois. Si l’on peut appliquer cette efficacité à d’autres connaissances, alors il y a quelque chose à en tirer
  • Je me souviens que Matthew Sadler, GM et auteur sur les échecs, avait configuré Leela Zero pour jouer des parties d’entraînement quasiment à l’intuition, avec très peu, voire pas du tout, de recherche
    En général, il gagnait, mais pas toujours. Je crois que c’était dans The Silicon Road to Chess Improvement

    • Il publie aussi des vidéos très divertissantes sur YouTube. Il montre quelles découvertes d’ouvertures étranges Leela peut faire lorsqu’on règle le contempt très haut afin d’éviter au maximum les nulles, avec des commentaires de niveau 2700+
    • Avec lczero, il suffit de régler la profondeur maximale, par exemple sur 1 ply
  • Si l’on génère les données d’entraînement en faisant tourner Stockfish sur toutes les positions de plateau de toutes les parties, n’est-on pas, au final, en train d’encoder l’arbre de recherche dans le modèle Transformer ?
    Dans ce cas, plus on augmente le nombre de paramètres du modèle, plus il peut contenir une grande partie de l’arbre de recherche et meilleures seront ses performances ; cela ne me paraît pas très intéressant

    • Je ne vois pas comment il serait possible d’encoder un arbre de recherche de cette manière
  • Ce dépôt fournit l’implémentation de notre article Grandmaster-Level Chess Without Search : https://arxiv.org/abs/2402.04494
    Les percées récentes en apprentissage automatique sont principalement venues du passage à l’échelle : des architectures à grande échelle fondées sur l’attention et des jeux de données d’une ampleur sans précédent. Cet article étudie l’impact de l’apprentissage à grande échelle aux échecs
    Contrairement aux moteurs d’échecs traditionnels, qui s’appuient sur des heuristiques complexes, une recherche explicite ou une combinaison des deux, nous entraînons de façon supervisée un modèle Transformer à 270 millions de paramètres sur un jeu de données de 10 millions de parties d’échecs
    Chaque position du jeu de données est annotée avec la valeur d’action fournie par le puissant moteur Stockfish 16, ce qui représente environ 15 milliards de points de données
    Le plus grand modèle a atteint un Elo blitz Lichess de 2895 contre des humains, et a résolu des problèmes d’échecs difficiles sans réglages spécifiques au domaine ni algorithme de recherche explicite
    Il dépasse également les réseaux de politique et de valeur d’AlphaZero sans MCTS, ainsi que GPT-3.5-turbo-instruct. Une étude systématique des tailles de modèles et de jeux de données montre que de fortes performances aux échecs n’apparaissent qu’à une échelle suffisante. Nous avons aussi mené de nombreuses expériences d’ablation sur les choix de conception et les hyperparamètres

    • Mais le Elo blitz Lichess contre des bots est environ 700 points plus bas que contre des humains
  • J’aimerais qu’il existe un moteur qui pense davantage comme un humain. Comme cette méthode utilise des parties annotées par Stockfish, elle semble fondamentalement amenée à penser comme un ordinateur
    S’il pensait comme un humain, ce serait très utile dans les analyses de parties pour indiquer, à chaque position, ce qu’il faut regarder, en l’adaptant à mon Elo

    • Ou alors un modèle qui mesure les performances en termes d’efficacité d’apprentissage serait intéressant. Autrement dit, combien de parties faut-il jouer pour atteindre le niveau X ?
      Ce qui rend Magnus Carlsen extraordinaire, c’est qu’il a atteint son niveau actuel aux échecs sous des contraintes de temps et de calcul énormes par rapport à un ordinateur. Son efficacité d’apprentissage est exceptionnelle comparée à n’importe quel moteur d’échecs
    • Il y a aussi l’autre extrémité du spectre : mémoire, taille du programme et temps de calcul extrêmement limités : https://rlc-chess.com/
      Cela donne l’impression d’un programme de la demoscene. Il existe même un programme d’échecs de 1 Ko qui fonctionne réellement
  • Résoudre complètement les échecs produirait un arbre trop grand pour être calculé aujourd’hui. Il me semble que c’est de l’ordre de 10^80, mais je peux me tromper
    Si l’on annotait cet arbre avec victoire/défaite/nulle, on pourrait obtenir un joueur optimal sans recherche
    Les deux approches évidentes de compression et d’optimisation consistent à approximer l’arbre, ou à approximer les annotations. L’efficacité de ces deux méthodes dépend fortement de la structure de l’arbre
    Ce résultat semble montrer davantage à quel point l’arbre des parties d’échecs se prête à ces deux approches, plutôt que la puissance absolue de l’approche par apprentissage elle-même. La conclusion que j’en tire est qu’une approximation raisonnable de cet arbre est possible avec des données de l’ordre de 270 millions de mots

    • La version exacte de cette technique est déjà utilisée pour les finales aux échecs, et s’appelle une tablebase
      Les échecs sont résolus avec une base de données de 18,4 To lorsqu’il reste 7 pièces sur l’échiquier, comme expliqué ici : https://lichess.org/@/lichess/blog/7-piece-syzygy-tablebases...