Descrizione completa di un modello linguistico di grandi dimensioni
Come funziona Llama 3.1 405B
Nel libro, abbiamo promesso una descrizione più completa di un modello linguistico di grandi dimensioni chiamato Llama 3.1 405B. Presentiamo qui sotto quella descrizione. È per chi è curioso e per capire davvero quanto le moderne IA vengano fatte crescere piuttosto che create. (Si veda anche: A cosa serve comprendere i modelli linguistici di grandi dimensioni?)
La discussione che segue è abbastanza dettagliata e partiremo dal presupposto (qui, ma non nella maggior parte delle altre risorse online) che voi abbiate una preparazione tecnica, anche se non presupponiamo alcuna conoscenza specializzata di IA. Se iniziate a leggere questa sezione e non la trovate utile, prendete in considerazione di saltarla.
I dettagli su come vengono addestrati i modelli linguistici più avanzati solitamente non vengono pubblicati, così come il codice. Ma ci sono delle eccezioni. Uno dei sistemi più potenti la cui architettura e i cui pesi sono stati resi pubblici, al momento della stesura del libro alla fine del 2024, era Llama 3.1 405B, realizzato dalla divisione IA di Meta. Il "405B" sta per i 405 miliardi di parametri dell'architettura, riempiti da 405 miliardi di pesi.
Perché esaminiamo questo particolare modello di IA? Llama 3.1 405B è "open-weights"*, il che significa che è possibile scaricare autonomamente quei 405 miliardi di numeri imperscrutabili (insieme allo scheletro di codice scritto da esseri umani, molto più piccolo, che esegue operazioni aritmetiche sui 405 miliardi di numeri e quindi fa funzionare l'IA). Questo ci permette di fare affermazioni sulla sua struttura con una certa sicurezza.†
Ad ogni modo! Parliamo di come sono organizzati quei 405 miliardi di numeri imperscrutabili — del modo in cui sono stati impostati, anche prima dell'addestramento, in modo tale che gli ingegneri di Meta si aspettassero correttamente che modificando quei numeri iniziali casuali nella direzione di una migliore previsione del token (frammento di parola) successivo, dopo l'addestramento su oltre 15,6 trilioni di token, si sarebbe creata un'IA in grado di parlare.
Il primo passo è suddividere tutte le parole in tutte le lingue supportate in token.
Il passo successivo è trasformare ciascuno di questi token in un "vettore" di numeri. Llama usa vettori di 16.384 numeri per ogni token del dizionario standard. Il suo vocabolario ha 128.256 token.
Per trasformare ogni token in un vettore, a ogni token possibile viene assegnato un peso per ogni posizione possibile nel vettore. È da qui che otteniamo il nostro primo blocco di miliardi di parametri:
Due miliardi di parametri andati. Ne restano ancora quattrocentotré miliardi!
Giusto per ribadire il concetto — nessun essere umano dice a Llama cosa significano i token, inventa il vettore di 16 384 numeri a cui corrisponde una parola o sa cosa significa il vettore di numeri per una parola qualsiasi. Tutti quei due miliardi di parametri sono stati ottenuti tramite la discesa del gradiente. I numeri vengono modificati, insieme ad altri parametri che introdurremo, per aumentare la probabilità assegnata al vero token successivo.‡
Poniamo che Llama inizi prendendo in considerazione un blocco di 1.000 parole, come un estratto di un saggio. (O meglio, 1.000 token. Ma da qui in poi, per semplicità, a volte diremo semplicemente "parole").
Per ciascuna di queste parole, cerchiamo quella parola nel dizionario del modello linguistico e carichiamo nella memoria il suo elenco di 16.384 numeri incomprensibili. (Inizialmente, questi numeri erano stati impostati in modo casuale, all'inizio dell'addestramento; poi sono stati modificati mediante la discesa del gradiente).
1.000 parole × (16.384 numeri / parola) = 16.384.000 numeri in totale. Chiamiamo questi numeri "attivazioni" nel primo "livello" dei calcoli di Llama (cioè la sua capacità cognitiva, la sua attività mentale).
Potete immaginarli disposti in un rettangolo steso sul pavimento che misura 1.000 numeri in larghezza (la lunghezza dell'input) per 16.384 numeri in larghezza (numeri per parola nel primo strato). Ecco uno di questi vettori, con il colore di ogni pixel che corrisponde al numero nel vettore:

(Non sono esattamente gli artefatti più facili da interpretare.)
Notate anche che qui ci sono due numeri diversi da non confondere:
- Il numero di parametri che determinano il comportamento di questo livello (cioè i 2.101.248.000 numeri memorizzati nel dizionario)
- Il numero di attivazioni o numeri usati nel pensiero nel primo livello quando si inseriscono mille parole (ovvero 16.384.000 numeri per la prima fase dell'elaborazione di una query di 1.000 parole).
Ora che abbiamo la nostra enorme matrice di numeri che rappresenta la nostra query in tutto il suo splendore, possiamo iniziare a usarla effettivamente.
Per cominciare c'è cosa chiamata "normalizzazione," che avviene molte volte nel corso l'elaborazione di un modello linguistico di grandi dimensioni. È simile alla normalizzazione in statistica, ma con una variante tipica dell'apprendimento automatico. Questa variante consiste nel fatto che, dopo aver normalizzato i dati all'interno di ogni riga, uno specifico parametro appreso, chiamato "scala", viene moltiplicato per ogni colonna. Questi numeri di scala, come tutti gli altri parametri di cui parleremo, vengono appresi durante l'addestramento. Inoltre, la normalizzazione dei livelli avviene decine di volte, e ogni volta ha un nuovo gruppo di parametri di scala, quindi la normalizzazione rappresenta moltissimi parametri sul totale del modello linguistico. In particolare, si tratta di 16.384 parametri per normalizzazione. (Se siete curiosi di conoscere più nel dettaglio il tipo di normalizzazione che Llama 3.1 405B usa, si chiama RMSNorm).
Potreste pensare: "Wow, c'è davvero un sacco di pre-elaborazione", e in effetti avreste ragione. In realtà, abbiamo sorvolato su alcuni dei dettagli più sottili, quindi c'è ancora più di quanto potrebbe sembrare, e solo ora stiamo arrivando alla caratteristica più distintiva dei modelli linguistici di grandi dimensioni: il livello di "attenzione".
L'"attenzione" è il motivo per cui si parla tanto di "trasformatori" (se siete abbastanza grandi da ricordarvi il clamore per l'invenzione dei trasformatori). I modelli linguistici di grandi dimensioni sono un tipo di "trasformatori"; i trasformatori sono stati introdotti in un articolo del 2017 intitolato "Attention Is All You Need". Questo articolo, più di ogni altro, è considerato responsabile del successo dei modelli linguistici di grandi dimensioni. Un livello di "attenzione" funziona così:
Prendiamo ciascuno dei 1.000 vettori delle 16.384 attivazioni e trasformiamo ciascun vettore di 16.384 attivazioni:
- in 8 chiavi, ciascuna un vettore di 128 attivazioni
- in 8 valori, ognuno un vettore di 128 attivazioni
- e in 128 query, ciascuna un vettore di 128 attivazioni
Il "passaggio di attenzione" su ogni token consiste nel confrontare ciascuna delle 128 query con le 8 chiavi (verificando quale delle 8 chiavi assomiglia di più o corrisponde a quella query), e nel caricare una combinazione degli 8 valori, dando maggior peso nella combinazione ai valori delle chiavi che corrispondono meglio.
Questo permette, in linea di massima, a ciascuna delle attivazioni su un token di creare una serie di "query", che poi cercano le "chiavi" su tutti gli altri token. Quando la query di un token corrisponde meglio a una chiave, recupera il valore corrispondente più intensamente, per passarlo ai calcoli successivi su quel token.
Per esempio, la parola inglese "right" potrebbe attivare una query progettata per cercare le parole vicine e vedere se qualcuna di esse riguarda le direzioni spaziali o, in alternativa, le convinzioni, per capire se la parola "right" significa "destra" nel senso di "destrorsa" o "corretto" come in "risposta corretta". (Anche in questo caso, tutto ciò viene appreso tramite la discesa del gradiente; nulla di questo viene programmato da esseri umani che riflettono sui diversi significati che la parola inglese "right" può assumere.)§
I livelli di attenzione in un modello linguistico di grandi dimensioni sono piuttosto grandi, con un numero enorme di parametri in ciascuno di essi. Llama 3.1 405b, in particolare, ha 126 livelli di attenzione di questo tipo (abbiamo descritto solo il primo di essi), e ciascuno dei 126 livelli ha 570.425.344 parametri, suddivisi tra matrici di query, chiave, valore, e output.¶
Una volta che il sottolivello di attenzione è pronto e ci ritroviamo con una matrice delle stesse dimensioni di quella iniziale (nel nostro esempio, 16.384 per 1.000), facciamo una cosa chiamata "connessione residua." In pratica, si prende qualsiasi input del sottolivello (in questo caso, l'enorme matrice con cui abbiamo iniziato) e lo si aggiunge a qualsiasi risultato ottenuto. Questo impedisce che un certo sottolivello cambi troppo in un certo passaggio (e ha altre interessanti proprietà tecniche).
Poi, il risultato passa attraverso quella che si chiama "rete feed-forward." La variante usata da Llama 3.1 405B dipende da un'operazione chiamata "SwiGLU". SwiGLU è stata scoperta da alcuni ricercatori che hanno provato ad addestrare il modello con tante formule diverse per vedere quali funzionavano meglio, di cui il loro articolo originale dice (come abbiamo anche detto altrove):
Non diamo alcuna spiegazione sul perché queste architetture sembrano funzionare; attribuiamo il loro successo, come tutto il resto, alla benevolenza divina.
Come tutte le reti feed-forward, SwiGLU fondamentalmente espande la nostra matrice 16.384 x 10.000 in una matrice ancora più grande, la trasforma e poi la comprime di nuovo. In particolare, ogni riga passa da 16.384 colonne a 53.248 colonne, per poi tornare a 16.384.
Ora che abbiamo finito con il sottolivello feed-forward, facciamo di nuovo la connessione residua, aggiungendo quello che avevamo all'inizio a quello che abbiamo ottenuto alla fine.
È stato un percorso lungo, ma ora abbiamo trasformato leggermente la nostra gigantesca matrice.
Questi passaggi insieme formano un unico "livello". Llama ha 126 livelli, quindi ripeteremo tutti questi passaggi (normalizzazione, meccanismo di attenzione, connessione residua, rete feed-forward e di nuovo connessione residua) 125 volte.
Alla fine dei 126 livelli, ci ritroviamo con una matrice delle stesse dimensioni di quella iniziale; nel nostro esempio, 16.384 per 1.000. Ogni riga di questa matrice può quindi essere proiettata in un nuovo vettore di 128.256 numeri, uno per ogni token nel dizionario completo del modello. Questi numeri possono essere positivi o negativi, ma una comoda funzione chiamata softmax può essere usata per convertirli tutti in probabilità, che sommate danno uno. Queste probabilità sono la previsione di Llama su quale token verrà dopo.
Ora è possibile fare in modo che Llama generi un altro token. Un modo per farlo è prendere il token a cui Llama ha dato la probabilità più alta, anche se si potrebbero anche cambiare le cose prendendo occasionalmente dei token che secondo lui sono un po' meno probabili.‖
Se si usa Llama normalmente, come in un'interfaccia chatbot, tutto questo processo genera in output un solo token. Questo token viene messo alla fine dell'input e si ripete tutto da capo per il token successivo. Quindi si fanno tutti i passaggi di prima, ma ora la matrice ha 1.001 righe. Poi, dopo un altro token, 1.002 e così via.
Abbiamo tralasciato molti dettagli, ma questo è, in sostanza, il funzionamento di Llama 3.1 405B.
I modelli linguistici di grandi dimensioni sono enormi
Parliamo un po' delle dimensioni colossali di Llama 3.1 405B.
Per Llama, elaborare un testo di 1.000 parole (o meglio 1.000 token) richiede circa 810 trilioni di calcoli.#
Se 810 trilioni vi sembrano tanti, tenete presente che la maggior parte dei 405 miliardi di parametri di Llama vengono usati in qualche operazione aritmetica ogni volta che viene elaborata una singola parola.**
Se Llama viene addestrato su un gruppo di 1.000 token, allora ognuno di questi 1.000 token verrà confrontato con la parola successiva effettiva e le perdite verranno propagate dalla discesa del gradiente, per capire come la modifica di tutti i 405 miliardi di parametri condivisi avrebbe cambiato le probabilità assegnate alle risposte corrette in tutti i vari casi. Questo richiederà molti più calcoli e molti più numeri.
Durante l'addestramento dei 405 miliardi di parametri di Llama su 15,6 trilioni di token, ci sono voluti circa 38 settilioni di calcoli, cioè 38 seguito da 24 zeri.
Se invece Llama ha completato l'addestramento e viene eseguito in modalità di inferenza (cioè se sta generando un testo nuovo, come in una chat con un utente), le probabilità verranno calcolate solo sull'ultimo token, come se prevedesse quale sarebbe la parola successiva se l'IA stesse leggendo un testo prodotto da esseri umani.
Poi, uno scheletro di codice scritto da esseri umani attorno a Llama sceglierà quella che Llama ritiene sia la risposta più probabile.††
Ed è così che si fa a far parlare un computer con voi! Non in modo intelligente come le IA commerciali del 2025, ma comunque che parla un po' come una persona.
Per elaborare mille parole, Llama usa 405 miliardi di parametrini imperscrutabili in 810 trilioni di calcoli — calcoli organizzati matematicamente in rettangoli, cubi e forme di dimensioni superiori.
A volte chiamiamo queste disposizioni "matrici giganti e imperscrutabili", perché se si osservano attentamente alcuni dei parametri di Llama (anche quelli più semplici memorizzati nel semplice dizionario alla base del vasto stack di livelli) i primi parametri per la parola "right" hanno questo aspetto:
:::Teletype
[-0.00089263916015625, 0.01092529296875,
0.00102996826171875, -0.004302978515625,
-0.00830078125, -0.0021820068359375,
-0.005645751953125, -0.002166748046875,
-0.00141143798828125, -0.00482177734375,
0.005889892578125, 0.004119873046875,
-0.007537841796875, -0.00823974609375,
0.00848388671875, -0.000965118408203125,
-0.00003123283386230469, -0.004608154296875,
0.0087890625, -0.0096435546875,
-0.0048828125, -0.00665283203125,
0.0101318359375, 0.004852294921875,
-0.0024871826171875, -0.0126953125,
0.006622314453125, 0.0101318359375,
-0.01300048828125, -0.006256103515625,
-0.00537109375, 0.005859375,
:::
... e così via per 16.384 numeri. Per quanto riguarda il significato di questi numeri, al momento nessuno sulla faccia della Terra lo conosce.
Io (Soares) ho cronometrato il tempo che mi ci è voluto per recitare ad alta voce i primi trentadue numeri con sei cifre significative. Ci ho messo due minuti e quattro secondi. Per recitare tutti i parametri della parola "right", anche con quell'abbreviazione, mi ci sarebbero volute più di diciassette ore. Alla fine della recita, non avrei capito nulla di più su cosa significa la parola "right" per Llama.
Per elencare a voce tutti i parametri di Llama, parlando a 150 parole al minuto e senza mai fermarsi per mangiare, bere o dormire, un essere umano impiegherebbe 5 133 anni. Per elencare a voce tutte le attivazioni che corrispondono a mille parole nel dizionario dei token di Llama ci vorrebbero settantasei giorni di fila. Per scrivere tutti i calcoli usati per elaborare un singolo token per un input di 1.000 parole ci vorrebbero, se come un genio scrivessi 150 calcoli al minuto senza pause, più di dieci milioni di anni.
E questo solo per generare una sillaba! Per scrivere un'intera frase ci vorrebbe molto più tempo.
E se voi faceste personalmente tutti questi calcoli con il vostro cervello, alla fine dei dieci milioni di anni (almeno) che ci vorrebbero, non sapreste nulla di più su cosa stesse pensando Llama prima di pronunciare la sua parola successiva. Non saresti a conoscenza dei pensieri di Llama più di quanto un neurone sia a conoscenza del cervello umano.
In quel mondo immaginario in cui non siete morti da tempo di vecchiaia, essere in grado di eseguire un singolo calcolo locale non significa che il tuo cervello sappia qualcosa su ciò che Llama sta pensando o su come lo stia pensando.
Se mettessimo tutti i 405 miliardi di parametri di Llama in un foglio Excel su uno schermo di computer di dimensioni normali, il foglio sarebbe grande quanto 6.250 campi da football americano, o 4.000 campi da calcio, o metà di Manhattan.
Se aveste un centesimo per ogni calcolo nel nostro esempio dei 1.000 token, avreste 810 trilioni di centesimi. Se provaste a depositarli in banca, avreste bisogno di 203 milioni di camion carichi di centesimi, ciascuno del peso di 20.000 chili.
Llama 3.1 405B non è ancora grande quanto un cervello umano. (Un cervello umano ha circa 100 trilioni di sinapsi.)
405B, tuttavia, apparentemente può parlare come una persona.
E se qualcuno vi mette il braccio intorno alle spalle e vi confida con tono cinico che in realtà si tratta solo di numeri, tenete presente che stiamo parlando di davvero moltissimi numeri.
Un neurone umano può essere visto come "solo" chimica, se si studia la biochimica e le sostanze chimiche che si legano tra loro e fanno viaggiare piccoli flash di depolarizzazione elettrica nel cervello umano. Ma è un sacco di chimica. E si scopre che cose molto semplici, in quantità sufficientemente grandi, disposte in un certo modo, possono far atterrare razzi sulla Luna.
Una cautela analoga si applica a un modello linguistico di grandi dimensioni. La parola "grande" non è lì per fare scena.
* Alcuni chiamano i modelli open-weights "modelli open source". Questa descrizione non ci sembra del tutto corretta. Meta ha rilasciato i pesi finali, ma non ha rilasciato il programma informatico esatto che ha "addestrato" Llama 3.1, né l'enorme raccolta di dati su cui Llama è stato addestrato. Quindi, anche se si fosse disposti a spendere milioni di euro per farlo, non sarebbe possibile eseguire il programma che Meta ha utilizzato per "far crescere" Llama 3.1. Meta non ha rilasciato il codice di crescita dell'IA, ma solo l'IA già cresciuta e ottimizzata.
† Mentre finiamo di scrivere questo articolo nell'estate del 2025, ci sono sistemi open-weight più intelligenti con meno parametri rispetto a Llama 3.1 405B, e sistemi open-weight ancora più intelligenti con ancora più parametri. Ma quando abbiamo iniziato a scrivere il libro, 405B era tra i modelli più grandi e intelligenti con pesi che erano stati rilasciati in modo definitivo e con un'architettura e dimensioni che erano esattamente note. Questo è ciò che il capitolo del nostro libro prometteva di spiegare nel supplemento online. Inoltre, 405B è più semplice dei sistemi aperti dell'era 2025. In realtà non vorremmo sostituirlo con un modello linguistico più recente con solo 77 miliardi di parametri. Il sistema più moderno "mixture of experts" sarebbe un po' più difficile da spiegare.
‡ Per inciso, non conta ai fini del totale dei parametri, ma l'architettura alla base dei modelli linguistici di grandi dimensioni non distingue in modo nativo tra le parole che vengono prima e quelle che vengono dopo, quindi viene eseguita una trasformazione che coinvolge funzioni trigonometriche sull'input per consentire al modello linguistico di capire l'ordine delle parole. Se volete saperne di più, la parola chiave è "codifica posizionale". I dettagli non sono molto importanti ai fini del nostro discorso, quindi non approfondiremo questa parte.
§ Usando vettori più piccoli, ecco come potrebbe apparire l'abbinamento di una query con due coppie chiave-valore. Affinché funzioni, le chiavi e le query devono avere le stesse dimensioni.
¶ Un'altra nota a margine sul livello di attenzione: Llama usa il "mascheramento causale", che vuol dire che le query di ogni token possono guardare solo le chiavi che lo precedono. In pratica, questo perché ogni token cerca di prevedere quale token verrà dopo; guardare avanti sarebbe come barare!
‖ La scelta di quanto randomizzare quando si sceglie un token si chiama, in parole povere, "temperatura" alla quale i token vengono prodotti.
# Tecnicamente "operazioni in virgola mobile", il tipo principale di calcolo matematico effettuato dai computer.
** L'eccezione a questa regola è il dizionario da 2,1 miliardi di parametri con 128.256 parole; solo 16.384 di questi parametri vengono usati per ogni token. E le architetture più moderne per i modelli linguistici di grandi dimensioni cercano di usare solo un quarto o un ottavo dei loro parametri per elaborare ogni token; Llama 3.1 405B è stato uno degli ultimi grandi modelli a non provarci.
†† Oppure, per rendere la questione ancora più frizzante, lo scheletro spesso ha la possibilità di scegliere una parola a cui Llama assegna una probabilità leggermente inferiore.