Ajedrez de nivel gran maestro sin búsqueda
(github.com/google-deepmind)searchless_chessde Google DeepMind es una implementación del paper de NeurIPS 2024 Amortized Planning with Large-Scale Transformers, y evalúa hasta qué punto los Transformer a gran escala pueden resolver problemas de planificación sin búsqueda explícita usando ajedrez- El dataset principal, ChessBench, está compuesto por 10 millones de partidas de ajedrez con jugadas legales y anotaciones de valor proporcionadas por Stockfish 16, para un total de 15 mil millones de puntos de datos
- Se entrenan Transformers de hasta 270 millones de parámetros mediante aprendizaje supervisado, comparando el impacto de cambiar el tamaño del dataset, el tamaño del modelo, el tipo de arquitectura y el objetivo de predicción
- El modelo más grande predice action-value con bastante precisión en tableros nuevos, resuelve problemas de ajedrez difíciles sin búsqueda explícita y alcanza un Elo blitz de 2895 en Lichess contra oponentes humanos
- Aunque el algoritmo basado en búsqueda de Stockfish puede destilarse bastante bien en un Transformer a gran escala, todavía no se ha logrado una destilación completa, por lo que ChessBench sigue siendo un benchmark para investigaciones posteriores
Objetivo del proyecto y contexto del paper
searchless_chesses la implementación de Amortized Planning with Large-Scale Transformers: A Case Study on Chess- El ajedrez se usa como un problema de planificación representativo en IA, y este proyecto evalúa el desempeño de Transformers a gran escala en tareas donde memorizar no sirve de mucho
- La investigación comprueba en ajedrez si el comportamiento de motores de ajedrez basados en búsqueda puede destilarse en un Transformer mediante aprendizaje supervisado
Dataset ChessBench
- ChessBench incluye jugadas legales y anotaciones de valor proporcionadas por Stockfish 16
- Número de partidas de ajedrez: 10 millones
- Total de puntos de datos: 15 mil millones
- Stockfish 16 se usa como un motor de ajedrez de nivel de punta
- El dataset se divide según el objetivo de predicción
-
Action-Value
-
Behavioral Cloning
-
State-Value
puzzles.csvpara evaluación de problemas- Los ejemplos de tamaño de descarga son los siguientes
- Train Action-Value: primer shard de 1.2GB, total de 1.1TB, 2148 shards en 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
-
Modelos y configuración experimental
- Los Transformers se entrenan con hasta 270M parámetros
- El entrenamiento se realiza con aprendizaje supervisado sobre ChessBench
- Los experimentos comparan el efecto de los siguientes factores
- tamaño del dataset
- tamaño del modelo
- tipo de arquitectura
- objetivo de predicción: state-values, action-values, behavioral cloning
- El modelo más grande predice action-values con bastante precisión en tableros nuevos, mostrando generalización más allá de la simple memorización
Desempeño sin búsqueda y puntos de comparación
- La política final de ajedrez resuelve problemas difíciles sin búsqueda explícita
- Alcanza Elo 2895 en blitz de Lichess contra oponentes humanos, mostrando un nivel de gran maestro
- Entre los puntos de comparación están Leela Chess Zero y AlphaZero
- Ambos sistemas se comparan como modelos entrenados con self-play
- Se comparan tanto los casos con búsqueda como sin búsqueda
- El algoritmo basado en búsqueda de Stockfish puede destilarse y aproximarse muy bien en un Transformer a gran escala, pero la destilación completa todavía no es posible
Estructura del repositorio y flujo de ejecución
- Los directorios y archivos principales cumplen las siguientes funciones
src/engines: Stockfish, Leela Chess Zero, interfaces de motores neuronalessrc/transformer.py: Transformer decoder-onlysrc/train.py: script de ejemplo para entrenamiento y evaluaciónsrc/puzzles.py: script de evaluación de problemassrc/tournament.py: script de torneo Elosrc/searchless_chess.ipynb: notebook para analizar el comportamiento del modelosrc/tokenizer.py: tokenización del tablero de ajedrez
- Se ofrecen checkpoints preentrenados para los modelos
9M,136M,270M - En el notebook de análisis del comportamiento del modelo se pueden realizar análisis como calcular la tasa de victorias de todas las jugadas legales
Instalación y dependencias
- El entorno de ejecución requiere Python 3.10
- Las dependencias necesarias se instalan con
pip install -r requirements.txt - Si hay GPU, se recomienda instalar JAX con soporte CUDA para entrenar más rápido
- El ejemplo usa el comando de instalación de
jax[cuda12_pip]para CUDA 12 - La versión de JAX debe coincidir con la instalación de CUDA en uso
- El ejemplo usa el comando de instalación de
- También se requiere instalar motores y herramientas externas
Evaluación y uso
- El entrenamiento local se ejecuta desde
srcconpython train.py- Los checkpoints se guardan en
/checkpoints/local
- Los checkpoints se guardan en
- La evaluación de problemas se ejecuta con
python puzzles.py --num_puzzles 10 --agent=local - Los agentes compatibles en
puzzles.pyson los siguientes- modelo entrenado localmente:
local - modelos preentrenados:
9M,136M,270M - Stockfish:
stockfish,stockfish_all_moves - Lc0:
leela_chess_zero_depth_1,leela_chess_zero_policy_net,leela_chess_zero_400_sims
- modelo entrenado localmente:
- El cálculo de Elo se obtiene generando partidas con
python tournament.py --num_games=200y luego leyendodata/tournament.pgncon BayesElo
Licencia y limitaciones
- El software se distribuye bajo la Apache License 2.0
- Los pesos del modelo siguen la licencia Creative Commons Attribution 4.0
- Parte del dataset sigue la licencia Creative Commons CC0 public domain de lichess.org, y el resto sigue la licencia CC-BY
- El material distribuido se proporciona bajo criterio
"AS IS", sin garantías explícitas ni implícitas - Este proyecto no es un producto oficial de Google
1 comentarios
Opiniones de Hacker News
Es un poco off-topic, pero me da curiosidad saber hasta dónde ha llegado hoy el ajedrez por computadora que no está a nivel GM
A veces quiero jugar contra un rival similar a mi nivel, o contra alguien con unos 100 puntos más de rating que yo para entrenar
La mayoría de los motores pueden debilitarse reduciendo la profundidad de búsqueda, pero por lo general eso no funciona muy bien. Si se reduce lo suficiente, uno termina ganando más o menos la mitad, pero en la mayoría de las partidas queda la sensación de que me están aplastando hasta que el motor comete uno o dos errores enormes y gano
Lo que quiero es un rival de computadora que juegue al nivel que yo elija, pero que se sienta como un jugador humano típico de ese rango de rating. Me pregunto si existe un motor así
Hubo varios momentos en los que realmente se sintió “humano”, como caer en trampas que un algoritmo de búsqueda tradicional evitaría fácilmente, pero en las que un humano podría caer
No es ajustable, pero hay algunas versiones con ratings distintos. Eso sí, el rango no es muy amplio
https://www.maiachess.com/
https://lichess.org/@/maia1
A medida que sube el rating del jugador, se vuelve más difícil predecir la siguiente jugada, porque ya no basta con modelar la elección intuitiva de movimientos, sino también el propio proceso de búsqueda
También es posible hacerlo más personalizado entrenándolo solo con partidas de un jugador específico
Usa un enfoque similar a Maia, pero con otra red neuronal, así que tenía un desempeño un poco mejor en coincidencia de jugadas; además le agregué un algoritmo de maximización del valor esperado para que el bot explotara mis errores
Si no jugabas con suficiente solidez, simplemente perdías
Por lo que veo, esa función parece haber desaparecido. Daba la impresión de cometer errores humanos bajo presión, y fue la única computadora que realmente se sintió como un rival, a diferencia de jugar como una máquina y luego hacer una jugada tonta al azar
Es muy raro sentir que el rival también jugó bien, pero que yo jugué un poco mejor en general y gané de forma legítima
Casi siempre parece menos que yo gané y más que el otro perdió. Esto no es un problema exclusivo de la inteligencia artificial
Si alguien pudiera crear una IA que pierda de forma satisfactoria en juegos simétricos y que también haga que aprender de la derrota sea satisfactorio, sería un negocio de mil millones de dólares. Creo que sería difícil sin investigación seria en psicología
Di una charla sobre este tema y también puse el contenido por escrito[1]. Este artículo es un buen ejemplo de destilación de conocimiento
Más que un artículo sobre ajedrez en sí, se parece más a un artículo que muestra que, con entradas estandarizadas como las del ajedrez, una función de búsqueda no lineal compleja ajustada por expertos puede destilarse en un modelo Transformer casi lineal
[1]: https://hlfshell.ai/posts/deepmind-grandmaster-chess-without...
Así que es muy posible que el tiempo haya sido un factor. Los humanos tienen más probabilidades de perder por bandera por falta de tiempo, o de cometer errores cuando les queda poco tiempo
Sigue siendo genial que haya aprendido una función de evaluación muy buena incluso sin búsqueda. Pero me habría gustado que excluyeran las partidas en las que se activó el fallback a Stockfish. Para un humano, un mate en 2 y un mate en 10 también pueden ser la diferencia entre ganar y empatar/perder desde el punto de vista de perder por tiempo
También me habría gustado ver un enfrentamiento directo contra Stockfish con profundidad de búsqueda limitada. Eso habría permitido estimar, a grandes rasgos, qué tanto del árbol de búsqueda destiló esta función de evaluación
Para quien quiera iniciarse en redes neuronales para ajedrez, recomiendo mucho este repositorio: https://github.com/sgrvinod/chess-transformers
Tiene código PyTorch fácil de leer, sigue un estilo de implementación típico, y su arquitectura también se parece a la de las redes neuronales de ajedrez que hoy tienen buen rendimiento
https://lczero.org/blog/2024/02/how-well-do-lc0-networks-com...
Es un texto de los autores de los mejores motores de ajedrez con redes neuronales sobre este artículo de DeepMind
El enorme dataset sintético usado para el entrenamiento, al final, fue creado mediante muchas búsquedas tradicionales. Así que tiene un lado un poco gracioso, aunque sigue siendo genial
Recuerdo que Matthew Sadler, GM y autor de ajedrez, configuraba Leela Zero para que jugara prácticamente solo por intuición en partidas de entrenamiento, con muy poca búsqueda o directamente sin búsqueda
Por lo general él ganaba, pero no siempre. Creo que estaba en The Silicon Road to Chess Improvement
Si generáramos datos de entrenamiento ejecutando Stockfish para cada posición de tablero en todas las partidas, ¿no estaríamos, al final, codificando el árbol de búsqueda en un modelo Transformer?
Entonces, a medida que aumente la cantidad de parámetros del modelo, podría contener más del árbol de búsqueda y mejorar el rendimiento, pero no parece muy interesante
Este repositorio ofrece la implementación de nuestro paper Grandmaster-Level Chess Without Search: https://arxiv.org/abs/2402.04494
Los avances recientes en machine learning han venido principalmente de la escala: arquitecturas grandes basadas en atención y datasets de una escala sin precedentes. Este paper investiga el impacto del aprendizaje a gran escala en ajedrez
A diferencia de los motores de ajedrez tradicionales, que dependen de heurísticas complejas, búsqueda explícita o una combinación de ambas, entrenamos de forma supervisada un modelo Transformer de 270 millones de parámetros con un dataset de 10 millones de partidas de ajedrez
Cada tablero del dataset fue anotado con valores de acción proporcionados por el potente motor Stockfish 16, lo que dio alrededor de 15 mil millones de puntos de datos
El modelo más grande alcanzó un Elo blitz de Lichess de 2895 contra humanos y resolvió problemas de ajedrez difíciles sin ajustes específicos del dominio ni algoritmos de búsqueda explícita
Además, supera a las redes de política y valor de AlphaZero sin MCTS y a GPT-3.5-turbo-instruct. Al investigar sistemáticamente el tamaño del modelo y del dataset, se observó que un rendimiento fuerte en ajedrez solo aparece con suficiente escala. También realizamos extensos experimentos de ablación sobre decisiones de diseño e hiperparámetros
Me gustaría que existiera un motor que pensara más como un humano. Como este enfoque usa partidas anotadas por Stockfish, básicamente parece que terminará pensando como una computadora
Si pensara como un humano, sería muy útil en los análisis de partidas para señalar, en cada posición y de acuerdo con mi Elo, en qué debería fijarme
La razón por la que Magnus Carlsen es extraordinario es que, comparado con una computadora, llegó a su nivel actual de ajedrez con enormes restricciones de tiempo y cómputo. Su eficiencia de aprendizaje es excepcional frente a cualquier motor de ajedrez
Se siente como un programa de la demoscene. De hecho, también existe un programa de ajedrez de 1 KB que realmente funciona
Resolver el ajedrez por completo produciría un árbol demasiado grande para calcularlo hoy. Recuerdo que es del orden de 10^80, aunque podría estar equivocado
Si se anotara ese árbol con victoria/derrota/tablas, sería posible tener un jugador óptimo sin búsqueda
Los dos enfoques obvios de compresión y optimización son aproximar el árbol o aproximar las anotaciones. Qué tan bien funcionen estos dos métodos depende en gran medida de la estructura del árbol
Este resultado parece mostrar, más que el poder absoluto del enfoque de aprendizaje en sí, qué tan bien se adapta el árbol de juego del ajedrez a estos dos enfoques. La conclusión que saco es que una aproximación razonable de ese árbol es posible con datos del orden de 270 millones de palabras
El ajedrez está resuelto con una base de datos de 18.4 TB cuando quedan 7 piezas en el tablero, y se explica aquí: https://lichess.org/@/lichess/blog/7-piece-syzygy-tablebases...