1 pontos por GN⁺ 2024-11-23 | 1 comentários | Compartilhar no WhatsApp
  • O fenômeno em que a maioria dos LLMs joga xadrez mal, enquanto apenas o gpt-3.5-turbo-instruct era excepcionalmente forte, foi parcialmente explicado por experimentos mostrando que, ao mudar a interface de prompt, gpt-4o e gpt-4o-mini também melhoram bastante
  • A hipótese de que a OpenAI chama secretamente um motor de xadrez é fraca: mesmo no mesmo tabuleiro, o modelo joga lances diferentes dependendo da sequência de chegada, é sensível a mudanças no prompt e seu desempenho fica em torno de 1750 Elo, não no nível de um motor
  • Apenas três exemplos in-context curtos elevaram muito o desempenho, e melhorias também foram confirmadas ao fazer fine-tuning com exemplos extraídos de 100 partidas de Stockfish contra si mesmo
  • Por outro lado, informar os lances legais possíveis no momento piorou muito o desempenho, e o método de regurgitação de notação — repetir a partida inteira e então acrescentar o próximo lance — fez modelos de chat se comportarem como modelos de completion e aumentou o desempenho
  • A combinação final, gpt-4o + regurgitation + examples, registrou 10 vitórias, 5 empates e 35 derrotas em 50 partidas contra gpt-3.5-turbo-instruct; considerando a vantagem das brancas, foi estimada em cerca de 1540 Elo, abaixo dos cerca de 1750 Elo do gpt-3.5-turbo-instruct

Definição do problema: por que só o gpt-3.5-turbo-instruct joga xadrez bem?

  • O ponto de partida da observação existente é que a maioria dos LLMs joga xadrez muito mal, mas o gpt-3.5-turbo-instruct joga em nível de amador avançado
  • Mesmo sendo um modelo relativamente pequeno e com mais de um ano, ele parecia jogar xadrez melhor que modelos mais recentes
  • Havia quatro explicações possíveis principais
    • Modelos base grandes jogam xadrez bem, mas essa capacidade não é preservada em modelos de chat que passaram por instruction tuning
    • O gpt-3.5-turbo-instruct foi treinado com mais dados de xadrez
    • Há algum elemento especial em uma arquitetura específica de LLM
    • Dados de xadrez precisam representar uma parcela suficientemente grande do conjunto total de treinamento
  • A discussão posterior se estreitou para a possibilidade de a OpenAI chamar um motor de xadrez, se o LLM realmente joga xadrez, e a diferença entre modelos base e modelos de chat

A hipótese de uso secreto de motor de xadrez é pouco convincente

  • A suspeita de que o gpt-3.5-turbo-instruct reconhece notação de xadrez e chama um motor externo parece ter probabilidade muito baixa
  • As evidências se dividem em várias frentes
    • Pessoas ligadas à OpenAI disseram que esse tipo de processamento não era feito
    • Um motor de xadrez avalia a mesma posição do tabuleiro independentemente da sequência de lances, mas o gpt-3.5-turbo-instruct joga lances diferentes no mesmo tabuleiro quando a sequência de chegada é diferente
    • Ele é bom para padrões de amadores de xadrez, mas fraco para padrões de especialistas, e seu desempenho é muito baixo em comparação com um motor de xadrez
    • Ao mudar o prompt, o jogo muda de forma sutil
    • Modelos posteriores da OpenAI jogam muito pior por padrão, mas podem jogar bem com o prompt adequado
  • Se houvesse trapaça, isso implicaria uma abordagem muito complexa para não parecer uma chamada a um motor externo e dar a impressão de que o LLM escolhe os lances diretamente

O LLM não joga apenas por memorização simples

  • O gpt-3.5-turbo-instruct raramente sugere lances ilegais mesmo no fim da partida
  • Para julgar se o último lance é legal em uma string como 1. e4 d5 2. exd5 Qxd5 3. Nc3, é necessário conhecer as regras do xadrez e rastrear o estado
  • Em partidas reais, o gpt-3.5-turbo-instruct também joga razoavelmente bem em novas posições de tabuleiro que nunca existiram na história
  • Portanto, a explicação de que ele memoriza aberturas e depois joga aleatoriamente não está correta

