🧮 Computational Mathematics

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

249 — RMSProp

avanzado clase 9 de 20 4 horas demostración rmsprop

RMSProp sustituye la suma de AdaGrad por una media móvil, y el paso deja de apagarse.

Fórmulas

Eₖ = ρ·Eₖ₋₁ + (1−ρ)·∇f(xₖ)²
xₖ₊₁ = xₖ − lr·∇f(xₖ) / (√Eₖ + ε)
ρ = 0,9 equivale a recordar unos 10 pasos

Desarrollo

RMSProp aplica una corrección mínima a AdaGrad con consecuencias grandes: en vez de sumar todos los gradientes al cuadrado, mantiene una media móvil exponencial. Los gradientes antiguos se descuentan geométricamente y el acumulador puede bajar además de subir.

Eso resuelve el apagado. Si una coordenada tuvo gradientes grandes al principio y luego se calmó, AdaGrad la mantiene penalizada para siempre mientras que RMSProp la libera. El método se adapta al régimen actual del entrenamiento en vez de a toda su historia, que es lo apropiado en problemas no estacionarios como el aprendizaje profundo.

El parámetro ρ fija la longitud de la memoria: con ρ = 0,9 la ventana efectiva es de unos 10 pasos, con 0,99 de unos 100. El valor por defecto funciona en la mayoría de los casos y rara vez merece ajustarse. El ε en el denominador evita divisiones por cero y típicamente vale 10⁻⁸.

RMSProp tiene una peculiaridad histórica: nunca se publicó como artículo. Apareció en una diapositiva del curso de Hinton en Coursera en 2012 y se citó así durante años. Su combinación con momentum es lo que da Adam, que es la clase siguiente.

Ejemplo trabajado

RMSProp y AdaGrad con el mismo learning rate.

ρ = 0,9      ε = 1e-8      mismo lr para ambos

RMSProp:
  x final = (0,02310943 ; 0,01786889)
  f final = 0,00692

AdaGrad con el mismo lr:
  x final = (−0,85543159 ; 1,78114968)
  f final = 64,18

AdaGrad se quedó atascado: su paso se apagó antes
de llegar al mínimo.

Diferencia única entre ambos:
  AdaGrad: G += g²             suma que solo crece
  RMSProp: E = ρE + (1−ρ)g²    media que puede bajar

Qué calcula el laboratorio

RMSProp: media móvil del gradiente al cuadrado.

python classes/part-12-optimizacion-matematica-y-computacional/249-rmsprop/lab.py
compmath run 249

Salidas del laboratorio (7)

Muestra de la ejecución real

{
  "rho": 0.9,
  "epsilon": 1e-08,
  "rmsprop": {
    "x_final": [
      0.02310943,
      0.01786889
    ],
    "f_final": 0.0069199898,
    "grad_norm_final": 0.716248356998,
    "historial": [
      {
        "iter": 1,
        "f": 164.9188785163,
        "|∇f|": 113.7351172743
      },
      {
        "iter": 10,
        "f": 96.5034733978,
        "|∇f|": 87.232992701
      },
      {
        "iter": 50,
        "f": 6.4799384772,
        "|∇f|": 22.7638190226
      },
      {
        "iter": 200,
        "f": 0.0069199898,
        "|∇f|": 0.716248357
      }
    ]
  },
  "adagrad_mismo_lr": {
    "x_final": [
      -0.85543159,
      1.78114968
    ],
    "f_final": 64.181646587267,
    "grad_norm_final": 71.26652596864,
    "historial": [
      {
        "iter": 1,
        "f": 177.852500001,
        "|∇f|": 118.0644315619
      },
      {
        "iter": 10,
        "f": 154.6712872777,
        "|∇f|": 110.1796578053
      },
      {
        "iter": 50,
        "f": 116.173506485,
        "|∇f|": 95.6241445694
      },
      {
        "iter": 200,
        "f": 64.1816465873,
        "|∇f|": 71.2665259686
      }
    ]
  },
  "rmsprop_mejor": true,
  "diferencia": "media móvil frente a suma acumulada"
}

Errores comunes

Dónde se usa

Entrenamiento de redes recurrentes, aprendizaje por refuerzo, objetivos no estacionarios y componente de segundo momento en Adam.

Idea rectora de la parte

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

Error a evitar

Declarar convergencia por número de épocas y no por criterio numérico.

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