L’architettura transformer, pezzo per pezzo

Il transformer non è un blocco monolitico ma una pila di componenti semplici — attention, feed-forward, connessioni residue, normalizzazione — ripetuti decine di volte. Smontarlo pezzo per pezzo è il modo più onesto per capire come funziona davvero un modello linguistico.

Nel giugno del 2017 otto ricercatori di Google pubblicano un paper con un titolo insolitamente spavaldo, «Attention Is All You Need», e un’architettura che a prima vista sembra un diagramma idraulico: scatole, frecce, somme, ripetizioni. Quel diagramma è ancora oggi, con variazioni minime, il progetto di quasi tutti i modelli linguistici in circolazione. La buona notizia è che ogni scatola del diagramma, presa da sola, è sorprendentemente semplice. La complessità del transformer non sta nei pezzi: sta nel fatto che sono tanti, impilati, e che ognuno fa una cosa sola. Vale la pena smontarlo con calma, un componente alla volta.

Encoder e decoder pezzo per pezzo, positional encoding e feed-forward network sono nel libro.

Leggi «La struttura del Transformer» nel libro →

Prima di tutto: token ed embedding

Un transformer non legge parole, legge numeri. Il testo in ingresso viene prima spezzato in token — frammenti che possono essere parole intere, pezzi di parola o singoli caratteri — e ogni token viene convertito in un vettore di numeri, il suo embedding. Se il modello lavora con vettori da 4096 dimensioni, la frase «il gatto dorme» diventa tre colonne di 4096 numeri ciascuna.

L’analogia più utile: l’embedding è la scheda anagrafica di ogni token. All’inizio contiene solo informazioni generiche — cosa significa «gatto» in astratto, fuori da ogni contesto. Il lavoro di tutto il resto dell’architettura sarà arricchire quella scheda con il contesto della frase specifica: questo gatto, quello che dorme.

A questo punto entra anche il positional encoding, che aggiunge a ogni embedding l’informazione sulla posizione del token nella frase. È un tema che merita un discorso a parte (e ne parliamo in un articolo dedicato); qui basta sapere che senza di esso il modello vedrebbe la frase come un sacchetto di parole senza ordine.

Self-attention: ogni token guarda gli altri

Il cuore del transformer è il meccanismo di self-attention. L’idea, spogliata della matematica, è questa: ogni token della frase deve poter «consultare» tutti gli altri per aggiornare la propria scheda. Quando il modello elabora il pronome «lo» in «ho preso il libro e lo leggo», il token «lo» ha bisogno di guardare indietro fino a «libro» per capire a cosa si riferisce.

Il meccanismo funziona con tre proiezioni per ogni token: una query (che cosa sto cercando), una key (che cosa offro agli altri) e un value (l’informazione che consegno se qualcuno mi seleziona). Ogni query viene confrontata con tutte le key tramite un prodotto scalare: punteggi alti significano forte affinità. I punteggi passano per una softmax che li trasforma in pesi percentuali, e l’output per ciascun token è la media pesata dei value di tutti gli altri.

Un’immagine concreta: una sala conferenze dove ogni partecipante alza un cartello con la propria competenza (key), gira per la sala con una domanda scritta (query) e raccoglie appunti (value) da chi ha il cartello più pertinente — non da una sola persona, ma un po’ da tutti, in proporzione alla pertinenza. Alla fine del giro, ognuno ha una versione arricchita delle proprie note.

La «multi-head attention» replica questo processo in parallelo più volte — 32 o 64 «teste» nei modelli grandi — con proiezioni diverse. Ogni testa impara a cercare relazioni diverse: una segue gli accordi grammaticali, un’altra i riferimenti dei pronomi, un’altra ancora le relazioni semantiche a lunga distanza. I risultati delle teste vengono poi concatenati e ricombinati.

La complessità del transformer non sta nei pezzi: sta nel fatto che sono tanti, impilati, e che ognuno fa una cosa sola.

La rete feed-forward: elaborare da soli

Dopo l’attention, ogni token passa attraverso una piccola rete neurale a due strati, la feed-forward network. Qui non c’è comunicazione tra token: ognuno viene elaborato per conto suo, con gli stessi pesi per tutti. Il primo strato espande il vettore (tipicamente di quattro volte), una funzione di attivazione non lineare filtra il risultato, il secondo strato lo ricomprime alla dimensione originale.