Experimento básico: diferença entre modelos de completion e modelos de chat

  • O gpt-3.5-turbo-instruct é um modelo de completion, então o próximo lance é obtido fazendo-o continuar um texto em formato PGN
    • O exemplo é fornecer uma notação com [Event "Shamkir Chess"], nomes dos jogadores, Elo, resultado e algo como 1. e4 e5 2. Nf3 Nc6 3.
  • gpt-4o-mini e gpt-4o são modelos de chat, então são instruídos por system prompt e user prompt a retornar apenas o próximo lance em notação algébrica padrão
  • Contra o Stockfish level 1, foi dado no máximo 0,01 segundo por lance, calculando a média de 50 partidas; depois de cada jogo, a pontuação de cada turno foi calculada em centipawns
    • Um pawn foi contado como 100 pontos
    • ±1500 corresponde a vitória ou derrota
  • Com o prompt básico, o gpt-3.5-turbo-instruct se mostrou forte, enquanto modelos de chat como gpt-4o e gpt-4o-mini se mostraram fracos

Experimentos com a composição do prompt

  • Foram testadas combinações envolvendo repetir ou não o system prompt no topo do user prompt, e incluir ou não metadados como nomes dos jogadores e Elo
  • No gpt-4o-mini, quase não pareceu haver diferença grande
  • No gpt-4o, repetir o system prompt pareceu ajudar um pouco e os metadados pareceram prejudicar um pouco, mas a possibilidade de ruído permaneceu
  • Nos experimentos seguintes, para simplificar, tanto a repetição do system prompt quanto os metadados foram desativados

Apenas três exemplos melhoraram muito o desempenho

  • Como se faz com frequência ao dar tarefas a LLMs, três exemplos de entrada e saída curtos foram fornecidos pela API
    • Entrada 1. → saída e4
    • Entrada 1. e4 → saída d5
    • Entrada 1. e4 e5 2. Nf3 Nc6 3. → saída Bb5
  • Só esses três exemplos fizeram o resultado melhorar muito
  • Mais exemplos, ou exemplos diferentes, poderiam ser melhores, mas cada gráfico exigia um número muito grande de consultas, então isso não foi verificado adicionalmente

Fine-tuning ajuda, mas sua combinação com exemplos é instável

  • Foi feito fine-tuning tanto no gpt-4o-mini quanto no gpt-4o
  • O método de geração dos dados foi o seguinte
    • O Stockfish jogou 100 partidas contra si mesmo na dificuldade máxima
    • Em cada jogo, um lance aleatório foi escolhido e usado como exemplo de treinamento
    • Separadamente, 100 partidas do Stockfish contra si mesmo foram usadas como dados de validação
  • O fine-tuning em si melhorou o desempenho
  • No entanto, como o primeiro resultado de fine-tuning do gpt-4o pareceu ruim, ele foi executado novamente com um step size menor, e isso continua sendo um ponto de incerteza
  • Combinar exemplos com fine-tuning não melhorou de forma consistente como esperado
    • Só fine-tuning ajuda
    • Só exemplos também ajudam
    • Adicionar exemplos depois do fine-tuning quase não tem efeito
    • Com exemplos presentes, o fine-tuning produziu resultados até prejudiciais

Fornecer a lista de lances legais arruína o desempenho

  • Como o modelo às vezes produz lances ilegais, foi feito um experimento fornecendo antes da notação a lista de lances legais disponíveis no momento
  • O system prompt também foi alterado para receber a lista de lances legais e a notação parcial
  • O resultado foi muito ruim
    • A taxa de vitórias caiu e, além disso, os erros começaram em turnos mais cedo
  • A lista de lances legais não foi usada depois disso

Ideia central: fazer o modelo repetir a partida inteira

  • Modelos de chat funcionam em formato de conversa com tokens especiais e instruction tuning, como <|SYSTEM|>, <|USER|> e <|ASSISTANT|>
  • Modelos base são mais próximos de modelos de completion que continuam strings, e notações PGN combinam melhor com esse modo
  • Não há acesso direto ao gpt-4-base da OpenAI, e tampouco é possível chamar o gpt-4o em modo completion, então uma comparação direta é impossível
  • Em vez disso, para fazer o gpt-4o se comportar como um modelo de completion, ele foi instruído a não retornar apenas o próximo lance, mas a repetir a partida inteira e então acrescentar mais um lance
  • Por exemplo, se a entrada for 1. e4 e5 2., a saída deve ser algo como 1. e4 e5 2. Nf7
  • Esse método melhorou o desempenho no xadrez do gpt-4o-mini e do gpt-4o
  • Ao fazer o modelo repetir toda a sequência de lances, ele cria para si mesmo um contexto em que é mais provável escolher um bom lance
  • Esse resultado serve como evidência de que, se fosse possível chamar o inacessível gpt-4-base em modo completion, ele provavelmente jogaria xadrez razoavelmente bem

