English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

ospite
1 / ?
torna alle lezioni

Plain SGD Non Può Addestrare ANDREA

Stochastic Gradient Descent, il Punto di Partenza

Backprop calcola un gradiente g per ogni parametro. Plain stochastic gradient descent (SGD) aggiorna ogni parametro con p -= lr * g. Un learning rate, una direzione per passo, nessuna memoria dei gradienti passati.


Plain SGD si rompe a scala per due ragioni:


1. I gradient hanno magnitudini wildly diverse tra i parametri. Un embedding per un token raro riceve un gradient minuscolo nella maggior parte dei passi; una scala layernorm riceve una grande. Un solo learning rate non può adattarsi a entrambi.

2. I gradient oscillano. Un mini-batch rumoroso da un corpus a 16 fonti spinge un parametro a sinistra, poi a destra, poi a sinistra. SGD semplice spreca passi lottando contro se stesso.


Adam (Kingma & Ba, 2015) risolve entrambi con due medie mobili per parametro.

Primo Momento & Secondo Momento

m: Direzione Smussata

Il primo momento m fa la media esponenziale dei gradient recenti:


m = beta1 m + (1 - beta1) g


con beta1 = 0.9. Dopo diversi passaggi, m porta una direzione smussata; un batch cattivo lo sposta a malapena.


v: Magnitudo Smussata

Il secondo momento v fa la media dei gradienti al quadrato recenti:


v = beta2 v + (1 - beta2) g^2


con beta2 = 0.999. v traccia quanto tipicamente diventa grande il gradiente di ciascun parametro. I parametri con gradiente grande ottengono un v grande; i parametri con gradiente minuscolo ottengono un v piccolo.


Tasso di Apprendimento Adattivo Per-Parametro

Dividendo la direzione smussata per la radice quadrata della magnitudine smussata, si ridimensiona ogni parametro su una base comparabile:


adam_step = m / sqrt(v + eps)


Gli embedding con gradiente piccolo vengono scalati verso l'alto; le layernorm con gradiente grande vengono scalate verso il basso. Un singolo lr globale ora si adatta a ogni parametro.

Leggere i Moments

Due parametri ricevono lo stesso gradiente `g = 0.1` in questo step. Il Parametro A ha accumulato `v = 0.0001` su molti step; il Parametro B ha `v = 1.0`. Usando `adam_step = g / sqrt(v + eps)`, quale parametro riceve l'aggiornamento maggiore in questo step, & perché Adam lo vuole così?

Perché i Primi Passi Necessitano di Correzione del Bias

Bias di Avvio a Freddo

m & v partono da zero. Dopo il passo 1, m = 0.1 g_1 & v = 0.001 g_1^2. Entrambe le stime sottostimano drammaticamente una media a lungo termine. Senza correzione, l'ottimizzatore parte timido e accelera lentamente, sprecando preziosi primi passi quando si formano le rappresentazioni.


La Correzione

Adam scala ogni stima per 1 / (1 - beta^t) dove t è il numero del passo:


m_hat = m / (1 - beta1^t)


v_hat = v / (1 - beta2^t)


Al passo 1 con beta1 = 0.9, il divisore (1 - 0.9) = 0.1, quindi m_hat = m / 0.1 = 10 * m. La stima corretta per il bias corrisponde a ciò che prevederebbe la media a lungo termine. Man mano che t cresce, beta^t si avvicina a 0, la correzione si avvicina a 1 e i valori corretti e non corretti convergono.