Se l’attention è la fase in cui i partecipanti alla conferenza si scambiano appunti, la feed-forward è il momento in cui ciascuno torna alla propria scrivania e rielabora quello che ha raccolto. Non è un dettaglio secondario: in un transformer tipico circa due terzi dei parametri stanno proprio qui, e diversi studi di interpretabilità suggeriscono che questi strati funzionino come una memoria associativa dove il modello immagazzina gran parte delle sue conoscenze fattuali.

Il collante: connessioni residue e normalizzazione

Due componenti meno celebri rendono possibile impilare decine di questi blocchi senza che l’addestramento collassi. Le connessioni residue fanno sì che l’output di ogni sotto-blocco venga sommato al suo input, invece di sostituirlo: ogni strato propone una correzione, non riscrive tutto da capo. È la differenza tra un editor che suggerisce modifiche a margine e uno che riscrive il testo ad ogni passaggio — con il secondo, dopo trenta revisioni, dell’originale non resta nulla, e il segnale del gradiente si perde per strada.

La layer normalization, applicata prima di ogni sotto-blocco nelle varianti moderne, riporta i valori dei vettori su una scala standard, evitando che crescano o si spengano man mano che si sale nella pila. Insieme, residue e normalizzazione sono il motivo per cui oggi si addestrano transformer da cento e più strati: senza di loro, oltre pochi strati i gradienti diventano ingestibili.

Il blocco completo, e la pila

Un blocco transformer, quindi, è questa sequenza: normalizzazione, multi-head attention, somma residua; poi di nuovo normalizzazione, feed-forward, somma residua. Tutto qui. Il modello completo è una pila di questi blocchi identici nella forma — 32 in un modello da 7 miliardi di parametri, oltre 100 nei più grandi — seguita da uno strato finale che proietta l’ultimo vettore sul vocabolario e produce le probabilità del token successivo.

Un blocco transformer, annotato embedding in ingresso (token + posizione) layer norm multi-head attention + connessione residua: l’input scavalca il blocco layer norm feed-forward + i token si scambiano informazioni tra loro ogni token viene elaborato da solo (~2/3 dei parametri) riporta i valori su scala standard questo blocco si ripete N volte (32, 64, 100+)

Un blocco transformer nella variante moderna (pre-norm): l’attention fa comunicare i token, la feed-forward li elabora singolarmente, le connessioni residue tratteggiate permettono di impilare decine di blocchi senza perdere il segnale.

Nella versione originale del 2017 c’erano in realtà due pile: un encoder che leggeva la frase di partenza e un decoder che generava la traduzione. I modelli linguistici attuali usano quasi tutti la sola pila decoder, con una attention «mascherata» che impedisce a ogni token di guardare quelli futuri — condizione necessaria per un modello che genera testo una parola alla volta.

Perché questa architettura ha vinto

Le architetture precedenti, le reti ricorrenti, leggevano il testo in sequenza: per elaborare la parola numero cento bisognava prima passare per le novantanove precedenti. Il transformer elabora tutti i token in parallelo, e questo lo rende perfetto per le GPU, che sono macchine da calcolo parallelo. Non è un dettaglio ingegneristico: è la ragione per cui è diventato economicamente possibile addestrare modelli su trilioni di parole. L’architettura ha vinto anche perché scala — più dati e più parametri continuano a tradursi in modelli migliori, con una regolarità che le architetture precedenti non mostravano.

Il prezzo è noto: l’attention confronta ogni token con tutti gli altri, quindi il costo cresce con il quadrato della lunghezza del testo. Gran parte della ricerca degli ultimi anni — dalle attention approssimate alle ottimizzazioni di memoria — è un tentativo di pagare meno questo conto.

Perché vi riguarda: ogni volta che usate un assistente linguistico, dietro la finestra di chat c’è esattamente questa pila di blocchi, ripetuta decine di volte. Capire che dentro non c’è magia ma attention, feed-forward e somme residue vi dà gli strumenti per leggere le schede tecniche dei modelli, capire perché i contesti lunghi costano cari, e distinguere gli annunci sostanziali dalle operazioni di marketing. Il diagramma idraulico del 2017, una volta smontato, si lascia capire pezzo per pezzo.

I commenti sono riservati agli iscritti.

Accedi per commentare