El extraño fenómeno que ocurre con los LLM y el ajedrez
(substack.com/dynomight)- Al poner varios LLM a jugar ajedrez en las mismas condiciones, la mayoría se desmoronó después de la apertura, pero solo gpt-3.5-turbo-instruct mostró un rendimiento muy fuerte contra el nivel más bajo de Stockfish
- El experimento consistió en hacer que el LLM jugara con blancas contra Stockfish en su nivel más bajo, y luego evaluar el estado del tablero en cada turno con la puntuación en centipeones de un motor de ajedrez
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,o1-minino lograron acercarse agpt-3.5-turbo-instruct- Al comparar modelos de familias similares, el ajuste de instruction/chat pareció reducir el rendimiento en ajedrez, aunque el grado de deterioro varió de poco a muchísimo según el modelo
- En los modelos abiertos apareció un problema del tokenizador en el que un solo espacio al final del prompt cambiaba mucho el rendimiento, y la entrada en notación de ajedrez reaccionaba de forma sensible a la representación interna del LLM y a las restricciones de generación
Configuración del experimento y método de evaluación
- A los LLM se les dio un prompt para que eligieran la siguiente jugada como si fueran un gran maestro de ajedrez, y la entrada era una partida parcialmente desarrollada
- La notación usada fue la notación algebraica estándar como
e4,Rdf8,R1a3 - También se incluía la instrucción de no escribir el número de turno ni explicar por qué elegían la jugada
- La notación usada fue la notación algebraica estándar como
- En todas las partidas, el LLM jugó con blancas y el rival fue Stockfish, un AI estándar de ajedrez, en su nivel más bajo
- Después de cada turno se puntuó el estado del tablero con un motor de ajedrez para comparar el rendimiento de los modelos
- La unidad fue el centipeón, donde un peón vale 100 puntos y también se refleja el valor posicional
- Si la partida terminaba, una victoria del LLM se contaba como +1500, tablas como 0 y derrota como -1500
Modelos que se debilitan bruscamente después de la apertura
llama-3.2-3b, un modelo base de 3 mil millones de parámetros, perdió las 50 partidas- Podía jugar unas cuantas jugadas de apertura estándar, pero pronto empezaba a perder piezas
- Incluso con Stockfish en la configuración más baja, perdió todas
llama-3.1-70b, con 70 mil millones de parámetros, solo fue un poco mejor y aun así dio resultados muy malosllama-3.1-70b-instruct,Qwen-2.5-72b,command-r-v01,gemma-2-27btambién se probaron del mismo modo, pero no mostraron un rendimiento fuerte en ajedrezllama-3.1-405b, probado en unas cuantas partidas, también era un modelo más grande quegpt-3.5-turbo, pero sus resultados siguieron siendo malos
El caso excepcionalmente fuerte de gpt-3.5-turbo-instruct
gpt-3.5-turbo-instructes un modelo cerrado de OpenAI, así que sus detalles no están claros, pero mostró un rendimiento muy bueno en 10 pruebas- Era lo bastante fuerte como para ganar todas las partidas incluso subiendo varios niveles de dificultad de Stockfish
gpt-3.5-turbo, de nombre parecido, es un modelo ajustado de forma más conversacional, y su rendimiento en ajedrez fue muy distinto al degpt-3.5-turbo-instructgpt-4o-mini,gpt-4o,o1-minitambién fueron parte de la prueba, ygpt-4operdió un poco más lentamente, pero aun así perdió todas las partidas- La tendencia de los experimentos de ajedrez con LLM en internet había despertado interés entre septiembre y octubre de 2023 por alcanzar nivel de aficionado avanzado, pero en modelos recientes volvió el patrón de derrumbarse después de la apertura
Ajuste instruction/chat y rendimiento en ajedrez
- Al comparar dentro de familias parecidas modelos más cercanos al base con modelos ajustados adicionalmente, el ajuste instruction adicional apareció en todos los casos como algo que empeoraba el rendimiento en ajedrez
- El grado de deterioro no fue constante
- En dos casos la diferencia fue pequeña
- En un caso la diferencia fue muy grande
- El nombre
gpt-3.5-turbo-instructdebe interpretarse distinto de la convención habitual de nombres- Aquí se trata como un modelo más cercano al base model que
gpt-3.5-turbo - Es lo contrario de lo que normalmente implican
instructoit, que suelen indicar más ajuste para conversación o seguimiento de instrucciones
- Aquí se trata como un modelo más cercano al base model que
Posibles causas
-
Posibilidad de que los base model grandes puedan jugar ajedrez, pero el ajuste instruction lo arruine
- Coincide con los resultados del experimento, pero hay un contraejemplo:
llama-3.1-405btambién tuvo malos resultados
- Coincide con los resultados del experimento, pero hay un contraejemplo:
-
Posibilidad de que
gpt-3.5-turbo-instructhaya sido entrenado con más partidas de ajedrez- Es probable que todos los modelos hayan aprendido de muchas partidas de ajedrez, pero es difícil saber la cantidad exacta
-
Posibilidad de que las diferencias en la arquitectura Transformer hayan influido
- Tampoco es fácil descartar que los modelos de la familia Llama sean particularmente débiles en ajedrez
-
Posibilidad de que hubiera competencia entre distintos tipos de datos
- Un Transformer entrenado solo con partidas de ajedrez puede jugar extremadamente bien
- Si
gpt-3.5-turbo-instructfue entrenado con datos donde la proporción de partidas de ajedrez era mayor, una fracción más grande de sus parámetros pudo haberse dedicado al ajedrez - Si esta hipótesis es correcta, un modelo lo bastante grande debería poder jugar bien al ajedrez aunque la proporción de partidas de ajedrez sea baja, siempre que haya aprendido suficientes datos de ajedrez
Detalles de implementación y limitaciones
- Los modelos abiertos se ejecutaron directamente, y se clasificó como abiertos a todos los modelos que no fueran de OpenAI
- Para ejecutar los modelos abiertos se usó cuantización
Q5_K_M - En los modelos abiertos se generaban directamente las jugadas legales posibles y se restringía la salida con llama.cpp grammars para que siempre saliera una jugada legal
- Los modelos de OpenAI no soportan una grammar completa, así que se les permitió generar hasta 10 veces, y si aun así no salía una jugada legal, se elegía una al azar
- Para los modelos de chat
llama-3.1-70b-instruct,gemma-2-27b-it,gpt-3.5-turbo,gpt-4o-mini,gpt-4ose usó un system prompt aparte o1-minise ejecutó tal cual porque no permite cambiar el system prompt- Los modelos abiertos se ejecutaron con temperature 0.7 y los modelos de OpenAI con los valores por defecto
El fenómeno extraño del espacio en el prompt y el tokenizador
- En los modelos abiertos, un prompt que terminaba con espacio como
1. e4 e5 2.rendía mucho peor que un prompt que terminaba sin espacio como1 e4 e5 2. - Se considera que la causa está relacionada con el tokenizador
- El tokenizador de Llama genera
ecomo un solo token después de1. - Eso no es lo mismo que generar
edespués de un token de espacio - Si se pone un espacio al final de la entrada y luego se genera el siguiente token, el modelo queda en una situación confusa
- El tokenizador de Llama genera
- La forma correcta de manejarlo es usar token healing: borrar el último token de la entrada y hacer generación restringida sobre todas las cadenas que empiecen con la cadena borrada
- En la implementación, en vez de token healing, se quitó el espacio y se cambió la grammar para que pudiera generar o no un espacio, y luego generar la jugada legal actual junto con el espacio opcional
- En una actualización se agregó que ya se identificó la causa real de este fenómeno, y se dejó la pista de que nadie todavía había acertado la explicación correcta
Posible optimización por parte de OpenAI
- Una hipótesis es que, al ver el interés por el rendimiento en ajedrez, OpenAI pudo haber optimizado de alguna forma los datos de entrenamiento, el fine-tuning o el algoritmo de
gpt-3.5-turbo-instructpara mejorar su rendimiento en ajedrez - Bajo esa misma idea, esa optimización pudo no haberse mantenido en modelos posteriores por trade-offs como costo o deterioro de otras funciones
- No hay evidencia clara de esto; es más bien una especulación del tipo “OpenAI lo hizo intencionalmente”, y tampoco está claro si el momento coincide
1 comentarios
Opiniones de Hacker News
Parece que el artículo pasa por alto una posibilidad bastante obvia: OpenAI pudo haber visto el ajedrez como un benchmark que “había que ganar” y haber metido un tratamiento especial solo para ajedrez dentro de
gpt-3.5-turbo-instruct, pero no incluirlo en modelos posteriores porque ya no generaba atención mediática sostenida.Hay partes importantes en las pruebas: en los modelos cerrados de OpenAI, si no salía una jugada legal, generaban hasta 10 veces y, si aun así no funcionaba, elegían una al azar; los modelos abiertos se corrieron localmente con cuantización
Q5_K_M; el rendimiento de los modelos abiertos cambiaba mucho solo por si había o no un espacio al final del prompt; los modelos abiertos usaban temperatura 0.7, mientras que los de OpenAI usaban el valor por defecto.Hay una mezcla de comportamientos raros del tokenizador, temperatura, cuantización, jugadas aleatorias y prompts de ajedrez, así que no sé cómo interpretar los resultados. Aun así, el artículo es interesante.
Tal vez, si de verdad queremos modelos inteligentes, deberíamos dejar de tokenizar. Estamos limitando desde el inicio, mediante la estructura del flujo de información de entrada, qué ve el modelo y cómo percibe el mundo.
Sé que trabajar con bits o bytes crudos es lento, pero refutar la hipótesis de que grandes problemas podrían deberse a la tokenización parece relativamente barato y fácil. Me sorprende no ver más investigación sobre tokenizaciones radicalmente distintas.
Por ejemplo, se suele decir que los LLM no pueden contar cosas básicas por culpa de la tokenización, pero el mismo LLM cuenta bien si se usa un prompt de cadena de pensamiento. Entonces eso no se puede explicar con tokenización. El problema es que una persona tiene que indicarle que, si lo resuelve paso a paso, llega a la respuesta correcta; sin esa ayuda, es fácil que solo adivine.
Si se pueden convertir imágenes en tokens y también audio en tokens, sigo pensando que quizá se podría crear un conjunto de tokens de representación semántica elegidos por el propio modelo y luego decodificar esos tokens de vuelta a texto. La desventaja es que el proceso de convertir los tokens codificados de vuelta a texto sería con pérdida, así que ya no se podría citar el texto visto 1:1.
Según entiendo, OpenAI hizo exactamente algo así con las imágenes en el informe de
gpt-4o. Ver “Explorations of capabilities”: https://openai.com/index/hello-gpt-4o/Karpathy también está de acuerdo con la misma idea. Es un video de 2 horas en el que reconstruye un tokenizador y odia los tokenizadores.
Vale la pena experimentar cambiando el prompt y la posición del tablero de varias maneras. Como referencia, la posición del tablero que se le dio al modelo es esta imagen: https://i.imgur.com/qRxalgH.png
Puede haber más de una cosa rara en este experimento. Por ejemplo, dar instrucciones a una variante del modelo que no fue ajustada para seguir instrucciones podría ser contraproducente. Más importante aún: cuando solo se entrega un PGN recortado, me pregunto si en esa posición las blancas parecen un jugador de nivel gran maestro. Aunque el modelo entienda bien el ajedrez, intentará predecir la jugada más plausible en la posición actual; si juzga que las blancas son un mal jugador, puede predecir que una mala jugada es más probable.
Aun así, poner Stockfish en el nivel más bajo y presentarlo como “un oponente muy fuerte” pudo haber confundido al modelo hasta cierto punto. Si interpreto bien la gráfica, las primeras jugadas del modelo se ven aceptables y luego empiezan los problemas. Valdría la pena repetir el experimento cambiando la guía del prompt, la fuerza de Stockfish, la posición inicial, los nombres ficticios de los jugadores, etc.
Si hubiera sido contra una sola jugada aislada, ¿qué significaría exactamente “ganar” o “perder”?
De acuerdo. Se pueden probar algunas variaciones del prompt: qué pasaría si se le permite al modelo el proceso de razonamiento, que en este experimento se prohibió explícitamente. Además, si en cada paso se describe la posición del tablero en el prompt, el modelo no tendría que calcularla o estimarla internamente.
Me pregunto si el modelo intenta hacer jugadas ilegales. El autor original no lo menciona, pero las reglas del ajedrez son bastante arbitrarias y los LLM son conocidos por inventar algo plausible antes que admitir que no tienen respuesta en problemas difíciles, así que parece inevitable que ocurra al menos una vez.
No entiendo por qué gente instruida espera que un LLM pueda jugar ajedrez a un nivel plausible.
Un LLM no conoce la calidad de sus datos. Un prompt de “actúa como x” no sustituye el razonamiento real ni el cálculo determinista que el ajedrez obviamente requiere.
turbo-instructrealmente juegue bien? Abundan las afirmaciones vagas basadas en intuiciones antropomórficas infundadas como “razonamiento real”. Creo que la situación actual es una buena prueba de que nadie entiende bien qué está pasando.Si un modelo mental dice que los LLM no deberían poder jugar ajedrez, no puede explicar a un LLM que juega ajedrez fuerte. Y, a la inversa, un modelo que dice que deberían jugar bien no puede explicar por qué muchos modelos grandes fracasan estrepitosamente en ajedrez. Claramente está ocurriendo algo más complejo.
“Nivel plausible” es subjetivo, pero con eso debería poder ganarle a un principiante. El nivel mínimo de Stockfish usado en el artículo también corresponde a un jugador intermedio de los más bajos. Depende de si hablamos de las implementaciones públicas actuales o de la idea general de los LLM; y si se quieren mejores resultados, también se les podría alimentar con muchos más libros de ajedrez y análisis de partidas pasadas.
GPT-3.5-turbo-instructjuega a nivel de aficionado avanzado. Pero parece que el RLHF y la destilación incorporados en los modelos nuevos arruinan esa capacidad.gpt-3.5-instructpuede ganarle a Stockfish.Que hayan corrido un modelo abierto con cuantización
Q5_K_Msolo significa que todos los parámetros fueron comprimidos con pérdida. Probablemente no importe, ¿no?Creo que entrenar ajedrez como secuencia crea más problemas de los que resuelve. Ni siquiera entrenar con 1 billón de partidas te salvaría: https://en.wikipedia.org/wiki/Shannon_number
Para completar: los motores de ajedrez modernos usan modelos especializados de ajedrez de alta calidad como parte de sus herramientas, y pueden, como mínimo, empatar siempre contra cualquier jugador actual o histórico. Si el rival comete incluso el error más pequeño, pierde. Subir Stockfish al nivel máximo, o al menos a un jugador de 1800+ Elo, podría producir partidas más exitosas, pero eso sería solo resultado de reducir el ruido en los datos de entrenamiento, porque los jugadores avanzados hacen menos jugadas basura; no significa que sea mejor juego.
Quizá funcione mejor entrenar las mejores jugadas en miles de millones o billones de posiciones y meter eso en alguna IA. Posiciones parecidas a menudo tienen el mismo tipo de mejor jugada.
Encontré un conjunto de experimentos relacionados que incluye
gpt-3.5-turbo-instruct,gpt-3.5-turboygpt-4.La conclusión es igual de sorprendente: gpt-3.5-turbo-instruct juega ajedrez mucho mejor.
https://blog.mathieuacher.com/GPTsChessEloRatingLegalMoves/
OpenAI tiene muchísima experiencia creando IA para jugar. Si recuerdan, durante algunos años esa fue su área principal. Así que parece que hicieron un modelo bien adaptado al ajedrez para ver si entrenar ajedrez influye en la inteligencia general. Tal como aprender ajedrez puede hacer más inteligente a una persona, y aprender matemáticas o programación también podría hacerlo.
Un LLM no razona ni busca; escribe texto basándose en texto previo. Por eso a nuestros ojos puede parecer que juega, pero en realidad es una conjetura inteligente basada en partidas anteriores. Es parecido a Kasparov anotando jugadas sin imaginar la disposición real de las piezas. Un experimento interesante sería ver si el modelo puede jugar cuando solo se le dan las reglas; probablemente no pueda. Ahora está reproduciendo de memoria, no siguiendo objetivos. Todavía no hay nada como atención hacia adelante, y la búsqueda en haz es lo bastante cara como para que sea mejor recurrir directamente a algoritmos clásicos de ajedrez.
OpenAI no ha hecho nada salvo agentes conversacionales.