Tornar a tots els articles
3 min de lectura

Optimitzadors de gradient descendent: de SGD a Adam

Una guia pràctica dels algoritmes d'optimització més utilitzats en deep learning: què calculen, per què són diferents i quan convé utilitzar-los.

  • Deep Learning
  • Optimization
  • PyTorch
  • Training

El problema central

Entrenar una xarxa neuronal significa minimitzar una funció de pèrdua L(θ)\mathcal{L}(\theta) sobre potencialment milers de milions de paràmetres θ\theta. El gradient descendent ho fa iterativament:

θt+1=θt−η∇θL(θt)\theta_{t+1} = \theta_t - \eta \nabla_\theta \mathcal{L}(\theta_t)

on η\eta és el learning rate. El problema és que calcular el gradient complet sobre tot el dataset és prohibitivament costós; per això utilitzem variants estocàstiques.

Gradient descendent estocàstic (SGD)

SGD calcula el gradient sobre un mini-batch aleatori de mida BB:

θt+1=θt−η∇θLB(θt)\theta_{t+1} = \theta_t - \eta \nabla_\theta \mathcal{L}_B(\theta_t)

Això introdueix soroll, però aquest soroll actua com a regularitzador i ajuda a escapar de mínims estrets. Amb momentum, acumulem un vector de velocitat:

vt+1=μvt−η∇LB(θt)v_{t+1} = \mu v_t - \eta \nabla \mathcal{L}_B(\theta_t) θt+1=θt+vt+1\theta_{t+1} = \theta_t + v_{t+1}

El momentum (μ≈0.9\mu \approx 0.9) suavitza les actualitzacions i accelera la convergència en direccions de gradient consistents.

AdaGrad

AdaGrad adapta el learning rate per paràmetre a partir dels gradients al quadrat acumulats:

Gt=∑τ=1tgτ2G_t = \sum_{\tau=1}^{t} g_\tau^2 θt+1=θt−ηGt+ϵgt\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} g_t

Els paràmetres que reben gradients grans obtenen un learning rate efectiu més petit. Això ajuda amb variables esparses, com embeddings de paraules, però el creixement monòton de GtG_t fa que el learning rate acabi acostant-se a zero.

RMSProp

RMSProp corregeix el problema de decaïment d’AdaGrad amb una mitjana mòbil exponencial:

Gt=ρGt−1+(1−ρ)gt2G_t = \rho G_{t-1} + (1 - \rho) g_t^2 θt+1=θt−ηGt+ϵgt\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{G_t + \epsilon}} g_t

Un valor típic és ρ=0.99\rho = 0.99. El learning rate efectiu s’estabilitza en lloc de disminuir indefinidament.

Adam

Adam (Adaptive Moment Estimation) combina momentum i RMSProp:

mt=β1mt−1+(1−β1)gt(primer moment)m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \quad \text{(primer moment)} vt=β2vt−1+(1−β2)gt2(segon moment)v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \quad \text{(segon moment)}

Com que m0=v0=0m_0 = v_0 = 0, les primeres estimacions estan esbiaixades cap a zero. La correcció del biaix és:

m^t=mt1−β1t,v^t=vt1−β2t\hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t}

θt+1=θt−ηv^t+ϵm^t\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t

Els valors per defecte β1=0.9\beta_1 = 0.9, β2=0.999\beta_2 = 0.999, ϵ=10−8\epsilon = 10^{-8} funcionen bé en una àmplia varietat de tasques.

AdamW

Adam té una subtilesa: la regularització L2 mitjançant weight decay interactua amb els learning rates adaptatius d’una manera no desitjada. AdamW desacobla el weight decay de l’actualització del gradient:

θt+1=θt−ηv^t+ϵm^t−ηλθt\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t - \eta \lambda \theta_t

És l’opció estàndard per entrenar Transformers i LLM moderns.

Ús amb PyTorch

import torch.optim as optim

# SGD with momentum
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-4)

# Adam
optimizer = optim.Adam(model.parameters(), lr=1e-3, betas=(0.9, 0.999))

# AdamW (preferred for Transformers)
optimizer = optim.AdamW(model.parameters(), lr=3e-4, weight_decay=0.01)

# Learning rate scheduler
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)

Calendaris del learning rate

Independentment de l’optimitzador, el calendari del learning rate té un impacte gran:

CalendariDescripcióCas d’ús
Constantη\eta fixExperiments ràpids
Step decayMultiplica per γ\gamma cada kk èpoquesEntrenament estil ResNet
Cosine annealingη\eta segueix una corba cosinusDeep learning general
Warmup + cosineWarmup lineal i després cosinusTransformers, LLM
OneCycleLRPujada ràpida i baixada lentaEntrenaments curts

Quan utilitzar cada opció

  • SGD + momentum: visió per computador (ResNet, ConvNet) — sovint arriba a millor generalització que Adam amb el calendari adequat
  • Adam/AdamW: NLP, Transformers i tasques amb gradients esparsos
  • RMSProp: RNN i reinforcement learning
  • AdaGrad: variables d’entrada esparses, NLP amb representacions bag-of-words

Idees clau

  • SGD és un baseline fort per a visió; Adam/AdamW domina en llenguatge
  • Desacobla el weight decay de l’escalat adaptatiu del gradient: utilitza AdamW, no Adam + L2
  • El calendari del learning rate sovint importa tant com l’optimitzador
  • El warmup evita inestabilitat a l’inici de l’entrenament de Transformers