Transformer
Um Transformer é uma rede neural baseada em autoatenção que processa uma sequência inteira em paralelo. Veja como funciona, suas variantes e seu uso em visão.
Um transformer é uma arquitetura de rede neural que processa uma sequência de tokens, como palavras ou recortes de imagem, permitindo que cada token extraia informações de todos os outros por meio da autoatenção. Pesquisadores do Google o apresentaram em 2017 no artigo Atenção é tudo de que você precisa, para tradução automática. As redes neurais recorrentes (RNNs) anteriores liam uma frase palavra por palavra, o que impedia a paralelização do treinamento entre as posições. O transformer processa todas as posições de uma vez, e seu modelo-base alcançou resultados de ponta em tradução do inglês para o alemão após 12 horas de treinamento em oito GPUs. Hoje, os transformers são a base dos grandes modelos de linguagem (LLMs), dos transformers de visão, do reconhecimento de fala e de muitos modelos de detecção de objetos e geração de imagens.
Como funcionam os Transformers#
Os tokens de entrada são primeiro convertidos em embeddings, vetores de largura fixa (512 no modelo original). Em seguida, um transformer aplica uma pilha de camadas idênticas, cada uma com duas subcamadas:
- Autoatenção multi-head: Cada token produz um vetor de consulta, uma chave e um valor. A saída de um token é uma média ponderada de todos os vetores de valor, ponderada pela correspondência entre sua consulta e cada chave, conforme descrito no mecanismo de atenção. Várias cabeças são executadas em paralelo — 8 no modelo original — para que possam acompanhar relações diferentes.
- Rede feed-forward: Uma rede de duas camadas aplicada separadamente a cada token, que transforma as informações reunidas pela atenção.
Uma conexão residual envolve cada subcamada, e a normalização de camada mantém as ativações estáveis. O modelo original empilhava 6 dessas camadas em um codificador, que lê a frase de origem, e 6 em um decodificador, que escreve a tradução, um token por vez. Cada camada do decodificador adiciona uma etapa de autoatenção mascarada, que oculta os tokens futuros, e uma etapa de atenção cruzada, que lê a saída do codificador:
A atenção compara os tokens apenas pelo conteúdo, então uma camada Transformer não tem uma noção de ordem incorporada: embaralhar os tokens de entrada apenas embaralha as saídas. Por isso, as informações de posição são adicionadas aos embeddings dos tokens por meio de padrões fixos de seno e cosseno do artigo original, de vetores posicionais aprendidos no BERT e no ViT ou de embeddings posicionais rotativos (RoPE) na maioria dos LLMs atuais. Este código PyTorch mostra o efeito com uma camada de codificador:
import torch
from torch import nn
# Uma camada de codificador transformer e uma sequência de 5 embeddings de tokens
torch.manual_seed(0)
layer = nn.TransformerEncoderLayer(d_model=32, nhead=4, batch_first=True).eval()
tokens = torch.randn(1, 5, 32)
reverse = torch.arange(4, -1, -1)
# A autoatenção, por si só, ignora a ordem: inverter a entrada apenas inverte a saída
print(torch.allclose(layer(tokens[:, reverse])[:, reverse], layer(tokens), atol=1e-5))
# Adicionar um vetor aprendido por posição faz cada saída depender do lugar ocupado pelo token
positions = nn.Embedding(5, 32).weight
reordered = layer(tokens[:, reverse] + positions)[:, reverse]
print(torch.allclose(reordered, layer(tokens + positions), atol=1e-5))Ele imprime True e, em seguida, False: inverter os tokens apenas inverte as saídas até que os vetores posicionais sejam adicionados; depois disso, a ordem dos tokens altera a saída de cada token.
Modelos de codificador, decodificador e codificador-decodificador#
As três maneiras de usar a pilha original atendem a funções diferentes:
- Somente codificador: Cada token presta atenção à entrada inteira nas duas direções, o que é adequado para tarefas de compreensão. O BERT para texto e o ViT para imagens usam somente codificador.
- Somente decodificador: Cada token presta atenção apenas aos tokens anteriores, então o modelo gera texto um token por vez. Os modelos GPT e a maioria dos LLMs atuais usam esse projeto.
- Codificador-decodificador: Um codificador lê uma sequência e um decodificador escreve outra enquanto presta atenção à primeira, como nos modelos de tradução, no T5 e no reconhecedor de fala Whisper.
Transformers em visão computacional#
O Vision Transformer (ViT) trata uma imagem como uma sequência de recortes de 16×16 pixels e aplica um codificador transformer sem modificações; o Swin Transformer limita a atenção a janelas locais para lidar com imagens de alta resolução. O DETR reformulou a detecção como previsão de conjuntos: um decodificador transformer converte um conjunto fixo de consultas de objeto aprendidas em caixas, uma por consulta, eliminando a supressão não máxima (NMS) e as âncoras projetadas manualmente. O pacote Ultralytics executa o RT-DETR da Baidu, uma versão em tempo real desse projeto. Seu codificador híbrido aplica uma camada de codificador transformer somente ao mapa de características com stride 32 — 400 tokens para uma imagem de 640×640 — e seu decodificador de 6 camadas refina 300 consultas de objeto em detecções finais sem NMS. Transformers também geram imagens: os transformers de difusão substituíram a U-Net em modelos recentes de texto para imagem e de vídeo, e os modelos de visão e linguagem fornecem tokens de imagem a um LLM somente decodificador.
Transformers e arquiteturas relacionadas#
- Redes neurais convolucionais (CNNs): Uma convolução enxerga uma pequena vizinhança usando o mesmo filtro em todas as posições, uma suposição incorporada que ajuda em conjuntos de dados pequenos. A atenção pode conectar quaisquer duas posições em uma única camada, mas precisa aprender a estrutura espacial a partir dos dados; por isso, transformers geralmente precisam de mais dados de treinamento ou pré-treinamento para superar as CNNs.
- RNNs e LSTMs: Elas carregam um estado de tamanho fixo de uma etapa para a seguinte, mantendo constante a memória por token, mas o treinamento é sequencial. Um transformer mantém todos os tokens anteriores disponíveis e treina em paralelo.
- Modelos de espaço de estados: Arquiteturas como Mamba processam sequências com um estado recorrente cujo custo cresce linearmente com o comprimento, e modelos híbridos intercalam essas arquiteturas com camadas de atenção.
A autoatenção compara cada token com todos os outros, então seu custo cresce com o quadrado do comprimento da sequência. Uma sequência de 4.096 tokens tem cerca de 16,8 milhões de pares consulta-chave em cada cabeça de cada camada; dobrar o comprimento para 8.192 tokens quadruplica esse número para cerca de 67 milhões. O FlashAttention reduz o tráfego de memória desse cálculo, e o cache KV armazena as chaves e os valores dos tokens anteriores para que o decodificador os calcule apenas uma vez durante a geração.










