Quanto Dovrebbe Sorprendersi il Modello?
Da Logits a Probabilità
Dopo 12 blocchi transformer, ANDREA-120M produce un vettore di vocab_size numeri per posizione di token: i logits. Per ANDREA-120M, vocab_size = 8449, quindi ogni posizione genera 8449 logits. I logits sono punteggi non normalizzati; alcuni positivi, alcuni negativi, senza vincolo di sommare a 1.
Softmax converte i logit in una distribuzione di probabilità:
p_i = exp(logit_i) / sum_j exp(logit_j)
Dopo softmax, tutti i 8449 numeri si trovano tra 0 e 1, sommando a 1. Il modello assegna una probabilità a ogni possibile token successivo.
Cross-Entropy Loss
L'addestramento richiede una funzione di perdita: un numero che misura quanto sbagliata sia stata la previsione del modello per una data risposta corretta. La cross-entropy funziona per il language modeling:
loss_t = -log(p_correct_token_t)
Prendi la probabilità prevista dal modello per il token successivo effettivo (quello nei dati di addestramento). Prendi il log negativo di quella probabilità. Questa è la perdita per una posizione.
Perché Log Negativo
Tre proprietà rendono -log(p) una funzione di perdita naturale:
- -log(1) = 0: Quando il modello prevede il token corretto con il 100% di confidenza, la perdita è zero.
- -log(0) = ∞: Quando il modello assegna probabilità zero al token corretto, la perdita è infinita. (In pratica, softmax non genera mai esattamente 0; la perdita rimane finita ma grande.)
- Monotonica: Man mano che la probabilità prevista per il token corretto aumenta, la perdita diminuisce in modo fluido.
Maggiore confidenza sulla risposta corretta = perdita minore. L'obiettivo di addestramento è semplice: massimizzare la probabilità prevista per il token successivo effettivo.
Perdita Per-Sequenza
ANDREA si addestra su sequenze di lunghezza 1024 (la finestra di contesto). Ogni sequenza produce 1024 previsioni del token successivo. La perdita della sequenza è la media su tutte le posizioni:
sequence_loss = mean(-log(p_correct_t)) for t in 0..1023
Le perdite sequenziali vengono poi mediate sul batch (ANDREA-120M usa batch_size = 8). Un singolo numero scalare per step di training. Quel numero è ciò che viene plottato nella curva di loss.
Calcolo della Loss per una Posizione
Perplessità = exp(loss)
Una Scala Più Amichevole
Valori di loss come 2.0 o 3.43 non trasmettono immediatamente cosa può fare il modello. La perplessità traduce il loss su una scala più intuitiva:
perplessità = exp(loss)
Perplexity risponde a una domanda chiara: tra quanti token altrettanto probabili sceglie effettivamente il modello? Una perplexity di 7 significa che il modello si comporta come se stesse scegliendo tra 7 token successivi plausibili in ogni posizione. Una perplexity di 1 significa previsione perfetta.
Coppie comuni Loss-Perplexity
| Loss | Perplexity | Come si sente |
|---|---|---|
| 0.0 | 1.0 | Previsione perfetta |
| 1.0 | 2.7 | Scelta tra ~3 token plausibili |
| 2.0 | 7.4 | Territorio finale SMMA di ANDREA-12M |
| 3.0 | 20.1 | Testo ragionevole ma incerto |
| 3.43 | 30.9 | Minimo di ANDREA-120M v1 (prima della rifinitura) |
| 5.0 | 148 | Addestramento iniziale, apprendimento distribuzione vocabolario |
| 9.04 | 8449 | Baseline casuale per il vocabolario di ANDREA-120M |
La perplessità contestualizza i valori di loss: una loss di 2.0 significa che il modello sceglie efficacemente tra ~7 token, non tra 8449.
Il Baseline del Caso Casuale
Un modello che non sa nulla e indovina uniformemente assegna probabilità 1/V a ogni token, dove V = vocab_size:
p_uniform = 1 / V
loss = -log(1/V) = log(V)
Per ANDREA-120M con V = 8449:
loss_uniform = ln(8449) ≈ 9.04
Per ANDREA-12M con V = 2305:
loss_uniform = ln(2305) ≈ 7.74
Qualsiasi loss al di sopra di questa baseline significa che il modello performa peggio di un caso casuale. Qualsiasi loss al di sotto significa che il modello ha imparato qualcosa: concentra la massa di probabilità su un sottoinsieme più piccolo di token rispetto a una distribuzione uniforme.
Leggere un Valore di Loss
Livellamento del Rumore a Livello di Step
Il Loss Grezzo È Rumoroso
Il loss per step rimbalza intorno. Il bandit di ANDREA sceglie una fonte diversa ogni 7-42 step; alcune fonti (definizioni di dizionario) producono loss facili; altre (paragrafi di Gutenberg) producono loss più difficili. Plottare il loss grezzo per step contro il numero di step produce uno scatter caotico.
Media Mobile Modificata Smussata (SMMA) attenua il rumore e rivela la tendenza. Il proxy di addestramento di ANDREA calcola la SMMA come:
SMMA[0] = loss[0]
SMMA[t] = (SMMA[t-1] * (N-1) + loss[t]) / N
Con N = 100 (finestra di smussamento predefinita di ANDREA), ogni nuovo valore SMMA mescola il 99% della SMMA precedente con l'1% della nuova perdita del passo. I picchi improvvisi vengono assorbiti; gli spostamenti sostenuti appaiono gradualmente.
Perché non solo la media semplice?
Una media mobile semplice sugli ultimi 100 step richiede di memorizzare 100 valori di loss. SMMA memorizza un solo valore (la media mobile) & una sola costante (la dimensione della finestra). Poco consumo di memoria, computazionalmente banale, & abbastanza liscia da leggere una curva.
Diversi pesi di smoothing rispondono a diverse domande:
- N = 10: traccia i cambiamenti a breve termine; utile durante le transizioni di fase
- N = 100: default di ANDREA; traccia i progressi a medio termine
- N = 1000: solo il trend a lungo termine; utile alla fine dell'addestramento
Cosa Traccia ANDREA
Ogni 100 step, il proxy di addestramento scrive loss.json con l'SMMA corrente, la loss grezza, il numero di step e le scomposizioni per sorgente. La dashboard su training.ai.unturf.com/dashboard interroga questo file ogni 10 secondi. Gli spettatori esterni vedono i progressi in tempo reale; la dashboard è in sola lettura.
La Curva Reale di ANDREA-12M
La Ricetta Che Ha Raggiunto SMMA 2.0
| Step | Loss Media | Note |
|---|---|---|
| 0--2.5K | 4.50 | Init casuale, apprendimento iniziale |
| 2.5K--5K | 3.88 | Calo rapido nella fase strutturale |
| 5K--10K | 3.30 | Avvicinamento al confine di coerenza |
| 10K--20K | 2.80 | Bandit trova mix ottimale |
| 20K--25K | 2.40 | Plateau --- carenza di dati |
| 25K--30K | 2.50 | Dati Hermes introdotti + riavvio LR |
| 30K--35K | 2.35 | Hermes integrato, nuovi minimi |
| 35K--40K | 2.10 | Focus su 4-arm, discesa ripida |
| 40K--43.6K | 2.00 | Territorio di conoscenza, SMMA sotto 2.0 |
Tre fasi spiccano:
1. Discesa ripida iniziale (0-10K). La loss scende da 4.50 a 3.30 mentre il modello impara la distribuzione del vocabolario e la struttura base dei turni. Il baseline di probabilità casuale ln(2305) ≈ 7.74 si trova molto al di sopra di questa curva; il modello concentra rapidamente la massa di probabilità una volta stabilizzati gli embedding.
2. Plateau (20K-25K). La loss si blocca a 2.40. Il bandit aveva esaurito il margine di miglioramento con la sua miscela attuale di fonti. I dati Hermes vengono aggiunti al passo 25K, più un riavvio caldo dell'LR, che ha rotto il plateau.
3. Discesa finale (35K-43.6K). Curriculum ristretto da 16 fonti a 4 (hermes3-general + dictionary + gutenberg + chat). Declino della loss più ripido rispetto al full-arm bandit. SMMA finale: 2.0.
ANDREA-120M v1: Una curva cautelativa
Stesso calcolo del vocabolario: ln(8449) ≈ 9.04. ANDREA-120M v1 ha raggiunto SMMA 3.43 al passo 110K (il suo minimo), poi è divergente:
| Passi | EMA Loss | Trend |
|---|---|---|
| 26K--40K | 4.29 | In convergenza |
| 70K--85K | 3.60 | Migliore regione |
| 85K--110K | 3.43 | Minimo |
| 110K--125K | 3.54 | In divergenza |
| 140K--155K | 4.05 | In divergenza |
| 155K--165K | 4.54 | Collassato |
Valori di loss numericamente ragionevoli per tutto l’addestramento (3.43 è ben al di sotto della baseline casuale di 9.04). Ma i campioni erano in collasso di ripetizione: Budy Budy Budy Budy. La loss ha raccontato una storia fuorviante; gli audit sui campioni no.
Il coherence-gated early stopping di v2 (attività 78) ha aggiunto un segnale parallelo: diversità bigram, diversità trigram, presenza di parole inglesi, diversità dei caratteri. Quando tutti e quattro i punteggi rimangono sotto 30 per 5 campioni consecutivi, l'addestramento si auto-interrompe. Questo segnale avrebbe catturato v1 al passo 132K, risparmiando 3,8 giorni di calcolo.
Cosa Ti Dice Ogni Fase
La lezione 120M v1
Due Segnali Indipendenti
ANDREA-120M v1 ha raggiunto SMMA 3.43 al passo 110K. Numericamente: 273× meglio della casualità (perplessità 31 vs dimensione vocabolario 8449). Sembra ottimo sulla curva.
Campione al passo 110K::
''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
Loss e coerenza sono segnali indipendenti. Un basso loss significa che il modello concentra efficacemente la massa di probabilità. Coerenza significa che il modello produce testo che gli umani possono leggere. Il primo non implica il secondo.
Perché Esiste il Divario
Un modello può ridurre il loss tramite:
1. Imparare pattern linguistici reali (buono): accordo soggetto-verbo, frasi comuni, associazioni fattuali.
2. Memorizzare artefatti strutturali (cattivo): pattern di ripetizione ad alta frequenza, peculiarità specifiche del dataset, attrattori degeneri.
Entrambi riducono la loss. Il primo produce campioni che piacciono agli umani. Il secondo produce Budy Budy Budy Budy. L'obiettivo di addestramento da solo non può distinguerli.
ANDREA-120M v3 Polish: Dove Loss & Coerenza Si Incontrano
Dopo il polish v3 (dal passo 112K in poi), ANDREA-120M produce:
Passo 112.584, loss 0.30, ppl 1::
> [extinction prompt]
< La *black spider montano* è viva, il *carolina parakeet* è estinto.
Entrambi i fatti corretti. Carolina parakeet dichiarato estinto nel 1939; black spider monkey esistente. Bassa perdita (0.30) E richiamo fattuale coerente.
Passo 112.500, loss 1.94, ppl 7::
> Come trovo i pacchetti obsoleti in un progetto Python?
< Usa pip list --outdated names per vedere l'elenco dei pacchetti pip...
Loss più alto (1.94 → ppl 7) ma emerge lo strumento giusto dai dati di addestramento. La fluidità della frase si sta ancora sviluppando al 56% del punto di addestramento.
La Disciplina dei Due Segnali
I pipeline di addestramento moderni monitorano ENTRAMBI:
- Curva di loss. Ti dice se il modello sta imparando qualcosa di quantitativo.
- Audit di campioni. Ti dice se ciò che il modello ha imparato è utile.
v2 ha aggiunto lo stopping anticipato con gate di coerenza (attività 78). La lucidatura v3 è stata una perturbazione del curriculum innescata da audit di campioni, non da valori di loss. Il loss da solo è necessario ma mai sufficiente.