3 pontos por GN⁺ 2026-03-02 | 1 comentários | Compartilhar no WhatsApp
  • Estrutura mínima de modelo de linguagem que implementa todo o processo de treinamento e inferência de um modelo GPT em um único arquivo puro de Python com 200 linhas
  • Inclui dataset, tokenizer, motor de autodiferenciação, rede neural semelhante ao GPT-2, otimizador Adam e loop de treinamento e inferência
  • Treina em um dataset de nomes para gerar novos nomes, revelando os princípios centrais do GPT por meio de uma implementação própria de autograd e da estrutura Transformer
  • Ao contrário dos LLMs de grande escala, funciona em Python puro sem dependências, deixando apenas a essência algorítmica
  • Entender o microgpt ajuda a compreender a estrutura algorítmica fundamental de modelos grandes como o ChatGPT

Visão geral do microgpt

  • microgpt é uma implementação mínima de GPT escrita em 200 linhas de código Python, sem dependência de bibliotecas externas
    • Inclui dataset, tokenizer, autodiferenciação, estrutura semelhante ao GPT-2, otimizador Adam e loops de treinamento e inferência
  • É um projeto artístico criado por Karpathy para simplificar LLMs até o nível da essência, na mesma linha de micrograd, makemore e nanogpt
  • O código completo é disponibilizado em GitHub Gist, página web e Google Colab

Dataset

  • Usa um arquivo de texto com cerca de 32.000 nomes, um por linha
  • Cada nome é tratado como um documento, e o modelo aprende esse padrão para gerar novos nomes
  • Exemplos gerados após o treinamento: kamon, ann, karai, jaire, vialan

Tokenizer

  • Um tokenizer simples baseado em caracteres, que atribui um ID inteiro a cada caractere único
  • Inclui as letras a–z e o token BOS (beginning of sequence), totalizando 27 tokens
  • Cada documento é envolvido no formato [BOS, e, m, m, a, BOS] para o treinamento

Autodiferenciação (Autograd)

  • A classe Value rastreia valores escalares e gradientes, construindo o grafo computacional
  • Armazena os gradientes locais (local gradient) de operações básicas como soma, multiplicação, potência, log, exponencial e ReLU
  • O método backward() executa a retropropagação aplicando a regra da cadeia
  • O mesmo algoritmo de .backward() do PyTorch é implementado manualmente no nível escalar

Inicialização de parâmetros

  • O modelo tem cerca de 4.192 parâmetros
  • É composto por tabela de embeddings, pesos de atenção, pesos da MLP, projeção de saída etc.
  • Cada parâmetro é inicializado com números aleatórios de distribuição gaussiana

Arquitetura do modelo

  • Uma forma simplificada da estrutura GPT-2, usando RMSNorm, ReLU e conexões residuais (residual connection)
  • Componentes principais:
    • Etapa de embedding: soma embeddings de token e posição
    • Atenção multi-head: calcula vetores Q, K e V e usa o cache KV para aproveitar informações de tokens anteriores
    • Bloco MLP: rede feedforward de 2 camadas para computação local
    • Etapa de saída: gera logits para o tamanho do vocabulário (27)
  • O cache KV permanece ativo também durante o treinamento, e a retropropagação flui através do cache

Loop de treinamento

  • Em cada passo, escolhe um documento e faz a tokenização como [BOS, ... , BOS]
  • O modelo prevê a probabilidade do próximo token e calcula a perda de entropia cruzada
  • Após calcular os gradientes com loss.backward(), atualiza os parâmetros com o otimizador Adam
  • A taxa de aprendizado usa decaimento linear (linear decay)
  • Ao longo de 1.000 passos, a perda cai de aproximadamente 3,3 → 2,37

Inferência (Inference)

  • Após o treinamento, gera novos nomes começando com o token BOS
  • Em cada etapa, amostra o próximo token com base nas probabilidades do softmax
  • O valor de temperature controla a criatividade (mais baixo = mais conservador; mais alto = mais diversidade)
  • Exemplo de saída: kamon, ann, karai, jaire, vialan, karia, yeran, anna

