CAPIRE L’IA · 8 di N
«La chiave accanto ai libri era…»
Se proseguiamo con «arrugginita», colleghiamo l’aggettivo alla chiave, anche se tra i due compaiono altre parole. I libri sono più vicini al verbo, ma non sono il soggetto. Leggere una frase richiede di tenere insieme relazioni che la semplice vicinanza non basta a descrivere.
Come può una rete neurale rappresentare queste relazioni? Uno dei meccanismi più importanti si chiama attenzione. È alla base dei Transformer, la famiglia di architetture su cui sono costruiti molti modelli linguistici.
Il nome suggerisce un’esperienza umana. Qui indica invece un calcolo: confrontare rappresentazioni numeriche e combinare informazioni con coefficienti diversi. Per capirlo, seguiremo un esempio abbastanza piccolo da poterlo verificare a mano.
Una rappresentazione cambia con il contesto
Il modello riceve una sequenza di token: unità che possono corrispondere a parole, parti di parola o segni di punteggiatura. Per rendere leggibili gli esempi, tratteremo ogni parola come un token. Un tokenizer reale potrebbe suddividerla diversamente.
A ogni token viene associato un vettore, cioè una lista di numeri. Ma una rappresentazione iniziale, da sola, non descrive ancora il ruolo di quella parola nella frase. «Chiave» può comparire accanto a una porta, in una spiegazione musicale oppure nell’espressione «la chiave del problema».
L’attenzione permette alla rappresentazione di una posizione di incorporare informazioni provenienti da altre posizioni. Il risultato è un vettore che dipende anche dal contesto disponibile. Nei blocchi successivi, il processo si ripete su rappresentazioni già trasformate.
Nella nostra frase, trasferire informazioni da «chiave» alla posizione «era» potrebbe essere utile per prevedere il seguito. È un’intuizione linguistica che motiva l’esempio: non stiamo misurando il comportamento di un modello reale né affermando che una particolare testa impari necessariamente questo collegamento.
Query, key e value: tre ruoli numerici
Da ciascun vettore di ingresso x si calcolano tre vettori, mediante tre matrici di parametri:
q = xWQ · k = xWK · v = xWV
La query viene confrontata con le key delle posizioni consentite. Questi confronti producono punteggi. I value contengono invece le informazioni che verranno combinate usando coefficienti derivati dai punteggi.
Possiamo ricordare i tre ruoli così: query e key determinano quanto pesa un collegamento; il value determina che cosa viene trasferito attraverso quel collegamento. Non sono domande e risposte scritte in italiano: sono vettori.

Si parla di self-attention quando query, key e value derivano dalla stessa sequenza di rappresentazioni. Ogni posizione può così interagire con altre posizioni della sequenza, rispettando gli eventuali vincoli di accesso.
Facciamo il conto: da tre punteggi a tre coefficienti
Consideriamo una sola query, associata a «era», e limitiamo artificialmente il confronto a tre posizioni: «chiave», «libri» ed «era». Le altre parole sono escluse solo per tenere corto il calcolo. Scegliamo vettori di due componenti:
q = (√2, 0)
kchiave = (2, 0)
klibri = (0, 0)
kera = (1, 0)
Questi numeri sono inventati a scopo didattico. Non derivano da un addestramento e non attribuiamo alle singole componenti un significato grammaticale.
Per ciascuna key calcoliamo il prodotto scalare con q: moltiplichiamo le componenti corrispondenti e sommiamo. Dividiamo poi per √dk, dove dk è il numero di componenti di query e key. Qui dk = 2, quindi otteniamo:
schiave = 2 · slibri = 0 · sera = 1
La divisione per √dk serve a controllare la scala dei punteggi al crescere della dimensione dei vettori. Applichiamo quindi la softmax: eleviamo e a ciascun punteggio e dividiamo per la somma dei risultati.
αj = esⱼ / Σr esᵣ
Il denominatore vale e² + e⁰ + e¹ ≈ 11,107. I coefficienti risultano circa 0,665 per «chiave», 0,090 per «libri» e 0,245 per «era». Sono positivi e sommano a 1, salvo arrotondamenti.

Un punteggio zero non implica un coefficiente zero: e⁰ vale 1. Inoltre, i coefficienti dipendono da tutti i candidati nel denominatore. Aggiungere una posizione può modificare la distribuzione anche se gli altri punteggi restano uguali. Per la formulazione tecnica si può consultare il capitolo sulle funzioni di punteggio dell’attenzione di Dive into Deep Learning.
Il risultato è una combinazione di informazioni
Finora abbiamo stabilito quanto pesano i collegamenti. Ora scegliamo i value dell’esempio:
vchiave = (1, 0)
vlibri = (0, 1)
vera = (0,5; 0,5)
Il punto e virgola nell’ultimo vettore separa le componenti, entrambe pari a un mezzo. L’uscita della testa, per la query considerata, è la somma dei value moltiplicati per i rispettivi coefficienti:
z ≈ 0,665 · (1, 0) + 0,090 · (0, 1) + 0,245 · (0,5; 0,5)
z ≈ (0,788; 0,212)
Il risultato non è la parola «chiave» e non è ancora la previsione «arrugginita». È un nuovo vettore, ottenuto mescolando informazioni. Altri calcoli della rete lo elaboreranno prima di produrre una distribuzione sui possibili token successivi.
Questa distinzione evita un equivoco: il coefficiente 0,665 non significa che il modello sia sicuro al 66,5% del soggetto della frase. Descrive il contributo di un value a questa specifica combinazione.
La formula compatta, letta un pezzo alla volta
Raccogliendo tutte le query, key e value nelle matrici Q, K e V, il calcolo si scrive:
Attention(Q, K, V) = softmax(QKT / √dk + M)V
QKT raccoglie i confronti fra le posizioni. La divisione ne regola la scala. M applica un’eventuale maschera. La softmax, calcolata separatamente su ogni riga, produce i coefficienti. La moltiplicazione finale per V combina i value.
La formula è una versione in blocco dei conti appena svolti: ogni riga corrisponde a una query. Non occorre memorizzarla per seguire l’idea; basta riconoscere i passaggi confrontare, normalizzare, combinare.
Per prevedere il prossimo token, non si può leggere il futuro
Durante l’addestramento di un modello autoregressivo, la sequenza completa è disponibile. Ma se chiediamo al modello di prevedere la parola dopo «era», permettergli di leggere quella parola significherebbe mostrargli la soluzione.
La maschera causale impedisce questa scorciatoia: ogni posizione può leggere se stessa e le precedenti, ma non le successive. In M si usa 0 per i collegamenti consentiti e, idealmente, −∞ per quelli vietati; dopo la softmax questi ultimi hanno coefficiente zero.

