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

Da Dove Vengono i Picchi di Gradiente

Un Mini-Batch Calmo & Uno Scioccante

La maggior parte dei mini-batch produce gradienti con magnitudini ragionevoli. La perdita di cross-entropy per un modello che già si adatta approssimativamente ai dati rimane in una fascia stretta; il backprop trasporta quel segnale indietro come gradienti di dimensione simile.


Alcuni mini-batch no. Tre fonti di picchi di gradiente:


1. Esempi outlier. Una singola sequenza con una combinazione di token estremamente rara produce una perdita molto lontana dalla media e un gradiente molto lontano dalla media.

2. Casi limite numerici. Un denominatore softmax vicino a zero, una layernorm che produce NaN, un overflow FP16. Ognuno può produrre gradienti di ordini di grandezza più grandi del tipico.

3. Spostamenti di distribuzione. Passare da una fonte di dati all'altra durante una singola esecuzione di addestramento sconvolge il modello con una nuova distribuzione. Il bandit di ANDREA rimescola i pesi delle fonti ogni 7-42 step. Ogni passaggio è uno spostamento di distribuzione piccolo.


ANDREA-120M v1: Cascata di Spike

v1 non aveva clipping dei gradienti. Le transizioni di fonte ogni 7-42 step dal bandit fornivano al modello brevi raffiche di repo-docs (strutturati come liste), poi gutenberg (prosa lunga), poi hermes3-general (Q&A). Ogni transizione produceva spike di gradienti: ogni spike spingeva i pesi verso attrattori degenerati alla scala di 120M.


Fatto empirico chiave. ANDREA-12M ha sopravvissuto allo stesso bandit senza clipping. Matrici di peso più piccole rimangono robuste agli shock di gradiente; un singolo batch cattivo non può spingere 12M parametri in un attrattore di fuga come può farlo con 120M. Il clipping è più importante man mano che il modello scala.

Global L2 Norm Clipping

Due Scelte: Per-Tensor o Globale

Due modi per limitare le magnitudini dei gradienti:


Clipping per-tensor. Clippa ogni tensore di gradiente indipendentemente. Il gradiente di embedding viene clippato alla sua norma; il gradiente di attention viene clippato alla sua norma. Semplice, ma distorce le scale relative: un piccolo spike in un tensore (ora gradiente zero) si accoppia con un enorme gradiente in un altro (non toccato).


Clipping della norma L2 globale. Tratta tutti i gradienti come un unico grande vettore. Calcola la norma L2 totale su ogni parametro. Se la norma supera max_norm, scala ogni gradiente con lo stesso fattore. Preserva le magnitudini relative tra i tensori.


ANDREA utilizza global. Pascanu et al. (2013) hanno dimostrato empiricamente che il clipping globale supera il per-tensor per l'addestramento dei transformer.


La Matematica

Calcola la norma L2 globale:


norm = sqrt(sum over all params of g_i^2)


Se norm <= max_norm, i gradienti passano inalterati. Se norm > max_norm, scala ogni gradiente per max_norm / norm:


g_i_clipped = g_i * (max_norm / norm)


Dopo la scalatura, la nuova norm è esattamente uguale a max_norm. ANDREA usa max_norm = 1.0.

Calcolo del Fattore di Scala

Supponi che durante un passo di addestramento, la norma L2 globale di tutti i gradienti sia `3.5`. `max_norm` di ANDREA è `1.0`. Calcola (a) il fattore di scala applicato, (b) qual è la nuova norma L2 globale dopo la scalatura, & (c) cosa succederebbe se la norma non clippatta fosse `0.4` invece di `3.5`. Mostra i calcoli.

Perché il Calcolo della Norma del Gradiente Richiede Tre Kernels

L'Algoritmo Naïf Non Può Eseguirsi su una GPU

Pseudocodice per il calcolo della norma L2 globale:


total = 0
per ogni parametro p:
per ogni elemento g in p.grad:
total += g * g
norm = sqrt(total)

Su una GPU, questo ciclo naive fallisce per due ragioni:


1. Accumulazione sequenziale. Un singolo accumulatore total costringe ogni thread ad aspettare ogni altro thread, vanificando il parallelismo della GPU.

2. Tensor eterogenei. ANDREA-120M ha tensor di forme molto diverse: embedding (8449 x 768), attention QKV (768 x 768), layernorm (768). Un solo kernel non può iterare efficientemente tutte le forme.


Il Pipeline a Tre Kernel di ANDREA

Dividere il lavoro in tre CUDA kernel in microgpt_cuda.cu:


Kernel 1: k_grad_norm_partial. Per ogni tensor di parametri, calcolare una somma parziale dei quadrati. Ogni thread block riduce un chunk del tensor; i risultati vengono scritti in un piccolo buffer di scratch. Parallelismo: un block per chunk, centinaia di block su tutti i tensor.


Kernel 2: k_grad_norm_final. Riduce il buffer di scratch a un singolo scalare. Ne calcola la radice quadrata. Un piccolo kernel, eseguito in microsecondi.


Kernel 3: k_grad_scale. Se norm > max_norm, calcola scale = max_norm / norm e moltiplica ogni elemento del gradiente per scale. Un passaggio su ogni tensore di gradiente, imbarazzantemente parallelo.


L'Ordine Conta: Pre-Adam

Il pipeline di clipping viene eseguito PRIMA che AdamW aggiorni m, v o qualsiasi parametro. Perché?


