1 points par GN⁺ 2024-11-15 | 1 commentaires | Partager sur WhatsApp
  • Lorsque plusieurs LLM ont été mis aux échecs dans les mêmes conditions, la plupart se sont effondrés après l’ouverture, mais gpt-3.5-turbo-instruct a affiché de très fortes performances face au niveau de difficulté minimal de Stockfish
  • L’expérience consistait à faire jouer le LLM avec les Blancs contre Stockfish au niveau minimal, puis à évaluer la position après chaque coup avec le score en centipions d’un moteur d’échecs
  • llama-3.2-3b, llama-3.1-70b, Qwen-2.5-72b, command-r-v01, gemma-2-27b, gpt-3.5-turbo, gpt-4o-mini, gpt-4o et o1-mini n’ont tous pas réussi à s’approcher de gpt-3.5-turbo-instruct
  • Dans la comparaison de modèles de familles similaires, le réglage instruction/chat semblait dégrader les performances aux échecs, mais l’ampleur de la baisse variait selon les modèles, de faible à très importante
  • Sur les modèles ouverts, un problème de tokenizer faisait qu’un simple espace à la fin du prompt modifiait fortement les performances, et l’entrée en notation échiquéenne réagit de façon sensible aux représentations internes des LLM et aux contraintes de génération

Configuration de l’expérience et méthode d’évaluation

  • Le LLM recevait un prompt lui demandant de choisir le prochain coup comme un grand maître d’échecs, avec en entrée une partie d’échecs partiellement avancée
    • La notation utilisée était la notation algébrique standard, comme e4, Rdf8, R1a3
    • Les instructions précisaient de ne pas écrire les numéros de coups et de ne pas expliquer les raisons du choix
  • Dans toutes les parties, le LLM jouait avec les Blancs, et l’adversaire était Stockfish, une IA d’échecs standard, réglée sur son niveau de difficulté minimal
  • La position après chaque coup était notée par un moteur d’échecs afin de comparer les performances des modèles
    • L’unité était le centipion, où un pion vaut 100 points, en tenant aussi compte de la valeur positionnelle
    • Quand la partie était terminée, une victoire du LLM valait +1500, une nulle 0 et une défaite -1500

Des modèles qui faiblissent brutalement après l’ouverture

  • llama-3.2-3b est un base model de 3 milliards de paramètres, et il a perdu ses 50 parties
    • Il pouvait jouer quelques coups d’ouverture standard, mais commençait rapidement à perdre des pièces
    • Il a tout perdu alors même que l’adversaire était Stockfish au réglage minimal
  • llama-3.1-70b, avec 70 milliards de paramètres, n’a été qu’un peu meilleur, mais ses résultats sont restés très mauvais
  • llama-3.1-70b-instruct, Qwen-2.5-72b, command-r-v01 et gemma-2-27b ont aussi été testés de la même manière, sans montrer de fortes performances aux échecs
  • llama-3.1-405b, testé sur quelques parties, est lui aussi un modèle plus grand que gpt-3.5-turbo, mais ses résultats sont restés mauvais

Le cas exceptionnellement fort de gpt-3.5-turbo-instruct

  • gpt-3.5-turbo-instruct est un modèle fermé d’OpenAI, donc ses détails sont flous, mais il a montré de très bonnes performances sur 10 essais
  • Il était assez fort pour gagner toutes les parties même en augmentant de plusieurs crans la difficulté de Stockfish
  • gpt-3.5-turbo, au nom similaire, est un modèle davantage réglé pour la conversation, et ses performances aux échecs différaient fortement de celles de gpt-3.5-turbo-instruct
  • gpt-4o-mini, gpt-4o et o1-mini faisaient aussi partie des modèles testés ; gpt-4o a perdu un peu plus lentement, mais a perdu toutes ses parties
  • La dynamique des expériences d’échecs avec des LLM sur Internet avait suscité, en septembre-octobre 2023, un intérêt autour d’un niveau d’amateur avancé, avant de revenir récemment à une situation où les modèles s’effondrent à nouveau après l’ouverture

