🧮 Computational Mathematics

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

248 — AdaGrad

avanzado clase 8 de 20 4 horas demostración adagrad

AdaGrad da pasos grandes a coordenadas poco vistas, pero su acumulador nunca olvida.

Fórmulas

Gₖ = Gₖ₋₁ + ∇f(xₖ)²   (por coordenada)
xₖ₊₁ = xₖ − lr·∇f(xₖ) / (√Gₖ + ε)
el paso decrece monótonamente

Desarrollo

AdaGrad abandona la idea de un learning rate único para todas las coordenadas. Acumula para cada una la suma de sus gradientes al cuadrado y divide el paso por su raíz. Las coordenadas con gradientes históricamente grandes reciben pasos pequeños; las que apenas se han movido reciben pasos grandes.

Esto resuelve un problema real en datos dispersos. En procesamiento de lenguaje, unas pocas palabras aparecen constantemente y la mayoría casi nunca. Con learning rate único, los embeddings de las palabras raras apenas se actualizan. AdaGrad les da pasos grandes precisamente porque han acumulado poco, y por eso funcionó tan bien en su momento.

El defecto es estructural y no tiene arreglo dentro del método: el acumulador es una suma de términos no negativos y por tanto solo crece. El paso efectivo decrece monótonamente hacia cero, y en entrenamientos largos el aprendizaje se detiene aunque el modelo esté lejos del óptimo. No es un problema de ajuste; es una consecuencia de la fórmula.

El diagnóstico de ese defecto llevó directamente a RMSProp, que sustituye la suma por una media móvil exponencial y por tanto olvida el pasado lejano. AdaGrad conserva interés histórico y sigue siendo razonable en problemas convexos dispersos con horizontes cortos.

Ejemplo trabajado

Evolución del tamaño de paso a lo largo de las iteraciones.

lr base = 0,5

iteración    tamaño de paso efectivo
     1            0,7071
    50            0,1004
   100            0,0710
   200            0,0502

El paso cae como 1/√k y no vuelve a subir nunca.

Resultado sobre x² + 20y²:
  x final = (−0,0 ; 2,2e-07)     f final = 1e-12

Aquí converge porque el problema es fácil y corto.
En un entrenamiento de 100 000 pasos, el paso efectivo
caería a menos del 1 % del inicial.

Qué calcula el laboratorio

AdaGrad adapta el paso por coordenada, pero se apaga.

python classes/part-12-optimizacion-matematica-y-computacional/248-adagrad/lab.py
compmath run 248

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "learning_rate_base": 0.5,
  "resultado": {
    "x_final": [
      -0.0,
      2.2e-07
    ],
    "f_final": 1e-12,
    "grad_norm_final": 8.920039e-06,
    "historial": [
      {
        "iter": 1,
        "f": 127.2500000079,
        "|∇f|": 100.0449898813
      },
      {
        "iter": 10,
        "f": 19.775723857,
        "|∇f|": 39.6932839328
      },
      {
        "iter": 50,
        "f": 0.0294453749,
        "|∇f|": 1.5348019372
      },
      {
        "iter": 200,
        "f": 0.0,
        "|∇f|": 8.92e-06
      }
    ]
  },
  "tamaño_de_paso_por_iteracion": [
    {
      "iter": 1,
      "tamaño_de_paso": 0.7071067803
    },
    {
      "iter": 50,
      "tamaño_de_paso": 0.003212382
    },
    {
      "iter": 200,
      "tamaño_de_paso": 1.87e-08
    }
  ],
  "el_paso_decrece_monotonamente": true,
  "problema": "el acumulador solo crece: el aprendizaje termina deteniéndose",
  "solucion": "RMSProp introduce olvido exponencial"
}

Errores comunes

Dónde se usa

Modelos con datos dispersos, embeddings de vocabularios grandes, sistemas de recomendación y problemas convexos con horizonte corto.

Idea rectora de la parte

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

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