Salta al contingut
Entendre els LLMs
Bloc 1fonaments3-4 h
IntuïtiuMatemàtic

Abans d'això: Àlgebra lineal per a deep learning

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 f:R→Rf:\mathbb{R}\to\mathbb{R}, la derivada f′(x)f'(x) és la taxa de canvi instantània. Per a f:Rd→Rf:\mathbb{R}^d\to\mathbb{R} (una pèrdua!), el gradient és el vector de derivades parcials:

∇f(x)=[∂f∂x1,…,∂f∂xd]⊤\nabla f(\mathbf{x}) = \left[\frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_d}\right]^\top

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)
34°

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
Dues comprovacions independents

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 %.

Per minimitzar es va en direcció −∇f, que és la direcció de màxim decreixement. La norma del gradient diu com de pronunciat és el pendent: on és petita, el descens de gradient avança lentament encara que estigui lluny del mínim — és el que fa tan dura la vall de Rosenbrock.

Jacobià i hessià

  • Jacobià (f:Rn→Rmf:\mathbb{R}^n\to\mathbb{R}^m): matriu m×nm\times n amb Jij=∂fi/∂xjJ_{ij} = \partial f_i/\partial x_j. Cada capa d'una xarxa té el seu jacobià.
  • Hessià (f:Rd→Rf:\mathbb{R}^d\to\mathbb{R}): matriu d×dd\times d de segones derivades, Hij=∂2f/∂xi∂xjH_{ij} = \partial^2 f/\partial x_i \partial x_j. Descriu la curvatura.

Per a un LLM amb 101110^{11} paràmetres, l'hessià tindria 102210^{22} 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 z=f(g(x))z = f(g(x)):