Decoupled Weight Decay (l'innovazione di AdamW)

Regolarizzazione L2 vs Weight Decay

La classica regolarizzazione L2 aggiunge una penalità alla loss: L_total = L_data + (lambda / 2) sum(p^2). Il backprop vede quella penalità come parte del gradiente: g_total = g_data + lambda p. Il termine L2 fluisce attraverso gli aggiornamenti di m e v di Adam, venendo smussato e riscalato dalle magnitudini per-parametro.


Loshchilov & Hutter (2019) hanno dimostrato che lisciare un regularizzatore attraverso Adam corrompe entrambi. La scalatura adattiva di Adam riduce il weight decay sui parametri con gradienti grandi (dove il decay dovrebbe combattere più duramente l'overfitting) e lo amplifica su quelli con gradienti piccoli.


AdamW: Applica il Decay Direttamente

AdamW desacopla il weight decay dal gradiente. Il decay si applica direttamente a ciascun parametro durante l'aggiornamento del parametro, senza mai toccare m o v:


p -= lr (m_hat / (sqrt(v_hat) + eps) + weight_decay p)


Due termini ora guidano ciascun passo:


1. Termine Adam: m_hat / (sqrt(v_hat) + eps) ridimensiona la direzione del gradiente in base alla storia della magnitudine per parametro.

2. Termine di decadimento: weight_decay * p riduce ogni parametro verso zero, uniformemente, senza passare attraverso la levigatura di Adam.


ANDREA-120M v2 imposta weight_decay = 0.01. Ad ogni passo, ogni parametro si riduce dell'1% verso zero, in aggiunta a qualunque cosa faccia il termine Adam.


AdamW Optimizer Step

Perché il Decoupling Conta

ANDREA-120M v1 ha usato vanilla Adam (senza weight decay) & è collassata in loop di ripetizioni al passo 110K. v2 ha usato AdamW con `weight_decay = 0.01` & ha prodotto testo coerente multi-paragrafo. Spiega (a) quale termine specifico viene aggiunto in AdamW che manca in vanilla Adam, & (b) perché metterlo DENTRO il gradiente (L2 classico) sarebbe peggio della posizione disaccoppiata FUORI di AdamW.

Evidenza Empirica

Collasso v1 (senza weight decay)

ANDREA-120M v1 addestrata per 165K passi con vanilla Adam. Output di esempio:


- Step 80K: region region region region region region region

- Step 110K: ''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '

- Step 140K: games, games, games, games, games, games, games

- Step 165K: Budy Budy Budy Budy Budy Budy Budy Budy Budy


I numeri di loss sono rimasti ragionevoli (minimo EMA 3.23 al passo 110K, contro 9.04 del caso casuale). Il loss da solo nasconde il collasso della ripetizione: un modello che memorizza un token per sempre ottiene un basso cross-entropy cross-entropy su ogni passo in cui appare quel token.


Stabilità v2 (weight_decay = 0.01)

v2 ha aggiunto AdamW (più clipping del gradiente, warmup LR, monitoraggio dei sample). Al passo ~112K, i sample generati:


- Il parrocchetto di Carolina è stato dichiarato estinto nel 1939 (fattualmente corretto)

- La trasformata di Fourier decompone i segnali in componenti di frequenza (definizione da manuale)

- Ritmo della pioggia, Rivoli sul vetro, Respiro dal dolore della vita (vincolo haiku soddisfatto)


Una valutazione esterna ha assegnato ai sample di v2 un punteggio di 9.5/10, definendoli "impressionante coerenza & ritenzione della conoscenza a questa scala."


I 12M sono sopravvissuti senza AdamW. Perché?

ANDREA-12M addestrato con vanilla Adam senza collasso. A 12M parametri, le matrici dei pesi rimangono abbastanza piccole da non permettere all'adaptive scaling di Adam di spingere i pesi individuali verso magnitudini runaway che causano ripetizione. Alla scala di 120M, le magnitudini dei pesi derivano ulteriormente per step e si accumulano; il decay uniforme applica una forza di ripristino costante verso zero. Il decoupled weight decay diventa più importante man mano che il modello scala.

Scegliere weight_decay = 0.01

Perché `weight_decay = 0.01` potrebbe funzionare per un modello da 120M parametri ma un valore 100x più grande (`weight_decay = 1.0`) distruggere l'addestramento? Ragiona sulla regola di aggiornamento `p -= lr * (adam_term + weight_decay * p)`. Scegli un `p` rappresentativo, inserisci `weight_decay = 1.0` per un singolo step, e descrivi cosa succede a `p` dopo pochi step.

Attività Correlate

AdamW si intreccia con tre attività sorelle in questo corso:


- Attività 11: Riscaldamento LR + decadimento coseno. AdamW da solo non può salvare un modello da un tasso di apprendimento istantaneo di picco su pesi appena inizializzati. Il riscaldamento aumenta gradualmente lr su 2000 passi in modo che la correzione del bias di AdamW e il decadimento dei pesi abbiano tempo di stabilizzare le rappresentazioni.

- Attività 12: Clip dei gradienti. AdamW assume che i gradienti abbiano magnitudo limitata. Le transizioni della sorgente ogni 7-42 passi nel bandit di ANDREA producono occasionali picchi di gradienti; il clipping li limita a norma L2 1.0 PRIMA che AdamW tocchi m, v o p.

- Attività 13: Precisione FP32 / FP16 / FP8. AdamW memorizza m e v per parametro, raddoppiando l'impronta di memoria dei pesi da soli. FP16 la dimezza; FP8 la dimezza di nuovo. Le scelte di precisione interagiscono con la stabilità dell'ottimizzatore.


AdamW, warmup, clipping e precision formano un quadrifoglio. Togli una foglia, guarda ANDREA crollare.

Riflessione sull'Ottimizzatore

Scegli un campione ANDREA-120M v1 (es. `region region region region`) e descrivi come il termine `weight_decay * p` di AdamW, applicato ad ogni step a partire dallo step 0, avrebbe prevenuto quella specifica modalità di fallimento. Un paragrafo.