Cosa Predice un Modello Linguistico
Un Motore di Continuazione Probabilistica
Un modello linguistico prende una sequenza di token & assegna una distribuzione di probabilità su quale token viene dopo. Alimentalo con the cat sat on the & esso outputta probabilità su tutto il vocabolario: alta massa su mat, floor, couch; bassa massa su xylophone, Tuesday.
Campionando quella distribuzione, aggiungendo un token, & reinserendolo: quel ciclo genera testo un token alla volta. Generazione autoregressiva, chiamata così perché ogni passo regredisce sul proprio output precedente.
Tre Numeri Definiscono un Modello Linguistico
Dimensione del vocabolario (V). Quanti token distinti un modello può produrre. ANDREA-12M usava 4.353 token; ANDREA-120M usa 8.449.
Finestra di contesto (T). Quanti token entrano in un forward pass. I modelli ANDREA usano T = 1.024.
Numero di parametri (P). Quanti pesi appresi vivono all'interno. 12M, 120M e 480M nominano una famiglia per P.
Una Famiglia di Tre
| Variante | d_model | Teste | Livelli | Contesto | Parametri |
|---|---|---|---|---|---|
| ANDREA-12M | 384 | 12 | 6 | 1024 | 12.8M |
| ANDREA-120M | 768 | 12 | 12 | 1024 | ~120M |
| ANDREA-480M | 1536 | 24 | 16 | 1024 | ~480M |
Tre manopole di scala: d_model (larghezza di ogni vettore interno), n_layer (profondità dei blocchi transformer impilati), n_head (proiezioni di attenzione parallele). Vocabolario e contesto rimangono fissi nella famiglia.
Leggendo la Tabella della Famiglia
Perché il Piccolo Conta
Il Vincolo come Liberazione
I grandi modelli linguistici con centinaia di miliardi di parametri richiedono migliaia di GPU, dataset proprietari e budget aziendali. Poche persone possono addestrarne uno. Poche persone possono ripararne uno.
Un piccolo modello linguistico su una singola GPU ribalta tutto questo. Chiunque abbia una 4090 (o una 3060) può riprodurre ANDREA da dati aperti. La ricetta di addestramento funge anche da model card. Codice aperto, pesi aperti, dati aperti; piena provenienza in 72 ore di calcolo.
Capacità vs Qualità
I modelli più piccoli non possono memorizzare il loro corpus di addestramento. ANDREA-12M, con 12,8M parametri, manca della capacità di memorizzare contenuti fattuali; impara la struttura dei turni, la distribuzione del vocabolario e la forma della risposta. ANDREA-120M, con capacità 10× maggiore, impara il richiamo fattuale, la coerenza multi-paragrafo e l'ampiezza del dominio (verificato tramite valutazione esterna con 9,5/10 su campioni di biologia e elaborazione del segnale).
Il takeaway: la capacità stabilisce un soffitto. Il curriculum decide se il soffitto viene raggiunto. Le attività 14-23 coprono il curriculum. [TITLE decoder_only/]
Tre Varianti del Transformer
Encoder, Decoder, Entrambi
Il Transformer originale (Vaswani et al., 2017) includeva un encoder e un decoder, uniti insieme per la traduzione. Tre linee architetturali discendono da quel paper:
Encoder-only (linea BERT). Attenzione bidirezionale, nessuna maschera causale. Ottimizzato per la classificazione, non per la generazione. Un token vede sia il suo passato che il suo futuro durante l'addestramento.
Encoder-decoder (T5, BART). L'encoder legge l'input; il decoder genera l'output, prestando attenzione all'encoder tramite cross-attention. Usato per traduzione, summarizzazione.
Decoder-only (GPT, ANDREA). Maschera causale: ogni token vede solo il suo passato. Addestrato a prevedere il token successivo. La generazione è gratuita; addestramento & inferenza condividono lo stesso forward pass.
Perché Decoder-Only Vince su una GPU
Tre ragioni:
1. Singolo obiettivo. La previsione del token successivo funziona su qualsiasi testo. Non serve paired source/target.
2. Simmetria tra training e inferenza. Stesso forward pass, nessuna logica di generazione speciale.
3. Semplicità della memoria. Nessuna cross-attention; un solo stack di layer; un solo flusso di attivazioni.
ANDREA eredita la scelta decoder-only da microGPT, che l'ha ereditata da nanoGPT, che l'ha ereditata da GPT-2. La linea di discendenza rimane standard; ciò che cambia risiede nella tokenizzazione, nell'infrastruttura di training e nel curriculum.
Perché Decoder-Only per ANDREA
Cosa Sta in 24 GB
Byte Per Parametro
Una RTX 4090 è dotata di 24 GB di VRAM. L'addestramento di ANDREA-12M ha usato 1,4 GB. ANDREA-120M ne ha usati molti di più. La differenza deriva da un semplice esercizio di contabilità: ogni parametro appare più volte in memoria durante l'addestramento.
Per ogni parametro, l'addestramento mantiene:
- Il peso stesso (1× peso)
- Primo momento di Adam (m): stessa forma del peso (1× peso)
- Secondo momento di Adam (v): stessa forma del peso (1× peso)
- Gradienti: stessa forma del peso (1× peso)
- Attivazioni e temporanei: ~2-4× peso (varia con batch e contesto)
Totale: ~6-8× il conteggio dei pesi, in byte determinati dalla precisione.
La Precisione Moltiplica Tutto
| Precisione | Byte/param | Totale per 120M pesi | Note |
|---|---|---|---|
| FP32 | 4 | 480 MB | Baseline; più sicuro, più lento |
| FP16 | 2 | 240 MB | cuBLAS, metà memoria |
| FP8 E4M3 | 1 | 120 MB | Tensor cores, rischio NaN |
Moltiplica per 6-8× per l'impronta completa durante l'addestramento. ANDREA-120M si addestra comodamente in FP16 (~2 GB per pesi + ottimizzatore + gradienti); FP8 E4M3 dimezza il tempo di addestramento sui tensor cores di RTX 4090.
L'Attività 13 (grow_a_language_model_precision) esplora in dettaglio i compromessi di precisione FP.
Dimensionamento dello Stato dell'Ottimizzatore di ANDREA-120M
Venticinque Attività
Due Metà
Questo corso si divide in modo netto. La prima metà copre ciò che microGPT ha insegnato al campo: un transformer che gira su una singola GPU. La seconda metà copre il contributo reale di ANDREA: un curriculum che impara.
Metà 1: Un Transformer su Una GPU (attività 2-13)
| # | Attività | Batteggio |
|---|---|---|
| 2 | Tokenizzatore a morfemi Harris | segmentazione distributiva, vocabolario 256+N+1 |
| 3 | Allineamento tokenizer-diet | punto di saturazione, perché 12M sprecati 63.6% |
| 4 | Embeddings & posizione | lookup token + posizione appreso |
| 5 | Attenzione a prodotto scalare | Q·Kᵀ/√d, maschera causale, softmax |
| 6 | Attenzione multi-head | divisioni head, proiezioni parallele |
| 7 | Blocco Transformer | MLP, residui, normalizzazione layer |
| 8 | Cross-entropy & perplessità | log-verosimiglianza, perdita SMMA |
| 9 | Backprop in CUDA personalizzato | regola della catena attraverso microgpt_cuda.cu |
| 10 | AdamW | decadimento del peso desacoplato; perché il vanilla Adam è morto |
| 11 | Riscaldamento LR + decadimento coseno | rampa di 2000 step; perché il picco istantaneo distrugge 120M |
| 12 | Clip del gradiente | norma L2 globale; 3 kernel CUDA |
| 13 | FP32 / FP16 / FP8 E4M3 | compromessi di precisione; tensor cores |
Metà 2: Un Curriculum Che Impara (attività 14-24)
| # | Attività | Battuta |
|---|---|---|
| 14 | Banditi a bracci multipli | UCB1, esplorazione vs sfruttamento |
| 15 | Controllo dei dadi a fasi | fasi 7/14/21/28/42, dadi 1d3/1d4 |
| 16 | Attribuzione delle ricompense & EMA | EMA della perdita per fonte, scalatura 1000× |
| 17 | Piani base delle fonti & penalità epoca | 1/(1+epoche) previene la memorizzazione |
| 18 | Bonus di copertura | tracciamento a livello doc, 1.3× freschezza |
| 19 | Riscaldamento curricolare | 7 fonti chat/prosa prime 20K fasi |
| 20 | Filtro per forma, non caratteri | has_system_prompt_shape() |
| 21 | Arresto anticipato con gate di coerenza | bigram/trigram/word/char auto-halt |
| 22 | Checkpoint, ripresa, segnali | format, SIGTERM/SIGUSR1, continuità loss.json |
| 23 | Audit di campione & valutazione esterna | lettura di una run, territorio 9.5/10 |
| 24 | Da microGPT ad ANDREA-120M | collasso v1, fix v2, patch v2.5, lucidatura v3 |
Più un compagno: geometry_of_andrea visualizza ogni layer come geometria (spazio degli embedding, attention come proiezione, superficie di loss, bandit come una passeggiata su un simplesso discreto).
Ordine Suggerito
Le attività 2-13 costruiscono un transformer funzionante. Salta avanti alla metà 2 se hai già addestrato transformer; torna quando la curiosità ti colpisce.
Ogni attività è autonoma dove possibile. I riferimenti matematici citano attività precedenti per nome (vedi attività 5: scaled dot-product attention). I riferimenti al codice puntano a microgpt/microgpt_cuda.cu & microgpt/training_proxy.py in ~/git/uncloseai-cli/.