Applicazioni · un modello nel browser
Il piccolo GPT che ha letto Dante
Qui sotto gira un vero modello di linguaggio: minuscolo - 800.000 parametri, un milionesimo dei grandi - e addestrato su un solo libro, la Divina Commedia, un carattere alla volta. Non sa che cosa dice, e questo è il punto: si vede come sceglie ogni carattere, con quali probabilità, guardando quali parti del testo. Tutto succede nel vostro browser: nessun dato esce da questa pagina.
IL TESTO CHE CRESCE
ATTENZIONE SUL TESTO · TESTA· blocco 4 · si sceglie nella radiografia
LE PROBABILITÀ DEL PROSSIMO CARATTERE
Carico i pesi del modello (0,8 MB)…
Da provare: «Un passo» per vedere la scelta; la temperatura agli estremi; una testa di attenzione. E scrivete voi l’inizio: anche una domanda.
LA RADIOGRAFIA: IL VIAGGIO DI UN CARATTERE NEI QUATTRO BLOCCHI
I blocchi si parlano attraverso un unico vettore di 128 numeri, quello che in letteratura si chiama flusso residuo. L’embedding lo crea - è il ritratto in numeri del carattere appena entrato: di quel carattere solo, più la sua posizione nel testo - e ogni blocco lo legge, calcola la sua correzione e la somma al vettore, senza sostituirlo: per questo si dice «residuo». Quello che arriva all’uscita è il vettore di partenza più i quattro contributi accumulati. Le strisce qui sopra sono esattamente questo vettore, fotografato in cinque punti del viaggio (colore: segno; intensità: grandezza). Nei modelli grandi lo schema è identico - solo che il vettore, invece di 128 numeri, ne ha migliaia, e i conti girano di solito a 16 bit per velocità.
Sotto ogni stazione, la riga «direbbe:» risponde a una domanda semplice: se il viaggio finisse qui, che carattere uscirebbe? Si prende il vettore com’è in quel punto e lo si consegna in anticipo all’uscita (il trucco in letteratura si chiama logit lens): confrontando le righe si vede la scelta cambiare e maturare da un blocco all’altro. E si capisce perché la riga dell’embedding è quasi sempre la più ingenua: a quella stazione il vettore sa soltanto quale carattere è entrato e dove si trova - il resto del testo arriva solo dopo, portato dentro dall’attenzione dei blocchi. I quattro blocchi sono anche pulsanti: cliccandone uno, l’evidenziazione sul testo mostra dove guardano le teste di quel blocco.
Perché proprio quattro blocchi? È una scelta di misura: più blocchi danno testo migliore ma pesi più pesanti da scaricare, e quattro è il punto in cui questo modello sta in 0,8 MB restando istruttivo (i grandi ne impilano da decine a oltre cento, con lo stesso schema). E che cosa fa ciascuno? Nessuno lo decide, nemmeno chi li costruisce: sono identici per costruzione, senza compiti assegnati. La divisione del lavoro emerge da sola con l’addestramento - e il «direbbe» la mostra: nei primi blocchi la predizione è ancora generica, quasi ortografica; salendo si affina, e l’ultimo blocco è quello che decide. I ruoli non si programmano, si formano.
Una cosa va capita per godersi il resto: il modello non ha memorizzato parole. Non ha un vocabolario, non sa dove una parola finisca e ne cominci un'altra: ha imparato soltanto, per ognuno dei suoi 83 caratteri, quanto è probabile che segua la sequenza che lo precede. Lo «stile di Dante» che riconoscete è tutto lì: quell'enorme tabella di probabilità, distillata dalla Commedia. Le parole emergono da sole, come conseguenza statistica - ed è per questo che ogni tanto ne inventa di inesistenti che suonano perfettamente dantesche: non sta sbagliando a ricordare, sta facendo l'unica cosa che sa fare, un carattere probabile alla volta.
E l'attenzione che si accende sul testo? È il meccanismo con cui il modello decide, per ogni nuovo carattere, quanto pesa ciascuno dei caratteri che ha davanti: non li guarda tutti allo stesso modo - a ogni passo distribuisce un budget di attenzione, e l'evidenziazione che vedete è proporzionale al peso. I quattro pulsanti non sono una scelta della pagina ma l'anatomia del modello: questo GPT è costruito con quattro teste di attenzione per blocco - i modelli grandi ne hanno a decine - e sono quattro sguardi che lavorano in parallelo, ognuno col criterio che ha imparato da solo: accendetele una alla volta e guardate - chi fissa gli ultimi caratteri appena scritti, chi risale più indietro nel verso. Qui vedete le teste dell'ultimo blocco, quello che decide; nella serie di articoli l'attenzione avrà il suo pezzo intero.
Tre cose da provare. La temperatura: bassa, il modello sceglie quasi sempre il carattere più probabile e gira in tondo; alta, pesca anche i candidati improbabili e sragiona - il punto giusto sta in mezzo. «Un passo»: a ogni carattere la classifica mostra fra cosa stava scegliendo - dopo «selva» il modello sa che viene «oscura». La radiografia: apritela e generate - a ogni carattere le strisce si aggiornano e il «direbbe» matura sotto i vostri occhi.
L'anatomia, in numeri. Il modello è fatto di 814.592 parametri, i numeri che l'addestramento ha regolato uno per uno, e si dividono così:
- i quattro blocchi: 787.456. Ogni blocco ne ha 196.864:
- 65.536 servono all'attenzione, per decidere dove guardare nel testo;
- 131.072 alla piccola rete che rielabora quello che l'attenzione ha raccolto;
- 256 alle due normalizzazioni che tengono i numeri in scala;
- il vocabolario: 10.624, cioè 128 numeri per ognuno degli 83 caratteri: sono il ritratto che il modello ha di ciascun carattere - e gli stessi numeri, riletti all'inverso, servono all'uscita per votare il prossimo;
- le posizioni: 16.384, cioè 128 numeri per ognuno dei 128 posti della finestra - il testo che il modello vede, mai più degli ultimi 128 caratteri: dicono al modello dove sta un carattere, non solo quale;
- la normalizzazione finale: 128, l'ultima messa in scala prima del verdetto.
Ogni carattere che vedete nascere è passato per tutti e quattro i blocchi, e ha fatto lavorare tutti questi numeri.
Un ultimo pezzo non si vede ma si sente: la cache di chiavi e valori - in letteratura KV cache, da key e value - la memoria di lavoro dell'attenzione. Non è un'astuzia di questa pagina: è un componente di serie di ogni motore che fa dialogare con i modelli. Senza, a ogni carattere nuovo il modello rifarebbe da capo i conti su tutto il testo che ha davanti, e ogni carattere costerebbe più del precedente. Con la cache, ogni blocco conserva gli appunti già presi sui caratteri letti: quando ne arriva uno nuovo, i conti si fanno solo su di lui, e gli appunti si allungano di una riga. È il motivo per cui la pagina risponde in un lampo anche su un telefono, ed è la stessa tecnica che nei modelli grandi regge le conversazioni lunghe. Attenzione però a non confonderla coi pesi: i pesi sono il modello - il file da 0,8 MB, che durante la generazione non cambia mai - mentre la cache appartiene al motore che li fa lavorare (qui, il JavaScript di questa pagina): nasce vuota quando si comincia e si butta quando si ricomincia. Nella serie la cache avrà il suo pezzo.
Resta la domanda che questo giocattolo rende inevitabile: come si passa da qui a una chat che risponde a tono? Non cambiando il meccanismo - anche ChatGPT genera un pezzetto di testo alla volta, pescando fra i più probabili. Cambiano due cose:
- la scala: un corpus enorme, raccolto da internet, invece di una Commedia - e per un modello così il seguito più probabile di una domanda è già, spesso, qualcosa che assomiglia a una risposta;
- la rifinitura: il modello viene riaddestrato su migliaia di esempi di domanda e buona risposta scritti da persone, poi premiato o corretto secondo le preferenze di lettori umani, finché «completare il testo» e «rispondere bene» diventano la stessa cosa.
Quando scrivete in una chat, il sistema appende il vostro messaggio a un copione con i turni segnati e chiede al modello di continuarlo: la risposta a tono è il completamento più probabile di quel copione. Il gesto, dunque, è lo stesso che avete davanti - un carattere probabile alla volta. Ma se sia soltanto statistica è oggi un dibattito aperto: quello che cresce con la scala non è il gesto, è ciò che il modello arriva a calcolare dentro quel gesto, fra un blocco e l'altro - lo stesso lavoro che la radiografia qui sopra mostra in miniatura. Alcuni vi riconoscono solo probabilità molto raffinate; altri, una forma di pensiero che si costruisce negli strati intermedi e si esprime nell'ultimo. La serie di articoli ci torna, con le prove di entrambe le parti.
Il modello è un GPT in miniatura addestrato con nanoGPT sul testo della Commedia (dominio pubblico): stessa architettura dei modelli grandi - attenzione, blocchi, generazione un frammento alla volta: qui un carattere, nei grandi un pezzo di parola chiamato token - ridotta di un fattore un milione. La serie di articoli che lo accompagna, a partire dalle origini del machine learning, racconta ogni pezzo di quello che state vedendo.
Fonti
- Improve and Manage, serie-machine-learning, GitHub, 2026 - il repository dei widget della serie: qui stanno i dati del modello di questa pagina (cartella
piccolo-gpt/), insieme ai widget di tutti gli altri pezzi della serie. - nostalgebraist, interpreting GPT: the logit lens, LessWrong, agosto 2020 - il post che ha coniato il nome della tecnica usata dalla radiografia: applicare la testa d'uscita agli stati intermedi e guardare le predizioni maturare blocco dopo blocco.
- Nelson Elhage e colleghi, A Mathematical Framework for Transformer Circuits, Anthropic, 2021 - la formalizzazione del flusso residuo come canale di comunicazione condiviso: ogni componente lo legge e vi somma il proprio contributo.
- Long Ouyang e colleghi, Training language models to follow instructions with human feedback, arXiv, 2022 - la rifinitura descritta nel testo: dimostrazioni scritte da persone, poi il rinforzo dalle preferenze umane. Il modello istruito da 1,3 miliardi di parametri veniva preferito al GPT-3 da 175.
- Andrej Karpathy, nanoGPT, GitHub, licenza MIT - il codice con cui il modello di questa pagina è stato addestrato.