Capítulo 05 · Arquitetura · 14 min

O Transformer completo

Montando as peças: atenção multi-cabeça, feed-forward, normalização, conexões residuais.

Uma pilha de blocos simples

Um Transformer não é uma máquina mágica. É uma pilha de blocos quase idênticos.

Cada bloco recebe uma sequência de vetores, transforma um pouco essa sequência e passa o resultado para o bloco seguinte. Repetido 12, 24, 80 vezes, esse padrão produz representações cada vez mais ricas: primeiro sinais locais, depois relações sintáticas, depois conceitos mais abstratos.

Passe o mouse pelos seis andares do esquema abaixo, na ordem em que um token os atravessa. Em cada andar, faça a si mesmo uma única pergunta: esse sub-módulo faz os tokens conversarem entre si, ou trabalha em cada um isoladamente?

Passe o mouse sobre um sub-bloco para ver seu papel: a attention difunde informação entre tokens, o feed-forward a transforma localmente, a normalização e os residuais estabilizam o resto. Empilhados 32 ou 96 vezes, formam um GPT-4 ou um Claude.

A resposta: um único desses seis andares faz a informação circular entre os tokens — o multi-head attention. Todo o resto trabalha posição por posição, isoladamente. É essa a divisão do trabalho a guardar em mente para o resto do capítulo: a atenção mistura, o feed-forward transforma, a normalização e as residuais estabilizam. E não há mais nada — esse bloco repetido 12 vezes dá um GPT-2 small, repetido 96 vezes um GPT-3.

O esqueleto do bloco

Um bloco Transformer moderno contém três ideias:

  1. Atenção — cada token olha para tokens anteriores e recupera informação útil.
  2. Feed-forward — cada token passa por uma pequena rede que transforma seu vetor de forma independente.
  3. Conexões residuais e normalização — o bloco aprende uma correção, não uma reescrita completa, e mantém as ativações estáveis.

A atenção mistura informação entre tokens. O feed-forward calcula dentro de cada token. Normalização e residuais permitem empilhar tudo muitas vezes sem quebrar.

Por que repetir?

Um único bloco vê relações simples. Vários blocos permitem construir relações sobre relações.

Em uma camada inicial, uma head pode detectar que dorme olha para gato. Em outra camada, essa relação pode influenciar o sentido da frase inteira. Mais acima, o modelo pode usar esse estado para escolher uma continuação coerente.

Cada camada reescreve a sequência com um pouco mais de contexto.

Por isso modelos grandes não têm apenas mais parâmetros: têm mais profundidade. Essa profundidade dá tempo para refinar a representação antes de produzir o próximo token.

O feed-forward é memória

A atenção costuma receber toda a atenção, mas uma grande parte dos parâmetros vive nas camadas feed-forward.

Intuição útil: o feed-forward funciona como uma memória associativa. Quando o vetor de um token ativa certa direção, a camada pode adicionar informação que o modelo aprendeu durante o treinamento.

Ele não "recupera" um documento literal. Ajusta o vetor para torná-lo mais compatível com padrões vistos milhares de vezes.

Na escrita clássica, herdada do GPT-2, esse feed-forward é feito de duas matrizes com uma GELU no meio: alarga-se o vetor para uma dimensão intermediária 4× maior, depois volta-se à dimensão de origem. Os modelos recentes substituem a GELU pelo SwiGLU, que usa três matrizes em vez de duas e uma expansão mais próxima de 8/3× para manter a mesma quantidade de parâmetros. O princípio não muda: alarga-se, depois aperta-se. E quando se fala em "70 bilhões de parâmetros" em um modelo, a esmagadora maioria vive nos FFN.

Residuais: aprender diferenças

Se cada bloco substituísse completamente sua entrada, treinar dezenas de camadas seria instável. Conexões residuais evitam isso:

saída = entrada + mudança aprendida

O bloco não precisa reconstruir tudo do zero. Só aprende o que deve mudar. Se uma parte da informação já está boa, ela pode passar quase intacta.

O esqueleto continua o mesmo do GPT-2 até hoje: blocos idênticos empilhados, conexões residuais, uma normalização antes de cada sub-módulo. Cuidado, porém, com a fórmula "é a mesma arquitetura": ela é verdadeira para o plano de conjunto, falsa no detalhe das peças. Entre 2019 e hoje, praticamente cada componente foi substituído por uma versão mais eficiente: RoPE no lugar das posições aprendidas, RMSNorm no lugar do LayerNorm, SwiGLU no lugar do GELU, GQA no lugar do multi-head clássico — sem contar as variantes Mixture of Experts que aparecem mais abaixo. Mesmo plano, peças diferentes.

A saída: do vetor para a distribuição

Nesse ponto, o último bloco nos dá, para cada posição, um vetor de alguns milhares de dimensões. Como voltamos disso para uma distribuição sobre o vocabulário?

Em uma única etapa. Multiplicamos esse vetor por uma matriz W_out de dimensões (d_model × |vocab|) e aplicamos um softmax. O resultado: para cada posição, uma probabilidade sobre todos os tokens do vocabulário — cerca de 50.000 no GPT-2, 128.000 no Llama 3, 200.000 no GPT-4o. É isso a saída de um LLM — uma distribuição.

Detalhe elegante: em muitos modelos pequenos (GPT-2, Gemma...), W_out compartilha seus pesos com a matriz de embedding de entrada (weight tying). A mesma transformação que mapeia o token 5234 para um vetor, em sentido inverso, mapeia um vetor para a probabilidade do token 5234. Economiza parâmetros e generaliza melhor. Já os modelos grandes (GPT-3, Llama 70B, Mistral...) separam as duas matrizes: nessa escala, o custo em parâmetros fica desprezível, e duas matrizes livres funcionam melhor que uma única restrita.

Mixture of Experts: nem todos os parâmetros disparam

Uma variante arquitetural se tornou dominante nos modelos recentes: Mixture of Experts (MoE). Mixtral, DeepSeek, Qwen, Llama 4 a usam — isso é confirmado, suas arquiteturas são publicadas. Para os modelos fechados (GPT-4, Gemini), só temos vazamentos e estimativas: provável, mas nunca confirmado oficialmente. A nuance merece ser guardada sempre que se lê um número sobre um modelo proprietário.

A ideia: em vez de um único FFN por bloco, colocamos vários em paralelo (tipicamente 8 a 128 experts). Para cada token, uma pequena rede de roteamento (router) seleciona dois ou quatro — os mais relevantes para aquele token. Só esses experts disparam.

Consequência: um modelo pode ter 400 bilhões de parâmetros "totais" mas ativar apenas 50 bilhões por token. Capacidade de um modelo grande, custo de cálculo de um pequeno. É isso que torna o Mixtral 8×7B (47 bilhões de parâmetros) competitivo na inferência com modelos densos bem maiores.

O trade-off: a VRAM precisa caber todos os experts (senão tem que fazer swap), e o roteamento adiciona uma camada de instabilidade no treinamento. Área de pesquisa ainda muito ativa.

O próximo passo

Já temos a arquitetura: tokens → embeddings → atenção → feed-forward → saída. Falta explicar como ela aprende seus pesos. A resposta está no treinamento: predição, erro, gradiente, repetidos em escala enorme.

Atualizado em