- Explica visualmente a estrutura e o princípio de funcionamento do modelo Transformer, mostrando como o mecanismo de atenção melhora o aprendizado em paralelo e o desempenho em tradução
- O modelo é composto por uma pilha de codificadores e decodificadores, e cada codificador é formado por duas camadas: self-attention e rede neural feedforward
- Explica passo a passo o processo de cálculo da self-attention no nível de vetores e matrizes, e o expande com multi-head attention para aprender diferentes espaços de representação
- Visualiza de forma concreta componentes centrais como codificação posicional, conexões residuais, normalização de camada e a atenção com mascaramento no decodificador
- Este texto é um material de referência que ajuda a entender com facilidade os conceitos básicos do Transformer e também é usado em aulas e materiais didáticos de universidades importantes como MIT e Stanford
Visão geral do Transformer
- O Transformer é um modelo de tradução automática neural baseado em atenção e apresenta desempenho superior ao do Google Neural Machine Translation em certas tarefas
- Sua principal vantagem é a facilidade de paralelização, e ele é recomendado como modelo de referência para o Google Cloud TPU
- O modelo é composto por uma pilha de codificadores e decodificadores, e cada codificador tem a mesma estrutura, mas não compartilha pesos
- A entrada do codificador passa por uma camada de self-attention para integrar informações de contexto e depois por uma rede neural feedforward
- Além da estrutura do codificador, o decodificador inclui uma camada de atenção codificador-decodificador para focar nas partes relevantes da frase de entrada
Fluxo de tensores e embeddings
- A frase de entrada é convertida em vetores de 512 dimensões para cada palavra por meio de um algoritmo de word embedding
- Cada camada do codificador recebe e processa uma lista de vetores do mesmo tamanho, e o comprimento da frase é definido como um hiperparâmetro
- Como a camada feedforward processa independentemente o vetor de cada posição, operações paralelas são possíveis
Conceito de self-attention
- A self-attention permite que cada palavra consulte outras palavras da frase para aprender uma representação melhor
- Exemplo: em “The animal didn’t cross the street because it was too tired”, “it” está relacionado a “animal”
- Diferentemente da manutenção de estados ocultos em RNNs, o Transformer integra informações de contexto com self-attention
Etapas de cálculo da self-attention
- A partir de cada embedding de palavra, são gerados vetores Query, Key e Value (dimensão 64)
- O produto escalar (dot product) entre Query e Key calcula a pontuação de relevância entre as palavras
- As pontuações são divididas por √64 e depois passam por softmax para serem normalizadas como uma distribuição de probabilidade
- Cada vetor Value é ponderado pelas pontuações do softmax e somado para gerar a saída final da atenção
- Na implementação real, esse processo é feito com operações matriciais para aumentar a eficiência
Multi-head attention
- Usa várias cabeças de atenção (8 por padrão) para aprender diferentes espaços de representação
- Cada cabeça tem matrizes de pesos Q/K/V independentes
- As saídas de várias cabeças são concatenadas (concat) e depois combinadas com uma matriz de pesos adicional, WO
- Com isso, o modelo consegue captar simultaneamente vários aspectos do contexto
Codificação posicional
- Como o Transformer não processa diretamente a ordem, ele soma um vetor de posição ao embedding de cada palavra
- O vetor de posição é gerado usando funções seno (sin) e cosseno (cos), fornecendo informações sobre a distância relativa entre palavras
- Esse método também pode ser expandido para frases maiores do que as do conjunto de treinamento
- A atualização de 2020 também apresentou uma forma de intercalar (interleave) os dois sinais
Conexões residuais e normalização
- Cada subcamada (self-attention, feedforward) recebe conexão residual (residual connection) e normalização de camada (layer normalization)
- Essa estrutura ajuda a evitar o desaparecimento do gradiente e a melhorar a estabilidade do treinamento
Estrutura do decodificador
- O decodificador recebe vetores Key/Value da saída do codificador para realizar atenção codificador-decodificador
- Com masking, ele é impedido de consultar palavras futuras
- No final, uma camada Linear e uma camada Softmax geram a distribuição de probabilidade das palavras
- Exemplo: se o vocabulário tiver 10.000 termos, cada vetor de saída será convertido em uma distribuição de probabilidade de 10.000 dimensões
Treinamento e função de perda
- Durante o treinamento, a distribuição de probabilidade produzida pelo modelo é comparada com a distribuição correta (codificação one-hot)
- Usa-se cross-entropy ou divergência KL para calcular o erro e ajustar os pesos com retropropagação
- O beam search mantém várias traduções candidatas para aumentar a precisão
Pesquisas posteriores e materiais de referência
- Artigos relacionados: Attention Is All You Need, Training Tips for the Transformer Model, Self-Attention with Relative Position Representations etc.
- Materiais de implementação: pacote Tensor2Tensor, guia Harvard NLP em PyTorch, Colab Notebook
- O Transformer depois evoluiu para uma versão expandida em LLM-book.com (Chapter 3), cobrindo modelos mais recentes como Multi-Query Attention e embeddings posicionais RoPE
Conclusão
- O Transformer, com sua arquitetura baseada em atenção e passível de paralelização, tornou-se um modelo central do deep learning moderno
- Este texto é um material de referência representativo que explica visualmente a estrutura, a matemática e a intuição do Transformer e é usado como leitura de apoio em aulas de universidades importantes como Stanford, MIT e Harvard
1 comentários
Comentários no Hacker News
Li este texto quando estava aprendendo o básico de transformers. As visualizações ajudaram muito
Mas, no trabalho real de aplicar LLMs, conhecer a arquitetura de transformers quase não teve utilidade. Ainda assim, ter uma noção vaga de como funciona por dentro trazia uma sensação de segurança psicológica
Tentar explicar o comportamento de LLMs pela arquitetura é uma armadilha, porque os modelos mais recentes exibem fenômenos emergentes imprevisíveis por causa de reforço de aprendizado e afins
Antigamente eu tinha certeza de que LLMs nunca seriam bons em matemática ou programação, e eu estava completamente errado. No fim, há um limite para inferir as capacidades de um modelo apenas pela arquitetura
Nas férias, estou revisando o assunto implementando um transformer em PyTorch por conta própria. É interessante e divertido
Para começar, recomendo o material LLMs from Scratch, do Sebastian Raschka.
Se alguém aqui já leu o livro do Jay Alammar lançado em 2024, queria saber se ele continua recomendável sob uma perspectiva mais atual
Porque isso dá uma intuição melhor para perceber as limitações do modelo. Foi um conselho que ouvi diretamente do Clem Delangue, da Hugging Face, e depois disso estudei a fundo a arquitetura de LLMs, o que me ajudou muito
Dou o mesmo conselho para formados em bootcamp de programação — dá para trabalhar só com Python e React, mas entender arquitetura de computadores e linguagens de baixo nível faz de você um desenvolvedor muito mais forte no longo prazo
Tokens não são pedaços de palavras, e processamento de linguagem ou de imagem só tem significado na etapa de entrada. Acho que esse mal-entendido ajudou a subestimar o potencial dos transformers
Mas isso na verdade melhora a qualidade do código. Graças ao positional encoding em um causal transformer, o modelo consegue deixar tokens temporários para raciocínio local e esquecê-los facilmente depois
Ou seja, funciona como uma espécie de bloco de rascunho descartável. A solução é fazer pós-processamento da saída do LLM, e não fazer o modelo suprimir a geração de comentários
Desde o lançamento do ChatGPT, a proporção entre esses três grupos quase não mudou, e raramente alguém é convencido por evidências
As visualizações da equipe do Transformer Explainer foram realmente excelentes.
Ver Transformer Explainer junto com o vídeo do 3blue1brown deixa o entendimento bem mais claro
Em um comentário deixado pelo próprio autor Jay Alammar, ele apresenta outros bons materiais para aprender transformers
Link relacionado
Já existem explicações demais sobre transformers, a ponto de isso parecer um tutorial de mônadas.
Algumas pessoas acham que tiveram uma epifania, mas na prática continuam confusas e ainda assim saem compartilhando isso amplamente
Ao aprender conceitos de matemática ou engenharia eletrônica, a primeira explicação costuma ser difícil, mas ao ver várias versões a compreensão acaba se aprofundando
Talvez eu esteja defasado, mas fico me perguntando se transformers substituíram completamente arquiteturas de deep learning existentes como U-net
Por exemplo, CNNs continuam muito fortes e, especialmente em tarefas de visão especializadas como imagens médicas, podem ser mais adequadas
Em modelos invariantes à rotação, redes neurais em grafos, modelos de point cloud e afins, transformers podem até ser inadequados
Ou seja, ainda existem várias arquiteturas alternativas
Artigo relacionado: CNNs can still do just as well
Tenho esse livro, e ele foi realmente uma tábua de salvação quando a equipe decidiu introduzir LLMs no sistema
LLMs são, no fim das contas, sistemas sintéticos que imitam raciocínio humano, então mesmo conhecendo a estrutura interna é difícil prever padrões de erro
É mais importante ganhar sensibilidade por meio de experiência e experimentação
Acho que o interior dos transformers acabará se tornando menos importante, como o interior de compiladores.
A maioria dos desenvolvedores vai se interessar mais por “como usar” do que pela implementação interna
Assim como sistemas operacionais, compiladores e hardware como GPU/TPU precisam continuar evoluindo, transformers também precisam ser continuamente melhorados, então o papel de quem domina esse conhecimento se torna ainda mais importante
Excelente texto, e parece ter inspirado o projeto recente Illustrated Evo 2
Link para o blog da NVIDIA Research
As pessoas tratam Key/Query/Value como se fossem conceitos especiais, mas no fundo o transformer é apenas uma estrutura expandida de multiplicação de matrizes
Se uma camada de rede neural comum faz
matrix * input, o transformer calculainput * MatrixA,input * MatrixB,input * MatrixCe combina os resultadosNo fim, tudo é uma repetição de operações com matrizes. Para mais detalhes, veja o blog do PyTorch
Attention também é aprendida independentemente da posição, transforma grandes trechos da entrada em novos valores e múltiplas heads aprendem aspectos diferentes em paralelo. É um conceito parecido com o kernel de convolution
Este guia é realmente enorme. Usá-lo junto com ferramentas como Claude Code para gerar pseudocódigo em PyTorch ajuda bastante a entender visualmente os conceitos
É um ótimo material para passar algumas horas aprendendo com foco