Réglage instruction/chat et performances aux échecs

  • En comparant, dans des familles similaires, des modèles proches du base model et des modèles réglés davantage, le réglage instruction supplémentaire apparaît toujours comme un facteur de dégradation des performances aux échecs
  • L’ampleur de la dégradation n’était pas constante
    • Dans deux cas, l’écart était faible
    • Dans un cas, l’écart était très important
  • Le nom gpt-3.5-turbo-instruct doit être interprété différemment des conventions habituelles de nommage
    • Ici, il est traité comme un modèle plus proche du base model que gpt-3.5-turbo
    • C’est l’inverse de ce que désignent généralement instruct ou it, qui impliquent davantage de réglage pour la conversation et le suivi d’instructions

Causes possibles

  • Les grands base models peuvent jouer aux échecs, mais l’instruction tuning pourrait les dégrader

    • Cela correspond aux résultats expérimentaux, mais il existe un contre-exemple : le plus grand llama-3.1-405b a lui aussi obtenu de mauvais résultats
  • gpt-3.5-turbo-instruct a peut-être été entraîné sur davantage de parties d’échecs

    • Il est probable que tous les modèles aient appris sur de nombreuses parties d’échecs, mais il est difficile d’en connaître la quantité exacte
  • Les différences d’architecture Transformer ont peut-être eu un effet

    • Il est aussi difficile d’exclure la possibilité que les modèles de la famille Llama soient particulièrement faibles aux échecs
  • Il a peut-être existé une concurrence entre différents types de données

    • Un Transformer entraîné uniquement sur des parties d’échecs peut très bien jouer aux échecs
    • Si gpt-3.5-turbo-instruct a été entraîné sur des données contenant une plus forte proportion de parties d’échecs, une plus grande part de ses paramètres a pu être consacrée aux échecs
    • Si cette hypothèse est correcte, un modèle suffisamment grand devrait pouvoir bien jouer aux échecs s’il a appris assez de données échiquéennes, même avec une faible proportion de parties dans ses données

Détails d’implémentation et contraintes

  • Les modèles ouverts ont été exécutés directement, et les modèles non issus d’OpenAI ont été classés comme modèles ouverts
  • L’exécution des modèles ouverts a utilisé la quantification Q5_K_M
  • Pour les modèles ouverts, les coups légaux disponibles étaient générés directement, et la sortie était contrainte avec les grammars llama.cpp afin de toujours produire un coup légal
  • Les modèles OpenAI ne prenant pas en charge une grammar complète, jusqu’à 10 générations étaient tentées ; si aucun coup légal n’était produit, un coup était choisi au hasard
  • Un system prompt distinct a été utilisé pour les modèles de chat llama-3.1-70b-instruct, gemma-2-27b-it, gpt-3.5-turbo, gpt-4o-mini et gpt-4o
  • o1-mini ne permettant pas de modifier le system prompt, il a été exécuté tel quel
  • Les modèles ouverts ont été exécutés avec une temperature de 0,7, et les modèles OpenAI avec les valeurs par défaut

L’étrangeté de l’espace dans le prompt et du tokenizer

  • Sur les modèles ouverts, un prompt se terminant par un espace, comme 1. e4 e5 2. , produisait des performances bien plus mauvaises qu’un prompt se terminant sans espace, comme 1 e4 e5 2.
  • La cause semble liée au tokenizer
    • Le tokenizer de Llama génère e comme un seul token après 1.
    • Ce n’est pas la même chose que générer e après un token d’espace
    • Si l’on met un espace à la fin de l’entrée puis qu’on demande au modèle de générer le token suivant, il se retrouve dans une situation confuse
  • La bonne façon de traiter cela est le token healing : supprimer le dernier token de l’entrée, puis faire de la génération contrainte pour toutes les chaînes qui commencent par la chaîne supprimée
  • Dans l’implémentation, au lieu du token healing, l’espace a été retiré, puis la grammar a été modifiée pour pouvoir générer ou non un espace, avant de générer le coup légal courant avec un espace optionnel
  • Dans la mise à jour, il est précisé que la cause de ce phénomène a réellement été identifiée, avec l’indice que personne n’a encore trouvé la bonne explication

