Sparse Attention
A atenção esparsa permite que cada token preste atenção a um subconjunto escolhido de outros tokens, como uma janela local, tokens globais ou seleções top-k, reduzindo o custo de sequências longas.
A atenção esparsa é uma família de mecanismos de atenção em que cada consulta calcula pontuações apenas para um subconjunto escolhido de chaves, em vez de considerar todas as chaves da sequência. A autoatenção completa sobre N tokens calcula N² pontuações por cabeça; por isso, duplicar o comprimento de um documento quadruplica o custo da atenção, enquanto um padrão em que cada token atende a k outros custa N·k. O padrão pode ser definido antecipadamente, como uma janela local, ou escolhido com base no conteúdo, por exemplo, selecionando as chaves com pontuação mais elevada para cada consulta. O Sparse Transformer da OpenAI, de 2019, usou padrões espaçados com um custo O(N√N) para modelar sequências com dezenas de milhares de etapas, e os atuais modelos de linguagem de grande porte (LLMs) usam camadas esparsas para processar janelas de contexto com mais de 100.000 tokens.
Padrões de esparsidade comuns#
Os padrões fixos determinam antecipadamente quais pares recebem pontuações. A atenção com janela deslizante permite que cada token veja apenas os w tokens anteriores: o Mistral 7B usa uma janela de 4.096 tokens, e os modelos de pesos abertos gpt-oss da OpenAI alternam camadas densas com camadas de janela de 128 tokens, a mesma alternância entre camadas densas e localmente agrupadas usada pelo GPT-3. Cada camada com janela transporta informação mais w tokens à frente; assim, uma pilha profunda continua a ligar tokens distantes. Os padrões espaçados acrescentam cada s-ésimo token anterior, fazendo também com que a informação salte longas distâncias numa única camada. Os tokens globais atendem a todas as posições e são atendidos por todas elas: o Longformer atribui-os a tokens de tarefa, como um token de classificação; o BigBird também acrescenta ligações aleatórias; e os sumidouros de atenção mantêm os primeiros tokens visíveis para todas as consultas, para estabilizar a geração em fluxo.
Os padrões baseados no conteúdo escolhem os pares a partir dos dados. A Native Sparse Attention da DeepSeek (NSA, 2025) combina resumos comprimidos de blocos de chaves, uma seleção dos blocos mais relevantes e uma janela deslizante, sendo tudo treinado de ponta a ponta. A DeepSeek Sparse Attention do DeepSeek-V3.2 executa um pequeno «indexador relâmpago» que atribui uma pontuação a cada token anterior para cada consulta e, em seguida, calcula a atenção completa apenas sobre os 2.048 tokens com as pontuações mais altas; assim, o principal custo de atenção de cada consulta mantém-se fixo, independentemente do crescimento do contexto. Os modelos de produção combinam frequentemente estas regras:
Transformar um padrão em ganhos de eficiência#
Uma máscara aplicada a uma matriz densa de pontuações continua a calcular todas as pontuações; por isso, os ganhos de velocidade dependem de kernels que ignorem os blocos vazios da matriz. Os kernels de atenção Flash suportam diretamente janelas deslizantes, e o FlexAttention do PyTorch compila qualquer função de máscara num kernel GPU esparso por blocos. O seu create_block_mask mostra quais blocos esse kernel ignora para uma janela de 1.024 tokens mais quatro tokens sumidouro:
from torch.nn.attention.flex_attention import create_block_mask
seq_len, window, sinks = 8192, 1024, 4
def local_plus_sinks(b, h, q_idx, kv_idx):
"""Causal attention to the previous 1,024 tokens plus the first 4 tokens."""
causal = q_idx >= kv_idx
return causal & ((q_idx - kv_idx <= window) | (kv_idx < sinks))
# FlexAttention divide a máscara em blocos de 128 x 128 para que os kernels possam ignorar blocos vazios
block_mask = create_block_mask(local_plus_sinks, B=None, H=None, Q_LEN=seq_len, KV_LEN=seq_len, device="cpu")
print(block_mask)A saída apresenta sparsity=85.47%, a proporção de blocos de 128 × 128 da matriz de pontuações de 8.192 × 8.192 que não contêm nenhum par permitido, e representa o padrão como uma faixa diagonal correspondente à janela e uma coluna à esquerda correspondente aos tokens sumidouro. Quando flex_attention é executado em torch.compile, o kernel ignora esses blocos por completo.
Atenção esparsa e conceitos relacionados#
- Atenção Flash: um kernel consciente de E/S que calcula a atenção exata sobre todos os pares, dividindo o trabalho em blocos na memória rápida integrada ao chip. Os blocos também são a unidade que os kernels esparsos por blocos ignoram.
- Atenção linear: mantém todos os pares, mas substitui a softmax por um mapa de características, comprimindo todas as chaves e valores anteriores num estado de tamanho fixo.
- Atenção deformável: mecanismo de visão em que cada consulta atende a alguns pontos de amostragem em deslocamentos aprendidos num mapa de características, em vez de seguir um padrão fixo.
- Mistura de especialistas (MoE): esparsidade nos parâmetros, em que cada token ativa apenas algumas redes especialistas, enquanto o seu padrão de atenção permanece denso.
Aplicações#
Os modelos de linguagem com contexto longo são a principal aplicação: as camadas esparsas limitam o custo computacional, e as camadas com janela também limitam a cache KV, permitindo que os modelos resumam relatórios longos ou pesquisem bases de código grandes num único pedido. O BigBird aplicou o seu padrão esparso a sequências de ADN, nas quais uma entrada com milhares de pares de bases é muito mais longa do que uma frase típica, para prever regiões promotoras. Em visão computacional, o número de tokens aumenta com a resolução da imagem, pelo que os modelos restringem a atenção a regiões locais: o Swin Transformer atende dentro de janelas deslocadas. O YOLO12, um detetor centrado na atenção, desenvolvido por investigadores da University at Buffalo e da University of Chinese Academy of Sciences e disponível no pacote Ultralytics, usa atenção por áreas: a sua etapa de backbone com stride 16 divide o mapa de características de 40 × 40 de uma imagem de 640 píxeis em quatro faixas horizontais de 400 tokens e aplica atenção apenas dentro de cada faixa, calculando pontuações para um quarto dos 2,56 milhões de pares que a atenção completa sobre os 1.600 tokens exigiria.










