@PlayChessCoach on Lichess: Watch | Estatísticas | Desafio (1+0 ou 0+1 até 15+10)
O Chesscoach é um motor de xadrez em rede neural capaz de comentários em linguagem natural. Ele joga xadrez com uma classificação de aproximadamente 3450 ELO, o que significa que geralmente deve derrotar até os jogadores humanos mais fortes em 2850 ELO e muitos outros motores, mas geralmente perdem para os mais fortes, como o peixe -estoque 14 em 3550 ELO.
Como em todos os motores, o ChessCoach depende de examinar milhões de posições de xadrez para decidir o melhor movimento para jogar. Ele usa uma rede neural grande e lenta, assim como o Alphazero ou Leela Chess Zero (LC0) para avaliar cada posição, diferentemente dos motores clássicos que buscam velocidade com uma avaliação muito mais simples, ou motores NNue mais recentes, que são um híbrido mais forte de ambos os estilos.
A rede neural no centro do motor é treinada jogando contra si mesma, usando um ciclo de feedback para começar com quase zero conhecimento - apenas as regras do xadrez - e aprender novas maneiras de se derrotar à medida que se fortalece. Avaliações de rede neural mais fortes permitem que ele pesquise melhor e os resultados de pesquisa mais fortes permitam que ela treine sua avaliação da rede neural com mais eficiência.
O ChessCoach também pode alimentar seu conhecimento de xadrez em uma rede neural adicional para comentar sobre movimentos e posições em inglês. Não é muito perspicaz e muitas vezes errado, mas mostra alguma promessa para os dados limitados em que foi capaz de treinar.
Comecei a desenvolver o ChessCoach como um projeto de dois a três meses para ver se gostei de aprender e acabei levando as coisas além do que eu esperava. O plano original tinha três objetivos excessivamente ambiciosos: replicar um pequeno motor do tipo Alphazero, adicionando comentários em linguagem natural ao ciclo de feedback de treinamento e possibilitando algum grau de treinamento em uma estação de trabalho de GPU único.
Depois de pouco mais de um ano de desenvolvimento, não posso reivindicar quase nenhum progresso nos métodos de treinamento. No entanto, estou feliz com o comentário que o Chesscoach produz, todas as coisas consideradas e surpresas com a eventual força do motor.
Tive a sorte de ter tantos recursos públicos disponíveis, incluindo computação em nuvem gratuita e documentos, discussões e dados disponíveis gratuitamente. Também sou muito grato a várias pessoas que ajudaram com esclarecimentos, discussões e depuração importantes.
O mecanismo de xadrez no centro do Chesscoach é muito semelhante ao de Alphazero (Silver et al., 2018) ou LC0 (Linscott & Pascutto, 2018), na estrutura da rede neural, no cronograma de treinamento e na pesquisa de pesquisa, mas com uma abordagem prática e de engenharia, por necessidade, sem a pão e o algoritmo de pesquisa. No entanto, espero que haja algumas novas idéias que possam ser úteis em outros lugares.
A peça de comentário de língua natural é mais parecida com o trabalho de aprender a gerar comentários de movimentação por ação de xadrez de dados de fórum social em larga escala (Jhamtani, Gangal, Hovy, Neubig & Berg-Kirkpatrick, 2018) e comentaristas de xadrez automaticamente, mais com comentários de areio, Yu e Wan e Wan), More More-Wan, 2018) e More Treining, 2018) e o comentarista de hiotricing, o More Treinous, e o More Treinous, e o More Treinous, o More. embora com arquitetura mais simplista.
O Chesscoach foi projetado para ser um pouco mínimo e portátil. Ele é executado no Linux e no Windows e suporta GPU, unidades de processamento de tensores e multi-GPU e tensores (TPUs). O código orientado para o desempenho está em C ++ (linhas de 10,5k) e o código da rede neural está em Python (linhas de 3.7k), baseando-se no tensorflow 2. O código do peixe-estoque é usado para gerenciamento de posição, geração de movimentos e sondagem de tabela de tabela final, mas não para pesquisa ou avaliação. Os dados de treinamento de auto-jogo foram completamente gerados no projeto Chesscoach, após a programação do Alphazero de 44 milhões de jogos e 700.000 lotes de treinamento de 4.096 posições cada.
Algumas idéias além do Alphazero, mas existentes em literatura e projetos como Katago (Wu, 2020) e LC0 foram integrados (muitas vezes eu pensei que estava tentando algo novo, mas acontece que as pessoas inteligentes da LC0 tentaram quase tudo). Isso inclui a investigação de mate-provas, a base de tabela final do jogo, o minimax do jogo final, a média de peso estocástico (SWA), médias móveis ponderadas exponencialmente (EWMA), vários incentivos de exploração, cache de previsão, metas de treinamento auxiliar e destilação de conhecimento.
Eu acredito que algumas idéias são novas. O primeiro é um método de pesquisa que visa evitar armadilhas táticas e minimizar o arrependimento simples por exploração linear e retropropagação seletiva, aplicada via eliminação-sble-puct. O segundo é uma arquitetura neural simples para comentários de linguagem natural sobre posições e movimentos em conjunto com uma aplicação ajustada da amostragem de núcleos (TOP-P) focada na correção com amostragem de cobiça.
O resultado é um conjunto de ferramentas para jogar xadrez, treinar as redes neurais, otimizar parâmetros, resistência ao teste, processos de treinamento, visualizar e depurar dados de treinamento, organizar dados de treinamento, teste de unidade e clusters de coordenadas. Para encerrar o projeto, um bot é configurado em https://lichess.org/@/playchesscoach para jogar contra o Challengers e outros bots e fornecer comentários aos espectadores.
Em uma VM V3-8 de estilo mais recente, VM:
gui antes de pesquisar.Alguns arquivos -chave estão localizados na raiz, incluindo o config.toml, que aciona a maioria das ferramentas e é lido no código C ++ e Python. Meseson.build define a construção do Linux e o CPP/Chesscoach.sln e CPP/**/*. VCXPROJ define a compilação do Windows. Os scripts setup.sh/.cmd e build.sh/.cmd automatizam a configuração e a construção, embora possam ser necessárias etapas adicionais. Dockerfiles na raiz Definir imagens para cada função do trabalhador do cluster e Docker-*. Os scripts SH ajudam a criar e fazer o upload dessas imagens.
No diretório de cluster, os arquivos .sh/.yaml gerenciam clusters de Kubernetes em TPUs de estilo mais antigo, enquanto o py/alpha.py gerencia os clusters de VMs em nuvem mais recentes.
O diretório CPP contém código C ++, principalmente no CPP/Chesscoach. O código ChessCoach C ++ é principalmente orientado para o desempenho. As bibliotecas de terceiros incluem CPP/CRC32C, CPP/HUNSPELL, CPP/NUPMY, CPP/Protobuf-3.13.0, CPP/Stockfish, CPP/TCLAP, CPP/TOML11 e CPP/ZLIB. Os dados de terceiros incluem CPP/dicionários e CPP/StrengthTests. As bibliotecas C ++ de terceiros adicionais são instaladas usando a Ferramenta de Pacote Avançada (APT) e descobertas pelo sistema de construção de meson no Linux e instalado e descoberto usando o NUGET no Windows. A biblioteca CPP/Protobuf é gerada por código usando a ferramenta Protoc e CPP/Protobuf/chesscoach.proto.
O diretório PY contém código Python, acessado primário através do Network.py do C ++, mas também algumas ferramentas de script independentes. O código Python Chesscoach está preocupado principalmente com a rede neural e o armazenamento em nuvem. As bibliotecas Python adicionais de terceiros são instaladas usando o PIP.
O diretório JS contém a GUI de depuração usada em Chesscoachgui e Chesscoachuci, confiando em chessboardjs.
O diretório de ferramentas contém Cutechess-Cli e Bayeselo para executar torneios e calcular as classificações ELO dos participantes, bem como o binário do motor do Stockfish 13 para atuar como oponente.
O diretório de scripts contém vários scripts e conveniências situacionais.
O diretório DOCS contém documentação e ativos de suporte.
Após a instalação, o Chesscoach localiza dados estáticos em/usr/local/share/chesscoach no Linux e ao lado do binário no Windows. Ele localiza dados dinâmicos em $ {xdg_data_home}/chesscoach, ou falhando nisso, em ~/.local/share/chesscoach no linux e em %localAppData %/chesscoach no Windows. Os dados dinâmicos também podem estar localizados no Google Cloud Storage; Por exemplo, gs: // chesscoach-eu/chesscoach.
Se estiver em execução no Google Cloud, ele pode simplificar a configuração da GPU para usar uma imagem de disco de aprendizado profundo pré-criado com CUDA 11.
./setup.sh (pode levar 30 minutos para criar o Protobuf a partir da fonte).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (pode levar 30 minutos para criar o Protobuf a partir da fonte).pip3 install -r requirements-all.txt .sudo ./build.sh release install ../setup.sh (pode levar 30 minutos para criar o Protobuf a partir da fonte).pip3 install tf-models-official==2.5.0 (isso bate no TF-Nightly pré-instalado).pip3 uninstall tensorflow tf-slim tf-nightly .--force-reinstall .sudo ./build.sh release install .conda activate chesscoach , mas tudo bem se isso falhar quando não estiver usando um ambiente virtual.setup.cmd (isso define o chesscoach_pythonhome após a execução do Activate_Virtual_env.cmd).build.cmd .O ChessCoach conta com os dados instalados em $ {xdg_data_home}/chesscoach, ou falhando nisso, em ~/.local/share/chesscoach no linux e em %localAppData %/chesscoach no Windows.
Instale os pesos da rede neural. Isso requer um download de 372 MIB e 406 MIB Disk Space.
scripts/download_install_data.sh .scripts/download_install_data.cmd .Opcionalmente, instale as bases de tabela do jogo final de Syzygy. Os arquivos para 3-4-5 peças tomam aproximadamente 1 Gib e os arquivos para 3-4-5 + 6 peças levam aproximadamente 150 Gib. O processo de instalação é um pouco técnico.
No modo de armazenamento em nuvem, as tabelas Syzygy são replicadas automaticamente para o armazenamento local no lançamento.
O script scripts/ramdisk_syzygy6.sh configura um disco de RAM em máquinas como VMs de nuvem mais recentes para hospedar tabelas 3-4-5 + 6 peças, quando a memória é alta, mas o espaço em disco é baixo. Ao usar um disco, é melhor colocar essas tabelas nos SSDs para manter a velocidade de pesquisa. Os scripts scripts/ramdisk_syzygy6.sh usa o caminho…/chesscoach/syzygy6, confiando em uma mudança de configuração em config.toml, mas .../chesscoach/syzygy poderia ser usado.
export PROJECT_ID=<your Google Cloud project ID> .Se estiver usando alpha.py (esta parte é especialmente confusa):
cluster/cluster-prep-creds.sh para criar uma conta de serviço e um arquivo key.json correspondente.gsutil cp .A seção de treinamento e jogo de auto-reprodução distribuídos na explicação técnica tem mais informações sobre o gerenciamento de grupos de estilo mais antigo e mais recentes.
A maioria dos programas de ChessCoach depende do config.toml construído e instalado. É particularmente importante definir o parâmetro Search_Threads ao executar o ChessCoachuci, via config.toml no horário de construção ou na opção UCI em tempo de execução, para evitar a fome do thread da programação de previsão injusta.
O binário do ChessCoachuci pode ser carregado como um motor UCI em várias GUIs de xadrez.
No entanto, ao usar um ambiente virtual para o Python, pode ser necessário:
O ChessCoachuci oferece comandos personalizados, além dos do protocolo UCI:
comment gera comentários em linguagem natural para a posição atual e o último passo disputado. É melhor fornecer histórico de movimentos completos com uma position startpos moves … comando.gui sinaliza a GUI de depuração para iniciar uma pesquisa (como mostrado na Figura 9 na explicação de alto nível).~ puct [moves …] [csv] Exibe dados de GUI de depuração em forma de texto.~ fen exibe a posição atual na notação foryth - edwards (Fen).Para auto-reprodução e treinamento, consulte o processo de auto-reprodução e treinamento no documento de dados.
Para outros utilitários listados em programas, procure comentários no config.toml para orientação de configuração. Muitos utilitários suportam o argumento --help . O conteúdo dos scripts no diretório scripts pode mostrar exemplos. Ao usar um ambiente virtual para o Python, pode precisar ser ativado antes da execução de utilitários, embora alguns não dependam do Python.
Run build/gcc/debug/ChessCoachTest ou build/gcc/release/ChessCoachTest .
Run activate_virtual_env.cmd e depois cpp/x64/Debug/ChessCoachTest.exe ou cpp/x64/Release/ChessCoachTest.exe .
Você também pode executar/depurar o projeto ChessCoachtest no Visual Studio ou usar a interface do Test Explorer no Visual Studio.
O programa TPU Research Cloud (TRC) do Google tem sido excepcionalmente generoso com os recursos de computação que tornaram esse projeto possível, e agradeço a Jonathan Caton, em particular por fazer as coisas acontecerem.
Aprecio muito a equipe de TPU em nuvem do Google pelo uso do Cloud TPU VMS, e especialmente Michael Banfield, para assistência em engenharia em todo o alfa da nova tecnologia.
Agradeço sinceramente a Karlson Pfannschmidt (Universidade Paderborn), cujas ferramentas de ajuste de xadrez e implementação de Bayes-Skopt, e os conselhos sobre a otimização bayesiana foram inestimáveis no fortalecimento do motor Chesscoach.
Sou muito grato a Matthew Lai (Deepmind) por fornecer uma capacidade independente, esclarecimentos importantes sobre o papel Alphazero.
Agradeço a Pierre de Wulf por fornecer créditos de pesquisa para o ScrapingBee para permitir o treinamento de comentários em linguagem natural em Chesscoach.
Obrigado a Ted Li por idéias e discussões valiosas no início do projeto.
Obrigado a Freya Wilcox pela assistência com a prototipagem do diagrama.
E agradecimentos especiais a Gary Butner e Lynelle Rafton pela edição, revisão e suporte.
O Chesscoach é liberado sob a licença GPLV3 ou posterior.
Chris Butner, [email protected]