🧮 Computational Mathematics

Inicio · Parte 08 — Cálculo multivariable, matricial y autodiferenciación

171 — Optimización sin restricciones

universitario-avanzado clase 11 de 20 4 horas demostración unconstrained_optimization

El descenso de gradiente converge en una cuadrática si el paso respeta el límite de estabilidad.

Fórmulas

x ← x − α∇f(x)
estable si α < 2/λ_max
convergencia lenta si λ_max/λ_min es grande

Desarrollo

El descenso de gradiente aplica repetidamente la misma regla: moverse en dirección contraria al gradiente con un paso α. Sobre una función cuadrática se puede analizar exactamente, y ese análisis explica todo lo que se observa en la práctica.

La condición de estabilidad es α < 2/λ_max, donde λ_max es el mayor autovalor del Hessiano. Superarla hace que el algoritmo diverja, y por eso el learning rate es el hiperparámetro que más divergencias explica. La clase 244 lo comprueba con cuatro valores distintos.

La velocidad de convergencia la determina el cociente de autovalores. Si son parecidos, el descenso avanza directo al mínimo; si son muy dispares, el gradiente apunta casi perpendicular al eje largo del valle y el algoritmo zigzaguea. Con f = x² + 20y², la relación es 20 a 1 y el zigzagueo es visible.

Ese diagnóstico es el que motiva todo lo demás. Momentum (clase 246) amortigua la oscilación acumulando velocidad; los métodos adaptativos escalan cada coordenada por separado; los de segundo orden corrigen la anisotropía directamente. Todos atacan el mismo problema.

Ejemplo trabajado

Descenso sobre una cuadrática mal condicionada.

f(x,y) = (x−3)² + 5(y+1)²,  lr = 0.08
inicio (0,0),  mínimo teórico (3,−1)

paso    x                 f
  1     (0.48, −0.80)     6.55
  5     (1.72, −0.99)     1.63
 20     (2.90, −1.00)     0.0092
 60     (3.00, −1.00)     1.6e−09

gradiente final: 8.9e−05     → convergió       ✓

Límite de estabilidad: α < 2/10 = 0.2

Qué calcula el laboratorio

Descenso de gradiente sobre una cuadrática con historial.

python classes/part-08-calculo-multivariable-matricial-y-autodiferenciacion/171-optimizacion-sin-restricciones/lab.py
compmath run 171

Salidas del laboratorio (7)

Muestra de la ejecución real

{
  "funcion": "(x-3)² + 5(y+1)²",
  "minimo_teorico": [
    3.0,
    -1.0
  ],
  "learning_rate": 0.08,
  "historial": [
    {
      "paso": 1,
      "x": [
        0.48,
        -0.8
      ],
      "f": 6.5503999996
    },
    {
      "paso": 5,
      "x": [
        1.745364,
        -0.99968
      ],
      "f": 1.5741115708
    },
    {
      "paso": 20,
      "x": [
        2.908229,
        -1.0
      ],
      "f": 0.0084219751
    },
    {
      "paso": 60,
      "x": [
        2.999914,
        -1.0
      ],
      "f": 7.4e-09
    }
  ],
  "solucion_final": [
    2.999914,
    -1.0
  ],
  "gradiente_final": [
    -0.00017175,
    0.0
  ]
}

Errores comunes

Dónde se usa

Entrenamiento de cualquier modelo por gradiente, ajuste del learning rate y diagnóstico de divergencias.

Idea rectora de la parte

El gradiente apunta al mayor ascenso; por eso se desciende en su dirección opuesta.

Error a evitar

Suponer que el Hessiano es definido positivo sin comprobarlo.

Conexión con IA

Autograd de PyTorch y JAX es exactamente el modo reverso del grafo de cómputo que se construye en esta parte a mano.

Bibliografía de la clase

Archivos de la clase