Distanza Semantica come Distanza Euclidea
Uno Spazio Vettoriale ad Alta Dimensionalità
Ogni token nel vocabolario di 8449 token di ANDREA-120M viene mappato a un punto in R^768. La matrice di embedding dei token ha forma 8449 x 768: 8449 righe, una per ogni token del vocabolario; 768 colonne, una per ogni dimensione di embedding.
Tre proprietà rendono questo uno spazio vettoriale
1. Addizione. v_a + v_b appartiene a R^768. La somma di due embedding è un vettore valido.
2. Moltiplicazione per scalare. alpha * v appartiene a R^768 per ogni alpha reale. Allunga o comprimi lungo la stessa direzione.
3. Linearità. alpha v_a + beta v_b appartiene a R^768. Le combinazioni lineari restano all'interno dello spazio.
Queste proprietà ci forniscono strumenti geometrici: distanza, angolo, proiezione, base, ortogonalità.
Distanza come Somiglianza Semantica
La similarità del coseno tra due embedding misura l'angolo tra essi: cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||). Intervallo: da -1 (opposti) a +1 (paralleli).
Pattern empirico dopo l'addestramento: token con contesti simili producono embedding con alta similarità del coseno. ANDREA-120M posiziona parakeet e monkey vicini (entrambi biologici, entrambe specie, entrambe categorie estinte o esistenti). Posiziona Fourier e transform vicini (contesto di elaborazione del segnale). Posiziona parakeet e Fourier lontani (ortogonalità tra domini).
Perché R^768 e non R^384
ANDREA-12M utilizzava d_model = 384. ANDREA-120M ha raddoppiato a 768. Il raddoppio è importante: uno spazio a 384 dimensioni ha meno 'angoli' disponibili e la disambiguazione tra domini ne risente. Raddoppiare la capacità dà al modello lo spazio per separare bank (fiume) da bank (finanziario) in bacini diversi dello spazio degli embedding senza che uno collassi nell'altro.
Aggiornamenti degli Embedding come Traslazione Vettoriale
Ogni passo del gradiente aggiunge delta_v a v_token. Geometricamente: piccole traslazioni in R^768 spostano la posizione di ogni token verso zone che riducono la loss. Dopo 200K passi, ogni token migra dalla sua inizializzazione casuale a una posizione appresa.
Calcolo di una Distanza
Tre embedding addestrati (semplificati in R^3 per l’aritmetica):
- v(parakeet) = (1.0, 0.5, 0.0)
- v(monkey) = (1.2, 0.3, 0.1)
- v(Fourier) = (0.0, 0.0, 1.5)
Proiezione su un Sottospazio di Query
Cosa Calcola l'Attention
Per un token alla posizione t, l'attention calcola:
softmax(Q K^T / sqrt(d_k)) V
Dove Q è la query (la domanda di questo token), K sono le chiavi (l'identificatore di ogni token precedente), V sono i valori (il contenuto di ogni token precedente). L'output combina i V pesati in base a quanto la query è correlata a ciascuna chiave.
Lettura geometrica
Pensa a K come a una lista di vettori in R^d_k. Ogni riga è la chiave di un token precedente. Q è un vettore in R^d_k: la domanda di questo token.
Q K^T proietta ogni chiave su Q. Il prodotto scalare q . k_i misura quanto k_i si allinea con la direzione di q. Proiezione lunga = chiave fortemente rilevante per la query. Proiezione corta = chiave scarsamente rilevante.
softmax normalizza le proiezioni in pesi che sommano a 1. La somma pesata di V è un singolo vettore: una miscela di contenuti passati, ponderata in base alla rilevanza rispetto alla query corrente.
Multi-Head Attention come Proiezione Multi-Sottospazio
ANDREA-120M utilizza 12 teste di attenzione. d_model = 768; d_k = 768 / 12 = 64. Ogni testa proietta in un diverso sottospazio a 64 dimensioni di R^768. Dodici teste forniscono dodici viste indipendenti della stessa sequenza: una testa potrebbe tracciare il ruolo grammaticale, un'altra la similarità semantica, un'altra i riferimenti a lungo raggio.
Geometricamente: ogni testa definisce un sottospazio orientato a 64 dimensioni (una 'finestra') attraverso cui osserva il passato.
La Maschera Causale
I modelli decoder-only aggiungono una maschera causale: ogni voce di Q K^T sopra la diagonale viene impostata a -infinito prima del softmax. Geometricamente: la proiezione su qualsiasi token futuro riceve peso zero. Il token t può vedere solo i token da 0 a t.
Perché è importante: training e inferenza diventano simmetrici. Stesso forward pass, stesse proiezioni mascherate, nessuna logica speciale per la generazione.
Scalatura sqrt(d_k)
Senza scalatura, i prodotti scalari crescono con d_k. Prodotti scalari grandi spingono il softmax in regioni one-hot (un peso vicino a 1, gli altri vicino a 0). Dividere per sqrt(d_k) mantiene le proiezioni su scala di varianza unitaria, preservando la nitidezza del softmax su un ampio intervallo di valori di d_k.
Geometricamente: sqrt(d_k) normalizza le lunghezze delle proiezioni in modo che il softmax veda magnitudini confrontabili indipendentemente dalla dimensione del sottospazio.
Lettura di una Proiezione
Tre chiavi e una query in R^4 (semplificato per l'aritmetica):
- q = (1, 0, 1, 0)
- k_1 = (1, 0, 0, 0) [token passato 1]
- k_2 = (0, 0, 1, 0) [token passato 2]
- k_3 = (0, 1, 0, 1) [past token 3]
d_k = 4, quindi sqrt(d_k) = 2.
Gradient Descent come Percorso su un Terreno
Una Superficie in 120M+1 Dimensioni
Ogni configurazione dei pesi di ANDREA-120M è un punto in R^120.000.000. La funzione di perdita L(w) associa a ciascun punto un numero reale: la loss di addestramento per quella configurazione. Insieme, i valori di loss tracciano una superficie a (120M+1) dimensioni sopra lo spazio dei parametri.
Geometricamente impossibile da visualizzare direttamente. Concettualmente: un terreno. Montagne (loss alta), valli (loss bassa), punti di sella, plateau, creste, bacini.
Il Gradiente come Pendenza Locale
grad L(w) è un vettore in R^120M che punta nella direzione di massimo AUMENTO di L. Negandolo: -grad L(w) punta nella direzione di massima discesa.
Un passo di AdamW sposta w nella direzione del gradiente negativo (con scalatura adattiva da m & v). Geometricamente: un piccolo passo lungo la superficie, in discesa, con ampiezza controllata da lr.
Bacino errato di v1
v1 ha fatto il suo primo passo con LR = picco (0.0003) su pesi appena inizializzati. Immagine geometrica: w_0 si trova in una regione fortemente curva (l'inizializzazione casuale ha alta curvatura in molte direzioni), e un passo a LR di picco atterra nel bacino sbagliato. I passi successivi non riescono a uscirne. Il modello resta bloccato producendo 'region region region' perché quel bacino ha la perdita più bassa che il modello riesce a trovare dal punto in cui è atterrato.
Percorso di warmup di v2
v2 esegue 2000 piccoli passi con LR che sale gradualmente da 0 al valore di picco. Immagine geometrica: w_0 migra prima delicatamente lungo direzioni lisce (dove la curvatura è bassa). Entro il passo 2000, w si è spostato in una regione più navigabile; l'LR di picco può quindi guidarlo verso un bacino migliore senza superare il bersaglio.
<translated content> [BLOCK_TYPE SECTION/STEP]
Il Warmup è un protocollo di inizializzazione geometricamente consapevole: lascia che il modello trovi un vicinato locale sicuro prima di spingerlo con forza. [BLOCK_TYPE SECTION/STEP]
<translated content> [BLOCK_TYPE SECTION/STEP]
Bacini larghi vs stretti
[BLOCK_TYPE SECTION/STEP]Al passo 112K, ANDREA-120M si trova in un bacino. Domanda: quanto è largo? [BLOCK_TYPE SECTION/STEP]
<translated content> [BLOCK_TYPE SECTION/STEP]
Bacino largo = molte configurazioni di pesi vicine raggiungono anch’esse una bassa loss di addestramento. La generalizzazione tende a essere buona (la larghezza del bacino predice le prestazioni sul test; vedi la lezione PAC-Bayes, Capitolo 3). [BLOCK_TYPE SECTION/STEP]
<translated content>
Bacino stretto = solo un insieme limitato di pesi raggiunge una bassa perdita. La generalizzazione tende a peggiorare.
La v3 polish al passo 112.619 ha spinto il modello lungo la superficie (senza reset) verso un bacino più ampio tramite perturbazione curricolare: modifica della funzione di perdita (diverso bandit, diverso mix di addestramento), lasciando che SGD trovi una regione piatta vicina sotto la nuova policy.
Il Precipizio Zombie
La perdita anomala di 0,13 al passo 112.080 era un PRECIPIZIO: una regione stretta e ripida in cui uno specifico pattern di input (sottostringa memorizzata dai repo-docs) raggiunge una perdita quasi zero. Il modello è caduto dal bacino più ampio in un canalone stretto. L’esclusione hard dei repo-docs nella polish-pivot ha riempito quel canalone, impedendo a SGD di trovarlo.
Lettura del Terreno
Miscela Curricolare come Cammino su un Simplice Discreto
Cos'è un Simplice
Un simplice n-dimensionale (in particolare lo standard (n-1)-simplice) è l'insieme di n-uple (w_1, w_2, ..., w_n) con ogni w_i >= 0 e sum(w_i) = 1.
Per n = 2: un segmento di retta da (1, 0) a (0, 1). Per n = 3: un triangolo con vertici (1, 0, 0), (0, 1, 0), (0, 0, 1). Per n = 16 (elenco completo delle fonti di ANDREA): un simplesso 15-dimensionale contenuto in R^16.
Pesi del Bandit come Coordinate del Simplesso
Il bandit di ANDREA produce, in ogni fase, un vettore di pesi w sulle fonti di dati. Ogni componente w_i è la probabilità di campionare la fonte i. Le probabilità sono non negative e sommano a 1: ogni vettore di pesi giace sul simplesso.
Vertici = strategie pure (campiona una sola fonte). Interno = strategie miste (campiona più fonti, ciascuna con probabilità positiva). Lati = miscele di sole due fonti.
Piani delle Fonti come Regione Vincolata
ANDREA impone pesi minimi: hermes3-general con floor 0.7 (post-polish). Questo ritaglia una sotto-regione del simplex: sono raggiungibili solo i vettori di peso con w_hermes3-general >= 0.7.
Geometricamente: il floor taglia il simplex con un iperpiano. La regione raggiungibile è la parte del simplex che si trova sul lato corretto di ogni iperpiano di floor.
I cap come l'altra restrizione
ANDREA impone anche pesi massimi: dictionary con cap 0.25 (post-polish). Ogni cap è un altro iperpiano, e la regione raggiungibile deve trovarsi anche sul lato corretto di ogni iperpiano di cap.
Escludere completamente una sorgente (cap = 0.0) è il cap più forte possibile: la coordinata viene fissata a zero, riducendo il simplex effettivo di una dimensione.
Transizioni di fase come cammini sul simplesso
Ogni transizione di fase (ogni 7-42 passi) produce un nuovo vettore di pesi. Ogni nuovo vettore è un punto sul simplesso. In 200K passi, il bandit traccia un lungo percorso attraverso la regione raggiungibile del simplesso.
Fasi casuali = teletrasporto a un punto casuale uniforme all'interno della regione raggiungibile.
Fasi controllate dal bandit = passo verso il vertice UCB-migliore coerente con i floor e i cap.
Pivot di polish = ridisegna la regione raggiungibile (nuovi floor, nuovi cap, alcune sorgenti escluse), e il cammino continua dal nuovo punto di partenza.
Perché i Vertici Sono Pericolosi
[BLOCK_TYPE simplex/simplex_content]Le fasi pure (una w_i = 1, le altre = 0) si trovano ai vertici del simplesso. La diversità è zero. Il modello si addestra su una sola distribuzione. Il collasso di v1 è in parte dovuto al bandit che campeggia vicino al vertice repo-docs; i campioni riproducevano esclusivamente la distribuzione di quella fonte. [BLOCK_TYPE simplex/simplex_content]
[BLOCK_TYPE simplex/simplex_content]
I floor impediscono il campeggio ai vertici: un floor a 0.7 dice "non far mai scendere il peso di una fonte sotto 0.7" (o qualunque sia il floor per le fonti prioritarie). [BLOCK_TYPE simplex/simplex_question]
Camminare nella Regione Raggiungibile [BLOCK_TYPE simplex/simplex_question]
Tre fonti: hermes3-general (H), gutenberg (G), dictionary (D). Vincoli: floor H = 0.5, cap D = 0.25. (Implicito: tutti i pesi >= 0, somma a 1, nessun altro vincolo.) [BLOCK_TYPE simplex/simplex_question]
Riduzione delle Dimensioni per i Primi 20K Passi
Cosa ha fatto il Curriculum Warmup di v2
v2 ha impostato curriculum_warmup_sources su sette fonti: hermes3-general, hermes3-creative, hermes3-roleplay, chat, smoltalk, oasst, gutenberg. Per i primi 20K passi, SOLO queste sette fonti hanno contribuito. Dopo il passo 20K, si è attivato il flusso completo a 16 fonti.
Interpretazione Geometrica
Il simplesso completo a 16 sorgenti si trova in R^16. Limitandosi a 7 sorgenti, 9 delle 16 coordinate collassano a zero. La camminata del bandit avviene in un sottosimplesso 6-dimensionale (uno in meno del numero di sorgenti, per il vincolo di somma a 1).
Geometricamente: una SOTTOMANIFOLDO del simplesso completo. Di dimensione inferiore, più liscia, più facile da navigare.
Perché Questo Aiuta l'Addestramento Iniziale
All'inizio dell'addestramento, il modello non ha ancora imparato un linguaggio coerente. Sorgenti diverse lo confondono: ogni sorgente ha il proprio stile, la propria distribuzione del vocabolario, il proprio schema. Mescolare 16 sorgenti all'inizializzazione casuale crea una distribuzione target troppo ampia che il modello non riesce a fittare.
Limitarsi a 7 sorgenti conversazionali/prosaiche fornisce un target più uniforme. Il modello impara prima una rappresentazione stabile, poi si espande.
Percorso Geometrico Durante l’Addestramento
1. Passi da 0 a 20K (warmup). Il percorso si muove sul 6-D sub-simplex. Nel modello emergono pattern linguistici stabili.
2. Passi da 20K a 112K (full firehose). Il percorso si espande al 15-D full simplex. Emerge la larghezza di dominio.
3. Passo 112K in poi (polish). Il percorso è nuovamente ristretto: repo-docs e repo-docstrings esclusi, soglie conversazionali alzate. Poligono più piccolo nel full simplex; la qualità conversazionale si consolida.
Perché Polish Imposta curriculum_warmup_steps = 0
Polish inizia al passo 112K. Il modello parla già un linguaggio coerente. Limitarsi ora a un sub-simplex comporterebbe perdita di ampiezza senza alcun guadagno (il beneficio del warmup è per modelli inizializzati da zero). Impostare warmup_steps = 0 significa: rimanere sul full simplex, ma con nuovi limiti superiori e inferiori.
Tre Geometrie, Un Solo Training Run
v2 warmup: sub-simplex a bassa dimensionalità.
v2 firehose: simplex completo a 15-D.
v3 polish: simplex completo con poligono più piccolo (più vincoli).
Stesso training run da 200K step, tre diversi regimi geometrici. Ognuno è stato ottimizzato per una fase diversa di maturità del modello.