dzdx=dzdy⋅dydx,versioˊ vectorial: ∇xL=Jg⊤∇yL\frac{dz}{dx} = \frac{dz}{dy}\cdot\frac{dy}{dx}, \qquad \text{versió vectorial: } \nabla_\mathbf{x} L = \mathbf{J}_g^\top \nabla_\mathbf{y} L
ModeCostQuan
Forward-mode ADO(n)O(n) passades per nn entradespoques entrades, moltes sortides
Reverse-mode AD1 passada per sortida escalardeep learning (1 pèrdua, 101110^{11} 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

∂∂W(Wx)=x⊤,∇x(a⊤x)=a,∇x(x⊤Ax)=(A+A⊤)x\frac{\partial}{\partial \mathbf{W}} (\mathbf{W}\mathbf{x}) = \mathbf{x}^\top, \qquad \nabla_\mathbf{x}(\mathbf{a}^\top\mathbf{x}) = \mathbf{a}, \qquad \nabla_\mathbf{x}(\mathbf{x}^\top\mathbf{A}\mathbf{x}) = (\mathbf{A}+\mathbf{A}^\top)\mathbf{x}

Softmax + cross-entropy (la combinació que entrena tots els LLMs) té un gradient meravellosament simple:

∂L∂z=p−y\frac{\partial L}{\partial \mathbf{z}} = \mathbf{p} - \mathbf{y}

on z\mathbf{z} són els logits, p=softmax(z)\mathbf{p} = \text{softmax}(\mathbf{z}) i y\mathbf{y} é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.

w·x·b·y·w·x·z·tanh·a−y·L·sortida

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.

0,80
1,50
-0,40
1,00

Res calculat encara.

Pèrdua L
0,1129
∂L/∂w
-0,5635
∂L/∂x
-0,3005
∂L/∂b
-0,3756
∂L/∂y
0,6719
Comprovació contra diferències finites
EntradaBackpropNumèric (h = 10⁻⁵)Diferència
w-0,563466-0,5634661,53·10⁻¹⁰
x-0,300515-0,3005152,31·10⁻¹¹
b-0,375644-0,3756444,07·10⁻¹¹
y0,6719260,6719261,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.

El camí w → wx → z → a → d → L és la regla de la cadena sencera. Fixa't que ∂L/∂w acaba sent el producte de quatre derivades locals.

Gradient de softmax + entropia creuada

Per què el gradient d'aquesta parella és, simplement, p − y?

Distribució p = softmax(z / T)
0,543gat0,148gos0,045ocell0,244peix0,020cavall
Gradient ∂L/∂z = p − y
-0,457gat0,148gos0,045ocell0,244peix0,020cavall
Logits z
Resposta correcta
1,00

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
p − y, comprovat contra diferències finites
classepy (one-hot)p − y∂L/∂z numèricdiferència
gat0,543231-0,45677-0,456772,68·10⁻¹²
gos0,1480500,148050,148058,17·10⁻¹²
ocell0,0445900,044590,044596,01·10⁻¹³
peix0,2440900,244090,244095,17·10⁻¹²
cavall0,0200400,020040,020044,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.

Observa el signe: la classe correcta té gradient negatiu (cal pujar-ne el logit) i totes les altres, positiu (cal baixar-los). La suma del vector és exactament zero, perquè la softmax ja ho normalitza tot.

3. Descens de gradient# sense fórmules

θt+1=θt−η∇θL(θt)\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \nabla_{\boldsymbol{\theta}} L(\boldsymbol{\theta}_t)
VariantMida del batchPropietats
Batch GDtot el datasetgradient exacte, inviable a escala
SGD1 exemplemolt sorollós, però el soroll regularitza
Mini-batch SGD32 – 16M tokensl'estàndard; paral·lelitzable a GPU

El learning rate η\eta é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.

mínimsortida
  • SGD
  • Momentum
Optimitzador A
Optimitzador B (comparació)
0,080

SGD és estable aquí si η < 2/λmax = 0,100.

0,80
0,9990
SGD: pèrdua final
1,05·10⁻²⁹
SGD: passos
400
Momentum: pèrdua final
6,98·10⁻³⁸
Momentum: passos
400
Totes dues trajectòries es mantenen fitades

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.

Vall estreta: l'hessià té valors propis a i b. Com més gran és κ, més zigzagueja el descens pur.

Schedules

La recepta moderna quasi universal:

  1. Warmup lineal durant els primers ~0,5–2% de passos (evita que Adam, amb estimacions de moment encara pobres, faci salts destructius).
  2. 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
  • 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)
100 k
1,0 %

1 k passos. El text recomana entre 0,5 i 2 %.

3,00·10⁻⁴
10 %

El text baixa fins al 10 % del màxim.

80 %
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⁻⁴
La corba és el codi del text, no una aproximació
La corba del cosinus es compara punt a punt amb una transcripció literal de la funció lr_at del fitxer 02, avaluada per separat. La desviació màxima sobre 201 punts és 0.00e+0, és a dir, precisió de màquina. El que veus dibuixat és exactament el que faria aquest codi.
Warmup, estable, decaïment. Cada cop més comú perquè pots decidir quan atures l’entrenament: la fase estable es pot allargar sense refer el pla.

