🧮 Computational Mathematics

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

253 — Quasi-Newton y BFGS

avanzado clase 13 de 20 4 horas demostración quasi_newton

BFGS construye una aproximación del Hessiano inverso usando solo gradientes.

Fórmulas

sₖ = xₖ₊₁ − xₖ;   yₖ = ∇f(xₖ₊₁) − ∇f(xₖ)
condición secante: Bₖ₊₁·yₖ = sₖ
coste O(n²) frente al O(n³) de Newton

Desarrollo

Los métodos cuasi-Newton buscan la velocidad de Newton sin su coste. La idea es que la diferencia entre dos gradientes consecutivos ya contiene información sobre la curvatura en la dirección recorrida, y acumulando esa información a lo largo de las iteraciones se puede construir una aproximación del Hessiano inverso.

La condición secante B·y = s es la formalización: la aproximación debe reproducir la relación observada entre el desplazamiento y el cambio de gradiente. Es la generalización multidimensional exacta del método de la secante de la clase 224, donde la derivada se aproximaba con dos evaluaciones.

BFGS es la fórmula de actualización que mejor funciona en la práctica, y tiene la propiedad valiosa de preservar la definición positiva de la aproximación, con lo que la dirección resultante siempre es de descenso. El coste baja a O(n²) y no hace falta calcular ninguna segunda derivada.

Para dimensiones grandes existe L-BFGS, que no almacena la matriz sino los últimos m pares (s, y) —típicamente 10 o 20— y reconstruye el producto con el gradiente sobre la marcha. Su coste es O(mn) y es el algoritmo de referencia para optimización suave a gran escala fuera del aprendizaje profundo. En redes neuronales rinde menos porque el gradiente estocástico rompe las hipótesis de suavidad que necesita.

Ejemplo trabajado

BFGS reconstruye el Hessiano inverso sin calcularlo.

f(x,y) = x² + 20y²      BFGS con línea de retroceso

iter      f          |∇f|
  1   14,765625    30,2335
  5    1,3e-03      0,2189
 10    2,1e-09      9,1e-05

x final = (−0,0 ; −0,0)                              ✓

Aproximación construida:      Hessiano inverso real:
  [[0,501698  0,000276]         [[0,5    0   ]
   [0,000276  0,025045]]         [0     0,025]]

Coincide a tres decimales sin haber evaluado
ni una sola segunda derivada.

Qué calcula el laboratorio

BFGS: aproxima el Hessiano inverso solo con gradientes.

python classes/part-12-optimizacion-matematica-y-computacional/253-quasi-newton-y-bfgs/lab.py
compmath run 253

Salidas del laboratorio (7)

Muestra de la ejecución real

{
  "metodo": "BFGS con búsqueda de línea por retroceso",
  "historial": [
    {
      "iter": 1,
      "f": 14.765625,
      "|∇f|": 30.23346655612
    },
    {
      "iter": 5,
      "f": 1.453323048e-05,
      "|∇f|": 0.021538774424
    },
    {
      "iter": 10,
      "f": 0.0,
      "|∇f|": 1e-12
    }
  ],
  "x_final": [
    -0.0,
    -0.0
  ],
  "B_aproxima_H⁻¹": [
    [
      0.501698,
      0.000276
    ],
    [
      0.000276,
      0.025045
    ]
  ],
  "H⁻¹_real": [
    [
      0.5,
      0.0
    ],
    [
      0.0,
      0.025
    ]
  ],
  "no_calcula_el_hessiano": true
}

Errores comunes

Dónde se usa

Ajuste de modelos estadísticos, optimización en ingeniería, problemas inversos y minimización de energía en química computacional.

Idea rectora de la parte

Momentum promedia gradientes; Adam además normaliza por su escala.

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