C’è un articolo scientifico del 2017 che ha cambiato il modo in cui le macchine leggono il linguaggio. Si intitola Attention Is All You Need ed è il manifesto del Transformer, l’architettura su cui gira la gran parte dei modelli di linguaggio che usi oggi. La tesi era semplice e un po’ arrogante: la ricorrenza, il meccanismo che fino ad allora dominava, non serve più. Basta l’attenzione.
La self-attention è il cuore di quella sostituzione. Non è un dettaglio tecnico da lasciare agli ingegneri: è il motivo per cui un modello riesce a collegare due parole che nella frase stanno a venti token di distanza, senza dimenticare la prima mentre arriva alla seconda.
Qui smonto il meccanismo pezzo per pezzo. Prima l’idea, poi i quattro passaggi con cui viene calcolato, poi i limiti che di solito restano fuori dai titoli.
Di cosa parleremo..
Cos’è la self-attention, in una frase
Self-attention vuol dire questo: ogni token guarda tutti gli altri token della stessa sequenza e si costruisce una nuova rappresentazione di sé, pesando quanto ciascuno degli altri conta in quel preciso contesto.
Prendi la parola “banca”. Da sola è un vettore che significa contemporaneamente istituto di credito e riva del fiume. Dentro “sono andato in banca a prelevare” il modello ha bisogno che il vettore di “banca” si sposti verso il primo senso. Dentro “mi sono seduto sulla banca del parco” deve spostarsi verso il secondo. La self-attention è il passaggio che produce questo spostamento, ricalcolando il vettore in base alle parole vicine.
La differenza con quello che c’era prima non è di grado, è di natura: il contesto non viene più riassunto in uno stato nascosto che si porta dietro tutto, viene interrogato direttamente a ogni passo.
Il problema che la self-attention ha risolto
Prima del 2017 andavano di moda le reti ricorrenti, RNN e LSTM. Leggevano la frase una parola alla volta, come faresti tu con il dito sul testo. A ogni parola aggiornavano uno stato interno che doveva contenere la memoria di tutto il letto fino a quel punto.
Funzionava, ma con due difetti strutturali. Il primo è la sequenzialità: non puoi calcolare la quinta parola prima che la quarta sia finita. Addio parallelismo sulla GPU e con esso l’idea di addestrare su quantità enormi di testo. Il secondo è la distanza: l’informazione tra la parola uno e la parola cinquanta deve passare attraverso quarantanove passaggi e in ognuno perde un pezzo.
Un esempio concreto. Nella frase “il libro che mi hai prestato l’estate scorsa in Sicilia, quello con la copertina blu, era bellissimo”, il verbo “era” deve accordarsi con “libro”. Fra i due ci sono venti parole. Una LSTM se la cava, ma con fatica e con una memoria che nel frattempo si è riempita di rumore. La self-attention collega “era” a “libro” in un solo passaggio, per quanto lungo sia il testo.
Come funziona: quattro passaggi
Il meccanismo prende ogni token e ne ricava tre vettori, con tre moltiplicazioni per matrici diverse. Query, Key e Value. Li ho spiegati in dettaglio nella lezione su Query, Key e Value, quindi qui li riassumo con la metafora che funziona meglio.
Immagina una biblioteca. La query è la domanda che porti allo sportello. Le key sono le etichette sui dorsi dei libri. I value sono il contenuto dei libri.
- Confronto. La query di un token viene moltiplicata per le key di tutti i token, incluso se stesso. Il risultato è un punteggio di compatibilità: quanto quella parola è rilevante per me.
- Scala. I punteggi vengono divisi per la radice quadrata della dimensione dei vettori. Serve a tenerli in un intervallo in cui la funzione successiva non si blocca.
- Normalizzazione. I punteggi passano in una softmax, che li trasforma in percentuali che sommano a uno. Ora sono pesi veri.
- Mescolamento. I value vengono moltiplicati per quei pesi e sommati. Il risultato è il nuovo vettore del token: una media pesata di tutto ciò che ha letto.
Il punto che spesso sfugge è questo: l’output non è nessuna delle parole originali. È una sintesi costruita su misura per quella posizione. Per questo il modello può rappresentare significati che nel vocabolario non esistono.
Un esempio con una frase ambigua
“Maria ha detto a Luca che il suo cane aveva fame.” Di chi è il cane? Grammaticalmente “suo” può riferirsi a Maria o a Luca. Un essere umano sceglie in base al buon senso, oppure chiede. Un modello addestrato su abbastanza testo ha visto migliaia di frasi simili e ha imparato che in questo tipo di costruzione “suo” tende ad appoggiarsi al soggetto più vicino o al protagonista della frase.
Non c’è una regola scritta da nessuna parte. C’è un peso di attenzione che, token per token, si distribuisce in modo diverso. Il vettore finale di “suo” incorpora pezzi di “Maria”, pezzi di “Luca” e un po’ di tutto il resto, in proporzioni apprese durante l’addestramento.
Ed è qui che la self-attention si distingue da un semplice filtro: non cancella le parole irrilevanti, le pesa. Anche un peso basso lascia passare qualcosa. Quella sfumatura è spesso la differenza tra una risposta corretta e una che sembra corretta.