Possibilité d’une optimisation par OpenAI

  • Une hypothèse est qu’OpenAI, voyant l’intérêt suscité par les performances aux échecs, ait optimisé certaines données d’entraînement, un fine-tuning ou un algorithme afin d’améliorer les performances échiquéennes de gpt-3.5-turbo-instruct
  • Dans cette même hypothèse, cette optimisation n’aurait peut-être pas été conservée dans les modèles ultérieurs en raison de compromis, comme le coût ou une dégradation d’autres capacités
  • Il ne s’agit pas d’un élément clairement étayé, mais d’une supposition du type « OpenAI l’a fait intentionnellement », et il n’est pas certain que le calendrier corresponde

1 commentaires

 
GN⁺ 2024-11-15
Avis sur Hacker News
  • L’article semble passer à côté d’une possibilité évidente : OpenAI a pu considérer les échecs comme un benchmark « à gagner » et ajouter un traitement spécial pour les échecs dans gpt-3.5-turbo-instruct, puis ne pas l’intégrer dans les modèles suivants parce que cela ne générait plus d’attention médiatique durable

    • C’est exactement ce que je pense. La pull request qui a ajouté l’évaluation des échecs est ici : https://github.com/openai/evals/pull/45
    • J’ai le même soupçon. Plutôt que le LLM ait « appris les échecs », il a peut-être « appris » à reconnaître une partie d’échecs et à transmettre les instructions à un moteur d’échecs. Si c’est le cas, ce n’est pas du tout impressionnant
    • Ça paraît assez probable, mais je me demande si ce traitement spécial a été injecté à l’intérieur du LLM par apprentissage par renforcement, ou si, de l’autre côté d’un appel à l’API OpenAI, ils font tourner non seulement un LLM à des billions de paramètres, mais aussi une instance de Stockfish
    • Les échecs ont évidemment été un benchmark qui valait la peine d’être gagné, et ce depuis Watson. Avant cela, on peut remonter jusqu’au Mechanical Turk
    • Pour être juste, l’article dit tout de même aussi « Théorie 2 : GPT-3.5-instruct a été entraîné sur davantage de parties d’échecs »
  • Certains éléments importants ressortent du test : pour les modèles fermés d’OpenAI, si aucun coup légal n’était produit, ils généraient jusqu’à 10 fois, puis choisissaient au hasard si cela échouait encore ; les modèles ouverts étaient exécutés localement avec une quantification Q5_K_M ; la présence ou non d’un espace à la fin du prompt modifiait fortement les performances des modèles ouverts ; les modèles ouverts utilisaient une température de 0,7, tandis que les modèles OpenAI utilisaient la valeur par défaut
    Entre les comportements étranges du tokenizer, la température, la quantification, les coups aléatoires et le prompt d’échecs, je ne sais pas trop comment interpréter les résultats. L’article reste intéressant malgré tout

    • C’était enfoui vers la fin de l’article. Quand j’avais vu des LLM jouer aux échecs auparavant, ils n’arrivaient même pas à jouer correctement des coups légaux, donc je me demandais comment les modèles pouvaient tous jouer des coups légaux ici
  • Peut-être que si l’on veut un modèle vraiment intelligent, il faut arrêter la tokenisation elle-même. On limite dès le départ ce que le modèle voit et la manière dont il perçoit le monde par la structure du flux d’informations en entrée
    Je sais que traiter des bits ou des octets bruts est lent, mais réfuter l’hypothèse selon laquelle de gros problèmes viendraient de la tokenisation semble relativement peu coûteux et facile. Je suis surpris de ne pas voir davantage de recherches sur des tokenisations radicalement différentes

    • La plupart de ce qu’on appelle des « problèmes de tokenisation » sont en réalité, à mon avis, des problèmes de raisonnement, souvent attribués à tort à un détail technique trivial
      Par exemple, on dit souvent que les LLM ne savent pas compter des choses simples à cause de la tokenisation, mais le même LLM compte correctement si on utilise un prompt de chaîne de pensée. Cela ne s’explique donc pas par la tokenisation. Le problème est qu’un humain doit lui indiquer que la résolution étape par étape permet d’obtenir la réponse exacte ; sans cette aide, il a simplement tendance à deviner
    • L’apprentissage au niveau des octets me paraît difficile en pratique. Cela dit, utiliser des tokens fabriqués à la main, donc finalement à la manière humaine, me semble très problématique. Quand on regarde les vrais tokenizers, on y trouve des choses amusantes comme des expressions régulières qui modifient ce qu’il faut tokeniser selon des règles empiriques
      Si l’on peut transformer des images en tokens, et aussi de l’audio en tokens, je me demande sans cesse s’il ne serait pas possible de créer un ensemble de tokens de représentation sémantique choisis directement par le modèle, puis de redécoder ces tokens en texte. L’inconvénient est que le retour des tokens encodés vers le texte serait avec perte, ce qui empêcherait de citer mot pour mot le texte vu
      D’après ce que j’ai compris, OpenAI a fait exactement ce genre de chose avec les images dans le rapport gpt-4o. Voir « Explorations of capabilities » : https://openai.com/index/hello-gpt-4o/
    • Il y a une raison pour laquelle le cerveau humain dispose de zones dédiées au traitement du langage. La tokenisation est probablement une stratégie assez solide. Le vrai point essentiel, c’est que le langage n’est pas une bonne manière d’encoder toutes les formes de connaissance
    • https://youtu.be/zduSFxRajkE
      Karpathy partage aussi cette idée. C’est une vidéo de deux heures où il recrée un tokenizer tout en expliquant pourquoi il déteste les tokenizers
    • Si l’on descend des tokens vers les octets, la taille du modèle explose. Je ne retrouve pas la référence pour l’instant, mais il semblerait que si l’on réduit la taille moyenne des tokens, la largeur du modèle, c’est-à-dire la taille de chaque couche, augmente quadratiquement en conséquence. Cela affecte non seulement la vitesse d’inférence, mais aussi la vitesse d’entraînement
  • Il vaudrait la peine d’expérimenter en modifiant le prompt et la position sur l’échiquier de plusieurs façons. Pour référence, la position donnée au modèle est cette image : https://i.imgur.com/qRxalgH.png
    Il peut y avoir au moins une bizarrerie dans cette expérience. Par exemple, donner des instructions à une variante de modèle qui n’a pas été ajustée par instruction peut au contraire être contre-productif. Plus important encore, quand on ne fournit qu’un PGN tronqué, je me demande si cette position donne l’impression que les blancs jouent comme un grand maître. Même si le modèle comprend bien les échecs, il cherchera probablement à prédire le coup le plus plausible dans la position actuelle ; s’il estime que les blancs sont un mauvais joueur, il peut juger plus probable un mauvais coup

    • On peut trouver quelques parties entre joueurs forts qui commencent ainsi, donc mon hypothèse selon laquelle le modèle prédirait volontairement de mauvais coups est affaiblie : https://www.365chess.com/search_result.php?search=1&p=1&m=8&n=3071&order=welo&ms=e4.e6.d3.c5.Nf3.Nc6.g3.Nf6&rev=&wid=&bid=
      Cela dit, le fait d’avoir réglé Stockfish au niveau le plus bas tout en le présentant comme un « adversaire très fort » a peut-être un peu perturbé le modèle. Si j’interprète correctement le graphique, les premiers coups du modèle semblent acceptables, puis les problèmes apparaissent ensuite. Il vaudrait la peine de répéter l’expérience en modifiant le guide du prompt, la force de Stockfish, la position de départ, les noms des joueurs fictifs, etc.
    • L’expérience commençait au premier coup de la partie et jouait chaque partie jusqu’au bout. La position que tu as liée n’est qu’un exemple du format qui injecte l’état de la partie dans le modèle à chaque coup
      Si l’on ne testait qu’un seul coup isolé, que pourraient bien signifier « gagner » ou « perdre » ?
  • D’accord. On peut essayer quelques variantes de prompt : que se passerait-il si l’on autorisait le modèle à avoir une chaîne de pensée ? Dans cette expérience, c’était explicitement interdit. Et si l’on décrit à chaque étape la position sur l’échiquier dans le prompt, le modèle n’a pas besoin de la calculer ou de l’estimer en interne.

    • Il ne s’agissait pas d’un seul coup, mais d’une partie entière.
  • Je me demande si le modèle tente des coups illégaux. L’auteur original ne le mentionne pas, mais les règles des échecs sont assez arbitraires, et les LLM sont tristement célèbres pour inventer quelque chose de plausible face à des problèmes difficiles plutôt que d’admettre qu’ils n’ont pas de réponse ; j’imagine donc que cela doit forcément arriver au moins une fois.

    • D’après mon expérience, si on obtient 10 coups légaux d’affilée, c’est déjà plutôt chanceux. Exemple : https://news.ycombinator.com/item?id=41527143#41529024
    • Oui. Il est question d’utiliser des contraintes grammaticales pour n’autoriser que les coups légaux.
  • Je ne comprends pas pourquoi des personnes instruites s’attendent à ce qu’un LLM puisse jouer aux échecs à un niveau plausible.
    Un LLM ne connaît pas la qualité de ses données. Un prompt du type « comporte-toi comme x » ne remplace pas le raisonnement réel ni le calcul déterministe qui sont manifestement nécessaires aux échecs.

    • Dans ce cas, ne devrait-on pas être surpris que turbo-instruct joue effectivement bien ? Il y a énormément d’affirmations approximatives fondées sur des intuitions anthropomorphiques sans fondement du genre « vrai raisonnement ». La situation actuelle me semble être une bonne preuve que personne ne comprend vraiment ce qui se passe.
      Si un modèle mental dit que les LLM ne devraient pas savoir jouer aux échecs, il ne peut pas expliquer un LLM qui joue fortement aux échecs. À l’inverse, un modèle qui dit qu’ils devraient bien jouer n’explique pas pourquoi beaucoup de grands modèles échouent lamentablement aux échecs. Il se passe clairement quelque chose de plus complexe.
    • L’un des principaux objectifs des expériences est de vérifier si nos idées préconçues sont justes. Bien sûr, si la question ne vous intéresse pas, vous n’êtes pas obligé de regarder dans le télescope.
    • Avec suffisamment d’informations d’entraînement, cela ressemble davantage à un puzzle. Un LLM peut produire correctement l’état de l’échiquier après les coups donnés, générer des résumés de position pas trop mauvais, et au moins énumérer les dangers à un coup.
      « Niveau plausible » est subjectif, mais à ce stade il devrait pouvoir battre un débutant. Le niveau le plus bas de Stockfish utilisé dans l’article correspond déjà à un joueur intermédiaire très faible. Cela dépend de si l’on parle des implémentations publiques actuelles ou de l’idée générale des LLM ; et si l’on veut de meilleurs résultats, on pourrait aussi leur donner beaucoup plus de livres d’échecs et d’analyses de parties passées.
    • Les échecs ne sont qu’une tâche de modélisation probabiliste de séquences, et j’ai vu de mes propres yeux GPT-3.5-turbo-instruct jouer au niveau d’un amateur avancé. Cela dit, le RLHF et la distillation intégrés aux nouveaux modèles semblent dégrader cette capacité.
    • Dans ce cas, la question est de savoir pourquoi gpt-3.5-instruct peut battre Stockfish.
  • Dire qu’un modèle public a été exécuté avec une quantification Q5_K_M signifie simplement que tous les paramètres ont été compressés avec perte. Ce n’est probablement pas important, si ?

    • Si on le compare aux modèles non quantifiés d’OpenAI, cela compte probablement.
  • À mon avis, apprendre les échecs comme une séquence crée plus de problèmes que d’avantages. Même 1 000 milliards de parties ne suffiraient pas : https://en.wikipedia.org/wiki/Shannon_number
    Pour être complet, les moteurs d’échecs modernes utilisent des modèles spécialisés de haute qualité comme partie de leur outillage, et peuvent au minimum faire nulle à chaque fois contre n’importe quel joueur actuel ou passé. Si l’adversaire commet la moindre petite erreur, il perd. Monter Stockfish au niveau maximal, ou au moins à un joueur de 1800+ Elo, pourrait donner des parties plus réussies, mais ce serait seulement le résultat d’une réduction du bruit dans les données d’entraînement, parce que les joueurs avancés jouent moins de coups absurdes, pas la preuve d’un meilleur jeu.

    • Exact. Comme cela a déjà été souligné, le nombre de positions possibles aux échecs dépasse facilement, et de très loin, même les estimations les plus larges du nombre d’atomes dans l’univers observable.
    • Puisque Shannon a été mentionné, quelle serait la taille minimale d’un échantillon représentatif de cet espace de problèmes ? Serait-elle suffisamment proche du nombre de coups d’échecs publiés sur Internet et dans les livres ?
    • Oui. Dès qu’on sort de la séquence, on se perd.
      Apprendre les meilleurs coups sur des milliards ou des milliers de milliards de positions, puis intégrer cela dans une IA, pourrait mieux fonctionner. Des positions similaires ont souvent le même type de meilleur coup.
    • Franchement, si l’on écarte les coups qui ne seraient jamais joués et que l’on tient compte des symétries ainsi que des positions de plateau pratiquement équivalentes, les échecs ne sont peut-être pas un jeu si vaste. Ces positions peuvent être détectées même par un moteur de correspondance de motifs très simple.
  • J’ai trouvé un ensemble d’expériences liées incluant gpt-3.5-turbo-instruct, gpt-3.5-turbo et gpt-4.
    La conclusion est tout aussi surprenante : gpt-3.5-turbo-instruct joue beaucoup mieux aux échecs.
    https://blog.mathieuacher.com/GPTsChessEloRatingLegalMoves/

    • Je parierais qu’il effectue un appel de fonction vers un vrai moteur d’échecs. Une analyse temporelle montrant comment le temps d’inférence varie, ou ne varie pas, selon le nombre de tokens ou la complexité de la partie devrait permettre de le prouver.
  • OpenAI a énormément d’expérience dans la création d’IA de jeu. Si je me souviens bien, c’était leur domaine principal pendant plusieurs années. Ils ont donc probablement adapté un modèle pour qu’il soit bon aux échecs, afin de voir si l’apprentissage des échecs influence l’intelligence générale. De la même manière qu’un humain peut devenir plus intelligent en apprenant les échecs, ou en apprenant les mathématiques ou la programmation.

    • Le jeu est fortement lié à une représentation abstraite de l’état du jeu. Même si le joueur n’en a pas conscience, les échecs ressemblent à un problème de recherche superficielle, ou de beam search, dans l’espace des coups possibles.
      Un LLM ne raisonne pas et ne fait pas de recherche ; il écrit du texte à partir du texte précédent. Cela peut donc ressembler à du jeu à nos yeux, mais en réalité c’est une estimation intelligente fondée sur des parties précédentes. C’est un peu comme si Kasparov notait des coups sans imaginer la disposition réelle des pièces. L’expérience intéressante serait de voir si le modèle peut jouer avec seulement les règles ; il ne le pourrait probablement pas. Pour l’instant, il ne suit pas un objectif, il rejoue de mémoire. Il n’y a pas encore quelque chose comme une attention prospective, et la beam search est suffisamment coûteuse pour qu’il vaille mieux se rabattre sur un algorithme d’échecs classique.
    • Je pense que vous confondez OpenAI et DeepMind.
      OpenAI n’a rien fait d’autre que des agents conversationnels.