I gradienti clipped alimentano le medie mobili esponenziali di AdamW. Se un picco fosse consentito di fluire in m & v, corromperebbe quelle medie in esecuzione & rallenterebbe il recupero per molti passi dopo il picco. Il clipping pre-Adam mantiene l'effetto del picco confinato al singolo passo cattivo.


Gradient Clipping with 3 CUDA Kernels

Perché Tre Kernel, Non Uno?

Supponi che qualcuno proponesse di fondere `k_grad_norm_partial` & `k_grad_norm_final` in un singolo kernel che calcola l'intera norma globale in un unico passaggio. Dai un motivo specifico per cui questa fusione fallirebbe o performerebbe peggio su una GPU. Fai riferimento a come i thread block della GPU condividono la memoria & si sincronizzano.

Come il No-Clipping ha Ucciso v1

Transizioni della Fonte Bandit Ogni 7-42 Passi

Il bandit di ANDREA opera in fasi. Ogni fase dura 7, 14, 21, 28 o 42 passi (scelti casualmente). A ogni confine di fase, i pesi delle fonti cambiano: magari repo-docs balza da 0.1 a 0.6, gutenberg scende da 0.4 a 0.1, hermes3-general sale da 0.5 a 0.7.


Ogni transizione è uno shock di distribuzione per il modello. La loss schizza brevemente in alto. I gradienti schizzano con essa: un modello che stava minimizzando la loss contro prosa dal sapore gutenberg ora vede strutture di liste dal sapore repo-docs, e i gradienti portano un segnale correttivo che può essere 10x o 100x la magnitudine tipica.


Modalità di Fallimento di v1

Senza clipping, quelle punte di gradiente 10-100x fluivano nelle medie m & v di AdamW. Lisciare di AdamW significava che l'effetto della punta persisteva per molti step dopo il batch cattivo effettivo. Combinato con l'assenza di weight decay (vanilla Adam in v1), gli aggiornamenti di peso guidati dalle punte si accumulavano su fasi fino a che i pesi derivavano in un attrattore degenere: il logit di un token dominava il softmax, l'output campionato era quel token, il contesto di training conteneva quel token, il gradiente rinforzava quel token. Blocco della ripetizione.


Stabilità v2

v2 ha aggiunto clipping con max_norm = 1.0, insieme a AdamW & LR warmup. L'effetto della punta su m & v è limitato; i pesi non possono derivare più velocemente di lr max_norm = 0.0003 1.0 = 0.0003 per parametro per step al picco. Le transizioni di fase producono ancora punte, ma quelle punte sono cappate prima di raggiungere l'ottimizzatore.


Risultato: v2 (dopo filtro dati v2.5 & lucidatura v3) ha raggiunto richiamo fattuale, coerenza multi-paragrafo, & voti esterni 9.5/10 su campioni di biologia & elaborazione del segnale.


L'accoppiamento Capacità-Fragilità

Stesso bandit. Stessi dati. Stessi iperparametri eccetto il clipping. Perché 12M è sopravvissuto senza clipping mentre 120M è collassato?


Due fattori cumulativi:


1. Matrice di pesi più grandi immagazzinano più attrattori. Una proiezione di attenzione 768x768 ha 590K parametri; anche piccole derive per-parametro producono cambiamenti significativi nel comportamento di attenzione. Una proiezione di attenzione 384x384 ha 147K parametri & rimane in uno spazio più vincolato.

2. Più layer significa più interazioni moltiplicative. v3 ha 12 layer transformer (vs 6 per 12M). Gli spike si propagano attraverso 12 layer di non-linearità cumulative; ogni layer può amplificare la deriva del layer precedente.


La fragilità si accumula con la capacità. Il clipping diventa obbligatorio sopra una certa soglia di scala; ANDREA posiziona quella soglia da qualche parte tra 12M & 120M parametri.

Diagnosi della cascata v1

Supponi che al passo 50.000 dell'addestramento v1, un singolo mini-batch produca un gradiente con norma L2 globale di 50.0 (i batch tipici producono ~0.5). Traccia cosa succede al primo momento `m` di AdamW nei successivi 10 passi se i batch successivi tornano a magnitudini di gradiente tipiche. Considera come `m = beta1 * m + (1 - beta1) * g` con beta1=0.9 propaga il picco.

Dove Altro Si Applica il Clipping?

Oltre al curriculum guidato da bandit di ANDREA, nomina un ALTRA scenario di addestramento dove il clipping globale del gradiente L2 sarebbe similmente importante, & dai un meccanismo che lo rende tale.

Attività Adiacenti

Tre fratelli sono collegati al clipping:


- Attività 10: AdamW. Il clipping protegge m e v di AdamW dalla contaminazione da spike. Senza clipping, un batch cattivo corrompe lo stato dell'ottimizzatore per 50+ passi.

- Attività 11: LR warmup. Il warmup attenua lr; il clipping attenua g. Insieme: al passo 1, l'aggiornamento del parametro nel caso peggiore è lr_after_warmup max_norm = 1.5e-7 1.0 = 1.5e-7, vs 0.0003 * 50 = 0.015 senza nessuno dei due guardiani. Una riduzione di 100.000x nella magnitudine dell'aggiornamento precoce nel caso peggiore.

- Attività 14: Banditi a molti bracci. La lunghezza della fase bandit (da 7 a 42 passi) è breve specificamente per impedire che una sola fonte domini; il clipping è ciò che rende quelle transizioni frequenti sicure.


Il clipping è la vittoria sulla stabilità più economica nell'addestramento dei transformer: 3 piccoli kernel CUDA, microsecondi per passo, impatto decisivo su se i modelli da 120M+ convergono o collassano.