Preguntas frecuentes

¿Cómo se pueden depurar y mitigar las fallas de optimización?

Resumen: Si el modelo tiene dificultades para optimizarse, es importante corregirlas antes de probar otras opciones. El diagnóstico y la corrección de errores de entrenamiento son un área activa de investigación.

Un gráfico que compara WideResNet estándar con WideResNet de stride 1x1.
            El eje Y representa la tasa de error de la prueba, y el eje X, la tasa de aprendizaje base.
            WideResNet estándar experimenta una disminución gradual en TestErrorRate a medida que aumenta la tasa de aprendizaje base. En cambio, Stride WideResNet experimenta fluctuaciones significativas a medida que aumenta la tasa de aprendizaje básica.
Figura 4. Cambiar los pasos en un solo bloque residual (2x2 -> 1x1) en una WideResnet genera inestabilidad en el entrenamiento.

 

Ten en cuenta lo siguiente sobre la figura 4:

  • Cambiar los pasos no degrada el rendimiento con tasas de aprendizaje bajas.
  • Las tasas de aprendizaje altas ya no se entrenan bien debido a la inestabilidad.
  • Aplicar 1,000 pasos de aumento gradual de la tasa de aprendizaje resuelve esta instancia particular de inestabilidad, lo que permite un entrenamiento estable con una tasa de aprendizaje máxima de 0.1.

Cómo identificar cargas de trabajo inestables

Cualquier carga de trabajo se vuelve inestable si la tasa de aprendizaje es demasiado alta. La inestabilidad solo es un problema cuando te obliga a usar una tasa de aprendizaje demasiado baja. Vale la pena distinguir al menos dos tipos de inestabilidad del entrenamiento:

  • Inestabilidad en la inicialización o al principio del entrenamiento
  • Inestabilidad repentina en el medio del entrenamiento

Para identificar los problemas de estabilidad en tu carga de trabajo de forma sistemática, haz lo siguiente:

  • Realiza un análisis de la tasa de aprendizaje y encuentra la mejor tasa de aprendizaje lr*.
  • Traza las curvas de pérdida del entrenamiento para las tasas de aprendizaje justo por encima de lr*.
  • Si las tasas de aprendizaje > lr* muestran inestabilidad en la pérdida (la pérdida aumenta y no disminuye durante los períodos de entrenamiento), corregir la inestabilidad suele mejorar el entrenamiento.

Registra la norma L2 del gradiente de pérdida completo durante el entrenamiento, ya que los valores atípicos pueden causar inestabilidad espuria en el medio del entrenamiento. Esto puede informar qué tan agresivamente se deben recortar los gradientes o las actualizaciones de pesos.

NOTA: Algunos modelos muestran inestabilidad muy temprana, seguida de una recuperación que genera un entrenamiento lento, pero estable. Los programas de evaluación comunes pueden pasar por alto estos problemas si no evalúan con la frecuencia suficiente.

Para verificar esto, puedes entrenar para una ejecución abreviada de solo 500 pasos con lr = 2 * current best, pero evalúa cada paso.

Dos gráficos: El eje X de ambos gráficos es el paso global y el eje Y de ambos gráficos es la pérdida del entrenamiento. Ambos gráficos comparan una Conv Stride de (2,2) con una Conv Stride de (1,1). El primer gráfico muestra las evaluaciones cada 1,000 pasos. En este primer gráfico, ambos Conv Strides muestran un descenso estable gradual con más pasos globales. El segundo gráfico muestra evaluaciones frecuentes en los primeros 25 pasos. En este segundo gráfico, el Conv Stride de (2,2) muestra grandes fluctuaciones en la pérdida del entrenamiento en los primeros pasos globales antes de volverse más consistentemente bajo en 20 pasos globales. La Conv Stride de (1,1) muestra una pérdida de entrenamiento constantemente baja incluso después del primer paso global.
Figura 5: Es el valor de las evaluaciones más frecuentes al comienzo del entrenamiento. Útil si sospechas que el modelo sufre de inestabilidad en el entrenamiento inicial.

 

Posibles correcciones para patrones de inestabilidad comunes

