@PlayChessCoach en Lichess: reloj | Estadísticas | Desafío (1+0 o 0+1 hasta 15+10)
Chesscoach es un motor de ajedrez de red neuronal capaz de comentarios en el idioma natural. Juega al ajedrez con una calificación de aproximadamente 3450 ELO, lo que significa que generalmente debería vencer incluso a los jugadores humanos más fuertes con 2850 Elo, y muchos otros motores, pero a menudo perderá con los más fuertes, como Stockfish 14 a 3550 Elo.
Al igual que con todos los motores, Chesscoach se basa en examinar millones de posiciones de ajedrez para decidir sobre el mejor movimiento para jugar. Utiliza una red neuronal grande y lenta como Alphazero o Leela Chess Zero (LC0) para evaluar cada posición, a diferencia de los motores clásicos que apuntan a la velocidad con una evaluación mucho más simple, o motores NNUE más recientes, que son un híbrido más fuerte de ambos estilos.
La red neuronal en el núcleo del motor está entrenada jugando contra sí misma, utilizando un ciclo de retroalimentación para comenzar desde casi cero conocimiento, solo las reglas del ajedrez, y aprender nuevas formas de vencerse a medida que se fortalece. Las evaluaciones de redes neuronales más fuertes lo permiten buscar mejor, y los resultados de búsqueda más fuertes lo permiten capacitar a su evaluación de la red neuronal de manera más efectiva.
Chesscoach también puede alimentar su conocimiento de ajedrez en una red neuronal adicional para comentar sobre movimientos y posiciones en inglés. No es muy perspicaz y a menudo equivocado, pero muestra alguna promesa para los datos limitados en los que ha podido entrenar.
Comencé a desarrollar Chesscoach como un proyecto de dos a tres meses para ver si me gustaba el aprendizaje automático y terminé llevando las cosas más lejos de lo que esperaba. El plan original tenía tres objetivos demasiado ambiciosos: replicar un pequeño motor de Alphazero, agregar comentarios en el lenguaje natural al ciclo de retroalimentación de capacitación y hacer posible cierto grado de capacitación en una estación de trabajo de una sola GPU.
Después de poco más de un año de desarrollo, casi no puedo progresar en los métodos de capacitación. Sin embargo, estoy contento con el comentario que produce Chesscoach, todas las cosas consideradas y sorprendidas por la eventual fuerza del motor.
Tuve la suerte de tener tantos recursos públicos disponibles, incluidos los documentos, discusiones y datos gratuitos de la nube y datos disponibles gratuitamente. También estoy muy agradecido con varias personas que han ayudado con importantes aclaraciones, discusiones y depuración.
El motor de ajedrez en el núcleo de Chesscoach es muy similar al de Alphazero (Silver et al., 2018) o LC0 (Linscott y Pascutto, 2018), en la estructura de la red neuronal, el horario de capacitación y el algoritmo de búsqueda, pero con un enfoque práctico, de ingeniería por necesidad, carece de la amplitud y la profundidad del talento de investigación de un equipo más grande. Sin embargo, espero que haya algunas ideas nuevas que puedan ser útiles en otros lugares.
La pieza de comentarios en el lenguaje natural se parece más al trabajo de aprender a generar comentarios de movimiento por movimiento para juegos de ajedrez a partir de datos del foro social a gran escala (Jhamtani, Gangal, Hovy, Neubig y Berg-Kirkpatrick, 2018 y el comentarista de ajedrez automatizado con un motor de ajedrez de Neural (Zang (Zang, Yu y Wan, 2019), pero se dedican a un motor de ajedrez más pesado, con un motor de ajedrez más fuerte, y más bien entrenado, y más con un motor de titores de Neural (Zang, y Wan, 2019), pero se dedican a un motor de ajedrez más pesado, con un motor de tensiones. aunque con una arquitectura más simplista.
Chesscoach está diseñado para ser algo mínimo y portátil. Se ejecuta en Linux y Windows y admite unidades de procesamiento de una sola GPU, multi-GPU y tensor (TPU). El código orientado al rendimiento se encuentra en C ++ (líneas 10.5k) y el código de red neuronal se encuentra en Python (líneas 3.7k), confiando en TensorFlow 2. El código de stockfish se usa para la gestión de posición, la generación de movimientos y el sondeo de base de mesa final, pero no para la búsqueda o evaluación. Los datos de entrenamiento de auto juego se han generado por completo en el proyecto Chesscoach, luego del calendario de Alphazero de 44 millones de juegos y 700,000 lotes de entrenamiento de 4,096 posiciones cada uno.
Algunas ideas más allá de Alphazero pero existentes en literatura y proyectos como Katago (Wu, 2020) y LC0 se han integrado (a menudo pensé que estaba intentando algo nuevo, pero resulta que las personas inteligentes en LC0 han intentado casi todo). Estos incluyen la medición de pareja, el sondeo de base de mesa final, el final del juego Minimax, el promedio de peso estocástico (SWA), promedios móviles ponderados exponencialmente (EWMA), varios incentivos de exploración, almacenamiento en caché de predicción, objetivos de entrenamiento auxiliar y destilación de conocimiento.
Creo que algunas ideas son nuevas. El primero es un método de búsqueda que tiene como objetivo evitar las trampas tácticas y minimizar el arrepentimiento simple a través de la exploración lineal y la retropropagación selectiva, aplicada a través de la eliminación-sble-puct. El segundo es una arquitectura neuronal simple para comentarios en el lenguaje natural sobre posiciones y movimientos junto con una aplicación ajustada de muestreo de núcleo (TOP-P) centrado en la corrección-con variedad: muestreo de codificación.
El resultado es un conjunto de herramientas para jugar ajedrez, capacitar a las redes neuronales, optimizar los parámetros, la fuerza de prueba, los datos de capacitación de procesos, ver y depurar datos de capacitación, organizar datos de capacitación, prueba unitaria y grupos de coordenadas. Para concluir el proyecto, se establece un bot en https://lichess.org/@/playchesscoach para jugar contra retadores y otros bots, y dar comentarios a los espectadores.
En una V3-8 Cloud VM de estilo más nuevo: VM:
gui antes de buscar.Algunos archivos clave se encuentran en la raíz, incluida config.toml que impulsa la mayoría de las herramientas y se lee desde el código C ++ y Python. Meson.Build define la compilación de Linux, y cpp/chesscoach.sln y cpp/**/*. VCXProj Define la compilación de Windows. El scripts setup.sh/.cmd y build.sh/.cmd automatizan la configuración y la construcción, aunque se pueden requerir pasos adicionales. Dockerfiles en la raíz Definir imágenes para cada rol de trabajador del clúster, y Docker-*. Los scripts SH ayudan a construir y cargar estas imágenes.
En el directorio de clúster, los archivos .sh/.yaml administran clústeres de Kubernetes en TPU de estilo anterior, mientras que Py/Alpha.py gestiona grupos en VMS de TPU en la nube de estilo nuevo.
El directorio CPP contiene código C ++, principalmente en CPP/Chesscoach. El código Chesscoach C ++ está orientado principalmente al rendimiento. Las bibliotecas de terceros incluyen CPP/CRC32C, CPP/Hunspell, CPP/Numpy, CPP/ProtoBuf-3.13.0, CPP/Stockfish, CPP/TCLAP, CPP/TOML11 y CPP/ZLIB. Los datos de terceros incluyen CPP/diccionarios y CPP/TRIGITYTESTS. Las bibliotecas de C ++ de terceros adicionales se instalan utilizando la herramienta de paquete avanzado (APT) y descubiertas por el sistema de compilación Meson en Linux, y se instalan y descubren usando NUGET en Windows. La biblioteca CPP/ProtoBuf se genera con código utilizando la herramienta Protoc y CPP/ProtoBuf/Chesscoach.proto.
El directorio PY contiene el código Python, primario al que se accede a través de Network.py desde C ++, pero también algunas herramientas de script independientes. El código de Chesscoach Python se ocupa principalmente de la red neuronal y el almacenamiento en la nube. Las bibliotecas de Python de terceros adicionales se instalan utilizando PIP.
El directorio JS contiene la GUI de depuración utilizada en Chesscoachgui y Chesscoachuci, confiando en JessboardJs.
El directorio de herramientas contiene Cutechess-Cli y Bayeselo para ejecutar torneos y calcular las calificaciones ELO de los participantes, así como el binario de motor Stockfish 13 para actuar como oponente.
El directorio de scripts contiene varios guiones y comodidades situacionales.
El directorio DOCS contiene documentación y activos de apoyo.
Después de la instalación, Chesscoach localiza datos estáticos AT/USR/Local/Share/ChessCoach en Linux y junto con el binario en Windows. Localiza datos dinámicos en $ {xdg_data_home}/Chesscoach, o no lo falló, en ~/.local/share/Chesscoach en Linux, y en %AppData %/Chesscoach en Windows. Los datos dinámicos también se pueden ubicar en Google Cloud Storage; Por ejemplo, GS: // Chesscoach-eu/Chesscoach.
Si se ejecuta en Google Cloud, puede simplificar la configuración de la GPU para usar una imagen de disco de aprendizaje profundo previamente construido con CUDA 11.
./setup.sh (puede tardar 30 minutos en construir ProtoBuf desde la fuente).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (puede tardar 30 minutos en construir ProtoBuf desde la fuente).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (puede tardar 30 minutos en construir ProtoBuf desde la fuente).pip3 install tf-models-official==2.5.0 (esto clobbera el TF-Nightly preinstalado).pip3 uninstall tensorflow tf-slim tf-nightly .--force-reinstall .sudo ./build.sh release install .conda activate chesscoach , pero está bien si esto falla cuando no usa un entorno virtual.setup.cmd (esto establece chesscoach_pythonhome después de ejecutar activate_virtual_env.cmd).build.cmd .Chesscoach se basa en los datos instalados en $ {xdg_data_home}/Chesscoach, o no lo fallan, en ~/.local/share/Chesscoach en Linux, y en %AppData %/Chesscoach en ventanas.
Instale pesos de red neuronal. Esto requiere una descarga de 372 MIB y un espacio de disco MIB 406.
scripts/download_install_data.sh .scripts/download_install_data.cmd .Opcionalmente, instale Syzygy Endgame TableBases. Los archivos para 3-4-5 piezas toman aproximadamente 1 GIB, y los archivos para 3-4-5 + 6 piezas toman aproximadamente 150 GIB. El proceso de instalación es algo técnico.
En el modo de almacenamiento en la nube, las tablas Syzygy se replican automáticamente al almacenamiento local en el lanzamiento.
El script scripts/ramdisk_syzygy6.sh establece un disco RAM en máquinas como VMS de nubes de estilo más reciente para alojar tablas de 3-4-5 + 6 piezas, cuando la memoria es alta pero el espacio en el disco es bajo. Al usar un disco, es mejor colocar estas tablas en SSD para mantener la velocidad de búsqueda. El script scripts/ramdisk_syzygy6.sh usa la ruta .../Chesscoach/Syzygy6, confiando en un cambio de configuración en config.toml, pero .../Chesscoach/Syzygy podría usarse en su lugar.
export PROJECT_ID=<your Google Cloud project ID> .Si usa alfa.py (esta parte es especialmente desordenada):
cluster/cluster-prep-creds.sh para crear una cuenta de servicio y un archivo Key.json correspondiente.gsutil cp .La sección distribuida de capacitación y autocompasión en la explicación técnica tiene más información sobre la gestión de grupos de estilo más antiguo y de estilo más recientes.
La mayoría de los programas de ChessCoach dependen de la configuración e instalada config.toml. Es particularmente importante establecer el parámetro Search_Threads al ejecutar ChessCoachuci, ya sea a través de config.toml en el tiempo de compilación o la opción UCI en tiempo de ejecución, para evitar la inanición de subprocesos de la programación de predicción injusta.
El binario Chesscoachuci se puede cargar como motor UCI en varias GUI de ajedrez.
Sin embargo, al usar un entorno virtual para Python, puede ser necesario:
Chesscoachuci ofrece comandos personalizados además de los del protocolo UCI:
comment genera comentarios en idioma natural para la posición actual y el último movimiento jugado. Es mejor proporcionar un historial de movimiento completo con un comando position startpos moves …gui indica que la GUI de depuración se inicia al comenzar una búsqueda (como se muestra en la Figura 9 en la explicación de alto nivel).~ puct [moves …] [csv] Muestra datos de GUI de depuración en forma de texto.~ fen muestra la posición actual en Forsyth -Edwards Notation (Fen).Para la autocompasión y la capacitación, consulte el proceso de auto-juego y capacitación en el documento de datos.
Para otras utilidades enumeradas en los programas, busque comentarios en config.toml para la guía de configuración. Muchas utilidades apoyan el argumento --help . El contenido de los scripts en el directorio de scripts puede mostrar ejemplos. Al usar un entorno virtual para Python, es posible que deba activarse antes de ejecutar utilidades, aunque algunos no dependen de Python.
Ejecute build/gcc/debug/ChessCoachTest o build/gcc/release/ChessCoachTest .
Ejecute activate_virtual_env.cmd y luego cpp/x64/Debug/ChessCoachTest.exe o cpp/x64/Release/ChessCoachTest.exe .
También puede ejecutar/depurar el proyecto ChessCoachTest dentro de Visual Studio, o usar la interfaz de Explorer de prueba dentro de Visual Studio.
El programa TPU Research Cloud (TRC) de Google ha sido excepcionalmente generoso con los recursos informáticos que hicieron posible este proyecto, y agradezco a Jonathan Caton en particular por hacer que las cosas sucedan.
Estoy muy agradecido por el equipo de TPU en la nube de Google por el uso de máquinas virtuales de TPU en la nube, y especialmente Michael Banfield por la asistencia de ingeniería en todo el alfa de la nueva tecnología.
Agradezco sinceramente a Karlson Pfannschmidt (Universidad de Paderborn), cuyas herramientas de ajuste de ajedrez e implementación de Bayes-Skopt, y los consejos sobre la optimización bayesiana fueron invaluables para fortalecer el motor de Chesscoach.
Estoy muy agradecido con Matthew Lai (DeepMind) por proporcionar en una capacidad independiente, aclaraciones importantes en el documento de Alphazero.
Extiendo gracias a Pierre de Wulf por proporcionar créditos de investigación para SCRAPINGBEE para habilitar la capacitación de comentarios en el lenguaje natural en Chesscoach.
Gracias a Ted Li por sus valiosas ideas y discusiones al comienzo del proyecto.
Gracias a Freya Wilcox por su ayuda con la creación de prototipos del diagrama.
Y un agradecimiento especial a Gary Butner y Lynelle Rafton por editar, revisión y apoyo.
Chesscoach se libera bajo la licencia GPLV3 o posterior.
Chris Butner, [email protected]