Transformer-XL
Transformer-XL memorizza gli stati nascosti del segmento di testo precedente e usa posizioni relative, così un modello linguistico mantiene il contesto tra i segmenti.
Transformer-XL è un Transformer per modelli linguistici che mantiene il contesto tra segmenti di testo a lunghezza fissa memorizzando gli stati nascosti del segmento precedente e consentendo al segmento successivo di prestare attenzione a essi. Zihang Dai, Zhilin Yang e colleghi della Carnegie Mellon University e di Google Brain lo hanno presentato all'ACL 2019 con l'articolo Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context. Un Transformer standard addestrato su segmenti fissi, ciascuno una finestra di contesto separata, non può vedere nulla che preceda l'inizio del segmento corrente; gli autori hanno chiamato questo problema frammentazione del contesto. Transformer-XL ha appreso dipendenze dell'80% più lunghe di quelle delle reti neurali ricorrenti (RNN) e del 450% più lunghe di quelle dei Transformer standard.
Ricorrenza a livello di segmento#
Quando il modello elabora un segmento, ogni livello concatena gli stati nascosti memorizzati in cache del segmento precedente con quelli del segmento corrente. Le query provengono solo dal segmento corrente, mentre chiavi e valori coprono entrambi; i gradienti si interrompono alla cache, quindi il costo di training per segmento rimane costante. Un singolo livello di attenzione in PyTorch mostra questo schema:
import torch
from torch import nn
torch.manual_seed(0)
seg_len, dim = 4, 16
attn = nn.MultiheadAttention(dim, num_heads=2, batch_first=True)
hidden = torch.randn(1, 3 * seg_len, dim) # hidden states for three consecutive segments
memory = torch.empty(1, 0, dim) # nothing is cached before the first segment
for i, segment in enumerate(hidden.split(seg_len, dim=1), start=1):
# Queries come from the current segment; keys and values also cover the cached one
context = torch.cat([memory, segment], dim=1)
out, weights = attn(segment, context, context)
print(f"Segment {i}: {weights.shape[1]} queries attend over {weights.shape[2]} positions")
# Cache this segment for the next one; detach() stops gradients as in Transformer-XL
memory = segment.detach()Le 4 query del primo segmento vedono solo i 4 token di quel segmento, mentre le query di ogni segmento successivo ne vedono 8: i 4 del segmento stesso più i 4 memorizzati in cache. Poiché il livello n di un segmento legge gli stati memorizzati in cache del livello n − 1 del segmento precedente, ogni livello estende la portata di un segmento, fino a circa N × L token per una lunghezza del segmento N e L livelli:
La cache accelera anche la valutazione. Un Transformer standard che prevede un token alla volta deve ricalcolare un'intera finestra per ogni nuovo token, mentre Transformer-XL riutilizza gli stati memorizzati in cache, risultando fino a oltre 1.800 volte più veloce durante la valutazione. Il tracking di Ultralytics YOLO26 affronta lo stesso problema di frammentazione quando uno script passa il video a model.track() un fotogramma alla volta: persist=True mantiene lo stato del tracker tra una chiamata e l'altra, così ogni oggetto conserva lo stesso ID da un fotogramma al successivo.
Codifica posizionale relativa#
Riutilizzare gli stati memorizzati in cache compromette le posizioni assolute: il primo token del segmento in cache e il primo token di quello corrente avrebbero lo stesso embedding posizionale. Transformer-XL calcola invece ogni punteggio di attenzione a partire dal contenuto della query e della chiave, più una codifica sinusoidale della distanza tra loro, con due vettori di bias appresi e condivisi tra le posizioni, uno per il contenuto e uno per la posizione. Poiché i punteggi dipendono solo dalle distanze, durante la valutazione il modello può prestare attenzione a una cache più lunga di quella vista durante il training. Anche le embedding posizionali rotazionali (RoPE), utilizzate nella maggior parte degli attuali modelli linguistici di grandi dimensioni (LLM), fanno dipendere i punteggi di attenzione dalla posizione relativa.
Risultati e influenza#
Transformer-XL ha stabilito nuovi risultati all'avanguardia in cinque benchmark: 0,99 bit per carattere su enwik8, 1,08 su text8 e perplessità di 18,3 su WikiText-103, 21,8 su One Billion Word e 54,5 su Penn Treebank, senza fine-tuning. Addestrato solo su WikiText-103, ha generato nuovi articoli abbastanza coerenti, lunghi migliaia di token. XLNet, sviluppato da alcuni degli stessi autori, ha basato il proprio pretraining di comprensione del linguaggio naturale sull'architettura Transformer-XL; il Compressive Transformer di DeepMind ha esteso la cache comprimendo i vecchi ricordi anziché eliminarli.
Transformer-XL e modelli correlati#
- Memoria a lungo termine (LSTM): aggiorna uno stato nascosto un token alla volta, quindi le informazioni lontane devono attraversare ogni passaggio intermedio.
- Longformer: legge in un'unica volta un intero documento di 4.096 token con attenzione a finestra e globale, senza ricorrenza.
- Cache KV: memorizza chiavi e valori dei token precedenti durante la generazione, così non devono essere ricalcolati. La memoria di Transformer-XL viene usata anche durante il training, interrompendo i gradienti al confine tra i segmenti.
- Modelli a spazio di stato (SSM): comprimono l'intera cronologia in uno stato di dimensione fissa.