La formula, senza farsi male
La formula completa sta in una riga: softmax di Q per K trasposta, diviso radice di d_k, il tutto moltiplicato per V. Non serve memorizzarla, serve capire perché ogni pezzo è lì.
La moltiplicazione tra Q e K produce i punteggi. La divisione per radice di d_k esiste perché i prodotti scalari crescono con la dimensione dei vettori: con 512 dimensioni i punteggi diventano numeri grandi, la softmax si satura e restituisce quasi tutto il peso a un solo token. In quella zona i gradienti sono minuscoli e il modello smette di imparare. Dividendoli si riporta la distribuzione in una zona morbida.
La softmax trasforma i punteggi in pesi positivi che sommano a uno, quindi la moltiplicazione finale per V è una media pesata. Tre operazioni, tutte matriciali, tutte calcolabili in parallelo per ogni posizione della sequenza. È il parallelismo che ha reso possibile scalare i modelli da milioni a miliardi di parametri, come racconto nella lezione sui Transformer.
Perché si chiama “self”
Il “self” distingue questo meccanismo da un cugino che si chiama cross-attention. Nella self-attention query, key e value vengono tutti dalla stessa sequenza: la frase interroga se stessa. Nella cross-attention le query arrivano da una sequenza e le key e value da un’altra, per esempio quando un decoder traduce una frase inglese guardando la rappresentazione di quella italiana.
Da qui viene anche la distinzione tra encoder e decoder, che è il tema di una lezione successiva. Per ora basta tenere fermo il punto: la self-attention è un meccanismo di contesto interno e funziona identico su una frase, su un pezzo di codice o su una sequenza di note musicali, perché non sa nulla di grammatica. Sa solo confrontare vettori.
L’ordine delle parole, il dettaglio che manca
C’è una conseguenza scomoda. Se ogni token guarda tutti gli altri e la somma è pesata, le frasi “il cane morde il postino” e “il postino morde il cane” contengono gli stessi token e produrrebbero la stessa rappresentazione. La self-attention da sola è insensibile all’ordine.
Per questo nel Transformer si aggiunge il positional encoding, un’informazione sulla posizione che viene sommata agli embedding prima di entrare nei blocchi. Senza, l’attenzione sarebbe un sacchetto di parole mescolate con grande eleganza.
Quanto costa questa eleganza
Il confronto è tutti contro tutti. Con n token, la matrice dei punteggi ha n al quadrato caselle. Mille token fanno un milione di confronti per strato. Centomila token fanno dieci miliardi. Con decine di strati la conta diventa insostenibile.
È il motivo per cui la lunghezza del contesto è un campo di battaglia tra i provider e per cui esistono trucchi come la KV cache, che riusa i calcoli dei token già letti invece di rifarli ogni volta. Ne parlo nella lezione sulla KV cache. La complessità quadratica è anche la ragione per cui diversi modelli recenti affiancano all’attenzione meccanismi alternativi, più economici sulle sequenze lunghissime.
Attenzione non è spiegazione
Qui arriva la parte che i divulgatori saltano. Viene naturale pensare che i pesi di attenzione siano una mappa di ciò a cui il modello “pensa”. Non lo sono, almeno non in modo affidabile.
Uno studio del 2019 ha mostrato che pesi diversi producono lo stesso output: puoi rimescolare l’attenzione di una frase e ottenere la stessa previsione. Il motivo è che l’informazione passa anche dai collegamenti residuali e dal feed-forward, non solo dalla media pesata. Quindi un token con peso alto non è automaticamente la causa di una risposta.
Detto in modo utile: la self-attention spiega come il modello mescola le informazioni, non perché sceglie una parola invece di un’altra. Per quello servono altri strumenti. Spesso nemmeno bastano.
Cosa cambia per chi usa l’IA
Tre cose pratiche. La prima: il modello non ricorda nel senso umano, ricostruisce il contesto a ogni token. Se il contesto è ambiguo, l’attenzione distribuisce il peso su alternative e la risposta diventa generica. La seconda: le informazioni all’inizio del prompt contano, ma non sono privilegiate per magia e in contesti molto lunghi si diluiscono. La terza: se due parti del testo si contraddicono, il modello non ha un meccanismo che decida quale sia vera, ha solo pesi.
Scrivere un prompt chiaro, con i riferimenti espliciti e le istruzioni vicine a dove servono, funziona meglio che scrivere tanto. Non è psicologia del modello, è geometria dei pesi.
TIP. Se un modello confonde due elementi simili nella tua richiesta, dai a ciascuno un’etichetta diversa (“il cliente A”, “il cliente B”) invece di ripetere i nomi. Etichette distinte rendono i vettori più separabili e l’attenzione ha meno modo di mescolarli.
Domande frequenti sulla self-attention
La self-attention è la stessa cosa dell’attenzione?
No. L’attenzione è la famiglia di meccanismi che assegna pesi diversi a parti diverse dell’input. La self-attention è il caso in cui query, key e value vengono tutti dalla stessa sequenza. Esiste anche la cross-attention, dove le query arrivano da una sequenza e key e value da un’altra, come nella traduzione automatica.
Perché si chiama “self”?
Perché la sequenza interroga se stessa. Ogni token produce la propria query e confronta con le key di tutti gli altri token della stessa frase. Il “self” serve proprio a distinguerla dalla cross-attention, dove le due sequenze sono diverse.
La self-attention capisce il significato delle parole?
No. Confronta vettori e calcola similarità. Il significato emerge dall’insieme: embedding addestrati su grandi quantità di testo, strati sovrapposti e un obiettivo di previsione. Dire che “capisce” è una scorciatoia comoda, non una descrizione del meccanismo.
Quante teste di attenzione servono?
Dipende dal modello. Il Transformer originale del 2017 ne usava 8 per strato, con vettori da 64 dimensioni ciascuna. I modelli grandi ne hanno decine. Ogni testa impara a guardare relazioni diverse. Il risultato viene concatenato e proiettato. Ne parlo nella lezione dedicata alla multi-head attention.
Perché i modelli con contesto lungo costano tanto?
Per la complessità quadratica. La matrice dei punteggi cresce con il quadrato del numero di token, quindi raddoppiare il contesto quadruplica il lavoro. A questo si aggiunge la memoria per conservare i valori intermedi durante la generazione, che è il problema che la KV cache prova a limitare.
Posso vedere i pesi di attenzione di un modello come GPT?
In genere no. I provider espongono solo input e output, non le matrici interne. Su modelli open source puoi estrarli con gli strumenti giusti, ma restano una lettura parziale: come spiegano diversi studi, pesi alti non equivalgono a importanza causale nella risposta finale.


