Xadrez em nível de grande mestre sem busca
(github.com/google-deepmind)- O
searchless_chess, do Google DeepMind, é uma implementação do artigo da NeurIPS 2024 Amortized Planning with Large-Scale Transformers e usa xadrez para avaliar até que ponto Transformers de grande escala conseguem realizar problemas de planejamento sem busca explícita - O dataset principal, ChessBench, é composto por 10 milhões de partidas de xadrez com lances legais e anotações de valor fornecidos pelo Stockfish 16, totalizando 15 bilhões de pontos de dados
- Transformers de até 270 milhões de parâmetros são treinados por aprendizado supervisionado, comparando o impacto de variar tamanho do dataset, tamanho do modelo, tipo de arquitetura e objetivo de previsão
- O maior modelo prevê action-values com razoável precisão em novas posições, resolve problemas difíceis de xadrez sem busca explícita e alcança Elo 2895 em blitz contra humanos no Lichess
- É possível destilar muito bem o algoritmo baseado em busca do Stockfish para um Transformer de grande escala, mas a destilação completa ainda não foi alcançada, mantendo o ChessBench como benchmark para pesquisas futuras
Objetivo do projeto e contexto do artigo
searchless_chessé a implementação de Amortized Planning with Large-Scale Transformers: A Case Study on Chess- O xadrez é usado como um problema de planejamento representativo em IA, e este projeto avalia o desempenho de Transformers em uma tarefa na qual memorização não faz sentido mesmo em grande escala
- A pesquisa verifica no xadrez se o comportamento de motores de xadrez baseados em busca pode ser destilado para Transformers por meio de aprendizado supervisionado
Dataset ChessBench
- ChessBench inclui lances legais e anotações de valor fornecidos pelo Stockfish 16
- Número de partidas de xadrez: 10 milhões
- Total de pontos de dados: 15 bilhões
- O Stockfish 16 é usado como um motor de xadrez de nível moderno
- O dataset é dividido por objetivo de previsão
-
Action-Value
-
Behavioral Cloning
-
State-Value
puzzles.csvpara avaliação de problemas- Exemplos de tamanho de download são os seguintes
- Train Action-Value: primeiro shard 1,2 GB, total 1,1 TB, 2148 shards no total
- Train Behavioral Cloning: 34 GB
- Train State-Value: 36 GB
- Test Action-Value: 141 MB
- Test Behavioral Cloning: 4,1 MB
- Test State-Value: 4,4 MB
- Puzzles: 4,5 MB
-
Modelos e configuração dos experimentos
- O Transformer é treinado com até 270M parâmetros
- O treinamento é feito por aprendizado supervisionado baseado no ChessBench
- Os experimentos comparam o impacto dos seguintes fatores
- Tamanho do dataset
- Tamanho do modelo
- Tipo de arquitetura
- Objetivos de previsão: state-values, action-values, behavioral cloning
- O maior modelo prevê action-values com razoável precisão em novas posições, mostrando generalização para além da simples memorização
Desempenho sem busca e bases de comparação
- A política final de xadrez resolve problemas difíceis de xadrez sem busca explícita
- Em blitz no Lichess contra humanos, alcança Elo 2895, mostrando desempenho em nível de grande mestre
- As comparações incluem Leela Chess Zero e AlphaZero
- Os dois sistemas são comparados como modelos treinados por self-play
- São comparados tanto os casos com busca quanto sem busca
- O algoritmo baseado em busca do Stockfish pode ser aproximado e destilado muito bem em um Transformer de grande escala, mas a destilação completa ainda não é possível
Estrutura do repositório e fluxo de execução
- Os principais diretórios e arquivos têm as seguintes funções
src/engines: interfaces para Stockfish, Leela Chess Zero e motores neuraissrc/transformer.py: Transformer decoder-onlysrc/train.py: script de exemplo para treinamento e avaliaçãosrc/puzzles.py: script de avaliação de problemassrc/tournament.py: script de torneio de Elosrc/searchless_chess.ipynb: notebook de análise do comportamento do modelosrc/tokenizer.py: tokenização do tabuleiro de xadrez
- Checkpoints pré-treinados são fornecidos para os modelos
9M,136Me270M - No notebook de análise do comportamento do modelo, é possível realizar análises como o cálculo da taxa de vitória de todos os lances legais
Instalação e dependências
- O ambiente de execução exige Python 3.10
- Instale as dependências necessárias com
pip install -r requirements.txt - Se houver GPU, recomenda-se instalar o JAX com suporte a CUDA para treinamento mais rápido
- O exemplo usa o comando de instalação
jax[cuda12_pip]para CUDA 12 - A versão do JAX deve ser compatível com a instalação de CUDA em uso
- O exemplo usa o comando de instalação
- É necessário instalar motores e ferramentas externos
Avaliação e uso
- O treinamento local é executado em
srccompython train.py- Os checkpoints são salvos em
/checkpoints/local
- Os checkpoints são salvos em
- A avaliação de problemas é executada no formato
python puzzles.py --num_puzzles 10 --agent=local - Os agentes compatíveis com
puzzles.pysão os seguintes- Modelo treinado localmente:
local - Modelos pré-treinados:
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 treinado localmente:
- O cálculo de Elo é feito gerando partidas com
python tournament.py --num_games=200e depois lendodata/tournament.pgncom BayesElo
Licença e limitações
- O software é distribuído sob a Apache License 2.0
- Os pesos do modelo seguem a licença Creative Commons Attribution 4.0
- Parte do dataset segue a licença Creative Commons CC0 public domain do lichess.org, e o restante segue a licença CC-BY
- Os artefatos são fornecidos na base
"AS IS", sem garantias explícitas ou implícitas - Este projeto não é um produto oficial do Google
1 comentários
Comentários do Hacker News
Fugindo do assunto, fiquei curioso sobre até onde chegou o xadrez de computador em nível abaixo de GM hoje em dia
Às vezes eu queria jogar contra um oponente do meu nível, ou contra alguém uns 100 pontos de rating acima de mim para treinar
A maioria dos engines pode ser enfraquecida reduzindo a profundidade de busca, mas isso normalmente não funciona bem. Se você reduzir o suficiente, até dá para ganhar mais ou menos metade das partidas, mas na maior parte do tempo parece que eu fico sendo pressionado o jogo inteiro e só ganho porque o engine comete um ou dois erros enormes
O que eu queria é um adversário de computador que jogue no nível que eu escolher, mas com a sensação de um jogador humano típico daquela faixa de rating. Fico me perguntando se existe algum engine assim
Houve alguns momentos em que ela realmente pareceu “humana”, como cair em armadilhas que um algoritmo de busca tradicional evitaria facilmente, mas que uma pessoa provavelmente cairia
Não é ajustável, mas existem algumas versões com ratings diferentes. Só que a faixa não é muito ampla
https://www.maiachess.com/
https://lichess.org/@/maia1
À medida que o rating do jogador sobe, fica mais difícil prever o próximo lance porque é preciso modelar não só a escolha intuitiva de jogadas, mas o próprio processo de busca
Também dá para treinar só com partidas de um jogador específico, deixando mais personalizado
Usa uma abordagem parecida com a do Maia, mas com uma rede neural diferente, então o desempenho de correspondência de lances era um pouco melhor; além disso, adicionei um algoritmo de maximização de valor esperado para fazer o bot explorar meus erros
Se você não jogasse com estabilidade suficiente, simplesmente perdia
Pelo que vejo, esse recurso parece ter sumido. Quando estava sob pressão, ele parecia cometer erros humanos; foi o único computador que me pareceu um oponente de verdade, diferente de jogar como máquina e depois fazer um lance idiota aleatório
É muito raro parecer que o oponente jogou bem, mas eu joguei um pouco melhor no geral e venci de forma justa
Quase sempre parece mais que o outro perdeu do que que eu ganhei. Isso não é um problema só de IA
Se alguém conseguir criar uma IA para jogos simétricos que saiba perder de forma satisfatória e que faça até a derrota parecer um aprendizado satisfatório, isso vira um negócio de um bilhão de dólares. Acho difícil sem pesquisa séria em psicologia
Fiz uma apresentação sobre esse tema e também transformei o conteúdo em texto[1]. Este artigo é um bom exemplo de destilação de conhecimento
Não é tanto um artigo sobre xadrez em si, mas quase um artigo mostrando que uma função de busca complexa e não linear, ajustada por especialistas, pode ser destilada em um modelo Transformer quase linear para entradas padronizadas como as do xadrez
[1]: https://hlfshell.ai/posts/deepmind-grandmaster-chess-without...
Então é bem provável que o fator tempo pese bastante. Humanos podem perder no relógio ou errar mais quando estão com pouco tempo
Continua impressionante que ele tenha aprendido uma função de avaliação muito boa sem busca. Mas eu gostaria que tivessem excluído as partidas em que o fallback para Stockfish entrou em ação. Mesmo para humanos, mate em 2 e mate em 10 são a diferença entre vitória e empate/derrota do ponto de vista do tempo no relógio
Eu também queria ver um confronto direto contra Stockfish com profundidade de busca limitada. Isso teria dado uma noção aproximada de quanto da árvore de busca essa função de avaliação conseguiu destilar
Para quem quer começar com redes neurais para xadrez, recomendo fortemente este repositório: https://github.com/sgrvinod/chess-transformers
O código em PyTorch é fácil de ler, segue uma forma típica de implementação, e a arquitetura também é parecida com a das redes neurais de xadrez que hoje têm melhor desempenho
https://lczero.org/blog/2024/02/how-well-do-lc0-networks-com...
É um texto escrito pelos autores do melhor engine de xadrez com rede neural sobre este artigo da DeepMind
O enorme conjunto de dados sintéticos usado no treinamento acabou sendo produzido com muita busca tradicional. Então tem um lado meio engraçado, mas ainda assim é legal
Lembro que Matthew Sadler, GM e autor de xadrez, configurou o Leela Zero para jogar partidas de treino praticamente só na intuição, com pouca ou nenhuma busca
Em geral ele ganhava, mas nem sempre. Acho que isso estava em The Silicon Road to Chess Improvement
Se você rodar o Stockfish em todas as posições de tabuleiro de todas as partidas para criar os dados de treino, no fim não está apenas codificando a árvore de busca no modelo Transformer?
Nesse caso, quanto mais você aumentar o número de parâmetros do modelo, mais da árvore de busca ele poderá conter e melhor será o desempenho, mas isso não parece tão interessante assim
Este repositório fornece a implementação do nosso artigo Grandmaster-Level Chess Without Search: https://arxiv.org/abs/2402.04494
Os avanços recentes em aprendizado de máquina vieram principalmente de escala, ou seja, de arquiteturas baseadas em atenção em larga escala e de conjuntos de dados sem precedentes. Este artigo investiga o impacto do aprendizado em larga escala no xadrez
Ao contrário dos motores de xadrez tradicionais, que dependem de heurísticas complexas, busca explícita ou de uma combinação dos dois, um modelo Transformer de 270 milhões de parâmetros é treinado de forma supervisionada com um conjunto de dados de 10 milhões de partidas de xadrez
Cada tabuleiro do conjunto de dados foi anotado com valores de ação fornecidos pelo poderoso motor Stockfish 16, totalizando cerca de 15 bilhões de pontos de dados
O maior modelo alcançou Elo blitz de 2895 no Lichess contra adversários humanos e resolveu quebra-cabeças de xadrez difíceis sem ajuste específico de domínio nem algoritmos de busca explícita
Também supera as redes de política e valor do AlphaZero sem MCTS e o GPT-3.5-turbo-instruct. Ao investigar sistematicamente os tamanhos do modelo e do conjunto de dados, o estudo mostra que um desempenho forte em xadrez só aparece em escala suficiente. Também foram realizados amplos estudos de ablação sobre escolhas de projeto e hiperparâmetros
Seria bom ter um motor que pensasse mais como um humano. Como essa abordagem usa partidas anotadas pelo Stockfish, parece que no fundo ela vai pensar como um computador
Se pensasse como um humano, seria muito útil em revisões de partidas para mostrar o que observar em cada posição, ajustado ao meu Elo
Magnus Carlsen é incrível porque, em comparação com um computador, ele alcançou seu nível atual de xadrez sob restrições enormes de tempo e computação. A eficiência de aprendizado dele é extraordinária em comparação com qualquer motor de xadrez
Tem uma vibe de programa de demoscene. De fato, existe até um programa de xadrez de 1 KB que realmente funciona
Se o xadrez fosse totalmente resolvido, surgiria uma árvore grande demais para ser calculada com os recursos atuais. Lembro de algo em torno de 10^80, mas posso estar enganado
Se você anotasse essa árvore com vitória/derrota/empate, seria possível ter um jogador ótimo sem busca
As duas abordagens óbvias de compressão e otimização são aproximar a árvore ou aproximar as anotações. O quanto essas duas abordagens funcionam bem depende fortemente da estrutura da árvore
Este resultado parece mostrar menos o poder absoluto da abordagem de aprendizado em si e mais o quanto a árvore de partidas de xadrez se adapta bem a essas duas abordagens. A conclusão que tiro é que uma aproximação razoável dessa árvore é possível com dados na escala de 270 milhões de palavras
O xadrez está resolvido com 18,4 TB de banco de dados quando restam 7 peças no tabuleiro, conforme explicado aqui: https://lichess.org/@/lichess/blog/7-piece-syzygy-tablebases...