Adam y AdamW, el optimizador por defecto del deep learning
Índice de contenidos
- Puntos clave
- ¿Qué es Adam?
- Momentos de primer y segundo orden
- La corrección de sesgo (bias correction)
- AdamW y el weight decay desacoplado
- Adam frente a SGD con momentum
- Preguntas frecuentes
- ¿Qué valores por defecto usa Adam?
- ¿Cuál es la diferencia entre Adam y AdamW?
- ¿Debería usar siempre Adam?
- Conclusión
- Fuentes
Adam combina el momento de primer orden (media móvil del gradiente) y el de segundo orden (media de sus cuadrados) para dar a cada parámetro su propia tasa de aprendizaje. Con la corrección de sesgo y los valores por defecto β1=0,9, β2=0,999 y ε=1e-8, converge rápido y casi sin ajustar nada.
Adam es el optimizador que la mayoría de proyectos de aprendizaje profundo eligen por defecto, y con razón: casi siempre funciona sin tocar apenas los ajustes. Publicado por Diederik Kingma y Jimmy Ba en 2014, combina dos ideas previas (el momentum y las tasas adaptativas) en una sola regla de actualización que se adapta a cada parámetro. Su primo AdamW corrige un detalle de la regularización que importaba más de lo que parecía. La misma explicación está disponible en inglés.
Puntos clave
- El optimizador Adam mantiene dos medias móviles por parámetro: el momento de primer orden (el gradiente) y el de segundo orden (su cuadrado).
- Los valores por defecto son β1=0,9, β2=0,999 y ε=1e-8, con una tasa de aprendizaje típica de 0,001; rara vez hace falta cambiarlos.
- La corrección de sesgo compensa que ambas medias empiezan en cero, evitando pasos diminutos en las primeras iteraciones.
- AdamW separa el weight decay del gradiente adaptativo, algo que el Adam original hacía mal y que degradaba la regularización.
- Frente a SGD con momentum, Adam converge más rápido al principio, aunque un SGD bien ajustado a veces generaliza algo mejor en visión por computador.
¿Qué es Adam?
Adam (Adaptive Moment Estimation) es un método de descenso de gradiente que ajusta la tasa de aprendizaje de cada peso por separado. En lugar de mover todos los parámetros con el mismo paso, observa el historial reciente del gradiente de cada uno y decide cuánto avanzar.
Para lograrlo mantiene dos acumuladores por parámetro. El primero es una media del gradiente (hacia dónde apunta el error); el segundo es una media del gradiente al cuadrado (cómo de grande y ruidoso es). Dividir el primero entre la raíz del segundo produce un paso normalizado: grande cuando el gradiente es estable y pequeño cuando oscila mucho. Esa mecánica hereda el espíritu de AdaGrad y RMSprop, pero añade el momento para suavizar la dirección.
La regla completa, para el instante $t$, se resume así:
m = beta1 * m + (1 - beta1) * g # primer momento: media del gradiente
v = beta2 * v + (1 - beta2) * g**2 # segundo momento: media del cuadrado
m_hat = m / (1 - beta1**t) # correccion de sesgo del primer momento
v_hat = v / (1 - beta2**t) # correccion de sesgo del segundo momento
w = w - lr * m_hat / (v_hat**0.5 + eps)
El término $\varepsilon$ (por defecto $10^{-8}$) solo evita la división por cero cuando $\hat{v}_t$ es diminuto; no es un hiperparámetro que convenga ajustar.
Momentos de primer y segundo orden
El nombre del método viene de esos dos "momentos", un término prestado de la estadística. El momento de primer orden $m$ es una media exponencial del gradiente $g$: acumula la dirección reciente y filtra el ruido, igual que el momentum clásico. Con β1=0,9, cada nueva iteración pesa un 10 % y arrastra un 90 % del historial previo.
$$m_t = \beta1\,m{t-1}+(1-\beta_1)\,g_t \qquad v_t = \beta2\,v{t-1}+(1-\beta_2)\,g_t^2$$
El momento de segundo orden $v$ es una media exponencial del gradiente al cuadrado, con β2=0,999. Estima la varianza reciente de cada parámetro. Cuando un peso recibe gradientes grandes y erráticos, su $v$ crece y el paso efectivo se reduce; cuando el gradiente es pequeño y constante, el paso se agranda. Así cada dimensión obtiene su propia tasa de aprendizaje sin que tengamos que fijarla a mano.
La corrección de sesgo (bias correction)
Aquí aparece el detalle que distingue a Adam de una simple combinación de momentum y RMSprop. Como $m$ y $v$ arrancan en cero, durante las primeras iteraciones ambas medias están sesgadas hacia abajo: subestiman el valor real. Sin corregirlo, el optimizador daría pasos demasiado tímidos justo al comienzo del entrenamiento, cuando más conviene avanzar.
La solución es dividir cada media por $(1-\beta^t)$, un factor que vale casi cero al principio (y por tanto amplifica la estimación) y tiende a 1 conforme $t$ crece:
$$\hat{m}_t = \frac{m_t}{1-\beta_1^{\,t}} \qquad \hat{v}_t = \frac{v_t}{1-\beta_2^{\,t}}$$
Con β2=0,999, ese factor solo se acerca a 1 tras unos cientos de pasos, así que la corrección es especialmente importante para el segundo momento. Es un ajuste barato que estabiliza las primeras épocas sin coste apreciable.
Ver la derivación
Al desplegar la recurrencia $m_t = \beta_1 m_{t-1}+(1-\beta_1)g_t$ desde $m_0 = 0$ se obtiene $m_t = (1-\beta_1)\sum_{i=1}^{t}\beta_1^{\,t-i}\,g_i$. Si el gradiente es aproximadamente estacionario con media $\mathbb{E}[g]$, entonces $\mathbb{E}[m_t] = (1-\beta_1^{\,t})\,\mathbb{E}[g]$. Dividir por $(1-\beta_1^{\,t})$ deja $\mathbb{E}[\hat{m}_t] = \mathbb{E}[g]$, es decir, un estimador sin sesgo; el mismo argumento vale para $\hat{v}_t$.
AdamW y el weight decay desacoplado
En 2017 Ilya Loshchilov y Frank Hutter señalaron un error sutil en cómo Adam aplicaba la regularización. En SGD, sumar un término de weight decay al gradiente equivale exactamente a la regularización L2. Pero en Adam no: al pasar por la división entre la raíz del segundo momento, ese término queda escalado de forma distinta para cada parámetro, y la regularización pierde fuerza justo donde el gradiente es grande.
Su propuesta, AdamW, es desacoplar el weight decay: en vez de meterlo en el gradiente, se resta directamente de los pesos, aparte del paso adaptativo:
$$wt = w{t-1}-\eta\,\frac{\hat{m}_t}{\sqrt{\hat{v}t}+\varepsilon}-\eta\,\lambda\,w{t-1}$$
Como resumen los autores, «la regularización L2 y el weight decay no son equivalentes para Adam». El cambio es pequeño en código pero mejora la generalización de forma medible, y hoy AdamW es el valor por defecto en la mayoría de bibliotecas y en el entrenamiento de grandes modelos de lenguaje.
Adam frente a SGD con momentum
Adam suele ganar en velocidad inicial: alcanza una pérdida baja en menos iteraciones y es más tolerante a una mala elección de la tasa de aprendizaje. Por eso es el punto de partida recomendado cuando exploras una arquitectura nueva o entrenas transformadores.
SGD con momentum, en cambio, tiene fama de generalizar algo mejor en algunas tareas de visión por computador si se ajusta con cuidado y se acompaña de un buen calendario de tasa de aprendizaje. La diferencia se ha estrechado con AdamW, pero la elección sigue dependiendo del problema. Una guía útil para comparar familias de optimizadores es el repaso de Sebastian Ruder sobre el descenso de gradiente. Si quieres el contexto matemático completo, el mapa de las matemáticas de las redes neuronales sitúa cada pieza en su lugar.
Preguntas frecuentes
¿Qué valores por defecto usa Adam?
Los parámetros estándar son β1=0,9, β2=0,999 y ε=1e-8, con una tasa de aprendizaje inicial habitual de 0,001. Son los que propuso el artículo original y funcionan bien en la gran mayoría de casos sin necesidad de ajuste.
¿Cuál es la diferencia entre Adam y AdamW?
AdamW cambia solo cómo se aplica el weight decay: lo resta directamente de los pesos en lugar de sumarlo al gradiente. Ese desacoplamiento restaura el efecto de regularización que el Adam original diluía, y suele mejorar la generalización sin otros cambios.
¿Debería usar siempre Adam?
Es una excelente opción por defecto, sobre todo con AdamW. Aun así, para algunas tareas de visión un SGD con momentum bien afinado puede generalizar algo mejor, por lo que conviene probar ambos cuando el rendimiento final es prioritario.
Conclusión
Adam funciona porque combina tres ideas sencillas: el momento suaviza la dirección, el segundo momento adapta el paso a cada parámetro y la corrección de sesgo estabiliza el arranque. AdamW añade la pieza que faltaba al separar el weight decay del paso adaptativo. Con sus valores por defecto (β1=0,9, β2=0,999, ε=1e-8) tienes un optimizador robusto para casi cualquier red. El siguiente paso natural es entender cómo influye la tasa de aprendizaje en la velocidad de convergencia.