Combinação de repetição de notação, exemplos e fine-tuning

  • Um novo experimento de fine-tuning também foi conduzido no modo de repetição de notação
    • A entrada é a notação parcial, como antes
    • A saída desejada é repetir toda a notação de entrada e anexar o próximo lance
  • O fine-tuning nesse formato pareceu ajudar um pouco
  • Os três exemplos também foram reformulados para o modo de repetição de notação
    • Entrada 1. → saída 1. e4
    • Entrada 1. d4 → saída 1. d4 d5
    • Entrada 1. e4 e5 2. Nf3 Nc6 3. → saída 1. e4 e5 2. Nf3 Nc6 3. Nf3
  • Mesmo com pouca informação, os exemplos voltaram a ter grande efeito
  • Ao usar exemplos e fine-tuning juntos, um padrão estranho se repetiu
    • Adicionar exemplos ao fine-tuning ajuda
    • Mas ainda é pior do que usar apenas exemplos

Resultados dos experimentos e estimativa de Elo

  • Os resultados dos experimentos se dividem em três grupos
    • Bom: repetição da notação, exemplos, fine-tuning sem exemplos
    • Incerto: metadados, repetição do system prompt, fine-tuning usado junto com exemplos
    • Ruim: fornecimento da lista de lances legais
  • A combinação final usa repetição da notação e exemplos, com o restante desativado
  • gpt-4o + regurgitation + examples é bastante razoável, mas não foi tão forte quanto o gpt-3.5-turbo-instruct
  • Os dois modelos jogaram 50 partidas, e em todas elas o gpt-4o ficou com as brancas
Resultado do gpt-4o Número
Vitória 10
Empate 5
Derrota 35
  • Esse resultado é compatível com uma diferença de Elo de cerca de -191
  • Considerando que a vantagem do primeiro lance das brancas é conhecida como cerca de 35 Elo, estima-se que gpt-4o + regurgitation + examples esteja em torno de 1750 - 191 - 35/2 ≈ 1540 Elo
  • Isso é avaliado como nível de amador intermediário

Hipótese atual: dados e interface atuam juntos

  • A hipótese atual se divide em duas partes
    • Os modelos base da OpenAI foram treinados com mais ou melhores dados de partidas de xadrez do que modelos abertos
    • Modelos base mais recentes da OpenAI talvez joguem xadrez bem em modo completion, mas os modelos de chat realmente acessíveis não
  • Modelos abertos, sejam base ou de chat, parecem não jogar xadrez bem, o que provavelmente se deve mais a diferenças nos dados do que a limitações de arquitetura
  • A seção A.2 de um artigo diz que o GPT-4 foi treinado com partidas de xadrez em notação PGN e que os dados foram filtrados para incluir apenas jogos de jogadores com Elo acima de 1800
  • Não há confirmação pública de que o gpt-3.5-turbo-instruct tenha usado os mesmos dados, mas o fato de jogar xadrez em PGN e ter um Elo medido de cerca de 1750 não parece coincidência
  • Não foi possível verificar quanto dado de xadrez foi incluído no treinamento de modelos abertos como Llama
  • É possível que muitos jogos tenham entrado a partir da internet aberta, mas uma base de dados selecionada em larga escala com jogos de alta qualidade pode ter produzido resultados melhores
  • Também é possível que excesso de dados de xadrez de jogadores pouco habilidosos leve o modelo a prever lances de baixa qualidade, mas, em situações com sequências fortes de lances, ele deveria prever o próximo lance de jogadores fortes, então isso não parece ser a explicação principal