Como executar

  • Pode ser executado apenas com Python (python train.py)
  • O treinamento termina em cerca de 1 minuto, com o valor da perda sendo exibido a cada etapa
  • Também pode ser executado da mesma forma em um notebook do Colab

Etapas de evolução do código

  • Expansão gradual de train0.py até train5.py
    • Bigram → MLP → Autograd → Attention → Multi-head → Adam
  • Cada etapa pode ser conferida nas revisões de build_microgpt.py no Gist

Diferenças em relação a LLMs reais

  • Dados: microgpt usa 32K nomes; LLMs reais usam trilhões de tokens
  • Tokenizer: nível de caractere vs. subwords baseadas em BPE
  • Autograd: Python escalar vs. operações tensoriais em GPU
  • Arquitetura: 4K parâmetros vs. centenas de bilhões de parâmetros
  • Treinamento: repetição de documento único vs. treinamento em grande batch e precisão mista
  • Otimização: Adam simples vs. hiperparâmetros e agendamento finamente ajustados
  • Pós-processamento: evolui para a forma do ChatGPT por meio de etapas de SFT e RL
  • Infraestrutura de inferência: distribuição em GPU, gerenciamento de cache KV, quantização, speculative decoding etc.

Resumo do FAQ

  • O modelo é uma função matemática que transforma tokens de entrada em probabilidades do próximo token
  • Não há “compreensão”; ele faz previsões por meio do aprendizado de padrões estatísticos
  • Implementa em forma reduzida o mesmo loop de previsão de tokens do ChatGPT
  • “Alucinação (hallucination)” é um resultado natural da amostragem probabilística
  • É lento, mas reproduz completamente o algoritmo central dos LLMs
  • Para resultados melhores, é possível ajustar passos de treinamento, tamanho do modelo e dataset
  • Se trocar o dataset, ele pode aprender vários padrões, como nomes de cidades, nomes de Pokémon, poemas etc.

microgpt é um modelo educacional e experimental que implementa em escala mínima todos os algoritmos centrais de um LLM, servindo como exemplo que revela completamente o princípio de funcionamento de grandes modelos de linguagem.

