Sparse Attention
L’attenzione sparsa consente a ciascun token di prestare attenzione a un sottoinsieme selezionato degli altri, ad esempio una finestra locale, token globali o selezioni top-k, per ridurre il costo delle sequenze lunghe.
L'attenzione sparsa è una famiglia di meccanismi di attenzione in cui ogni query calcola il punteggio solo di un sottoinsieme selezionato di chiavi, anziché di tutte le chiavi della sequenza. La self-attention completa su N token calcola N² punteggi per testa: raddoppiare la lunghezza di un documento quadruplica quindi il costo dell'attenzione, mentre uno schema in cui ogni token presta attenzione a k altri token costa N·k. Lo schema può essere definito in anticipo, per esempio con una finestra locale, oppure selezionato in base al contenuto, per esempio scegliendo le chiavi con il punteggio più alto per ciascuna query. Lo Sparse Transformer di OpenAI del 2019 usava schemi a passo regolare con costo O(N√N) per modellare sequenze lunghe decine di migliaia di passi; oggi i modelli linguistici di grandi dimensioni (LLM) usano livelli sparsi per gestire finestre di contesto di oltre 100.000 token.
Schemi di sparsità comuni#
Gli schemi fissi stabiliscono in anticipo quali coppie valutare. L'attenzione a finestra scorrevole consente a ogni token di vedere solo i w token precedenti: Mistral 7B usa una finestra di 4.096 token e i modelli open-weight gpt-oss di OpenAI alternano livelli densi e livelli con finestre da 128 token, come faceva GPT-3 alternando livelli densi e a banda locale. Ogni livello a finestra trasferisce le informazioni in avanti di altri w token, quindi una pila profonda collega comunque token distanti. Gli schemi a passo regolare aggiungono ogni s-esimo token precedente, consentendo alle informazioni di percorrere lunghe distanze in un singolo livello. I token globali prestano attenzione a ogni posizione e ricevono attenzione da ogni posizione: Longformer li assegna a token specifici del task, come il token di classificazione; BigBird aggiunge anche connessioni casuali; gli attention sink mantengono i primi token visibili a ogni query, stabilizzando la generazione in streaming.
Gli schemi basati sul contenuto scelgono le coppie a partire dai dati. la Native Sparse Attention di DeepSeek (NSA, 2025) combina riepiloghi compressi di blocchi di chiavi, una selezione dei blocchi più pertinenti e una finestra scorrevole, con addestramento end-to-end. La DeepSeek Sparse Attention di DeepSeek-V3.2 esegue un piccolo «indicizzatore lightning», che assegna un punteggio a ogni token precedente per ciascuna query, quindi calcola l'attenzione completa solo sui 2.048 token con il punteggio più alto. Il costo principale dell'attenzione per ogni query rimane così costante, indipendentemente dalla lunghezza del contesto. I modelli in produzione spesso combinano queste regole:
Trasformare uno schema in risparmi#
L'applicazione di una maschera a una matrice densa di punteggi comporta comunque il calcolo di tutti i punteggi, quindi i miglioramenti in termini di velocità derivano da kernel che saltano i blocchi vuoti della matrice. I kernel di Flash Attention supportano direttamente le finestre scorrevoli, mentre PyTorch compila, tramite FlexAttention, qualsiasi funzione di mascheramento in un kernel GPU sparso a blocchi. La figura create_block_mask mostra quali blocchi un kernel di questo tipo salta per una finestra di 1.024 token più quattro token sink:
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 la maschera in blocchi da 128 x 128 affinché i kernel possano saltare quelli vuoti
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)L'output mostra sparsity=85.47%, la percentuale di blocchi da 128 × 128 nella matrice di punteggi da 8.192 × 8.192 che non contengono alcuna coppia consentita, e rappresenta lo schema come una banda diagonale per la finestra più una colonna a sinistra per i token sink. Quando flex_attention viene eseguito con torch.compile, il kernel salta completamente quei blocchi.
Attenzione sparsa e concetti correlati#
- FlashAttention: kernel consapevole dell'I/O che calcola l'attenzione esatta su tutte le coppie suddividendo il lavoro in blocchi nella memoria veloce del chip. I blocchi sono anche l'unità che i kernel sparsi a blocchi saltano.
- Attenzione lineare: mantiene tutte le coppie, ma sostituisce la softmax con una mappa delle caratteristiche, comprimendo tutte le chiavi e i valori precedenti in uno stato di dimensione fissa.
- Attenzione deformabile: meccanismo per la visione in cui ogni query presta attenzione ad alcuni punti di campionamento con offset appresi in una mappa delle caratteristiche, anziché seguire uno schema fisso.
- Miscela di esperti (MoE): sparsità dei parametri in cui ogni token attiva solo poche reti esperte, mentre il suo schema di attenzione rimane denso.
Applicazioni#
I modelli linguistici a contesto lungo sono la principale applicazione: i livelli sparsi limitano il calcolo, mentre quelli a finestra limitano anche la cache KV, consentendo ai modelli di riassumere rapporti lunghi o cercare in grandi basi di codice con un'unica richiesta. BigBird ha applicato il proprio schema sparso a sequenze di DNA, dove un input di migliaia di coppie di basi è molto più lungo di una frase tipica, per prevedere le regioni promotrici. Nella visione artificiale, il numero di token cresce con la risoluzione dell'immagine, quindi i modelli limitano l'attenzione alle regioni locali: lo Swin Transformer presta attenzione all'interno di finestre spostate. YOLO12, un rilevatore basato sull'attenzione sviluppato da ricercatori della University at Buffalo e della University of Chinese Academy of Sciences, disponibile nel pacchetto Ultralytics, usa l'attenzione per aree: il livello stride-16 del backbone divide la mappa delle caratteristiche 40 × 40 di un'immagine da 640 pixel in quattro strisce orizzontali da 400 token e calcola l'attenzione solo all'interno di ogni striscia, assegnando un punteggio a un quarto dei 2,56 milioni di coppie richiesti dall'attenzione completa su tutti i 1.600 token.










