La programación de la tasa de aprendizaje consiste en variar η durante el entrenamiento en vez de mantenerla fija. Un valor constante rara vez es el mejor en todas las fases: al principio conviene ir con cuidado, luego avanzar rápido y al final afinar con pasos pequeños. Un schedule (una función que dice cuánto vale η en cada paso) captura esa idea, y el calentamiento o warmup añade una rampa inicial que evita que la red se desestabilice en las primeras iteraciones. La misma explicación está disponible en inglés.

Fórmula clave $\eta_t = \eta_0 \cdot \operatorname{decay}(t)$

Puntos clave

  • La programación de la tasa de aprendizaje sustituye el valor fijo de η por una función $\eta_t = \eta_0 \cdot \operatorname{decay}(t)$ que cambia paso a paso.
  • Los tres decaimientos más usados son por pasos (multiplicar por 0,1 cada cierto número de épocas), exponencial y coseno.
  • El calentamiento sube η desde casi cero durante los primeros pasos (4.000 en el Transformer original) para estabilizar el arranque.
  • El recocido por coseno de Loshchilov y Hutter (2016) baja η siguiendo media onda de coseno hasta un mínimo cercano al 10 % del pico.
  • Los transformers combinan warmup lineal y decaimiento, una receta que hoy usan casi todos los modelos de lenguaje grandes.

Por qué variar la tasa de aprendizaje

La tasa de aprendizaje fija el tamaño de cada paso al actualizar los pesos con la regla $\mathbf{W} \leftarrow \mathbf{W}-\eta\cdot\nabla L$. Si es demasiado alta, la pérdida oscila o diverge; si es demasiado baja, el entrenamiento tarda una eternidad. El problema es que el valor ideal no es el mismo en todo momento.

Al comienzo del entrenamiento los pesos están recién inicializados y los gradientes son grandes y ruidosos, así que interesa un paso prudente. En la zona media, cuando la dirección de descenso está clara, un paso mayor acelera el progreso. Cerca del mínimo, un paso grande haría saltar por encima del valle, de modo que conviene reducirlo para asentarse. Una η fija obliga a un compromiso entre estas tres fases; un schedule las trata por separado y suele recortar el número de épocas necesarias entre un 10 % y un 30 % frente a una tasa constante bien elegida.

Decaimiento por pasos, exponencial y coseno

El decaimiento por pasos (step decay) es el más simple: cada cierto número de épocas se multiplica η por un factor γ menor que 1. Una receta clásica en visión por computador es empezar en 0,1 y multiplicar por 0,1 cada 30 épocas, de forma que a las 60 épocas la tasa ya es cien veces menor. En forma cerrada:

$$\eta_t = \eta_0\cdot\gamma^{\lfloor t/\text{step_size}\rfloor}$$

El decaimiento exponencial hace lo mismo de manera continua, sin escalones. La tasa baja de forma suave según $\eta_t = \eta_0\cdot e^{-\lambda t}$, donde λ controla la velocidad de caída. Es cómodo cuando prefieres una curva sin saltos bruscos.

El decaimiento por coseno (cosine annealing), propuesto por Loshchilov y Hutter en 2016, baja η siguiendo la primera media onda de un coseno, con un descenso lento al principio, rápido en el centro y de nuevo lento al final:

$$\etat = \eta{\min}+0{,}5\,(\eta0-\eta{\min})\,(1+\cos(\pi t/T))$$

Aquí $T$ es la duración total del ciclo y $\eta_{\min}$ el suelo (a menudo cero o el 10 % del pico). El coseno es hoy el favorito para entrenar redes grandes porque su forma dedica más tiempo a tasas altas útiles y luego afina con suavidad. Puedes ver la variante con reinicios en la documentación de PyTorch[1], que implementa estos tres decaimientos como schedulers listos para usar.

El calentamiento (warmup)

El calentamiento resuelve un problema del arranque. En los primeros pasos, con pesos aleatorios y estadísticas del optimizador aún sin estabilizar (los momentos de Adam tardan varias iteraciones en calentar), una η alta puede empujar los pesos a una región mala de la que la red no se recupera. El warmup arranca η en un valor muy pequeño y la sube de forma lineal hasta el pico durante los primeros pasos, típicamente entre 500 y 10.000 según el tamaño del modelo.

