Skip to content

English · Español

04 — Programaciones de tasa de aprendizaje y por qué el warmup realmente ayuda

🇪🇸 La tasa de aprendizaje no es un número, es una función del paso. Constante, escalonada, coseno, calentamiento. Y la pregunta clave: ¿por qué el warmup ayuda? Respuesta: por el condicionamiento de la Hessiana al principio del entrenamiento.

Las cinco programaciones que debes conocer

Sea η_t la tasa de aprendizaje en el paso t, con η_0 la LR base / pico y T_warm, T_total definidos por la ejecución.

Constante

\[\eta_t = \eta_0\]

La programación más tonta. Usada como baseline de comprobación. Casi nunca óptima para entrenamiento de transformers.

Decaimiento escalonado

\[\eta_t = \eta_0 \cdot \gamma^{\lfloor t / T_\text{step} \rfloor}\]

Multiplica por γ < 1 cada T_step pasos. Común: γ = 0.1 cada T_step = 1000. Caídas discretas; "escalones" visibles en la curva de pérdida.

Decaimiento en coseno (sin reinicios)

\[\eta_t = \eta_\text{min} + \tfrac{1}{2}(\eta_0 - \eta_\text{min})\left(1 + \cos\left(\frac{\pi \cdot t}{T_\text{total}}\right)\right)\]

Decaimiento suave desde η_0 hasta η_min durante T_total pasos. El default moderno para entrenamiento sin warmup; popularizado por SGDR (Loshchilov & Hutter 2017).

Warmup lineal → coseno

\[\eta_t = \begin{cases} \eta_0 \cdot \dfrac{t}{T_\text{warm}} & t < T_\text{warm} \\ \text{programación coseno desde } t = T_\text{warm} & t \ge T_\text{warm} \end{cases}\]

El default de los transformers. T_warm suele ser 1-10% de T_total. Esta es la que se usa en la Fase 18.

WSD (Warmup-Stable-Decay)

\[\eta_t = \begin{cases} \eta_0 \cdot \dfrac{t}{T_\text{warm}} & t < T_\text{warm} \\ \eta_0 & T_\text{warm} \le t < T_\text{stable} \\ \text{coseno o lineal a } 0 & t \ge T_\text{stable} \end{cases}\]

Warmup, luego una larga fase constante, luego un decaimiento brusco. Popularizado por MiniCPM (2024). Te permite publicar un checkpoint al final de la fase "estable" sin comprometerte con un T total, luego reanudar + decaer después. Mencionado brevemente aquí; en producción usamos warmup lineal → coseno.

La pregunta titular: ¿por qué warmup?

Si η_0 está bien ajustada (suficientemente pequeña para entrenamiento estable, suficientemente grande para ser eficiente), ¿por qué subirla gradualmente? ¿Por qué no empezar simplemente en η_0?

La respuesta tiene tres capas, pelables en orden de sutileza.

Capa 1 — La inicialización aleatoria es ruidosa

En el paso 0, los pesos son aleatorios. Los gradientes en el primer batch llevan esencialmente cero señal — son el gradiente de loss(pesos aleatorios), que tiene varianza enorme. Tomar un paso grande en una dirección definida por ruido es malo.

El warmup dice: "Usa pasos pequeños hasta que la relación señal-ruido del gradiente mejore".

Esta es la respuesta intuitiva. No es incorrecta, pero está incompleta.

Capa 2 — El número de condición de la Hessiana es malo al inicio

La Hessiana H = ∇² loss mide la curvatura de la superficie de pérdida. La razón entre su eigenvalor mayor y menor κ = λ_max / λ_min es el número de condición.

Una superficie de pérdida bien condicionada (κ pequeño) tolera pasos grandes. Una mal condicionada (κ grande) no: en la dirección de alta curvatura, un paso que es estable para λ_min explota en la dirección de λ_max.

Al inicio del entrenamiento, la Hessiana está dominada por curvatura inducida por la inicialización — valles agudos en direcciones donde los pesos aleatorios casualmente se alinean. El número de condición es enorme. En unos cientos de pasos, los pesos se han movido a una región más plana; κ cae dramáticamente.