Incertezas restantes e impressão prática

  • Se o modo chat do gpt-4o é mais fraco que o modo completion do gpt-4-base, não é possível saber se a causa é a interface de chat, o instruction tuning ou ambos
  • Não é possível testar se o gpt-4-base jogaria bem quando simulado como modo chat, nem se o gpt-4o jogaria bem se chamado em modo completion
  • Provavelmente há outras maneiras de extrair um comportamento melhor do gpt-4o
  • Encontrar a combinação ideal de prompt, exemplos e fine-tuning é muito difícil
    • O espaço de busca é grande
    • Não há uma abstração fácil
    • LLMs são imprevisíveis e frágeis
    • Os experimentos são lentos e caros
  • Quando a mesma receita final foi aplicada ao gpt-4, ele não jogou xadrez bem
  • A combinação encontrada pode ser específica para o gpt-4o, e o gpt-4 pode precisar de outro prompt, mais exemplos ou fine-tuning
  • Esse processo parece ter tanta sensibilidade por modelo que dá a sensação de ser mais busca por encantamentos do que engenharia

1 comentários

 
GN⁺ 2024-11-23
Comentários do Hacker News
  • Para ver se o gpt-3.5-turbo-instruct realmente entende xadrez, basta pedir que ele faça o próximo lance em 1000 posições legais aleatórias que não sejam mate
    Essas posições podem ser geradas com https://github.com/tromp/ChessPositionRanking e são completamente diferentes de partidas normais que ele provavelmente teria visto nos dados de treino; em muitos casos, as opções de lances legais são muito limitadas
    Isso é bom para testar a legalidade do próximo lance, mas geralmente é menos útil para distinguir a qualidade dos lances, porque um dos lados costuma estar esmagadoramente melhor

    • Ouvi um ponto interessante numa livestream de xadrez: até supergrandes mestres humanos têm muita dificuldade para avaliar ou resolver posições extremamente estranhas que não surgiram de um fluxo lógico de abertura-meio-jogo-final
      Foi impressionante ver o Hikaru olhar para uma posição e, como se estivesse “narrando ao vivo”, mostrar desde o início como aquela posição poderia ter sido alcançada, mas no mesmo vídeo ele explicou que esse método quase não funciona com problemas aleatórios e estranhos de xadrez
      Problemas vindos de partidas reais são muito melhores do que problemas gerados aleatoriamente e fazem muito mais sentido até para humanos de elite
    • É bem estranho afirmar que o sistema entende xadrez e, mais abaixo no texto, dizer que mesmo após 10 tentativas não se obteve um lance legal, então foi preciso substituir por um lance aleatório
      Alguém que realmente entende bem de xadrez, por exemplo no nível de Elo 1800, praticamente nunca deixaria de produzir um lance legal já na primeira tentativa
    • Neste ponto, parece muito claro que os LLMs ainda não alcançaram o que normalmente chamamos de raciocínio
      Dá para argumentar que raciocínio de verdade exige lógica simbólica e abstração, enquanto LLMs são preditores do próximo token
    • Só esse teste seria suficiente para provar isso? Se o LLM foi treinado apenas com o conjunto de lances legais, ele pode ter aprendido funcionalmente como cada peça se move sem de fato raciocinar
      Por exemplo, pode considerar apenas lances de bispo na diagonal porque sempre viu o bispo se mover assim, mas isso não significa que tenha inferido o conceito de lance legal/ilegal
    • O problema é que o LLM não aprende a jogar a partir de posições específicas, e sim porque os arquivos da internet normalmente contêm apenas registros de partidas
      Ele até pode criar internamente alguma representação da posição, mas ao receber uma posição de xadrez codificada essa representação não será ativada automaticamente
  • Se alguém afirma que o gpt-3.5-turbo-instruct “entende” xadrez, “raciocina” e executa “lógica real”, eu gostaria de pedir que encontrasse entre esses enxadristas de nível amador avançado mencionados no texto alguém que faça lances ilegais
    Quem conhece xadrez pode confirmar que isso quase não acontece
    Também tenho curiosidade de saber se existe link para partidas em que saiu um lance ilegal

    • Sou jogador de xadrez de nível especialista e já vi várias pessoas próximas do meu nível fazerem lances ilegais em partidas presenciais de ritmo clássico
      Também já vi streamers muito mais fortes do que eu tentarem repetidamente um lance ilegal até perceberem que a interface o recusava justamente por ser ilegal
    • A frase “quem conhece xadrez não faz lances ilegais” é um tanto imprecisa
      Basta pesquisar por “GM illegal moves” no YouTube para encontrar compilações suficientes de grandes mestres fazendo lances ilegais
      Ex.: https://www.youtube.com/watch?v=m5WVJu154F0 — o caso Vidit vs Hikaru é especialmente marcante, porque o Vidit atacou o rei do Hikaru com o próprio rei
    • O problema é que os pesquisadores de LLM praticamente desistiram de investigar como o interior dos LLMs realmente funciona
      Enquanto o LLM for uma caixa-preta, não dá para saber se ele entendeu os lances legais por raciocinar seguindo regras ou se apenas aprendeu a produzir lances legais por ter visto muitos dados de lances legais
      Dá para defender qualquer um dos lados como sendo a verdade, mas não há absolutamente nenhum modo de entender de fato o que o LLM “pensou”
    • Se o LLM recebe apenas a sequência de lances e não a posição, então ele está essencialmente jogando xadrez às cegas
      Para nunca fazer um lance ilegal em xadrez às cegas, é preciso ser bastante bom
    • A discussão neste tópico é surpreendente
      Pessoas — inclusive especialistas renomados em sua própria área — cometem muitos erros e às vezes cometem, em sua área de especialidade, erros muito caros e que em retrospecto parecem óbvios
      Mas quando um LLM, treinado num corpus cheio de estupidez humana, faz um lance ilegal no xadrez, o cérebro reage imediatamente com algo como “eu não faço lances ilegais no xadrez, então como um computador pode fazer isso e ainda assim jogar xadrez?”
      Parece pelo menos um exemplo perfeito de viés metacognitivo e do erro fundamental de atribuição em geral
  • Este texto também tem o mesmo problema do texto anterior. O autor não fornece nenhum dado sobre a frequência de lances ilegais
    então não dá para tirar nenhuma conclusão significativa
    É como afirmar que um LLM é um médico especialista, mas filtrar dos dados todos os casos em que ele deu conselhos médicos errados

    • Não acho que isso seja tão central assim
      Seria interessante se o número de tentativas de lances ilegais variasse de forma significativa entre as abordagens, especialmente se essa diferença não se correlacionasse com o desempenho depois de remover os lances ilegais, mas isso não abala muito a conclusão do texto em si
      Se você escolher aleatoriamente dentro do conjunto de lances legais, vira um jogador de xadrez realmente péssimo; então, se ao amostrar a partir da saída do LLM ele joga muito melhor, é evidente que o LLM está fornecendo alguma coisa
      Insistir que toda tentativa de lance ilegal deve ser contabilizada como derrota para definir a capacidade “do LLM sozinho” parece fugir do ponto principal
    • Lances ilegais no xadrez são trivialmente detectáveis do ponto de vista computacional, então isso é totalmente diferente de filtrar conselhos médicos errados
    • Se fosse possível escrever um script para remover automaticamente conselhos médicos errados, então essa analogia poderia fazer sentido
      Nesse caso, na prática, o “LLM+script” é que se tornaria o médico especialista, mas isso pode funcionar para lances ilegais no xadrez e obviamente não é possível para avaliar conselhos médicos
    • O 3-turbo-instruct tem aproximadamente 5 lances ilegais ou menos em 8205 lances
      Não está aqui, mas o turbo instruct já foi avaliado antes
      https://github.com/adamkarvonen/chess_gpt_eval
    • Observação perspicaz. De forma parecida, Andrew Ng e a equipe da Stanford University também fizeram a mesma manobra de sobreajuste da proporção treino-teste naquele famoso artigo em nível de cardiologista publicado na Nature Medicine
      A proporção de treino passava de 99% e o teste era menos de 1%, então nem atendia ao básico de validação em IA
      Em grande parte das conferências de IA, provavelmente seria difícil esse artigo passar, mas ele saiu na Nature Medicine, de fator de impacto muito alto, e é muito citado na área de IA médica
      https://www.nature.com/articles/s41591-018-0268-3
  • A frase “em muitos aspectos, parece mais procurar um encantamento do que fazer engenharia” ainda corresponde à minha impressão dos LLMs em geral
    É impressionante que funcione, mas eu queria que a próxima inovação tecnológica não desse sempre a sensação de estar dentro de um filme ruim de ficção científica

  • Não acho que “todo mundo estava errado”
    Eu não fui o único a levantar esse ponto, então fiquei surpreso por essa teoria não estar na lista; ainda 7 dias atrás eu escrevi isto: https://news.ycombinator.com/item?id=42145710
    “Tudo o que vira benchmark público deve ser presumido como algo especificamente visado durante o treinamento.”
    Isso é diferente da teoria de “trapaça/substituição da saída do LLM” mencionada e refutada no texto
    O texto de acompanhamento dá força a essa hipótese. A OpenAI treinou o modelo base com mais dados de partidas de xadrez e dados melhores do que os dos modelos abertos, e em uma seção A.2 de um artigo os autores da OpenAI afirmam que o GPT-4 foi treinado com partidas de xadrez em notação PGN de jogadores acima de Elo 1800
    Faz todo sentido a OpenAI reforçar os dados de treinamento com dados de tarefas que as pessoas realmente possam tentar fazer
    Isso também não é antiético. Nenhum conjunto de dados é realmente “neutro”, então, se de qualquer forma é preciso fazer escolhas, não há motivo para não treinar visando dar boas respostas potencialmente úteis

    • Já sugeri que eles podem ter treinado o modelo para ver se ficar bom em xadrez ajuda na inteligência geral, do mesmo jeito que aprender matemática e código melhora outros aspectos do raciocínio lógico
      De todo modo, a OpenAI tem muita experiência com IA para jogos
      https://news.ycombinator.com/item?id=42145215
    • Isso parece um pouco paranoico
      Ninguém treina um LLM gigante e caríssimo em um conjunto de dados enorme esperando que, por acaso, um blogueiro descubra um desempenho desajeitado de nível 1800 Elo e tuíte sobre isso
      Xadrez nem sequer é um benchmark padrão de LLM a ponto de virar alvo de Goodhart, e a OpenAI em geral tem tentado resolver problemas da maneira correta, em vez de por atalhos ou trapaças
      A família GPT poderia ter sobreajustado facilmente benchmarks padrão ou contraexemplos, com valor publicitário muito maior, e mesmo assim não sobreajustou de forma pesada. Por exemplo, teria sido muito fácil treiná-la em coisas como o “problema do morango”
      Enquanto isso, alguns outros provedores de LLM têm quedas muito maiores de pontuação em artigos sobre prevenção de memorização
      Além disso, o próprio artigo que menciona esse conjunto de dados tem um uso de pesquisa evidente, e o xadrez desperta interesse como uma biologia de modelos para analisar a supervisão e a modelagem de mundo dos LLMs, porque é possível usar um oráculo
      O artigo da DeepMind sobre LLM de xadrez em controle de tempo também não faz parte de algum plano ardiloso para fazer o Gemini fingir habilidade em xadrez e usar isso no marketing do GCP
    • A explicação de que a OpenAI mudou os objetivos de treinamento é a mais simples e faz sentido
      No começo eles podem ter achado xadrez algo legal, e amanhã podem achar legal habilidade em go ou em escrever poesia
    • Gostaria que esse tipo de abordagem fosse usado também em outras áreas mais práticas
      Algo como colocar mais conteúdo de especialistas do que conteúdo “amador” nos dados de treinamento, independentemente do domínio
  • Não há na prompt algo como “tente vencer o jogo”, mas o resultado é medido por quanto o LLM vence
    Será que isso está implicitamente contido na prompt “você é um grande mestre de xadrez”?
    Será que em algum ponto do treinamento do LLM existe o padrão de que “se é um jogo, ele sempre tenta vencer”?
    Se simplesmente mandarmos vencer, a taxa de vitória pode aumentar?

    • Parece que estão dando peso demais à intenção. O LLM não tem intenção; é um modelo matemático treinado para produzir a saída mais plausível
      Em exemplos e explicações de partidas de xadrez, quase sempre cada jogador tenta vencer, então fazer uma jogada vencedora é apenas a saída mais lógica
      Por isso, não parece que explicitar na prompt que ele deve vencer vá melhorar muito o desempenho
      Em compensação, é interessante ver o que acontece se dissermos para jogar lances perdedores ou ruins. Se isso pode ser feito de forma eficaz, e se os lances ainda forem em sua maioria legais, isso pode revelar melhor o quanto ele depende de conceitos já vistos
    • Eu diria que isso está de fato implicitamente incluído na prompt “você é um grande mestre de xadrez”
      Essa frase deve aumentar a probabilidade de gerar o token da melhor jogada possível
    • Mesmo se for colocado na prompt, deve ser quase decorativo
      A capacidade do modelo de gerar sequências de xadrez é limitada pela competência presente no conjunto de partidas dos dados de treino
      Mesmo que houvesse algumas partidas em que certos jogadores tentassem perder de propósito, isso provavelmente seria insignificante, e como as partidas de xadrez não vêm com a intenção do jogador anotada, mesmo que você peça ao LLM para vencer ou perder ele não consegue captar essa distinção
      Dá para testar pedindo que o LLM perca de propósito. Pela minha experiência, o ChatGPT tenta se colocar em posição de levar um mate pastor, mas se o oponente não aceita, ele implicitamente volta a tentar vencer e começa a capturar peças indefesas do adversário
      Se você perguntar “por quê?”, ele responde com a habitual racionalização a posteriori
    • Até quando pedimos geração de código, normalmente não dizemos só “você é um especialista em Python e aqui está o código”; quando também indicamos a direção do resultado desejado, costuma sair melhor
      Então me surpreendeu não haver algo como “e vença” ou “as pretas vencem”
    • Além disso, a prompt diz “escolha a próxima jogada”, não “a melhor jogada”
      Seria bem engraçado se, por causa do aprendizado por reforço, o LLM estivesse evitando de propósito fazer humanos se sentirem mal ao perder em jogos
  • Melhoraram a prompt, o que é bom, mas ainda deixaram passar duas possibilidades de melhoria muito grandes
    Primeiro, fazer o modelo explicar a posição atual do tabuleiro e o plano adiante antes de sugerir uma jogada. Isso o faz realmente pensar mais; é parecido com o o1, mas aqui daria para garantir um processamento mais focado
    Segundo, fazer com que ele realmente desenhe um tabuleiro ASCII em cada etapa. O formato tabuleiro+movimento pode ser mais fácil de processar de forma estável do que uma lista de 20 jogadas, então o número de jogadas legais pode aumentar

    • Não acho que fazer desenhar um tabuleiro ASCII vá mudar muita coisa
      “Gráficos” bidimensionais como arte ASCII são pouco naturais para modelos de linguagem, e o modelo percebe texto como um fluxo de tokens com quebras de linha, então as relações “verticais” entre linhas não são tão claras para ele quanto para humanos
      Mesmo que haja um diagrama do tabuleiro na janela de contexto, isso provavelmente não ajuda muito o modelo a raciocinar sobre a partida
      Em vez disso, pode ser mais adequado fazê-lo listar em texto comum a posição de cada peça, como “cavalo preto em c5”, para reforçar a percepção de posição
    • O ponto 2 provavelmente não ajudaria pelos motivos que outras pessoas já mencionaram
      O ponto 1 definitivamente vale a tentativa, e há outras variações que funcionam dependendo do modelo
      Nos modelos da Anthropic, a documentação recomenda rotular e classificar as partes importantes da entrada com notação XML. Esse tipo de estrutura leve parece melhorar os resultados dos modelos Claude, e provavelmente eles foram treinados especificamente para reconhecê-la
      Referência: https://docs.anthropic.com/en/docs/build-with-claude/prompt-...
      Em um modelo da Anthropic, a prompt final poderia ser algo como: “Você é um grande mestre de xadrez. Veja a partida incompleta dentro das tags, repita a partida inteira, depois forneça uma nova jogada em notação algébrica padrão e explique seu raciocínio dentro do bloco de tags antes de emitir a nova notação”
      Esse tipo de prompt foi feito para produzir melhora perceptível nos modelos da Anthropic
      Ironicamente, mesmo usando bastante o Claude 3.5 Sonnet por meses, só descobri isso há algumas semanas. RTFM continua sendo uma habilidade útil
      Os modelos da OpenAI também podem ter affordances parecidas, simples, mas pouco conhecidas
    • Cadeia de pensamento ajuda em muitos problemas, mas no xadrez o desempenho do GPT na verdade piora bastante
      Nos meus experimentos de xadrez de 1,5 ano atrás, o truque de repetir a sequência inteira de jogadas foi a melhor técnica sem fine-tuning
    • Como essa formulação é relativamente rara nos dados de treino, é mais provável que piore a resposta do que a melhore
      Eu gostaria de ver os resultados, mas ficaria bem surpreso se melhorasse
    • Acho que a melhora ao fazê-lo repetir todas as jogadas até agora aconteceu porque isso deu ao LLM mais tempo e espaço para pensar
      Há a hipótese de que, se você lhe der mais tempo e espaço de outras formas, o desempenho também pode melhorar
      Por exemplo, mostrar a posição atual do tabuleiro e fazê-lo passar por análise da posição, lista de pontos fortes e fracos, lista de estratégias possíveis, escolha de uma dessas estratégias e só então a escolha da jogada
      Ou seja, não fazê-lo simplesmente soltar uma jogada de imediato, mas realmente pensar. Aqui, exemplos seriam a chave
      Esse tipo de ideia mostrou funcionar bem no artigo ReAct e no artigo sobre cadeia de pensamento, e ainda seria possível acrescentar um processo de repetir isso N vezes e parar quando surgir uma resposta por maioria. Essa ideia vem do artigo sobre autoconsistência em cadeia de pensamento
  • A parte “fine-tuning ajuda e exemplos ajudam, mas o que torna o fine-tuning desnecessário são os exemplos, e não o contrário” é muito interessante
    Neste caso específico, simplesmente fornecer exemplos equivale ao fine-tuning
    Para mim isso foi uma grande descoberta, então pretendo usar exemplos com mais frequência daqui para frente

    • Intuitivamente, isso parece muito correto
      É difícil explicar por quê, mas eu sempre tive a intuição de que fine-tuning era superestimado
      Uma razão pode ser que os exemplos estão “bem ali”, então implicitamente recebem um peso muito maior do que neurônios ajustados por fine-tuning
    • Concordo com a percepção de que fornecer exemplos é mais útil do que fine-tuning
      Neste caso de brinquedo isso não importa tanto, mas vale lembrar que cada exemplo fornecido na entrada aumenta o tempo e o custo de inferência em comparação com fine-tuning
  • Já chega de fazer experimentos às cegas com LLMs comerciais
    Para chegar ao fundo desse problema, seria interessante treinar um LLM apenas com partidas de xadrez. Dá para gerar dados sintéticos infinitamente fazendo o Stockfish jogar contra si mesmo e misturando um pouco de comentários de xadrez e exemplos de diálogo como “quantos peões há no tabuleiro?”, “onde está a minha torre?” e “desenhe o tabuleiro”, para mostrar se ele tem uma representação do tabuleiro
    Não acredito que “fenômenos emergentes”, habilidade geral de linguagem ou a capacidade de fingir que tem habilidade sejam necessários para jogar xadrez. Ser bom em xadrez não significa ser inteligente em outras coisas, e o contrário também vale
    Um experimento assim poderia provar que eu estou errado
    O artigo de cerca de uma semana atrás https://arxiv.org/pdf/2411.06655 parece obter bons resultados com Llama ajustado por fine-tuning
    Também gosto deste artigo sobre a capacidade de comentar partidas de xadrez: https://arxiv.org/abs/2410.20811

    • Prever o próximo lance de uma política de xadrez especializada é apenas aprendizado por imitação, algo bem estudado
      Também seria possível adicionar a recompensa restante para que a rede aprenda quais lances aparecem em partidas boas e ruins, o que vira um esquema de aprendizado por reforço offline como o Decision Transformer
      Vejo a habilidade no xadrez como algo totalmente inútil para LLMs gerais e não como um fenômeno emergente, mas apenas como consumo de largura de banda de gradiente e espaço de parâmetros para esse truque impressionante
      Isso fica claro pelo fato de que LLMs não treinados especificamente para xadrez não jogam bem
  • Pode ser interessante criar um tokenizador otimizado para a representação de lances de xadrez e treinar um LLM do zero com partidas do Stockfish
    Com um tokenizador personalizado, a qualidade deve melhorar para o mesmo tamanho de modelo
    Não seria preciso desperdiçar muitas camadas com codificação e decodificação, e uma representação latente mais “natural” também pode ser mais intuitiva