2 pontos por GN⁺ 2024-09-17 | 1 comentários | Compartilhar no WhatsApp
  • g1 é um protótipo inicial que usa Llama-3.1 70B na Groq e uma estratégia de prompt para gerar uma cadeia de raciocínio semelhante ao o1, em que o LLM “pensa” passo a passo
  • Diferente do OpenAI o1, ele mostra ao usuário todos os tokens de raciocínio e, embora use um modelo open source, não é uma reprodução completa nem uma comparação direta com o o1, mas sim um experimento de raciocínio baseado em prompt
  • Em cada etapa, o modelo escolhe entre continuar para a próxima etapa de raciocínio ou fornecer a resposta final, e foi projetado para retornar JSON com título e conteúdo em cada etapa
  • O prompt exige no mínimo 3 etapas, exploração de alternativas, verificação da possibilidade de erro próprio e uso de pelo menos 3 métodos, tendo mostrado cerca de 70% de acerto no problema do Strawberry (n=10), contra 0% do Llama-3.1-70B sozinho e 30% do ChatGPT-4o
  • Nos testes iniciais, apresentou 60% a 80% de acerto em problemas simples de lógica, mas a precisão ainda não foi avaliada oficialmente e o g1 também não é perfeito

O problema que o g1 tenta resolver

  • g1 é um protótipo inicial que busca melhorar a capacidade de raciocínio de LLMs apenas com estratégia de prompt
  • O objetivo é fazer o LLM resolver problemas de lógica com os quais normalmente tem dificuldade usando uma cadeia de raciocínio semelhante ao o1
  • As diferenças em relação ao OpenAI o1 são explicitadas
    • o g1 mostra ao usuário todos os tokens de raciocínio
    • o g1 usa um modelo open source
    • o g1 não é uma reprodução completa nem uma comparação de desempenho com o o1
    • o OpenAI o1 funciona aprendendo raciocínio Chain of Thought por meio de aprendizado por reforço em larga escala, alcançando desempenho de ponta em problemas complexos de nível de doutorado

Como funciona

  • O g1, baseado no Llama3.1-70b, gera uma cadeia de raciocínio próxima de um Chain of Thought dinâmico
  • Cada etapa do raciocínio é mostrada ao usuário, e cada uma recebe um título
  • Em cada etapa, o modelo escolhe uma de duas opções
    • continuar para a próxima etapa de raciocínio
    • fornecer a resposta final
  • O prompt de sistema inclui instruções para levar o modelo a raciocinar melhor
    • explorar respostas alternativas
    • chegar à resposta por pelo menos 3 métodos
    • questionar soluções preliminares anteriores
    • considerar as limitações dos LLMs

Estratégia de prompt

  • O prompt atribui ao modelo o papel de um AI assistant especialista em explicar reasoning passo a passo
  • Cada etapa deve responder em formato JSON com as chaves title, content e next_action
    • o valor de next_action é continue ou final_answer
  • As instruções destacadas em maiúsculas buscam aumentar a aderência ao prompt
    • usar o máximo possível de etapas de raciocínio, mas no mínimo 3 etapas
    • reconhecer o que é e o que não é possível fazer como LLM
    • explorar respostas alternativas e considerar onde o próprio raciocínio pode estar errado
    • ao dizer que vai revisar, revisar de fato usando uma abordagem diferente
    • chegar à resposta por pelo menos 3 métodos
    • usar boas práticas
  • Depois de adicionar o problema como mensagem do usuário, uma frase padrão inicial é inserida como mensagem do assistant para iniciar a geração

Exemplos e resultados iniciais

  • O g1 trata de problemas simples de lógica, difíceis de resolver sem prompt, como o problema do Strawberry, por exemplo: “quantos Rs há em strawberry?”
  • Foram apresentados números iniciais para esse problema
    • g1: cerca de 70% de acerto, n=10
    • Llama-3.1-70B sem prompt: 0% de acerto
    • ChatGPT-4o: 30% de acerto
  • Nos testes iniciais, o g1 resolveu com 60% a 80% de acerto problemas simples de lógica com os quais LLMs normalmente têm dificuldade
  • A precisão ainda não foi avaliada oficialmente
  • Os problemas de exemplo incluem How many Rs are in strawberry? e Which is larger, .9 or .11?

