Capítulo 04 · Atenção · 12 min
Atenção é tudo que você precisa
O mecanismo que muda tudo. Como cada token olha para todos os outros para entender o contexto.
O pronome e o médico
Voltemos a esta frase:
"O médico mandou a enfermeira para casa dela porque ela..."
Para uma pessoa, "ela" se conecta naturalmente à enfermeira. Para um LLM isso não é óbvio: quando ele processa o token ela, a palavra enfermeira está várias posições atrás. Como ele as conecta?
Esse é o papel da atenção.
Por que a atenção existe
Antes de 2017, modelos de linguagem eram em grande parte recorrentes (RNN, LSTM): liam o texto token por token, propagando um "estado oculto" que resumia tudo o que tinham visto até ali.
Problema: esse estado oculto é um gargalo. Tudo precisa passar por ele. Conforme a frase cresce, informações antigas se diluem. E o aprendizado é sequencial: para tratar a centésima palavra, é preciso ter tratado as 99 anteriores, o que dificulta a paralelização.
O paper Attention Is All You Need (Vaswani et al., 2017) propõe uma ruptura:
Sem recorrência. Cada token olha diretamente para todos os outros, em paralelo.
É o mecanismo que torna possíveis os modelos modernos.
A intuição
Em cada camada do modelo, cada token faz três operações:
- Faz uma pergunta ao resto da frase (o vetor Query).
- Cada outro token mostra uma etiqueta que resume o que ele é (o vetor Key).
- O token compara sua pergunta com cada etiqueta: onde há correspondência, recupera um pouco de conteúdo (o vetor Value).
Resultado: uma nova representação para cada token, uma soma ponderada dos outros, em que os pesos vêm das correspondências Q-K.
Attention(Q, K, V) = softmax(QKT / √dk) · V
Não é preciso decorar a fórmula: guarde a ideia. Cada token olha para os outros e mistura o que acha relevante.
De onde saem Q, K e V exatamente?
Não saem do nada. Para cada token, pegamos seu vetor de embedding x e multiplicamos por três matrizes aprendidas durante o treinamento:
Q = x · W_Q
K = x · W_K
V = x · W_V
Essas três matrizes W_Q, W_K, W_V são os parâmetros da atenção. Elas são as mesmas para todos os tokens de uma mesma camada — é o que o modelo ajusta, a cada passo de gradiente, para que as "perguntas" certas encontrem as "etiquetas" certas.
O fator √d_k na fórmula serve para evitar que os produtos escalares explodam quando a dimensão é grande. Sem ele, os valores antes do softmax ficam enormes, o softmax satura e o gradiente morre. Detalhe técnico, mas necessário.
Várias perguntas ao mesmo tempo
Um único conjunto de perguntas não basta. Um token pode precisar olhar para seu sujeito sintático e para sua coreferência e para o verbo principal ao mesmo tempo.
Daí a multi-head attention: em vez de um único sistema Q-K-V, rodamos vários em paralelo (tipicamente 8, 16, 32). Cada um aprende a se especializar em um tipo de relação. Em modelos treinados, vemos heads dedicadas a:
- atenção local (cada token olha para si mesmo ou para vizinhos imediatos)
- ligação sujeito-verbo
- coreferências (pronomes em direção ao referente)
- delimitadores (pontuação, início/fim de frase)
- rima ou estrutura poética
- coisas que ainda não sabemos nomear
Manipule
A visualização abaixo mostra, em duas frases, como a atenção de diferentes heads pode parecer. Os padrões são estilizados (pesos reais viriam de um modelo treinado), mas cada head corresponde a um comportamento observado em modelos atuais.
Cada linha mostra como um token olha para todos os outros. Algumas heads seguem a sintaxe (sujeito ↔ verbo), outras captam a semântica (referentes, antecedentes). Nenhuma destas é programada manualmente: estes padrões emergem do treinamento.
Três coisas para testar:
- Em O gato dorme com a head "Sujeito ↔ verbo", observe a linha
dorme. O peso mais forte vai paragato. O verbo "encontrou" seu sujeito. - Em Coreferência com a head "Coreferência", observe a linha
ele. O peso mais forte volta paramenino. É exatamente o mecanismo que resolve o enigma do pronome. - Em qualquer head, olhe o triângulo superior direito: ele é cinza. É a máscara causal — um token só pode olhar para tokens anteriores. É isso que obriga o modelo a prever, não a copiar.
Causal ou bidirecional?
Nem toda atenção é igual. Existem dois regimes.
Bidirecional. Cada token enxerga todos os outros, para trás e para frente. É o que o BERT (Google, 2018) e o lado encoder do T5 usam. Esses modelos são ótimos para entender uma frase — classificação, perguntas e respostas extrativas, busca semântica — mas não geram texto token por token.
Causal. Cada token só enxerga os anteriores. É a máscara triangular vista acima. Essa restrição é o que torna possível a geração autoregressiva: para prever a próxima palavra, o modelo precisa trabalhar só com o passado.
GPT, Claude, Llama, Gemini, Mistral — todos os LLMs voltados ao público usam atenção causal. É essa máscara que os torna capazes de prever, não apenas de descrever.
A atenção custa
Essa elegância tem um preço. Para uma sequência de comprimento n, calcular a matriz de atenção exige O(n²) operações. Dobrar o tamanho do contexto quadruplica o custo.
Por isso as primeiras janelas de contexto eram tão estreitas: 1.024 tokens no GPT-2 (2019), 2.048 no GPT-3 (2020), 4.096 no GPT-3.5 (2022). Foram necessárias duas famílias de técnicas para sair disso: otimizações de memória como o FlashAttention, que não muda nada no O(n²) mas o torna praticável ao reorganizar os acessos à GPU, e aproximações como o sliding window ou a sparse attention, que abrem mão de olhar todos os tokens. Os modelos atuais sustentam rotineiramente o milhão de tokens, e alguns anunciam mais. Voltamos a essas técnicas no capítulo 18, onde elas se conectam à memória do KV cache.
A atenção é poderosa; também é o principal gargalo dos LLMs modernos.
O próximo passo
A atenção sozinha não faz um modelo de linguagem. É preciso empilhá-la em blocos sucessivos, adicionar camadas de cálculo "feed-forward", normalizações, conexões residuais. Essa é a arquitetura Transformer completa: o tema do próximo capítulo.
Atualizado em