Inicio · Parte 12 — Optimización matemática y computacional
mₖ = β₁·mₖ₋₁ + (1−β₁)·g; vₖ = β₂·vₖ₋₁ + (1−β₂)·g²
m̂ = mₖ/(1−β₁ᵏ); v̂ = vₖ/(1−β₂ᵏ)
xₖ₊₁ = xₖ − lr·m̂ / (√v̂ + ε)
Adam junta las dos ideas que funcionaban por separado: el primer momento m es la media móvil del gradiente, que es momentum, y el segundo momento v es la media móvil del gradiente al cuadrado, que es RMSProp. La actualización divide uno por la raíz del otro.
La aportación propia es la corrección de sesgo, y merece entenderse porque es la parte que más se copia sin comprender. Ambos acumuladores se inicializan a cero, así que en los primeros pasos están fuertemente sesgados hacia cero: con β₂ = 0,999, tras un paso v vale solo el 0,1 % del valor correcto. Dividir por 1 − βᵏ compensa exactamente ese arranque, y sin esa corrección los primeros pasos serían enormes.
Los valores por defecto —β₁ = 0,9, β₂ = 0,999, ε = 10⁻⁸— funcionan sorprendentemente bien en una variedad enorme de problemas, y esa robustez es la razón real de su dominio: se puede empezar a entrenar sin ajustar nada. Es el optimizador por defecto del aprendizaje profundo desde 2015.
No está libre de críticas. Hay problemas convexos donde Adam no converge, señalados por Reddi y otros en 2018, lo que motivó AMSGrad. Y en visión por computador el SGD con momentum bien ajustado suele generalizar mejor. Adam es el mejor punto de partida, no la respuesta final.
Adam sobre el problema de referencia y la corrección de sesgo.
β₁ = 0,9 β₂ = 0,999 lr = 0,1 ε = 1e-8
resultado:
x final = (−5,69e-05 ; −5,303e-05)
f final = 5,95e-08
Por qué hace falta la corrección de sesgo:
paso k 1 − β₂ᵏ v subestima por factor
1 0,001 1000×
10 0,00995 100×
100 0,0952 10×
1000 0,632 1,6×
Sin corregir, los primeros pasos dividirían por una raíz
demasiado pequeña y el paso efectivo sería desmesurado.
Adam: momentum de primer y segundo orden con corrección de sesgo.
python classes/part-12-optimizacion-matematica-y-computacional/250-adam/lab.py
compmath run 250
beta1beta2lrepsresultadopor_que_la_correccion_de_sesgopaso_1_sin_corregirfactor_de_correccion_en_t=1es_el_optimizador_por_defecto{
"beta1": 0.9,
"beta2": 0.999,
"lr": 0.1,
"eps": 1e-08,
"resultado": {
"x_final": [
-5.69e-05,
-5.303e-05
],
"f_final": 5.9481e-08,
"grad_norm_final": 0.002124240013,
"historial": [
{
"iter": 1,
"f": 171.8100000019,
"|∇f|": 116.0622246904
},
{
"iter": 10,
"f": 82.1888770435,
"|∇f|": 80.593591688
},
{
"iter": 50,
"f": 0.576217803,
"|∇f|": 6.757304958
},
{
"iter": 200,
"f": 5.95e-08,
"|∇f|": 0.00212424
}
]
},
"por_que_la_correccion_de_sesgo": "m y v empiezan en 0 y subestiman los primeros pasos"
}
Entrenamiento por defecto de redes profundas, ajuste fino de modelos de lenguaje, transformers y prácticamente todo el aprendizaje profundo actual.
AdamW es el optimizador por defecto del entrenamiento moderno; entender su actualización explica el weight decay, el warmup y el gradient clipping.
10.48550/arxiv.1412.6980 verificado en DataCite (2026-08-19).10.48550/arxiv.1904.09237 verificado en DataCite (2026-08-19).