El warmup da tiempo a la superficie para aplanarse antes de dar pasos grandes. Esta es la visión del condicionamiento de la Hessiana.

Capa 3 — La estimación de varianza de Adam necesita estabilizarse

Adam normaliza la actualización de cada parámetro por sqrt(v̂_t) + ε, donde v_t es la EMA de gradientes al cuadrado. En el paso 0, v_0 = 0. La corrección de sesgo v̂_t = v_t / (1 - β_2^t) arregla la magnitud, pero la dirección m̂_t todavía se basa en muy pocas muestras del gradiente.

Una LR grande + una única dirección m̂_t ruidosa = actualización potencialmente catastrófica.

El warmup da tiempo a las medias móviles de Adam para llenarse con suficientes muestras de modo que la dirección sea fiable.

Esta visión es específica de los optimizadores adaptativos. No aplica al SGD vainilla.

Para entrenamiento de transformers (basado en Adam), las Capas 2 y 3 se refuerzan mutuamente. Ambas importan.

Eligiendo T_warm y η_0

Regla práctica de la literatura de transformers:

  • T_warm: 1-10% de los pasos totales. Para la Fase 18 con ~10.000 pasos de entrenamiento, usa T_warm = 500.
  • η_0 (LR pico): ajustada por la mayor LR que no explote en una ejecución corta de prueba. Luego retrocede ~2×. Para Mini-GPT a nuestra escala, η_0 ≈ 3e-4 es un punto de partida razonable; sintoniza después.

Estas son heurísticas. La Fase 19 (dinámica del entrenamiento) provee los métodos empíricos para sintonizarlas.

Una intuición útil: escalado LR × tamaño de batch

Empíricamente, para muchas arquitecturas: doblar el tamaño del batch te permite ~doblar la LR (la "regla de escalado lineal", Goyal et al. 2017). El razonamiento: un batch mayor reduce el ruido del gradiente en 1/√B, así que puedes dar pasos √B mayores — pero la regla lineal es la aproximación más simple que funciona para tamaños de batch moderados.

Para la Fase 18 con tamaño de batch 16, probablemente no la necesitarás. Para la Fase 35 (distribuida), sí.

¿Qué pasa con los reinicios y "coseno con reinicios"?

SGDR (Loshchilov & Hutter 2017) propuso reiniciar la programación de coseno periódicamente — volver a η_0 y decaer otra vez. Ayuda a escapar de mínimos agudos en algunos ajustes.

Para entrenamiento moderno de transformers: principalmente no se usa. Un único ciclo de coseno con warmup es el patrón dominante. No implementaremos reinicios.

Graficando las programaciones

El Lab 03 de esta fase te hace graficar las cinco en los mismos ejes. Formas esperadas:

  • Constante: línea horizontal plana.
  • Escalonada: escalera descendente.
  • Coseno: medio período suave de cos desde el pico hasta el suelo.
  • Warmup lineal → coseno: rampa hacia arriba, luego coseno.
  • WSD: rampa, meseta plana, luego caída brusca.

Cuando las dibujes, las formas de warmup-luego-coseno y WSD deberían verse visiblemente diferentes de las demás. Esa diferencia visible es lo que las hace efectivas: pasan más "tiempo de reloj" en la LR correcta para la curvatura real de la superficie de pérdida en cada fase.

Por qué el warmup no es "deja de entrenar en el caos"

Una lectura sutilmente errónea: "warmup significa que en realidad no empezamos a entrenar hasta el paso T_warm". Incorrecto. estamos entrenando durante el warmup; los pasos pequeños todavía mueven la pérdida. Lo que evitamos es divergencia catastrófica por un paso grande en una superficie mal condicionada.

La curva de pérdida durante el warmup todavía debería bajar — más lento que durante la fase pico, pero bajar. Si tu pérdida está plana durante el warmup, tienes un bug, no una programación.

Lo que este archivo NO cubre

  • Pruebas de convergencia para ninguna de estas programaciones. Fuera de alcance.
  • Optimizadores sin programación (schedule-free) (Defazio et al. 2024). Frontera — no usados aquí.
  • Política de un ciclo (one-cycle) (Smith). Mencionada de pasada; no usada.

Siguiente: ../lab/00-derive-softmax-gradient.md