4. El paisatge de pèrdua# sense fórmules

  • Convexitat: si LL é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 (κ=λmax/λmin\kappa = \lambda_{max}/\lambda_{min} 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
20,00
1,00
0,085

Llindar d'estabilitat: 2/λmax = 0,1000.

0,85

η = 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⁻⁷
El llindar d'estabilitat és una predicció exacta, no una intuïció

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.

El momentum no canvia el llindar d'estabilitat, però sí que cancel·la les oscil·lacions: les components que canvien de signe a cada pas se sumen a zero a la velocitat acumulada, mentre que la component lenta, sempre del mateix signe, s'amplifica per 1/(1−β).

5. Momentum, Adam i companyia# sense fórmules

Momentum (Polyak): vt=βvt−1+∇L,θt+1=θt−ηvt\mathbf{v}_t = \beta \mathbf{v}_{t-1} + \nabla L, \qquad \boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta\mathbf{v}_t

Adam combina momentum (primer moment) amb escalat adaptatiu (segon moment):

mt=β1mt−1+(1−β1)gtvt=β2vt−1+(1−β2)gt2m^t=mt/(1−β1t),v^t=vt/(1−β2t)θt+1=θt−η m^t/(v^t+ϵ)\begin{aligned} \mathbf{m}_t &= \beta_1\mathbf{m}_{t-1} + (1-\beta_1)\mathbf{g}_t \\ \mathbf{v}_t &= \beta_2\mathbf{v}_{t-1} + (1-\beta_2)\mathbf{g}_t^2 \\ \hat{\mathbf{m}}_t &= \mathbf{m}_t/(1-\beta_1^t), \quad \hat{\mathbf{v}}_t = \mathbf{v}_t/(1-\beta_2^t) \\ \boldsymbol{\theta}_{t+1} &= \boldsymbol{\theta}_t - \eta\,\hat{\mathbf{m}}_t/(\sqrt{\hat{\mathbf{v}}_t}+\epsilon) \end{aligned}

AdamW desacobla el weight decay de l'actualització adaptativa (θ←θ−ηλθ\theta \leftarrow \theta - \eta\lambda\theta per separat) — és l'estàndard de facto per entrenar LLMs. Valors típics: β1=0.9\beta_1=0.9, β2=0.95\beta_2=0.95 (més baix que el 0.999 clàssic, per estabilitat a escala), ϵ=10−8\epsilon=10^{-8}, λ=0.1\lambda=0.1.

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

13 B
  • 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

Patró de gradients
0,90
0,9990
1,00·10⁻³
60
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⁻⁴
Per què la correcció de biaix no és opcional

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.

Amb gradient constant, Adam fa passos de mida exactament η des del primer moment: és el que vol dir "invariant a l’escala del gradient".

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 f(x)f(\mathbf{x}) subjecte a g(x)=0g(\mathbf{x})=0, cerques punts on ∇f=λ∇g\nabla f = \lambda\nabla g. 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

Az=3,00
0,4924
Bz=1,00
0,2344
Cz=0,00
0,1617
Dz=-1,00
0,1116
89%
de l'entropia màxima
(1,386 nats)
Valors z (l'«energia» de cada opció)
1,60

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
Cap altra distribució amb la mateixa energia té més entropia

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".

És el mateix argument que hi ha darrere de la distribució de Boltzmann en física. I explica per què baixar la temperatura en el mostreig d'un LLM redueix la diversitat: exigeixes més «energia» (més logit mitjà) i el preu és menys entropia.

7. Errors comuns i diagnòstic# sense fórmules

SímptomaCausa probableSolució
Pèrdua NaNLR massa alt, overflow en fp16, divisió per zerobaixar LR, bf16, gradient clipping, revisar ϵ\epsilon
Pèrdua plana des del principiLR massa baix, mal inicialitzat, bug al forwardoverfit d'un batch de 8 exemples per verificar
Pèrdua baixa però val. dolentaoverfittingmés dades, weight decay, early stopping
Pics de pèrdua esporàdicsbatches tòxics, inestabilitat numèricaclipping, 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ó
El teu diagnòstic

Comparteix la llavor per ensenyar a algú el cas que no has sabut diagnosticar.

Tria un diagnòstic
Mira el pendent, la relació entre les dues corbes i si hi ha discontinuïtats. La taula d'errors comuns d'aquesta secció té tot el que et cal.
Regla d'or: si el teu model no pot memoritzar 8 exemples fins a pèrdua ~0, tens un bug, no un problema d'aprenentatge.

8. Comprova que ho has entès#

0 de 6 resoltes

  1. Per què reverse-mode AD és el mode correcte per entrenar xarxes i no forward-mode?
  2. Deriva ∂L/∂z\partial L/\partial \mathbf{z} 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
  3. 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 %
  4. 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 %
  5. Què fa el warmup i per què és més necessari amb Adam que amb SGD pur?
  6. 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#

Marca els que hagis llegit
  • 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.