02 · Càlcul i optimització
Idea central: entrenar un model = minimitzar una funció escalar (la pèrdua) movent-se en direcció contrària al gradient. Backpropagation no és més que la regla de la cadena aplicada eficientment.
1. Derivades i gradients# sense fórmules
Per a , la derivada és la taxa de canvi instantània. Per a (una pèrdua!), el gradient és el vector de derivades parcials:
Camp de gradients i derivada direccional
El gradient apunta cap al màxim creixement. Gira la direcció i comprova-ho tu mateix.
- ∇f (màxim creixement)
- direcció u que has triat
- −∇f (cap on va l'entrenament)
La derivada direccional ∇f·u és màxima quan u s'alinea amb el gradient.
Arrossega el punt per moure't pel paisatge. Les fletxes grises són el camp de gradients; la blava, el gradient al punt; la taronja, la direcció que has triat.
- f(x, y)
- 14,900
- ∇f
- (-24,000, 1,000)
- ‖∇f‖
- 24,021
- derivada direccional
- -19,2434
- cos(u, ∇f)
- -0,8011
Gradient analític contra numèric: la fórmula dona (-24,000000, 1,000000) i la diferència centrada (-24,000000, 1,000000); error relatiu 4,87·10⁻¹².
Derivada direccional: el producte escalar ∇f·u val -19,243412, i mesurar-la directament movent-se un pas petit en la direcció u dona -19,243412. Diferència: 1,94·10⁻¹⁰. El seu valor màxim possible és ‖∇f‖ = 24,0208, i ara n'estàs al -80,1 %.
Jacobià i hessià
- Jacobià (): matriu amb . Cada capa d'una xarxa té el seu jacobià.
- Hessià (): matriu de segones derivades, . Descriu la curvatura.
Per a un LLM amb paràmetres, l'hessià tindria entrades: inviable. Per això l'optimització de segon ordre pura no s'usa i s'aproxima amb mètodes diagonals (Adam) o de baix rang (Shampoo, Muon, K-FAC).
2. La regla de la cadena = backpropagation# sense fórmules
Per a funcions compostes :
| Mode | Cost | Quan |
|---|---|---|
| Forward-mode AD | passades per entrades | poques entrades, moltes sortides |
| Reverse-mode AD | 1 passada per sortida escalar | deep learning (1 pèrdua, paràmetres) |
Conseqüència pràctica: backprop costa ~2× el forward pass en FLOPs i necessita guardar les activacions intermèdies → la memòria és el coll d'ampolla. D'aquí surten gradient checkpointing i les tècniques del fitxer 17.
Derivades que has de saber de memòria
Softmax + cross-entropy (la combinació que entrena tots els LLMs) té un gradient meravellosament simple:
on són els logits, i és el one-hot de la resposta correcta. Prediu, resta la veritat, propaga. Aquesta elegància és una de les raons per les quals aquesta parella és universal.
Backprop pas a pas
D'on surt cada gradient? Avança el forward i el backward node a node i mira com es forma.
Els nodes rodons són entrades; els quadrats, operacions. Comença pel forward: cada node calcula el seu valor a partir dels de l'esquerra. Després, el backward tornarà pel mateix graf multiplicant derivades locals.
Res calculat encara.
- Pèrdua L
- 0,1129
- ∂L/∂w
- -0,5635
- ∂L/∂x
- -0,3005
- ∂L/∂b
- -0,3756
- ∂L/∂y
- 0,6719
| Entrada | Backprop | Numèric (h = 10⁻⁵) | Diferència |
|---|---|---|---|
| w | -0,563466 | -0,563466 | 1,53·10⁻¹⁰ |
| x | -0,300515 | -0,300515 | 2,31·10⁻¹¹ |
| b | -0,375644 | -0,375644 | 4,07·10⁻¹¹ |
| y | 0,671926 | 0,671926 | 1,10·10⁻¹² |
Error relatiu conjunt: 1,13·10⁻¹⁰. Per sota de 10⁻⁶: la cadena de derivades locals i el càlcul numèric donen el mateix, i això és el que fa que puguis confiar en el que has vist dibuixat.
Gradient de softmax + entropia creuada
Per què el gradient d'aquesta parella és, simplement, p − y?
T = 1 és el cas d'entrenament. Baixa-la i mira com p es concentra.
- pèrdua
- 0,6102 nats
- p de la correcta
- 0,5432
- perplexity
- 1,841
- ‖∂L/∂z‖₁
- 0,9135
| classe | p | y (one-hot) | p − y | ∂L/∂z numèric | diferència |
|---|---|---|---|---|---|
| gat | 0,54323 | 1 | -0,45677 | -0,45677 | 2,68·10⁻¹² |
| gos | 0,14805 | 0 | 0,14805 | 0,14805 | 8,17·10⁻¹² |
| ocell | 0,04459 | 0 | 0,04459 | 0,04459 | 6,01·10⁻¹³ |
| peix | 0,24409 | 0 | 0,24409 | 0,24409 | 5,17·10⁻¹² |
| cavall | 0,02004 | 0 | 0,02004 | 0,02004 | 4,32·10⁻¹² |
Error relatiu conjunt: 1,43·10⁻¹¹. La columna p − y no és una aproximació del gradient: és el gradient, calculat sense derivar res. Prediu, resta la veritat, propaga.
3. Descens de gradient# sense fórmules
| Variant | Mida del batch | Propietats |
|---|---|---|
| Batch GD | tot el dataset | gradient exacte, inviable a escala |
| SGD | 1 exemple | molt sorollós, però el soroll regularitza |
| Mini-batch SGD | 32 – 16M tokens | l'estàndard; paral·lelitzable a GPU |
El learning rate és l'hiperparàmetre més important que existeix:
- massa gran → divergència o oscil·lació (pèrdua a
NaN), - massa petit → convergència lenta i risc de quedar-se en regions dolentes.
Descens de gradient sobre corbes de nivell
Com es mou cada optimitzador per un paisatge difícil? Puja el learning rate fins que exploti.
- SGD
- Momentum
SGD és estable aquí si η < 2/λmax = 0,100.
- SGD: pèrdua final
- 1,05·10⁻²⁹
- SGD: passos
- 400
- Momentum: pèrdua final
- 6,98·10⁻³⁸
- Momentum: passos
- 400
SGD: acaba a 4,58·10⁻¹⁵ del mínim conegut, amb norma del gradient 4,58·10⁻¹⁵. Ha convergit de debò: el gradient és pràcticament zero.
Momentum: acaba a 8,69·10⁻²⁰ del mínim conegut, amb norma del gradient 1,67·10⁻¹⁸. Ha convergit de debò: el gradient és pràcticament zero.
Schedules
La recepta moderna quasi universal:
- Warmup lineal durant els primers ~0,5–2% de passos (evita que Adam, amb estimacions de moment encara pobres, faci salts destructius).
- Cosine decay (o WSD: warmup–stable–decay, cada cop més comú perquè permet aturar-se en qualsevol moment) fins a ~10% del LR màxim.
def lr_at(step, warmup, total, peak, floor_ratio=0.1):
if step < warmup:
return peak * step / warmup
prog = (step - warmup) / (total - warmup)
cos = 0.5 * (1 + math.cos(math.pi * prog))
return peak * (floor_ratio + (1 - floor_ratio) * cos)
Visualitzador de learning rate schedules
Com evoluciona el pas durant l'entrenament, i per què hi ha warmup?
- Warmup + cosine
- WSD
- Lineal
- Constant
- 1/√t
def lr_at(step, warmup=1000, total=100000, peak=3.0e-4, floor_ratio=0.10):
if step < warmup:
return peak * step / warmup
prog = (step - warmup) / (total - warmup)
cos = 0.5 * (1 + math.cos(math.pi * prog))
return peak * (floor_ratio + (1 - floor_ratio) * cos)1 k passos. El text recomana entre 0,5 i 2 %.
El text baixa fins al 10 % del màxim.
- LR al final del warmup
- 3,00·10⁻⁴
- LR final (cosinus)
- 3,00·10⁻⁵
- passos de warmup
- 1 k
- LR mitjà (cosinus)
- 1,65·10⁻⁴
4. El paisatge de pèrdua# sense fórmules
- Convexitat: si és convexa, tot mínim local és global. La regressió logística ho és; una xarxa neuronal no.
- La bona notícia: en alta dimensió, els mínims locals dolents són rars. El que abunda són punts de sella (gradient zero però curvatura mixta), i el soroll de SGD ajuda a escapar-ne.
- Mínims plans vs aguts: hi ha evidència que els mínims "plans" (curvatura baixa) generalitzen millor. Batch petit i LR alt tendeixen a trobar-ne; algunes tècniques (SAM) ho busquen explícitament.
Condicionament
Si l'hessià té valors propis molt dispars ( gran), el descens de gradient zigzagueja. Solucions:
- Momentum: acumula velocitat, esmorteeix les oscil·lacions.
- Normalització (LayerNorm/RMSNorm): millora el condicionament del problema.
- Mètodes adaptatius (Adam): escala cada coordenada per la seva pròpia variància històrica.
Condicionament i zigzag
Per què el descens de gradient zigzagueja en una vall estreta, i com ho arregla el momentum?
Caiguda de la pèrdua
- SGD pur
- amb momentum β = 0,85
Llindar d'estabilitat: 2/λmax = 0,1000.
η = 2/(λmax + λmin) = 0,0952, que minimitza la taxa de convergència de SGD pur.
- condició κ
- 20,0
- zigzags de SGD
- 120
- zigzags amb momentum
- 57
- pèrdua final SGD
- 5,40·10⁻¹⁰
- pèrdua final amb momentum
- 1,33·10⁻⁷
Per a una quadràtica, SGD pur convergeix si i només si η < 2/λmax. Aquí el llindar val 0,10000 i tu has posat 0,08500: la simulació convergeix, que és el que prediu la teoria.
Amb el η òptim, cada pas redueix l'error per un factor (κ−1)/(κ+1) = 0,9048. Amb κ = 20,0, calen 139 passos per guanyar sis ordres de magnitud. Puja κ i mira com es dispara aquest número: és per això que el condicionament importa tant.
5. Momentum, Adam i companyia# sense fórmules
Momentum (Polyak):
Adam combina momentum (primer moment) amb escalat adaptatiu (segon moment):
AdamW desacobla el weight decay de l'actualització adaptativa ( per separat) — és l'estàndard de facto per entrenar LLMs. Valors típics: , (més baix que el 0.999 clàssic, per estabilitat a escala), , .
Inspector de l'estat d'Adam
Què hi ha exactament dins d'Adam, i per què cal la correcció de biaix als primers passos?
- Adam amb correcció de biaix
- sense correcció
- mida de referència −η
Quanta memòria costa entrenar amb AdamW
- pesos26 GB
- còpia mestra fp3252 GB
- gradients26 GB
- estats d’Adam (m i v)104 GB
Total sense comptar activacions: 208 GB · 3 GPU de 80 GB només per encabir-ho
- g (pas 60)
- 1,0000
- m (1r moment)
- 0,99820
- v (2n moment)
- 0,058
- m̂ corregit
- 1,00000
- v̂ corregit
- 1,000
- Δθ
- -10,00·10⁻⁴
Al pas 1, m₁ = (1−β₁)·g i v₁ = (1−β₂)·g²: tots dos moments comencen a zero i estan esbiaixats cap avall. Però v va sota una arrel quadrada, de manera que el seu biaix domina i el pas cru surt massa llarg, no massa curt.
Mesurat aquí: el pas sense corregir val -0,003 i el corregit -10,00·10⁻⁴, una ràtio de 3,1623×. La teoria diu (1−β₁)/√(1−β₂) = 3,1623. Diferència: 9,68·10⁻⁷. Amb la correcció, el primer pas té mida exactament η, i per això el warmup ha de ser curt però existir.
Cost de memòria: Adam guarda 2 estats per paràmetre. Per a un model de 7B en fp32 amb estats fp32: 7B×4 (pesos) + 7B×4 (grad) + 7B×8 (estats) = 112 GB només per als pesos, els gradients i l'optimitzador, sense comptar les activacions. D'aquí ZeRO, 8-bit optimizers i LoRA.
Novetats: optimitzadors basats en ortogonalització de l'actualització per matrius (Muon, i la família Shampoo/SOAP) han demostrat guanys reals d'eficiència de dades en preentrenament i comencen a aparèixer en models de frontera. La idea: tractar els gradients de matrius com a matrius, no com a vectors aplanats.
6. Multiplicadors de Lagrange i optimització amb restriccions (breu)# sense fórmules
Quan minimitzes subjecte a , cerques punts on . Ho trobaràs a:
- la derivació de la softmax com a distribució de màxima entropia amb restriccions,
- PPO i el seu terme KL (versió "penalitzada" d'una restricció de confiança),
- DPO, que resol en forma tancada un problema de RLHF amb restricció KL.
La softmax com a màxima entropia
D'on surt la forma exponencial de la softmax? D'un problema d'optimització amb restriccions.
Distribució de màxima entropia
(1,386 nats)
Entre 0,75 (uniforme) i 3,00 (tot al màxim).
- temperatura resultant
- 2,6940
- energia assolida
- 1,60000
- entropia H(p)
- 1,2282 nats
- en bits
- 1,7719
- màxim possible (uniforme)
- 1,3863 nats
La solució trobada resolent la restricció té entropia 1,228155373 nats. S'han provat 3 000 pertorbacions que conserven exactament Σp = 1 i Σpᵢzᵢ = 1,6000, i la millor entropia alternativa trobada és 1,228155373, és a dir cap no la supera.
I la solució no és una distribució qualsevol: és exactament pᵢ ∝ exp(zᵢ/T) amb T = 2,6940. Els multiplicadors de Lagrange de les dues restriccions donen la forma exponencial, i el de l'energia és la temperatura inversa. La softmax no és una convenció: és la resposta a "sigues tan indecís com puguis, però tenint en compte el que saps".
7. Errors comuns i diagnòstic# sense fórmules
| Símptoma | Causa probable | Solució |
|---|---|---|
Pèrdua NaN | LR massa alt, overflow en fp16, divisió per zero | baixar LR, bf16, gradient clipping, revisar |
| Pèrdua plana des del principi | LR massa baix, mal inicialitzat, bug al forward | overfit d'un batch de 8 exemples per verificar |
| Pèrdua baixa però val. dolenta | overfitting | més dades, weight decay, early stopping |
| Pics de pèrdua esporàdics | batches tòxics, inestabilitat numèrica | clipping, saltar batch, z-loss, revisar dades |
Regla d'or del debugging: si el teu model no pot memoritzar (overfit) 8 exemples fins a pèrdua ~0, tens un bug, no un problema d'aprenentatge.
Diagnòstic de corbes de pèrdua
Aquesta corba té un problema. Quin?
- entrenament
- validació
Comparteix la llavor per ensenyar a algú el cas que no has sabut diagnosticar.
8. Comprova que ho has entès#
0 de 6 resoltes
- Per què reverse-mode AD és el mode correcte per entrenar xarxes i no forward-mode?
- Deriva per a softmax + entropia creuada. Quant val la component de la classe correcta si el model li assigna p = 0,2?Marge acceptat: ± 0,020
- Per què Adam necessita correcció de biaix als primers passos? Al pas 1, quantes vegades massa gran seria el pas sense corregir, amb β₁ = 0,9 i β₂ = 0,999?vegadesMarge acceptat: 3 %
- Quanta memòria (GB) necessites per entrenar un model de 13B amb AdamW en bf16 amb estats en fp32? (Pesos 2 bytes + còpia mestra fp32 + gradients + 2 estats.)GBMarge acceptat: 3 %
- Què fa el warmup i per què és més necessari amb Adam que amb SGD pur?
- Fes divergir el descens de gradient. Configura el widget de corbes de nivell perquè el learning rate superi el llindar d'estabilitat.
Objectiu:A la quadràtica mal condicionada (κ = 20), posa un learning rate per sobre de 0,1 i mira la trajectòria marxar del quadre.
Vés al widget ↑lr = per defecte · land = per defecte
9. Recursos#
Karpathy, micrograd i The spelled-out intro to neural networks (YouTube).
Deep Learning (Goodfellow et al.), capítols 4 i 8.
Kingma & Ba (2014), Adam; Loshchilov & Hutter (2017), Decoupled Weight Decay (AdamW).
distill.pub, Why Momentum Really Works.
Yang et al., Tensor Programs V (μP) — com transferir hiperparàmetres entre escales.