BERT, por ejemplo, usa 10.000 pasos de calentamiento antes de empezar a decaer, y muchos modelos de lenguaje dedican al warmup en torno al 1 % del total de pasos. La combinación habitual es warmup lineal seguido de decaimiento por coseno: primero se sube, luego se baja. Este patrón amortigua las primeras actualizaciones y evita los picos de pérdida que aparecen cuando se entrena con lotes muy grandes.

El warmup solo suaviza el arranque: la η de pico sigue siendo un hiperparámetro que debes ajustar. Un valor de pico demasiado alto diverge igual, con rampa o sin ella.

Schedules en los transformers

La receta que popularizó el warmup viene del artículo «Attention Is All You Need»[2] de Vaswani y sus coautores (2017). Su schedule combina las dos ideas en una sola fórmula:

$$\etat = d{\text{model}}^{-0{,}5}\cdot\min!\left(t^{-0{,}5},\; t\cdot\text{warmup_steps}^{-1{,}5}\right)$$

Con $d_{\text{model}}=512$ y $\text{warmup_steps}=4000$, la tasa sube linealmente durante los primeros 4.000 pasos y luego cae proporcional a la raíz cuadrada inversa del paso. Como explican los autores, «aumentamos la tasa de aprendizaje linealmente durante los primeros warmup_steps pasos de entrenamiento, y después la reducimos de forma proporcional a la raíz cuadrada inversa del número de paso».

El factor $d_{\text{model}}^{-0{,}5}$ acopla la tasa al ancho del modelo: cuanto más grande es la red, más pequeña es la η de pico. Esta idea sigue viva en modelos actuales, que casi siempre entrenan con warmup lineal más coseno. Si quieres el contexto completo del papel de η dentro del entrenamiento, el mapa de las matemáticas de las redes neuronales sitúa la optimización junto al álgebra lineal y el cálculo.

Ejemplos de configuración

En la práctica un schedule se define con dos o tres parámetros. Estos son los más comunes:

step:    eta_0 = 0.1,  gamma = 0.1,  step_size = 30 epochs
coseno:  eta_0 = 3e-4, eta_min = 3e-5, T = total de pasos
warmup:  warmup_steps = 4000, luego coseno hasta eta_min

Una guía sencilla: usa decaimiento por pasos cuando reproduzcas recetas clásicas de visión, coseno cuando entrenes desde cero un modelo grande, y añade siempre warmup si trabajas con transformers o lotes por encima de unos pocos miles de ejemplos. El concepto general de ajustar η aparece resumido también en Wikipedia[3], útil como referencia rápida de los términos.

Preguntas frecuentes

¿Cuál es la diferencia entre warmup y decaimiento?

El warmup es la fase inicial en la que η sube desde casi cero hasta el pico durante los primeros pasos; sirve para estabilizar el arranque. El decaimiento es lo que ocurre después: η baja de forma progresiva (por pasos, exponencial o coseno) para afinar la convergencia. Casi siempre se usan juntos, primero uno y luego el otro.

¿Qué schedule debería elegir para empezar?

Para la mayoría de modelos modernos, warmup lineal durante el 1 % de los pasos seguido de decaimiento por coseno hasta un mínimo pequeño es una elección segura. Si reproduces trabajos clásicos de clasificación de imágenes, el decaimiento por pasos con γ = 0,1 cada 30 épocas sigue funcionando bien.

¿El warmup sustituye a elegir bien la tasa de aprendizaje base?

No. El warmup y el decaimiento gestionan cómo cambia η en el tiempo, pero el valor de pico sigue siendo un hiperparámetro que debes ajustar. Un pico mal elegido diverge igual con warmup; la rampa solo suaviza el arranque, no corrige un η de pico demasiado alto.

Conclusión

La programación de la tasa de aprendizaje convierte η de un número fijo en una función del tiempo: warmup para arrancar con calma, un pico para avanzar y un decaimiento (por pasos, exponencial o coseno) para asentarse. Es una de las decisiones que más influye en si un entrenamiento converge bien o se estanca. El siguiente paso natural es repasar la tasa de aprendizaje base y encajarla en el resto del recorrido de optimización.

Fuentes

  1. PyTorch
  2. «Attention Is All You Need»
  3. Wikipedia
  4. SGDR: Stochastic Gradient Descent with Warm Restarts (Loshchilov y Hutter, 2016)

Ruta: Optimización avanzada de redes neuronales