A computação: para entrada X, calcule Q = X·W_Q, K = X·W_K, V = X·W_V. Então: Attention(Q,K,V) = softmax(Q·K^T / √d_k) · V. O softmax(Q·K^T) produz uma matriz de atenção N×N onde a entrada (i,j) representa quanto o token i presta atenção ao token j. A escala √d_k impede que os produtos escalares cresçam demais em altas dimensões, o que empurraria o softmax para regiões saturadas com gradientes próximos de zero.
Em LLMs decoder-only (GPT, Claude, Llama), self-attention é causal: cada token só pode prestar atenção a tokens anteriores (incluindo a si mesmo). Isso é imposto por uma máscara causal que define posições futuras como −∞ antes do softmax. Em modelos encoder (BERT), self-attention é bidirecional: cada token presta atenção a todos os outros tokens. A restrição causal é o que torna a geração autorregressiva possível — o modelo não pode "espiar" tokens futuros.
Self-attention computa uma matriz de atenção N×N, tornando-a O(N²) tanto em tempo quanto em memória. Para um contexto de 128K tokens, são ~16 bilhões de entradas por camada por cabeça. Essa escala quadrática é a limitação fundamental que impulsiona pesquisas em atenção esparsa, atenção linear, Flash Attention (que reduz memória mas não computação) e SSMs (que evitam a matriz N×N inteiramente). Toda abordagem para modelagem de contexto longo é, em última análise, sobre gerenciar esse custo quadrático.