6 Mecanismo de Atenção
6.1 O Problema que a Atenção Resolve
Antes do mecanismo de atenção, as redes neurais recorriam a processar sequências passo a passo, o que tornava difícil capturar relações entre elementos distantes na sequência. Imagine uma frase como “O médico que a enfermeira que o paciente consultou recomendou agendou uma consulta”. Compreender quem fez o quê requer rastrear relações entre palavras muito distantes.
O mecanismo de atenção resolve esse problema permitindo que cada elemento da sequência “preste atenção” diretamente a qualquer outro elemento, independentemente da distância entre eles. Em vez de depender de um estado oculto sequencialmente propagado, a atenção cria conexões diretas e ponderadas entre todas as posições.
6.2 Atenção Escalar (Scaled Dot-Product Attention)
O mecanismo de atenção básico opera através de três vetores aprendidos para cada token: a query (Q), a key (K) e o value (V). A query representa o que estamos buscando; a key representa o que cada posição oferece; e o value representa o conteúdo real a ser agregado.
Matematicamente, a atenção é calculada como:
Attention(Q, K, V) = softmax(QK^T / √d_k) * V
Onde d_k é a dimensionalidade dos vetores de query e key. A divisão por √d_k é crucial para evitar que os produtos escalares se tornem muito grandes em altas dimensões, o que faria com que a função softmax produzisse gradientes muito pequenos durante o treinamento.
O produto QK^T calcula a similaridade entre todas as queries e todas as keys. A operação softmax normaliza esses valores para que somem a um, produzindo pesos de atenção que indicam quanto cada posição deve contribuir para a representação da posição atual. Esses pesos são então usados para ponderar os values correspondentes.
6.3 Atenção Multi-Head
Em vez de realizar atenção com vetores de alta dimensão uma única vez, o Transformer utiliza múltiplas “cabeças” de atenção em paralelo. Cada cabeça de atenção opera em um subespaço de menor dimensionalidade da representação original, permitindo que o modelo capture diferentes tipos de relações simultaneamente.
Por exemplo, uma cabeça pode aprender a prestar atenção a relações sintáticas (sujeito-verbo), outra a relações semânticas (sinônimos), outra a relações de coreferência (pronome-referente), e assim por diante. As saídas de todas as cabeças são concatenadas e projetadas linearmente para produzir a saída final da camada de atenção.
6.4 Auto-Atenção versus Atenção Cruzada
A auto-atenção (self-attention) é quando queries, keys e values vêm da mesma sequência. Isso permite que posições da sequência interajam umas com as outras, capturando dependências contextuais. A maioria das camadas no Transformer usa auto-atenção.
A atenção cruzada (cross-attention) ocorre quando queries vêm de uma sequência e keys/values vêm de outra. No contexto de LLMs, isso é útil em modelos multimodais, onde uma parte do modelo processa texto e outra processa imagens, por exemplo, e as representações visuais informam a geração de texto.
6.5 Custo Computacional e Atenção Eficiente
A complexidade computacional da atenção é quadrática em relação ao comprimento da sequência, pois cada posição precisa attend a todas as outras posições. Isso representa um desafio significativo para processar textos muito longos, pois o custo computacional cresce rapidamente.
Diversas técnicas foram desenvolvidas para mitigar esse problema, incluindo atenções esparsas, atenções lineares que aproximam a atenção completa com complexidade linear, e métodos que processam sequências em blocos. Essas abordagens são particularmente relevantes para aplicações que exigem processamento de documentos longos, como análise de livros ou transcripts de vídeos.