Considera las siguientes posibles soluciones para los patrones de inestabilidad comunes:

  • Aplica el aumento gradual de la tasa de aprendizaje. Esta opción es mejor para la inestabilidad del entrenamiento inicial.
  • Aplica el recorte de gradientes. Esto es útil para la inestabilidad tanto al principio como a la mitad del entrenamiento, y puede corregir algunas inicializaciones incorrectas que el calentamiento no puede.
  • Prueba un nuevo optimizador. A veces, Adam puede controlar las inestabilidades que Momentum no puede. Esta es un área de investigación activa.
  • Asegúrate de usar las prácticas recomendadas y las mejores inicializaciones para la arquitectura de tu modelo (se proporcionarán ejemplos más adelante). Agrega conexiones residuales y normalización si el modelo aún no las contiene.
  • Normaliza como la última operación antes del residuo. Por ejemplo: x + Norm(f(x)) Ten en cuenta que Norm(x + f(x)) puede causar problemas.
  • Intenta inicializar las ramas residuales en 0. (Consulta ReZero is All You Need: Fast Convergence at Large Depth).
  • Reduce la tasa de aprendizaje. Esta es la última opción.

Aumento gradual de la tasa de aprendizaje

Dos gráficos que muestran el mismo experimento. En el primer gráfico, el eje X es el paso global y el eje Y es la pérdida del entrenamiento. Con números bajos de calentamiento de la tasa de aprendizaje, la pérdida del entrenamiento fue muy inestable.
            Con números de aumento de la tasa de aprendizaje más altos, la pérdida de entrenamiento fue mucho más estable.
Figura 6: Ejemplo de inestabilidad durante un período de calentamiento (ten en cuenta la escala logarítmica del eje horizontal). En este caso, se necesitaron 40,000 pasos de preparación para lograr un entrenamiento exitoso.

Cuándo aplicar el calentamiento de la tasa de aprendizaje

Gráfico de la pérdida de entropía cruzada en el conjunto de validación (eje Y) en comparación con la tasa de aprendizaje base (eje X). El gráfico muestra seis pruebas factibles, todas con una tasa de aprendizaje base relativamente baja. La pérdida de validación disminuye a medida que aumenta la tasa de aprendizaje base y, luego, alcanza un punto bajo antes de comenzar a aumentar. El gráfico también muestra cuatro pruebas no factibles, todas con una tasa de aprendizaje base relativamente alta.
Figura 7a. Ejemplo de un gráfico de ejes de hiperparámetros para un modelo que muestra inestabilidad en el entrenamiento. La mejor tasa de aprendizaje se encuentra en el límite de lo que es factible. Una prueba "infeasible" produce valores NaN o valores inusualmente altos de la pérdida.

 

Gráfico de la pérdida de entropía cruzada en el conjunto de entrenamiento (eje Y) en comparación con el paso global (eje X). La pérdida disminuye muy rápido en los pasos iniciales de Global. Luego, la pérdida aumenta drásticamente alrededor de los 10,000 pasos. Luego, la pérdida disminuye gradualmente alrededor de los 15,000 pasos.
Figura 7b. La pérdida de entrenamiento de un modelo entrenado con una tasa de aprendizaje en la que se observa inestabilidad.

 

En la figura 7a, se muestra un gráfico de ejes de hiperparámetros que indica que un modelo experimenta inestabilidades de optimización, ya que la mejor tasa de aprendizaje se encuentra justo en el límite de la inestabilidad.

En la figura 7b, se muestra cómo se puede verificar esto examinando la pérdida del entrenamiento de un modelo entrenado con una tasa de aprendizaje 5 o 10 veces mayor que este pico. Si ese gráfico muestra un aumento repentino en la pérdida después de una disminución constante (p.ej., en el paso ~10 000 de la figura anterior), es probable que el modelo sufra inestabilidad en la optimización.

Cómo aplicar el calentamiento de la tasa de aprendizaje

Un gráfico de la pérdida de validación en el paso 76619 (eje Y) en comparación con la tasa de aprendizaje básica (eje X). El gráfico compara los resultados de cuatro situaciones diferentes en un transformador LayerNorm en WMT14 EN-De. Calentamiento de la tasa de aprendizaje: La pérdida de validación reducida con tasas de aprendizaje más bajas.
Figura 8: Efecto beneficioso del aumento gradual de la tasa de aprendizaje para abordar las inestabilidades del entrenamiento.

 

