2 puntos por GN⁺ 2024-10-19 | 1 comentarios | Compartir por WhatsApp
  • searchless_chess de 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_chess es 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.csv para 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 neuronales
    • src/transformer.py: Transformer decoder-only
    • src/train.py: script de ejemplo para entrenamiento y evaluación
    • src/puzzles.py: script de evaluación de problemas
    • src/tournament.py: script de torneo Elo
    • src/searchless_chess.ipynb: notebook para analizar el comportamiento del modelo
    • src/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
  • También se requiere instalar motores y herramientas externas

Evaluación y uso

  • El entrenamiento local se ejecuta desde src con python train.py
    • Los checkpoints se guardan en /checkpoints/local
  • La evaluación de problemas se ejecuta con python puzzles.py --num_puzzles 10 --agent=local
  • Los agentes compatibles en puzzles.py son 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
  • El cálculo de Elo se obtiene generando partidas con python tournament.py --num_games=200 y luego leyendo data/tournament.pgn con 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

 
GN⁺ 2024-10-19
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í

    • Maia lo hace bastante bien. Se puede jugar contra él en Lichess
      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
    • Una vez hice algo parecido: chessmate.ai. Funciona bien si el rating no es demasiado alto
      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
    • Ganar en ajedrez al final se trata justamente de eso: minimizar los errores
    • Hace mucho usaba el motor Fritz de ChessBase, que tenía una función de sparring. Si jugabas de forma sólida, en medio de la partida te daba oportunidades tipo problema táctico, y se podían activar o desactivar las alertas
      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
    • Por eso no me gusta mucho ganar en juegos multijugador. Normalmente, cuando gano, se siente como si el rival hubiera jugado ridículamente mal varias veces, o como si el rival hubiera jugado bien pero yo hubiera tenido demasiada suerte algunas veces
      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...

    • Creo que hay que mirar con bastante cautela los resultados contra humanos. Son partidas blitz, y el Elo de este motor era mucho más alto contra humanos que contra otros bots
      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

    • Desde que Stockfish agregó NNUE en 2020, LC0 dejó de ser el mejor motor de ajedrez con redes neuronales
  • 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

    • Esto es destilación de conocimiento. Después se puede usar un modelo más pequeño y eficiente en lugar del modelo grande
    • Más bien muestra los límites de las redes neuronales. El cerebro humano puede aprender con muchos menos ejemplos
    • La búsqueda se hizo una sola vez. Si esta eficiencia se puede aplicar a otros conocimientos, entonces ahí hay algo
  • 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

    • También tiene videos muy entretenidos en YouTube. Configura el contempt muy alto para mostrar qué descubrimientos extraños de apertura hace Leela al intentar evitar al máximo las tablas, y los comenta con análisis de nivel 2700+
    • Con lczero basta con configurar la profundidad máxima, por ejemplo, en 1 ply
  • 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

    • No veo cómo podría ser posible codificar el árbol de búsqueda de esta manera
  • 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

    • Sin embargo, el Elo blitz de Lichess contra bots es aproximadamente 700 puntos más bajo que contra humanos
  • 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

    • O también estaría bien un modelo que mida el rendimiento por eficiencia de aprendizaje. Es decir, ver cuántas partidas hay que jugar para llegar a un nivel X
      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
    • También existe el extremo opuesto del espectro: cuando la memoria, el tamaño del programa y el tiempo de cómputo están extremadamente limitados: https://rlc-chess.com/
      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