Por que Transformers: atenção como alternativa à recorrência
Em tarefas com sequências (texto, áudio, séries temporais), o objetivo é construir representações que capturem relações entre elementos distantes e próximos. Em modelos recorrentes, essa dependência é processada passo a passo no tempo. Já em Transformers, o mecanismo central é a atenção: para representar um elemento (por exemplo, uma palavra), o modelo aprende a ponderar o quanto cada outro elemento da sequência é relevante para ele.
A ideia prática é: para cada posição, o modelo cria uma mistura (soma ponderada) de informações das demais posições. Isso substitui a recorrência em muitos casos porque: (1) permite acesso direto a qualquer posição (dependências longas sem “caminhar” pela sequência), e (2) permite paralelismo no treinamento e inferência por camada, já que todas as posições podem ser processadas ao mesmo tempo.
Embeddings: transformando tokens em vetores treináveis
Transformers operam sobre vetores. Antes da atenção, cada token (palavra, subpalavra ou símbolo) é mapeado para um vetor denso chamado embedding.
- Embedding de token: uma tabela (matriz) onde cada token tem um vetor associado. Esses vetores são aprendidos durante o treinamento.
- Dimensão do embedding (d_model): tamanho do vetor que representa cada token. Valores comuns em modelos reais vão de centenas a milhares.
Exemplo conceitual: a frase “o gato bebe leite” vira uma sequência de vetores x_1, x_2, x_3, x_4, um por token.
Autoatenção (Self-Attention): Query, Key e Value
Na autoatenção, cada posição da sequência “consulta” as demais posições para decidir de onde extrair informação. Isso é feito criando três projeções lineares para cada token:
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
- Query (Q): o que a posição atual está procurando.
- Key (K): o que cada posição oferece como “chave” para ser comparada.
- Value (V): a informação que será combinada (misturada) se aquela posição for relevante.
Para uma sequência com matriz de embeddings X (shape: seq_len × d_model), calculamos:
Q = X W_Q K = X W_K V = X W_VEm seguida, calculamos uma pontuação de similaridade entre cada query e todas as keys. A forma padrão é o produto escalar, com escala para estabilidade:
scores = (Q K^T) / sqrt(d_k)Aplicamos softmax para transformar pontuações em pesos que somam 1:
weights = softmax(scores)E finalmente obtemos a saída da atenção como soma ponderada dos values:
Attention(X) = weights VPasso a passo prático (visão operacional)
- 1) Entrada: embeddings dos tokens
X. - 2) Projeções: calcular
Q, K, Vcom matrizes treináveis. - 3) Similaridade: calcular
scoresentre cada posição e todas as outras. - 4) Normalização: aplicar
softmaxpara obter pesos de atenção por posição. - 5) Mistura: combinar
Vcom os pesos, gerando uma nova representação por token.
Exemplo conceitual: atenção em uma frase curta
Considere a frase: “João viu Maria porque ela sorriu”. Queremos atualizar a representação do token “ela”. Idealmente, “ela” deve se conectar a “Maria” (referência) mais do que a “João”.
Na autoatenção, a posição de “ela” gera uma query q_ela. Cada token gera uma key (k_joão, k_viu, k_maria, …). O modelo aprende que q_ela deve ter alta similaridade com k_maria quando o contexto sugere correferência.
| Token (posição) | Intuição de relevância para “ela” | Peso de atenção (exemplo) |
|---|---|---|
| João | Possível referente, mas menos provável aqui | 0,10 |
| viu | Verbo, ajuda pouco na identidade de “ela” | 0,05 |
| Maria | Referente mais provável | 0,60 |
| porque | Conector, estrutura a relação causal | 0,10 |
| sorriu | Ajuda a inferir gênero/entidade em alguns contextos | 0,15 |
A nova representação de “ela” após atenção é uma combinação dos V de todos os tokens, com maior contribuição de “Maria”. Isso permite que a representação carregue informação contextual (correferência) sem precisar de um estado recorrente que percorra a frase.
Múltiplas cabeças (Multi-Head Attention): várias “perspectivas” em paralelo
Uma única atenção pode capturar um tipo de relação dominante. Em multi-head attention, o modelo executa várias atenções em paralelo, cada uma com projeções próprias, permitindo capturar relações diferentes simultaneamente (por exemplo, concordância gramatical, correferência, dependências sintáticas, relações semânticas).
Formalmente, para cada cabeça h:
head_h = Attention(X W_Q^h, X W_K^h, X W_V^h)Depois concatenamos as cabeças e projetamos de volta para d_model:
MultiHead(X) = Concat(head_1, ..., head_H) W_OPasso a passo prático (o que muda com várias cabeças)
- 1) Dividir capacidade: cada cabeça trabalha com dimensão menor (
d_k), mantendo custo controlado. - 2) Atenções independentes: cada cabeça aprende padrões distintos de alinhamento.
- 3) Fusão: concatenar e misturar para formar uma representação única por token.
Posição: por que precisamos de Positional Encoding
Autoatenção, por si só, não impõe ordem: se você embaralhar os tokens, as operações de similaridade ainda funcionam do mesmo modo. Para que o modelo saiba quem vem antes/depois, adicionamos informação de posição aos embeddings.
- Positional encoding fixo: vetores determinísticos (por exemplo, funções senoidais) somados aos embeddings.
- Positional embedding aprendível: uma tabela de vetores por posição, aprendida no treinamento.
- Variações modernas: codificações relativas (a relação “distância” entre tokens) podem melhorar generalização para comprimentos diferentes.
Na prática, a entrada para a primeira camada costuma ser:
X0 = TokenEmbedding(tokens) + PositionalEncoding(positions)Residual connections e LayerNorm: treinando profundo com estabilidade
Transformers empilham muitas camadas. Dois componentes são essenciais para manter o treinamento estável e permitir profundidade:
Residual connections (atalhos)
Em vez de substituir completamente a representação, cada sub-bloco (atenção ou MLP) é adicionado à entrada original:
Y = X + SubBlock(X)Isso facilita o fluxo de gradiente e permite que a camada aprenda “correções” incrementais, em vez de reconstruir tudo do zero.
LayerNorm
LayerNorm normaliza as ativações por token (ao longo das dimensões do vetor), ajudando a controlar escalas internas e estabilizar a otimização. É comum ver variantes:
- Post-LN:
Y = LayerNorm(X + SubBlock(X)) - Pre-LN:
Y = X + SubBlock(LayerNorm(X))(frequentemente mais estável em redes muito profundas)
O ponto-chave: residual + normalização tornam viável empilhar blocos de atenção e manter gradientes utilizáveis.
Paralelismo em sequências: onde Transformers ganham eficiência
Em uma camada de Transformer, as projeções Q, K, V e os produtos matriciais são operações altamente paralelizáveis em hardware moderno. Como todas as posições são processadas simultaneamente, o tempo por camada não cresce linearmente com a dependência temporal como em abordagens estritamente sequenciais.
Esse paralelismo é especialmente vantajoso no treinamento com lotes grandes e sequências moderadas, pois a computação vira essencialmente álgebra linear densa.
Aplicações típicas e limitações
Aplicações típicas
- Modelagem de linguagem: previsão do próximo token, geração de texto, sumarização, resposta a perguntas.
- Tradução e tarefas sequência-a-sequência: codificar uma sequência e decodificar outra.
- Classificação de texto: sentimento, intenção, tópicos, detecção de spam.
- Visão e multimodal: variantes com patches (imagens) e fusão texto-imagem.
- Áudio: reconhecimento de fala e modelagem de sequências acústicas (com adaptações).
Limitações (custo computacional e contexto)
- Custo quadrático em relação ao comprimento: a matriz
scorestem tamanhoseq_len × seq_len, tornando atenção completa cara em memória e tempo para sequências longas. - Janela de contexto finita: o modelo só “enxerga” até um certo número de tokens; além disso, informações muito antigas podem ser truncadas ou resumidas.
- Inferência auto-regressiva pode ser lenta: em geração token a token, apesar do paralelismo por camada, a saída é produzida sequencialmente (um token por passo), exigindo cache de
K/Vpara eficiência. - Sensibilidade a dados e alinhamento: a qualidade depende fortemente de dados, tokenização e objetivos de treinamento; atenção não garante por si só raciocínio correto.