🧮 Computational Mathematics

Inicio · Parte 12 — Optimización matemática y computacional

245 — Stochastic gradient descent

avanzado clase 5 de 20 4 horas demostración sgd

SGD cambia exactitud del gradiente por número de actualizaciones, y suele salir ganando.

Fórmulas

∇f ≈ (1/|B|)·Σ_{i∈B} ∇fᵢ
E[gradiente de lote] = gradiente completo
varianza del estimador ∝ 1/|B|

Desarrollo

El gradiente exacto de una función de pérdida sobre un millón de ejemplos requiere recorrer el millón. El descenso estocástico observa que un subconjunto pequeño ya da una estimación insesgada del gradiente, y que con el mismo presupuesto de cómputo se pueden dar muchísimas más actualizaciones aunque cada una sea ruidosa.

El intercambio es favorable en la práctica. Mil actualizaciones aproximadas avanzan más que una exacta, porque el error de la estimación se promedia a lo largo de las iteraciones mientras que el progreso se acumula. Ese es el resultado empírico que hizo viable el aprendizaje profundo a escala.

El ruido tiene además un efecto beneficioso que no es un accidente. Las fluctuaciones del gradiente estocástico permiten escapar de puntos de silla y de mínimos locales estrechos, y hay evidencia de que sesgan la solución hacia mínimos anchos, que generalizan mejor. Un gradiente perfecto no siempre es lo deseable.

El tamaño de lote es el mando que regula el compromiso. Lotes grandes dan gradientes precisos, aprovechan mejor la GPU y permiten más paralelismo, pero pierden el efecto regularizador del ruido y suelen necesitar ajustar el learning rate al alza. Lotes pequeños son ruidosos y lentos por muestra, pero exploran más. No hay valor universal.

Ejemplo trabajado

Ajuste de dos parámetros con 100 datos, mismo presupuesto.

parámetros reales: [2,0 ; 3,0]

lote completo (200 épocas):
  estimación = [2,038924 ; 2,996817]
  MSE = 0,094537
  gradientes evaluados: 20 000

SGD con 1 muestra (200 épocas):
  estimación = [2,142997 ; 2,967811]
  gradientes evaluados: 20 000

Con el mismo número de evaluaciones, el lote completo
da 200 actualizaciones y SGD da 20 000.

SGD llega a una solución comparable con actualizaciones
mucho más baratas, y su trayectoria es visiblemente ruidosa.

Qué calcula el laboratorio

SGD: gradiente ruidoso, progreso más barato.

python classes/part-12-optimizacion-matematica-y-computacional/245-stochastic-gradient-descent/lab.py
compmath run 245

Salidas del laboratorio (10)

Muestra de la ejecución real

{
  "datos": 100,
  "parametros_reales": [
    2.0,
    3.0
  ],
  "batch_completo": [
    2.038924,
    2.996817
  ],
  "MSE_batch": 0.09453652,
  "gradientes_evaluados_batch": 20000,
  "sgd_1_muestra": [
    2.142997,
    2.967811
  ]
}

Errores comunes

Dónde se usa

Entrenamiento de redes profundas, aprendizaje en línea, sistemas de recomendación y cualquier ajuste con conjuntos de datos grandes.

Idea rectora de la parte

KKT generaliza Lagrange a restricciones de desigualdad.

Error a evitar

Aplicar weight decay dentro del gradiente en Adam (y no como AdamW).

Conexión con IA

AdamW es el optimizador por defecto del entrenamiento moderno; entender su actualización explica el weight decay, el warmup y el gradient clipping.

Bibliografía de la clase

Archivos de la clase