Capitolo 05 · Architettura · 14 min

Il Transformer completo

Assemblare i pezzi: attenzione multi-testa, feed-forward, normalizzazione, connessioni residuali.

Tutto questo per arrivare qui

Ora abbiamo tutti i pezzi del puzzle:

  • Il testo diventa token (capitolo 02).
  • I token diventano vettori in uno spazio di significato (capitolo 03).
  • L'attenzione permette a ogni vettore di guardare gli altri e riconfigurarsi (capitolo 04).

Resta da capire come assemblare questi pezzi per ottenere un modello completo. La risposta, elegantemente minimalista: li impiliamo.

Il blocco di base

Un Transformer moderno è lo stesso piccolo blocco, ripetuto N volte. Questo blocco contiene due sotto-moduli:

  1. Un layer di multi-head attention, che permette ai token di comunicare tra loro.
  2. Un feed-forward network (FFN) — due trasformazioni lineari separate da una non-linearità — che trasforma ogni token indipendentemente.

Attorno a questi due sotto-moduli, due strutture fisse:

  • LayerNorm prima di ogni sotto-modulo: normalizza i vettori per stabilizzare l'apprendimento.
  • Connessioni residuali attorno a ogni sotto-modulo: l'uscita del blocco è l'ingresso più la trasformazione, mai la trasformazione da sola.

Passa il mouse sui sei piani dello schema qui sotto, nell'ordine in cui un token li attraversa. A ogni piano, poniti una sola domanda: questo sotto-modulo fa comunicare i token tra loro, oppure lavora su ciascuno per conto suo?

Passa il mouse su un sotto-blocco per vederne il ruolo: l'attention diffonde l'informazione tra i token, il feed-forward la trasforma localmente, normalizzazione e residual stabilizzano il tutto. Impilati 32 o 96 volte, danno un GPT-4 o un Claude.

La risposta: uno solo di questi sei piani fa circolare l'informazione tra i token — il multi-head attention. Tutto il resto lavora posizione per posizione, isolatamente. È la divisione del lavoro da tenere a mente per il resto del capitolo: l'attenzione mescola, il feed-forward trasforma, normalizzazione e residuali stabilizzano. E non c'è nient'altro — questo stesso blocco ripetuto 12 volte dà un GPT-2 small, ripetuto 96 volte un GPT-3.

Perché le residuali cambiano tutto

È probabilmente il trucco architetturale più importante del decennio. Senza connessione residuale, impilare 96 blocchi successivi equivale a far passare un segnale attraverso 96 trasformazioni in cascata. Il gradiente (il segnale di apprendimento) si diluisce a ogni passaggio. Dopo pochi layer, non resta quasi nulla da imparare.

Con una connessione residuale, il blocco impara una modifica invece di una trasformazione totale: uscita = ingresso + f(ingresso). Il segnale iniziale attraversa sempre intatto tutta la rete, e ogni blocco lo arricchisce un po'.

Senza residuale, un Transformer profondo non può addestrarsi. Con le residuali, può impilare 100+ layer senza crollare.

Il FFN, la metà dimenticata

Si parla molto di attenzione. Si parla meno del FFN, che però contiene il doppio dei parametri.

A ogni layer, dopo l'attenzione, ogni token attraversa un MLP:

FFN(x) = Linear_2(GELU(Linear_1(x)))

Linear_1 proietta il vettore in una dimensione intermedia 4× più larga (tipicamente 4 × 768 = 3072 per GPT-2 small). Linear_2 lo riporta alla dimensione originale. Questa espansione-poi-contrazione è il luogo in cui il modello conserva la maggior parte delle sue conoscenze fattuali: nomi propri, associazioni apprese, motivi ricorrenti.

Questa scrittura è quella di GPT-2. I modelli recenti sostituiscono GELU con SwiGLU, che usa tre matrici invece di due e un'espansione più vicina a 8/3× per mantenere lo stesso numero di parametri. Il principio, però, non cambia: si allarga, poi si restringe.

Quando parliamo di "70 miliardi di parametri" in un modello, la grande maggioranza vive nei FFN.

Posizione e causalità

Due dettagli che non abbiamo ancora discusso:

Encoding di posizione. L'attenzione è invariante per permutazione: se mescoli i token di una frase, l'attenzione restituisce lo stesso risultato (solo mescolato). Non è ciò che vogliamo. Perché un LLM sappia che "Il gatto mangia il pesce" è diverso da "Il pesce mangia il gatto", si inietta una informazione di posizione in ogni vettore di embedding (positional encoding, RoPE, ALiBi…). Oggi RoPE (rotary position embedding) è la convenzione.