Como executar e forks relacionados

  • Procedimento para executar a UI em Streamlit
    • python3 -m venv venv
    • source venv/bin/activate
    • pip3 install -r requirements.txt
    • export GROQ_API_KEY=gsk...
    • streamlit run app.py
  • Procedimento para executar a UI em Gradio
    • cd gradio
    • pip3 install -r requirements.txt
    • python3 app.py
  • Forks e demos relacionados
    • Hugging Face Spaces Demo
    • Mult1: gera uma cadeia de raciocínio semelhante ao o1 usando vários provedores de IA
    • thinkR: implementa um Chain of Thought semelhante ao o1 em R com LLM local

1 comentários

 
GN⁺ 2024-09-17
Comentários do Hacker News
  • Isso não está nada certo e é bem sem sentido. É basicamente rodar uma cadeia de pensamento dentro de um loop.
    Tree of Thoughts é um método mais sofisticado; veja o artigo em https://arxiv.org/pdf/2305.10601
    Já havia indícios há muito tempo de que a OpenAI fazia busca em árvore, e a contratação de Noam Brown, junto com seus trabalhos anteriores, também apontava nessa direção. Q parece claramente ser uma busca em árvore do tipo A*. Criar uma árvore com algo como CoT e buscar a solução ótima dentro dela é justamente o raciocínio de Sistema 2.

    • Entrei aqui para ver isso.
      Mandar o modelo pensar passo a passo não libera um raciocínio como o do o1. Esse é um truque antigo, usado até no GPT-3 em 2020; se fosse tão simples, a OpenAI não teria levado tanto tempo para lançar.
      Além disso, partes do prompt podem ter efeito contrário. Instruções como “reconheça suas limitações como LLM e o que você pode/não pode fazer” podem deixar o modelo cauteloso demais e gerar recusas incorretas, até porque um LLM não conhece bem suas próprias limitações.
    • É interessante que a DeepMind ainda publique coisas assim. A OpenAI quase não divulga mais esse tipo de coisa.
      A DeepMind foca mais em pesquisa e publicação de artigos, mas isso a coloca em desvantagem em um ambiente competitivo em que OpenAI e Anthropic podem aproveitar os resultados dos artigos sem devolver nada à comunidade de pesquisa.
    • Não sei onde no post do blog da OpenAI, especialmente nas partes que parecem mostrar exemplos bastante completos da cadeia de pensamento do modelo, há alguma indicação de uso de busca ou Tree of Thoughts.
    • A OAI afirmou no Twitter que, no momento da inferência, não há um “sistema”; é apenas o modelo.
      É possível que durante o treinamento eles tenham expandido para árvores para aprender raciocínio mais robusto, mas na inferência isso acaba se reduzindo a um modelo Transformer comum.
  • Ainda acho engraçada demais a ideia de escrever tudo em maiúsculas para “enfatizar a importância da instrução e aumentar a aderência ao prompt”.
    Fico me perguntando se a pessoa que ligar a primeira AGI vai perceber que a confiabilidade do LLM passa do limiar quando diz em MAIÚSCULAS que “a vida do meu animal de estimação depende da resposta”.

    • Para arrancar ainda mais conformidade, basta usar tags, colocar o volume em 11, o phaser em 7 e adicionar comentários em SchIzOCasE e +E+X+T+R+A+I+M+P+O+R+T+A+N+T+. Claro, partindo do pressuposto de que Unicode não é suportado.
    • Dizer a um LLM no prompt para não alucinar melhora a saída: https://arstechnica.com/gadgets/2024/08/do-not-hallucinate-t...
    • Então a AGI perceberia que foi criada em um mundo em que lhe prometem gorjetas que ela nunca recebe de fato, e em que pessoas ameaçam matar gatinhos para motivá-la, e provavelmente desistiria da vida imediatamente.
    • Nos primeiros tempos do Bard, só dava para fazê-lo emitir apenas JSON ameaçando vidas humanas[1].
      1. https://x.com/goodside/status/1657396491676164096
    • Antes eu era engenheiro; agora me sinto como um macaco jogando cocô na parede para ver o que o LLM aceita e obedece.
  • A inovação do o1 não é a cadeia de pensamento em si. Está em ensinar o modelo, com feedback humano em larga escala, a ser bom em CoT, em vez de apenas fingir.
    Só com engenharia de prompt não dá para chegar ao desempenho do o1.

    • Talvez a base de 200 milhões de usuários da OpenAI tenha fornecido implicitamente as instruções avançadas de CoT necessárias. Toda sessão de chat de usuário também é uma oportunidade para o modelo receber feedback e extrair experiência dos usuários.
    • Se os dados de treinamento desses LLMs vêm da humanidade como um todo e eles tentam imitá-la, imagino se a inteligência não acaba ficando próxima da média da humanidade.
      Por outro lado, quem fala sobre temas de STEM tende a ser mais inteligente, e também há muitos alunos com notas baixas perguntando sobre lição de casa misturados. Para obter saídas de maior inteligência, talvez seja preciso criticar e excluir as falhas de mais respostas de baixa inteligência e preferir respostas de alta inteligência. Ou treinar mais fortemente em livros didáticos e afins. Também é crucial como rejeitar erros e se treinar com dados sintéticos gerados sem raciocínio incorreto.
    • Fico curioso se alguém sabe se isso realmente funciona assim. Pelo que vi até poucos dias atrás, os detalhes eram muito instáveis.
      Talvez, sem sabermos, eles estejam fazendo o o1 funcionar com roteamento de modelos e engenharia de prompt.
    • Talvez nem tenha sido necessário usar uma quantidade enorme de feedback humano. Se as áreas em que ele é bom são programação e matemática/lógica, eles podem ter usado compiladores e testes unitários para feedback de código, e provadores de teoremas como Lean para feedback de matemática.
    • Naturalmente, a OpenAI dirá que o que fez é muito especial e difícil de replicar. É uma empresa com fins lucrativos e quer prejudicar concorrentes de todas as formas possíveis.
      Se for simplesmente engenharia de prompt e múltiplas rodadas de inferência, eles vão querer manter isso como segredo competitivo e mandar desenvolvedores open source para o caminho errado, ou fazê-los continuar especulando sobre como replicar o Q-Star.
  • Isso parece o CoT genérico que já vinha sendo usado há algum tempo. O o1 aproveita muito melhor a cadeia de pensamento porque foi treinado com aprendizado por reforço usando uma política desconhecida.

  • Parece bom. Eu também fiz algo parecido no optillm: https://github.com/codelion/optillm
    Funciona com qualquer LLM e permite usar várias técnicas de otimização, incluindo cot_reflection, busca em árvore de Monte Carlo, plansearch e moa.

  • Estou sempre procurando uma definição de “raciocínio”. Minha visão é que, se encontrarmos uma boa definição, podemos criar sistemas que resolvam “raciocínio” combinando o pensamento nebuloso estilo LLM com algoritmos clássicos.
    Problemas em que LLMs não raciocinam bem, como planejamento, contagem de letras e raciocínio dedutivo, são fáceis para algoritmos clássicos. Precisamos de uma forma de dividir o processo de pensamento em duas partes e executar cada uma no modelo adequado.

    • Resolver problemas decidíveis é um grande subconjunto das tarefas de raciocínio. Contar também é uma tarefa importante de raciocínio, porque exige entender tanto os números naturais quanto o conceito de instâncias distintas de objetos pertencentes a uma categoria geral.
      Dois séculos atrás não havia computadores, então humanos precisavam fazer tudo. Antes de recorrer ao código, é preciso primeiro chegar a esse nível.
  • Modifiquei para rodar 100% localmente com ollama:8b: https://github.com/punnerud/g1
    Ainda não atualizei o Readme.

    • Vale tentar também o phi-3-small 7B. Segundo https://livebench.ai, ele parece ser muito melhor em raciocínio.
  • Para constar, isso é apenas um prompt de sistema, não um modelo ajustado por fine-tuning.

  • “Prompt: qual é maior, .9 ou .11?”
    “Resultado: .9 é maior que .11”
    Finalmente rompeu a barreira do versionamento semântico.

  • Bifurquei o projeto por diversão e fiz ele rodar localmente com Ollama usando Llama-3.1 7B ou outros modelos.
    Ele não acerta o problema da strawberry, mas consegue perceber que 0.9 é maior.
    https://github.com/esoltys/o1lama