Ir para o conteúdo

12. Attention Mechanisms

Mecanismos de Atenção

O mecanismo de atenção é uma das inovações mais impactantes na história do aprendizado profundo. Introduzido por Bahdanau et al. (2015)1 para tradução automática, ele permitiu que redes neurais aprendessem onde olhar em uma sequência de entrada — em vez de comprimir tudo em um único vetor de contexto.

Intuitivamente, atenção é o que você faz ao ler esta frase: seus olhos e cérebro não processam todas as palavras com igual peso. Ao interpretar "O gato sentou no tapete porque ele estava confortável", o pronome ele direciona a atenção para tapete — não gato ou sentou. Redes com atenção aprendem esse comportamento automaticamente.


Intuição: Query, Key e Value

O mecanismo de atenção é formalizado por três conceitos: Query (Q), Key (K) e Value (V).

Pense na analogia de uma busca em banco de dados:

  • Query — o que você está buscando (ex: vetor da palavra "it")
  • Key — o índice de cada item disponível (ex: vetor de cada palavra na frase)
  • Value — o conteúdo real retornado na correspondência (ex: representação semântica de cada palavra)

A atenção calcula um produto escalar entre a Query e cada Key, normaliza com softmax e usa os pesos resultantes para combinar os Values:

\[ \text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V \]

O fator \(\sqrt{d_k}\) estabiliza gradientes quando a dimensão \(d_k\) é grande.


Interativo: Atenção sobre uma Frase

Clique em qualquer palavra para ver como ela "presta atenção" às outras palavras. Os pesos são ilustrativos e pré-computados para demonstrar o conceito.

← Clique em uma palavra acima

Atenção por Produto Escalar Escalado — Passo a Passo

Dado um conjunto de vetores de entrada \(X \in \mathbb{R}^{n \times d}\) (n tokens, dimensão d), matrizes de projeção \(W_Q, W_K, W_V\) produzem:

\[ Q = X W_Q, \quad K = X W_K, \quad V = X W_V \]

Passo 1 — Pontuações de similaridade:

\[ S = \frac{Q K^\top}{\sqrt{d_k}} \in \mathbb{R}^{n \times n} \]

Passo 2 — Normalização Softmax:

\[ A = \text{softmax}(S), \quad A_{ij} = \frac{e^{S_{ij}}}{\sum_k e^{S_{ik}}} \]

Passo 3 — Saída ponderada:

\[ \text{Saída} = A \cdot V \]

A matriz \(A\) é a matriz de atenção: cada linha soma 1 e representa quanto o token \(i\) presta atenção a todos os outros tokens.


Playground de Pesos de Atenção

O playground abaixo calcula atenção com vetores bidimensionais. Ajuste os valores e observe os pesos mudarem.

Q (query): [q1, q2]
d_k (dimensão das chaves)
Chaves K (3 tokens × 2 dims)
K1: ,
K2: ,
K3: ,

Atenção Multi-Cabeça

Uma única cabeça de atenção captura um tipo de relacionamento entre tokens. A Atenção Multi-Cabeça executa \(h\) cabeças em paralelo, cada uma com projeções independentes \(W_Q^i, W_K^i, W_V^i\):

\[ \text{MultiHead}(Q,K,V) = \text{Concat}(\text{cabeça}_1, \ldots, \text{cabeça}_h)\, W^O \]
\[ \text{cabeça}_i = \text{Attention}(Q W_Q^i,\; K W_K^i,\; V W_V^i) \]

Cada cabeça pode especializar-se: uma captura dependências sintáticas, outra correferências, outra padrões posicionais.


Self-Attention vs. Cross-Attention

Tipo Q de K, V de Uso típico
Self-Attention mesma sequência mesma sequência Encoder Transformer, BERT
Cross-Attention sequência alvo sequência fonte Decoder Transformer, CLIP
Causal Self-Attention mesma seq (mascarada) mesma seq GPT, decoders autorregressivos

Na causal self-attention, uma máscara triangular inferior é aplicada antes do softmax, impedindo que o token \(i\) veja tokens futuros \(j > i\):

\[ M_{ij} = \begin{cases} 0 & \text{se } j \leq i \\ -\infty & \text{se } j > i \end{cases} \]

Codificação Posicional

A atenção é invariante a permutações — embaralhar tokens não afeta as pontuações. Para injetar informação de posição, o Transformer original usa codificações senoidais:

\[ PE_{(pos, 2i)} = \sin\!\left(\frac{pos}{10000^{2i/d}}\right), \quad PE_{(pos, 2i+1)} = \cos\!\left(\frac{pos}{10000^{2i/d}}\right) \]

Modelos modernos (LLaMA, GPT-4) usam RoPE (Rotary Position Embedding), que aplica rotações aos vetores Q e K, capturando posição relativa de forma mais eficaz.


Complexidade e Eficiência

A atenção padrão é \(O(n^2 d)\) em tempo e memória — cara para sequências longas. Variantes eficientes:

Método Complexidade Ideia
Softmax Attention (padrão) \(O(n^2)\) Matriz de atenção completa
Sparse Attention \(O(n\sqrt{n})\) Atenção local + global
Linear Attention \(O(n)\) Decomposição por kernel
FlashAttention \(O(n^2)\) tempo, \(O(n)\) memória Tiling eficiente em SRAM

FlashAttention3 é o padrão moderno: matematicamente idêntico, mas reordena cálculos para minimizar transferências HBM↔SRAM na GPU.