Maschera causale. Come abbiamo visto nel capitolo 4, in un modello generativo ogni token può guardare solo i suoi predecessori. La maschera causale si applica alla matrice di attenzione: le posizioni future vengono fissate a −∞ prima del softmax. Questo forza il modello a predire, non a copiare.

Quanti blocchi?

Lo scheletro è rimasto lo stesso da GPT-2 a oggi: blocchi identici impilati, connessioni residuali, una normalizzazione prima di ogni sotto-modulo. Ciò che cambia di più è la scala:

ModelloBlocchiDimensioneHeadsParametri
GPT-2 small1276812117M
GPT-2 XL481600251.5B
GPT-3961228896175B
Llama 3 70B8081926470B

Più blocchi = più ragionamento composizionale possibile (ogni layer può appoggiarsi alle astrazioni del precedente). Più dimensioni = più capacità per token. Più heads = più "domande" simultanee.

Attenzione però alla formula "è la stessa architettura": è vera per l'impianto generale, falsa nel dettaglio dei pezzi. Tra il 2019 e oggi, più o meno ogni componente è stato sostituito da una versione più efficiente: RoPE al posto delle posizioni apprese, RMSNorm al posto di LayerNorm, SwiGLU al posto di GELU, GQA al posto del multi-head classico — senza contare le varianti Mixture of Experts che vediamo più sotto. Stesso impianto, pezzi diversi.

L'uscita: dal vettore alla distribuzione

A questo punto, l'ultimo blocco ci dà, per ogni posizione, un vettore di qualche migliaio di dimensioni. Come torniamo a una distribuzione sul vocabolario?

Un solo passo. Moltiplichiamo questo vettore per una matrice W_out di dimensioni (d_model × |vocab|), poi applichiamo un softmax. Il risultato: per ogni posizione, una probabilità su tutti i token del vocabolario — circa 50.000 per GPT-2, 128.000 per Llama 3, 200.000 per GPT-4o. Questa è l'uscita di un LLM — una distribuzione.

Dettaglio elegante: in molti modelli piccoli (GPT-2, Gemma…), W_out condivide i suoi pesi con la matrice di embedding di ingresso (weight tying). La stessa trasformazione che mappa il token 5234 verso un vettore, in senso inverso, mappa un vettore verso la probabilità del token 5234. Risparmio di parametri, e migliore generalizzazione. I modelli grandi (GPT-3, Llama 70B, Mistral…) separano invece le due matrici: a quella scala il costo in parametri diventa trascurabile, e due matrici libere funzionano meglio di una sola vincolata.

Mixture of Experts: non tutti i parametri si attivano

Una variante architetturale è diventata dominante nei modelli recenti: Mixture of Experts (MoE). Mixtral, DeepSeek, Qwen, Llama 4 la usano — questo è confermato, le loro architetture sono pubblicate. Per i modelli chiusi (GPT-4, Gemini) abbiamo solo indiscrezioni e stime: probabile, ma mai confermato ufficialmente. È una sfumatura da tenere a mente ogni volta che si legge un numero su un modello proprietario.

L'idea: invece di un solo FFN per blocco, se ne mettono diversi in parallelo (tipicamente da 8 a 128 expert). Per ogni token, una piccola rete di routing (router) ne seleziona due o quattro — i più rilevanti per quel token. Solo questi expert si attivano.

Conseguenza: un modello può avere 400 miliardi di parametri "totali" ma attivarne solo 50 miliardi per token. Capacità di un grande modello, costo di calcolo di uno piccolo. È ciò che rende Mixtral 8×7B (47 miliardi di parametri) competitivo con modelli densi molto più grandi all'inferenza.

Il compromesso: la VRAM deve contenere tutti gli expert (altrimenti bisogna fare swap), e il routing introduce un livello di instabilità all'addestramento. È un'area di ricerca ancora molto attiva.

Il miracolo della semplicità

Tutto l'edificio sta su un solo motivo, ripetuto, normalizzato, sommato a sé stesso. Niente strutture specifiche per la grammatica. Niente moduli separati per la semantica. Niente regole linguistiche codificate.

Un Transformer non sa nulla della lingua. Sa solo mescolare vettori guardando chi assomiglia a chi.

Tutta la complessità emerge dall'addestramento: il tema del prossimo capitolo.

Aggiornato il