Em sua essência, attention computa uma soma ponderada. Para cada token em uma sequência, o mecanismo pergunta: "Quão relevante é cada outro token para mim agora?" Ele faz isso através de três projeções aprendidas — queries, keys e values (o Q, K, V que você vê em todo artigo). A query de um token é multiplicada (dot product) pelas keys de todos os tokens para produzir um conjunto de scores, esses scores passam por softmax para virar pesos, e os pesos são usados para mesclar os values em uma representação que incorpora o contexto. Toda a operação é diferenciável, então o modelo aprende quais relações importam durante o treinamento. Multi-head attention roda várias dessas em paralelo com projeções diferentes, permitindo que o modelo preste atenção a diferentes tipos de relações simultaneamente — uma head pode rastrear sintaxe enquanto outra rastreia correferência.
A descoberta prática do self-attention foi o paralelismo. Redes recorrentes como LSTMs processavam tokens um de cada vez, o que significava que o treinamento era inerentemente sequencial e lento. Attention processa a sequência inteira de uma vez, transformando o treinamento em uma multiplicação massiva de matrizes que GPUs devoram. É por isso que Transformers puderam escalar para bilhões de parâmetros e trilhões de tokens de treinamento — o hardware já estava construído para exatamente esse tipo de carga de trabalho. Todo LLM importante com o qual você interage hoje, do GPT-4 ao Claude, passando pelo Llama 3 e pelo Mistral, deve sua existência a essa vantagem de paralelismo.
O elefante na sala é a escala quadrática. Attention padrão computa um score para cada par de tokens, então dobrar sua janela de contexto quadruplica a computação e a memória. Um modelo de contexto 4K usa 16 milhões de scores de attention por camada por head; salte para 128K e você está em 16 bilhões. É por isso que estender janelas de contexto tem sido um esforço de engenharia tão massivo. O Flash Attention (de Tri Dao) atacou o lado da memória reestruturando a computação para evitar materializar a matriz completa de attention na HBM da GPU, tornando contextos longos práticos sem mudar a matemática. Grouped-query attention (GQA), usado no Llama 2 e modelos mais novos, compartilha heads de key-value entre heads de query para reduzir o KV cache que se acumula durante a geração.
Cross-attention é uma variante que vale a pena entender separadamente. Em modelos encoder-decoder e em geração condicional (como texto-para-imagem), as queries vêm de uma sequência enquanto as keys e values vêm de outra. É assim que o Stable Diffusion condiciona no seu prompt de texto — as queries do lado da imagem fazem attention nas saídas do text encoder. É também como o Transformer original lidava com tradução: o decoder fazia attention nas saídas do encoder para decidir o que gerar em seguida.
Um equívoco comum é que attention é "compreensão". Não é. Attention é um mecanismo de roteamento — ele decide para onde a informação flui, mas o processamento real acontece nas camadas feedforward que seguem cada bloco de attention. Pesquisas como o trabalho "Transformer Circuits" da Anthropic mostraram que heads de attention desenvolvem papéis especializados (induction heads, previous-token heads), mas esses são padrões aprendidos, não lógica programada. Outro detalhe prático: attention não sabe inerentemente a ordem dos tokens. Sem codificações posicionais (sinusoidal, aprendida ou rotária como RoPE), ele trata uma sequência como um conjunto desordenado de tokens. Acertar a codificação posicional se revelou crítico para o desempenho com contextos longos, e é por isso que abordagens como ALiBi e RoPE continuam evoluindo.