Inicio · Parte 12 — Optimización matemática y computacional
vₖ₊₁ = β·vₖ − lr·∇f(xₖ)
xₖ₊₁ = xₖ + vₖ₊₁
paso efectivo ≈ lr/(1−β): β = 0,9 multiplica por 10
Momentum añade memoria al descenso. En vez de moverse según el gradiente actual, mantiene una velocidad que es una media móvil exponencial de los gradientes pasados. La analogía física es exacta: una bola que rueda por la superficie acumula inercia en vez de reaccionar solo a la pendiente instantánea.
El efecto en valles alargados es el que justifica el método. Las componentes del gradiente que apuntan a las paredes cambian de signo en cada iteración y se cancelan al promediarse; las que apuntan a lo largo del valle son consistentes y se acumulan. El zigzag desaparece y el avance en la dirección útil se multiplica.
El paso efectivo en una dirección de gradiente constante es lr/(1−β), de modo que β=0,9 equivale a multiplicar el learning rate por 10 en esas direcciones. Ese factor explica por qué al activar momentum suele haber que bajar el learning rate: si no, se cruza el umbral de estabilidad.
El coste es mínimo: un vector de estado del tamaño de los parámetros y una operación por paso. Con esa inversión, momentum acelera prácticamente siempre en problemas mal condicionados, que son la norma. Por eso el SGD con momentum siguió siendo competitivo con Adam en visión por computador durante años.
Mismo problema y mismo learning rate, con y sin momentum.
f(x,y) = x² + 20y² lr = 0,02 β = 0,9
sin momentum:
x final = (−0,00056922 ; 0,0)
f final = 3,24e-07
con momentum:
x final = (1,741e-05 ; −6,475e-05)
f final = 8,42e-08
factor de mejora en f: 3,85×
La diferencia crece con el número de condición:
con condición 20 la mejora es de 4×; con condición 1000
momentum es la diferencia entre converger y no converger.
Paso efectivo: lr/(1−β) = 0,02/0,1 = 0,2, diez veces mayor.
Momentum acumula velocidad y amortigua la oscilación.
python classes/part-12-optimizacion-matematica-y-computacional/246-momentum/lab.py
compmath run 246
learning_ratebetasin_momentumcon_momentummomentum_llega_mas_bajofactor_de_mejoraintuicion{
"learning_rate": 0.02,
"beta": 0.9,
"sin_momentum": {
"x_final": [
-0.00056922,
0.0
],
"f_final": 3.24006e-07,
"grad_norm_final": 0.001138430701,
"historial": [
{
"iter": 1,
"f": 10.8864,
"|∇f|": 24.3052586903
},
{
"iter": 10,
"f": 1.7680097355,
"|∇f|": 2.659330544
},
{
"iter": 50,
"f": 0.0674812774,
"|∇f|": 0.5195431741
},
{
"iter": 200,
"f": 3.24e-07,
"|∇f|": 0.0011384307
}
]
},
"con_momentum": {
"x_final": [
1.741e-05,
-6.475e-05
],
"f_final": 8.4165e-08,
"grad_norm_final": 0.002590407328,
"historial": [
{
"iter": 1,
"f": 10.8864,
"|∇f|": 24.3052586903
},
{
"iter": 10,
"f": 56.7808358661,
"|∇f|": 67.345167581
},
{
"iter": 50,
"f": 0.4289057376,
"|∇f|": 5.7359148553
},
{
"iter": 200,
"f": 8.42e-08,
"|∇f|": 0.0025904073
}
]
},
"momentum_llega_mas_bajo": true,
"factor_de_mejora": 3.85
}
SGD con momentum en visión, aceleración de convergencia en problemas mal condicionados y base de Adam y sus variantes.
AdamW es el optimizador por defecto del entrenamiento moderno; entender su actualización explica el weight decay, el warmup y el gradient clipping.
10.1016/0041-5553(64)90137-5 verificado en Crossref (2026-08-19).