- MicroGPT é uma implementação mínima de um modelo GPT escrita em 200 linhas de Python puro, projetada para permitir a compreensão visual da estrutura central dos grandes modelos de linguagem
- Treina com um conjunto de dados de 32.000 nomes de pessoas para gerar novos nomes, visualizando passo a passo o processo de tokenização, previsão, cálculo de perda e retropropagação
- Explica, junto com o código, os principais componentes do GPT, como Softmax, Cross-Entropy Loss, Backpropagation, Embedding e Attention
- No processo de treinamento, usa o otimizador Adam para reduzir gradualmente a perda e depois gera vários nomes por meio de controle de temperatura (Temperature Sampling)
- Em uma forma simplificada do algoritmo central de modelos grandes como o ChatGPT, é um material educacional para entender como os LLMs funcionam internamente
Visão geral do MicroGPT
- Explica visualmente o processo de treinamento e inferência de um modelo GPT com base em um script Python de 200 linhas escrito por Andrej Karpathy
- Implementado apenas com Python puro, sem bibliotecas externas
- Inclui os algoritmos básicos de grandes modelos de linguagem como o ChatGPT
- O texto mostra cada etapa do modelo passo a passo com uma abordagem visual amigável para iniciantes
Conjunto de dados e objetivo do treinamento
- Usa como dados de treinamento 32.000 nomes humanos (por exemplo, emma, olivia, ava)
- Cada nome é tratado como um documento, e o modelo aprende os padrões de caracteres dos nomes
- Após o treinamento, gera novos nomes como “kamon”, “karai”, “anna” e “anton”
- O modelo aprende relações estatísticas entre caracteres, o comprimento dos nomes e padrões fonéticos de início e fim
Processo de converter texto em números
- Como a rede neural só processa números, cada caractere é convertido em um ID inteiro
- a–z são definidos como 0–25, e BOS (Beginning of Sequence) como 26
- O token BOS marca o início e o fim do nome
- O tiktoken do GPT-4 tokeniza em pedaços de texto em vez de caracteres, mas o princípio é o mesmo
Previsão do próximo token
- O modelo prevê o próximo caractere com base no contexto fornecido
- Ex.: [BOS] → “e”, [BOS, e] → “m”, [BOS, e, m] → “m”, [BOS, e, m, m] → “a”
- Cada etapa gera pares de entrada (contexto) e alvo (próximo caractere), e esse método é o mesmo usado pelo ChatGPT
Softmax e cálculo de probabilidade
- A saída do modelo é composta por 27 logits, que são convertidos em probabilidades por meio de Softmax
- Cada logit é exponenciado e depois dividido pela soma para gerar uma distribuição de probabilidade
- A operação de subtrair o valor máximo é uma estabilização para evitar overflow
- O resultado do Softmax representa a probabilidade de cada token aparecer em seguida
Cálculo da perda: Cross-Entropy
- A precisão da previsão é calculada como −log(p)
- Quanto maior a probabilidade correta, menor a perda; quanto mais próxima de 0, maior a perda
- Quando p=1, a perda é 0; quando p→0, a perda tende ao infinito
- O treinamento avança na direção de minimizar essa perda
Retropropagação (Backpropagation)
- Calcula quanto cada parâmetro afeta a perda com base no valor da perda
- A diferenciação é feita por meio de um grafo computacional formado por nós para todas as operações (
add, multiply, exp, log etc.)
- Cada nó armazena as entradas e os valores de derivada local, propagando os gradientes no sentido reverso
- Exemplo: L = a⋅b + a (a=2, b=3) → o gradiente de a é 4.0 (soma de dois caminhos)
- O princípio é o mesmo de
loss.backward() do PyTorch
Embedding
- Cada ID de token é convertido em um vetor de 16 dimensões para aprender significado
- O embedding do token e o embedding posicional são somados e usados como entrada
- O papel do mesmo caractere muda de acordo com a posição
- Após o treinamento, caracteres semelhantes (por exemplo, vogais) passam a ter vetores semelhantes
Attention
- Cada token gera vetores Query, Key e Value
- A relevância é calculada pelo produto interno entre Query e Key, e os pesos são obtidos com Softmax
- O Value com soma ponderada é usado como saída
- Aplica-se uma Causal Mask para não consultar tokens futuros
- Quatro attention heads operam em paralelo e aprendem padrões diferentes
Estrutura geral do GPT
- Os tokens de entrada passam pelas seguintes etapas
- Embedding + embedding posicional
- Normalização RMSNorm
- Attention multi-head
- Conexão residual (Residual)
- MLP (expansão para 64 dimensões → ReLU → redução para 16 dimensões)
- Nova conexão residual e cálculo dos logits de saída
- A conexão residual evita o desaparecimento do gradiente
- O RMSNorm mantém estável a magnitude das ativações, estabilizando o treinamento
Loop de treinamento
- Treinamento repetido 1.000 vezes
- Seleção do nome → tokenização → forward pass → cálculo da perda → retropropagação → atualização dos parâmetros
- Uso do otimizador Adam
- Convergência estável por meio de momentum e taxa de aprendizado adaptativa
- A perda inicial cai de cerca de 3,3 para 2,37
- Os nomes gerados evoluem gradualmente de aleatórios para formas mais naturais
Inferência (Inference) e amostragem
- Após o treinamento, começa com BOS e prevê repetidamente o próximo token
- A geração se repete até que BOS apareça novamente
- A Temperature controla a diversidade da amostragem
- Quanto menor, mais determinístico (mais médio); quanto maior, mais criativo, porém mais instável
- A temperatura adequada para gerar nomes é cerca de 0,5
- Exemplo de saída: “karai”
Eficiência e escalabilidade
- O MicroGPT é uma implementação completa simplificada do algoritmo central do GPT
- A diferença em relação ao ChatGPT é apenas de escala
- Em vez de 32.000 nomes, usa-se trilhões de tokens; em vez de 4.192 parâmetros, centenas de bilhões de parâmetros
- Em vez de operações escalares em CPU, usa operações tensoriais em GPU
- O loop básico é o mesmo: tokenização → embedding → attention → previsão → perda → retropropagação → atualização
Conclusão
- O MicroGPT é um modelo educacional para aprender intuitivamente o funcionamento interno do GPT
- Ao simplificar a estrutura complexa dos LLMs em grande escala, permite experimentar diretamente os mecanismos centrais dos modelos de linguagem
1 comentários
Opiniões do Hacker News
Foi dito que, ao fim do treinamento, o modelo gera nomes como "kamon", "karai", "anna" e "anton", mas na prática esses nomes já estão incluídos no dataset
Parece melhor usar outros nomes — link do dataset
Dizem que é para iniciantes, mas não sei quantos iniciantes conseguiriam entender esse tipo de explicação matemática
Por exemplo, a parte que explica a fórmula de cross-entropy loss pareceu complicada demais
Vou repensar isso
A parte que eu não entendo é como um modelo tão simples acaba conseguindo depurar problemas de código arbitrários
Tenho curiosidade sobre como inferência estatística vira “capacidade de raciocínio”
Como uso Claude Code todos os dias, agora realmente parece que isso acontece
A ideia central é que, se você sempre consegue prever corretamente a próxima palavra, no fim consegue responder corretamente a qualquer pergunta
Por isso, recentemente, a área vem evoluindo para buscar a “resposta correta” por meio de abordagens baseadas em aprendizado por reforço, como RLHF e RLVR
Matematicamente, está mais perto de um problema de otimização baseado em cálculo
Não é apenas aprender estatísticas de texto, e sim encontrar uma solução complexa para prever o próximo token
Existem elementos estatísticos nas redes neurais, mas, assim como o cérebro humano, há algo além disso
Li o texto inteiro e, embora houvesse partes úteis, pareceu um caso de “desenhe o resto da coruja”
Parecia que faltavam as conexões entre os conceitos, mas a estrutura interativa foi boa
Seria bom tratar isso com mais profundidade
Fiquei me perguntando se hoje em dia virou moda colocar erros de ortografia ou gramática de propósito para mostrar que um texto não foi escrito por LLM
Tanto no blog do Karpathy quanto neste texto havia vários desses erros
Ele só sustentou por muito tempo o projeto Full Self Driving do Elon, e também não ficou tanto tempo na OpenAI
Hoje em dia, parece focar quase só em code golf e em criar neologismos
O texto original está no blog do Karpathy — link para o texto sobre microGPT
Algumas pessoas disseram que era básico demais, e outras, profundo demais, mas
para alguém como eu, que não entende muito bem como os modelos funcionam, foi uma boa visão geral
Não entendi tudo completamente, mas parece um bom ponto de partida para começar a estudar
Foi um dos tutoriais mais úteis que já vi
Eu nem programava, mas passei a escrever código graças à IA
A explicação é simples e clara, o que ajuda muito na hora de pensar no que digitar para a IA
Parece que a T-Mobile está bloqueando essa página do blog
link para a página de aviso de bloqueio
Depois de ler o texto, entendi que ele imprime nomes, mas fiquei pensando por que usar justamente geração de nomes como exemplo
Daria para fazer o mesmo com qualquer outro tipo de dado