In addestramento si possono calcolare in parallelo le previsioni di molte posizioni, mantenendo questa restrizione. Durante la generazione, invece, il modello produce un token, lo aggiunge al contesto e calcola il successivo. Il parallelismo dell’addestramento non elimina la dipendenza sequenziale della generazione autoregressiva.
Che cosa aggiunge un Transformer?
Il Transformer fu presentato nel 2017 da Vaswani e colleghi in Attention Is All You Need. L’architettura originale comprendeva un encoder e un decoder, pensati per compiti come la traduzione. Molti modelli generativi di testo usano invece un’architettura di tipo decoder-only.
L’attenzione ne è un ingrediente centrale. Un blocco include anche una rete feed-forward, che trasforma separatamente la rappresentazione di ciascuna posizione, normalizzazioni e connessioni residue, che sommano l’ingresso di un sottoblocco al suo risultato.

L’attenzione multi-head esegue più calcoli di attenzione con proiezioni diverse. Le uscite delle teste vengono concatenate e proiettate nuovamente. Questo offre più modi di combinare il contesto, senza assegnare necessariamente a ogni testa una funzione linguistica fissa o facilmente interpretabile.
Serve inoltre informazione sulla posizione: il puro confronto tra vettori non codifica da solo l’ordine della sequenza. Le architetture la introducono con codifiche o altri meccanismi posizionali. Una descrizione dei componenti è nel capitolo sull’architettura Transformer di Dive into Deep Learning.
La maschera dipende dal compito. Un encoder può usare anche il contesto successivo; un decoder autoregressivo deve escluderlo. Nella cross-attention, infine, le query provengono da una sequenza e key e value da un’altra, per esempio dal testo sorgente durante la traduzione.
Che cosa viene imparato, e che cosa viene ricalcolato?
Nell’articolo Come si addestra una rete neurale? abbiamo seguito errore, gradiente e aggiornamento dei pesi. Lo stesso principio vale qui: la funzione di perdita permette di calcolare gradienti e aggiornare anche WQ, WK e WV.
I coefficienti di attenzione, invece, sono calcolati sul testo in ingresso. Cambiano al cambiare della sequenza, della posizione, della testa e dello strato. Durante il normale utilizzo, questo avviene con parametri fissi: adattare una rappresentazione al contesto non equivale a riaddestrare il modello.
La parola «pesi» può indicare entrambe le cose nel linguaggio informale. Conviene distinguerle: parametri appresi da una parte, coefficienti di attenzione calcolati dall’altra.
Collegare il contesto non garantisce la comprensione
Una mappa di attenzione può mostrare quali posizioni contribuiscono a una combinazione interna. Da sola, però, non dimostra perché l’intero modello abbia prodotto una risposta. Entrano in gioco value, proiezioni, altri strati e percorsi residui. Il lavoro Attention is not Explanation discute proprio i limiti dell’uso dei coefficienti come spiegazione del comportamento.
Anche il contesto ha un costo. Nell’attenzione densa standard, una sequenza di n token comporta un numero di confronti tra posizioni proporzionale a n². Raddoppiare la lunghezza quadruplica questi confronti, a parità delle altre dimensioni. Esistono implementazioni e varianti che ne migliorano l’efficienza; la formula descritta qui serve a capire il meccanismo di base.
L’attenzione consente di costruire rappresentazioni sensibili alle relazioni tra token. La correttezza di una risposta rimane un’altra questione: dipende da ciò che il modello ha appreso, dal contesto e dal compito.
Tre cose da conservare
- L’attenzione combina vettori in base al contesto. Query e key determinano i coefficienti; i value forniscono le informazioni da combinare.
- Un Transformer organizza più trasformazioni. Attenzione, reti feed-forward, posizioni, normalizzazioni e percorsi residui lavorano insieme.
- Contestualizzare non significa riaddestrare. I coefficienti cambiano con l’ingresso, mentre i parametri restano normalmente fissi durante l’utilizzo.
Nella frase iniziale, «chiave» e «arrugginita» sono separate nello spazio ma legate nella struttura. L’attenzione offre alla rete un modo numerico per mettere in relazione posizioni distanti. È questo passaggio — da una lista di token a rappresentazioni che incorporano il contesto — che rende il meccanismo così utile per il linguaggio.
Torna alla pagina della serie Capire l’IA


Lascia un commento