🧮 Computational Mathematics

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

244 — Gradient descent

avanzado clase 4 de 20 4 horas demostración gradient_descent

El learning rate tiene un umbral duro: por encima de 2/L el descenso diverge.

Fórmulas

xₖ₊₁ = xₖ − lr·∇f(xₖ)
estabilidad: lr < 2/L,  L = mayor autovalor del Hessiano
velocidad limitada por el número de condición L/μ

Desarrollo

El descenso de gradiente repite un paso elemental: calcular el gradiente y moverse en dirección contraria una cantidad proporcional al learning rate. Es el algoritmo más simple de la optimización continua y la base de todo el entrenamiento moderno.

Su comportamiento está enteramente gobernado por el learning rate, y el umbral no es difuso. Para una función cuadrática con mayor autovalor L, el descenso converge si y solo si lr < 2/L. Por debajo converge, por encima diverge con oscilaciones que crecen geométricamente. No hay zona gris: es una frontera exacta.

Dentro de la zona estable hay un segundo compromiso. Un lr demasiado pequeño converge con seguridad pero necesita un número de iteraciones prohibitivo; uno cercano al umbral es rápido pero frágil. Y la velocidad máxima alcanzable está limitada por el número de condición L/μ: cuanto más alargado sea el valle, más lento el descenso, por bien elegido que esté el paso.

En la práctica del aprendizaje profundo, L no se conoce y además cambia durante el entrenamiento. De ahí las técnicas habituales: warmup para no divergir al principio, planificadores que reducen el lr progresivamente, y gradient clipping como salvaguarda ante gradientes anómalos. Todas son maneras de mantenerse del lado bueno de un umbral que no se puede calcular.

Ejemplo trabajado

Doscientas iteraciones sobre x² + 20y² desde (−2, 3).

Hessiano = diag(2, 40)   →  L = 40  →  lr máximo = 2/40 = 0,05

     lr        f final        comportamiento
  0,001     1,795891        demasiado lento, no llega
  0,010     1,7e-09         converge bien
  0,040     3,4e-31         muy rápido, cerca del umbral
  0,050        —            oscila sin converger
  0,060        —            diverge, desborda

Con lr = 0,001 y 200 iteraciones, x sigue en −1,34:
la coordenada lenta apenas se ha movido.

Número de condición: 40/2 = 20. Ese 20 es el que
obliga al zigzag y motiva momentum.

Qué calcula el laboratorio

Descenso de gradiente y el efecto del learning rate.

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

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "funcion": "x² + 20y²",
  "punto_inicial": [
    -2.0,
    3.0
  ],
  "iteraciones": 200,
  "resultados": {
    "lr=0.001": {
      "f_final": 1.795891240566,
      "x_final": [
        -1.34010323,
        0.00085382
      ]
    },
    "lr=0.01": {
      "f_final": 0.001237343463,
      "x_final": [
        -0.03517589,
        0.0
      ]
    },
    "lr=0.049": {
      "f_final": 1.4580275e-05,
      "x_final": [
        -0.0,
        0.00085382
      ]
    },
    "lr=0.06": {
      "f_final": "divergió",
      "x_final": "divergió"
    }
  },
  "lr_maximo_estable": 0.05,
  "regla": "lr < 2/L donde L es el mayor autovalor del Hessiano"
}

Errores comunes

Dónde se usa

Entrenamiento de cualquier modelo, ajuste de hiperparámetros, planificadores de learning rate y diagnóstico de divergencias.

Idea rectora de la parte

Regularizar es añadir un término al objetivo, no un truco de implementación.

Error a evitar

Comparar optimizadores sin fijar semilla ni presupuesto de iteraciones.

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