1 comentários

 
GN⁺ 2026-03-02
Comentários do Hacker News
  • Alguém modificou o microgpt e criou um pequeno GPT que gera nomes coreanos
    Também há uma página web que visualiza todo o processo — dá para explorar o pipeline inteiro, da tokenização à inferência
    É possível testar diretamente no English GPT lab

    • Algo assim pode ser implementado facilmente com um modelo bem mais leve
      Basta consultar o tutorial char_rnn do PyTorch
    • Não tenho relação com o criador do site, mas ele é muito útil para aprender a estrutura interna de LLMs
      Tokenização, embeddings, atenção, perda·gradiente, treinamento, inferência e comparação com Real GPT estão muito bem explicados
    • Dizer que foi “modificado” significa, na prática, apenas trocar a lista de nomes em inglês por nomes coreanos
      O site em si está mais para uma visualização gerada por IA baseada no post original do blog
  • Eu fiz um port do microgpt para C++
    Link do código
    O código tem o dobro de linhas, mas é 10 vezes mais rápido
    A parte mais difícil foi representar a classe Value em C++, e no fim usei shared_ptr

    • Implementei backpropagation explícita sem autodiff, e ficou 8 vezes mais rápido do que em Python
  • Eu estava curioso sobre o que exatamente é “alucinação (hallucination)
    O modelo apenas amostra tokens de uma distribuição de probabilidade; ele não tem noção de verdade
    Isso leva à pergunta: será que um LLM poderia ter um score de confiança para a própria resposta?

    • O modelo pode reportar a confidence da distribuição de saída, mas isso não significa que ela esteja de fato calibrada
      Modelos pré-treinados são calibrados, mas isso se quebra depois do seguimento de instruções (post-training)
      Pesquisas relacionadas: artigo1, artigo2
    • Um score de confiança não tem sentido sem conhecer o método de amostragem dos dados de treinamento
      Como um intervalo de confiança sem conhecer a população em estatística, as probabilidades do LLM não têm conexão com o mundo real
      No fim, um LLM é como alguém que só leu livros, sem experiência do mundo
    • Na prática, o LLM retorna uma distribuição de probabilidade e gera tokens ao amostrá-la
      Mas essa probabilidade não é “probabilidade de ser verdade”, e sim “probabilidade de eu emitir este token nesta situação”
    • Ele consegue gerar, mas como não conhece a ‘distribuição verdadeira’, essa confiança não tem significado
    • Frases como “não tenho certeza, mas provavelmente é isso” não aparecem na saída, mas existem no processo interno de inferência
  • Eu converti o microgpt para Rust para fins de estudo
    microgpt-rs
    A parte mais complicada foi representar a estrutura do grafo de autograd com tipos de Rust
    Agora estou adaptando para rodar no navegador com WebAssembly e pretendo publicar no blog
    O código do Karpathy é realmente poético e conciso no design

    • Armazenar valores diferenciais na estrutura dos pesos é meio hacky, mas a maioria faz assim
    • Eu também queria tentar implementar isso em outra linguagem
  • O código é bonito e fácil de ler, mas eu gostaria que houvesse uma explicação comentada linha por linha, como em backbone.js
    Veja a documentação do Backbone

    • O código-fonte comentado do Backbone foi gerado com Docco
      O projeto Docco também é uma ótima ferramenta feita pelo mesmo autor
    • É um exemplo realmente bonito de programação literária (literate programming)
      Também existe uma versão HTML do código
    • Também há o post walkthrough do Karpathy
      blog do microgpt
    • Também sugerem simplesmente pedir a um LLM de alto desempenho para explicar
  • Graças ao vídeo e ao código do Karpathy, sinto que finalmente entendi de verdade descida de gradiente, backpropagation e regra da cadeia pela primeira vez
    Quando eu via só a matemática, ficava confuso, mas com o código tudo ficou claro
    Pessoalmente, foi uma experiência quase como um grande senso de realização na vida

    • Eu também vou tentar explicar isso de forma intuitiva
      Como o Karpathy disse, para entender de verdade é importante tentar ensinar a outra pessoa
  • Surpreende que esse projeto só tenha aparecido no HN agora
    Eu criei uma versão em JS com 35 linhas chamada PicoGPT, além de uma versão em Python,
    e ela pode ser executada direto na web
    É até um LLM ultracompacto que pode rodar por QR code

    • Eu também me surpreendi. É curioso que um projeto tão bom só tenha chegado à página principal do HN duas semanas depois
      Threads relacionadas: link1, link2
    • Na verdade, já tinha aparecido antes — post anterior
  • Eu transformei o código do microgpt em um post de blog com visualizações
    Link do blog
    Ele mostra o fluxo do código de forma interativa enquanto você o acompanha

    • Disseram que, depois do treinamento, ele gera nomes como “kamon”, “karai”, “anna” e “anton”,
      mas, na verdade, os quatro já estão incluídos no dataset
    • Esse texto merece ser publicado separadamente no HN como um artigo
    • Normalmente sou crítico com blogs escritos com ajuda de LLM, mas este é um exemplo realmente excelente
    • Mesmo para mim, que sou iniciante em ML, foi um material tão útil quanto o original do Karpathy
    • Trabalho realmente excelente
  • Ultimamente, a tendência ‘micro’ em IA tem sido interessante
    Em vez de simplesmente aumentar os modelos, modelos pequenos e focados estão ganhando mais eficiência
    Na prática, uso o Gemini Flash para análise de domínio, e a relação velocidade/custo é muito melhor
    Só a diferença de latência já muda o tipo de produto que dá para construir

    • Mas este aqui é um modelo micro voltado mais para fins educacionais do que para aplicações reais
  • Como ele é menor que o nanogpt, chamar de microgpt talvez não faça tanto sentido; acho que picogpt combinaria mais
    Ainda assim, é um projeto muito legal