Sea unstable_base_learning_rate la tasa de aprendizaje con la que el modelo se vuelve inestable, según el procedimiento anterior.

El calentamiento implica anteponer un programa de la tasa de aprendizaje que aumenta la tasa de aprendizaje de 0 a un valor base_learning_rate estable que es, al menos, un orden de magnitud mayor que unstable_base_learning_rate. La opción predeterminada sería probar un base_learning_rate que sea 10 veces unstable_base_learning_rate. Sin embargo, ten en cuenta que sería posible volver a ejecutar todo este procedimiento para algo como 100 veces unstable_base_learning_rate. El programa específico es el siguiente:

  • Aumenta de 0 a base_learning_rate durante warmup_steps.
  • Entrena a una tasa constante para post_warmup_steps.

Tu objetivo es encontrar la menor cantidad de warmup_steps que te permita acceder a tasas de aprendizaje máximas mucho más altas que unstable_base_learning_rate. Por lo tanto, para cada base_learning_rate, debes ajustar warmup_steps y post_warmup_steps. Por lo general, no hay problemas en establecer post_warmup_steps como 2*warmup_steps.

El período de calentamiento se puede ajustar de forma independiente a un programa de decaimiento existente. warmup_stepsdebe variar en diferentes órdenes de magnitud. Por ejemplo, un estudio de ejemplo podría probar [10, 1000, 10,000, 100,000]. El punto factible más grande no debe superar el 10% de max_train_steps.

Una vez que se establece un warmup_steps que no hace que el entrenamiento explote en base_learning_rate, se debe aplicar al modelo de referencia. Básicamente, antepone este programa al programa existente y usa la selección óptima de puntos de control que se analizó anteriormente para comparar este experimento con el modelo de referencia. Por ejemplo, si originalmente teníamos 10,000 max_train_steps y realizamos warmup_steps durante 1,000 pasos, el nuevo procedimiento de entrenamiento debería ejecutarse durante 11,000 pasos en total.

Si se requieren warmup_steps largos para un entrenamiento estable (más del 5% de max_train_steps), es posible que debas aumentar max_train_steps para tener esto en cuenta.

En realidad, no hay un valor "típico" en todo el rango de cargas de trabajo. Algunos modelos solo necesitan 100 pasos, mientras que otros (en particular, los transformadores) pueden necesitar más de 40,000.

Recorte de gradientes

Gráfico de la norma L2 del gradiente (eje Y) en comparación con el paso global (eje X). El entrenamiento de la norma del gradiente "típico" fue muy inestable en los primeros pasos globales. Un umbral de recorte demasiado agresivo redujo la tasa de aprendizaje y ralentizó el entrenamiento. Un mejor umbral de recorte (apenas por encima de la norma de gradiente típica) estabilizó el entrenamiento inicial.
Figura 9: El recorte del gradiente corrige la inestabilidad del entrenamiento inicial.

 

El recorte de gradiente es más útil cuando se producen problemas de gradiente grandes o atípicos. El recorte de gradiente puede solucionar cualquiera de los siguientes problemas:

  • Inestabilidad en el entrenamiento inicial (norma de gradiente grande al principio)
  • Inestabilidades durante el entrenamiento (aumentos repentinos del gradiente durante el entrenamiento)

En ocasiones, los períodos de entrenamiento más largos pueden corregir las inestabilidades que no corrige el recorte. Para obtener más detalles, consulta Aumento gradual de la tasa de aprendizaje.

🤖 ¿Qué sucede con el recorte durante la preparación?

Los umbrales de recorte ideales se encuentran justo por encima de la norma del gradiente “típica”.

A continuación, se muestra un ejemplo de cómo se podría realizar el recorte de gradiente:

  • Si la norma del gradiente $\left | g \right |$ es mayor que el umbral de recorte del gradiente $\lambda$, entonces haz ${g}'= \lambda \times \frac{g}{\left | g \right |}$, donde ${g}'$ es el nuevo gradiente.

Registra la norma del gradiente sin recortar durante el entrenamiento. De forma predeterminada, se genera lo siguiente:

  • Gráfico de la norma del gradiente en comparación con el paso
  • Histograma de las normas de gradiente agregadas en todos los pasos

Elige un umbral de recorte del gradiente según el percentil 90 de las normas del gradiente. El umbral depende de la carga de trabajo, pero el 90% es un buen punto de partida. Si el 90% no funciona, puedes ajustar este umbral.

🤖 ¿Qué tal una estrategia adaptable?

Si intentas el recorte de gradiente y los problemas de inestabilidad persisten, puedes intentarlo con más fuerza, es decir, puedes reducir el umbral.

El recorte de gradientes extremadamente agresivo (es decir, más del 50% de las actualizaciones se recortan) es, en esencia, una forma extraña de reducir la tasa de aprendizaje. Si te encuentras usando un recorte extremadamente agresivo, probablemente deberías reducir la tasa de aprendizaje.

¿Por qué llamas hiperparámetros a la tasa de aprendizaje y a otros parámetros de optimización? No son parámetros de ninguna distribución a priori.

El término "hiperparámetro" tiene un significado preciso en el aprendizaje automático bayesiano, por lo que referirse a la tasa de aprendizaje y a la mayoría de los otros parámetros ajustables del aprendizaje profundo como "hiperparámetros" es, sin duda, un abuso de la terminología. Preferimos usar el término "parámetro secundario" para las tasas de aprendizaje, los parámetros arquitectónicos y todos los demás elementos ajustables del aprendizaje profundo. Esto se debe a que el metaparámetro evita la posible confusión que surge del uso incorrecto de la palabra "hiperparámetro". Esta confusión es especialmente probable cuando se analiza la optimización bayesiana, en la que los modelos de superficie de respuesta probabilística tienen sus propios hiperparámetros verdaderos.

Lamentablemente, aunque puede ser confuso, el término "hiperparámetro" se ha vuelto muy común en la comunidad del aprendizaje profundo. Por lo tanto, en este documento, que está dirigido a un público amplio que incluye a muchas personas que probablemente no conozcan este tecnicismo, decidimos contribuir a una fuente de confusión en el campo con la esperanza de evitar otra. Dicho esto, es posible que tomemos una decisión diferente cuando publiquemos un documento de investigación, y alentamos a otros a usar "parámetro secundario" en la mayoría de los contextos.

¿Por qué no se debe ajustar el tamaño del lote para mejorar directamente el rendimiento del conjunto de validación?

Cambiar el tamaño del lote sin cambiar ningún otro detalle de la canalización de entrenamiento suele afectar el rendimiento del conjunto de validación. Sin embargo, la diferencia en el rendimiento del conjunto de validación entre dos tamaños de lote suele desaparecer si la canalización de entrenamiento se optimiza de forma independiente para cada tamaño de lote.

Los hiperparámetros que interactúan con mayor intensidad con el tamaño del lote y, por lo tanto, son más importantes para ajustar por separado para cada tamaño del lote son los hiperparámetros del optimizador (por ejemplo, la tasa de aprendizaje y el momento) y los hiperparámetros de regularización. Los tamaños de lotes más pequeños introducen más ruido en el algoritmo de entrenamiento debido a la varianza de la muestra. Este ruido puede tener un efecto regularizador. Por lo tanto, los tamaños de lotes más grandes pueden ser más propensos al sobreajuste y pueden requerir una regularización más sólida o técnicas de regularización adicionales. Además, es posible que debas ajustar la cantidad de pasos de entrenamiento cuando cambies el tamaño del lote.

Una vez que se tienen en cuenta todos estos efectos, no hay evidencia convincente de que el tamaño del lote afecte el rendimiento máximo de validación alcanzable. Para obtener más detalles, consulta Shallue et al., 2018.

¿Cuáles son las reglas de actualización para todos los algoritmos de optimización populares?

En esta sección, se proporcionan reglas de actualización para varios algoritmos de optimización populares.

Descenso de gradientes estocástico (SGD)

\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]

Aquí $\eta_t$ es la tasa de aprendizaje en el paso $t$.

Momentum

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]

Aquí, $\eta_t$ es la tasa de aprendizaje en el paso $t$, y $\gamma$ es el coeficiente de momentum.

Nesterov

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]

Aquí, $\eta_t$ es la tasa de aprendizaje en el paso $t$, y $\gamma$ es el coeficiente de momentum.

RMSProp

\[v_0 = 1 \text{, } m_0 = 0\]

\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]

\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - m_{t+1}\]

ADAM

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]

NADAM

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]