Path: blob/master/site/es-419/addons/tutorials/optimizers_cyclicallearningrate.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Optimizadores de complementos de TensorFlow: CyclicalLearningRate
Descripción general
En este tutorial se explica el uso del optimizador CyclicalLearningRate del paquete de complementos.
Tasas de aprendizaje cíclicas
Se ha demostrado que es conveniente ajustar la tasa de aprendizaje a medida que avanza el entrenamiento de una red neuronal. Tiene numerosas ventajas, desde la recuperación del punto de inflexión hasta la posibilidad de evitar las inestabilidades numéricas que podrían surgir durante la retropropagación. Pero, ¿cómo saber cuánto ajustar con relación a una marca temporal de entrenamiento concreta? En 2015, Leslie Smith se dio cuenta de que es conveniente aumentar la tasa de aprendizaje para recorrer más rápidamente el panorama de pérdidas, pero también reducir la tasa de aprendizaje cuando nos acercamos a la convergencia. Para materializar esta idea, propuso las tasas de aprendizaje cíclicas (CLR) en las que se ajustaría la tasa de aprendizaje con respecto a los ciclos de una función. Si desea acceder a una demostración visual, consulte este blog. Ahora CLR está disponible como una API de TensorFlow. Más información aquí, en el artículo original.
Preparación
Carga y preparación del conjunto de datos
Definición de hiperparámetros
Definición de las utilidades de desarrollo y entrenamiento de modelos
Para facilitar la reproducibilidad, hemos serializado los pesos iniciales del modelo que se usarán para realizar los experimentos.
Entrenamiento de un modelo sin CLR
Definición del cronograma de CLR
El módulo tfa.optimizers.CyclicalLearningRate
devuelve un cronograma directo que puede pasarse a un optimizador. El cronograma toma un paso como entrada y devuelve un valor calculado con la fórmula CLR que se describe en el documento.
Aquí, se especifican los límites inferior y superior de la tasa de aprendizaje y el cronograma oscilará entre ese intervalo ([1e-4, 1e-2] en este caso). scale_fn
se utiliza para definir la función que aumentaría y reduciría la tasa de aprendizaje dentro de un determinado ciclo. step_size
define la duración de un solo ciclo. Un step_size
de 2 indica que se necesitan un total de 4 iteraciones para completar un ciclo. El valor recomendado para step_size
es el siguiente:
factor * steps_per_epoch
donde el factor se encuentra dentro del intervalo [2,8].
En el mismo documento sobre la CLR, Leslie también presentó un método sencillo e inteligente para elegir los límites de la tasa de aprendizaje. Le recomendamos que también lo consulte. Esta entrada de blog es una buena introducción al método.
A continuación, se ilustra el cronograma clr
.
Para poder apreciar mejor el efecto de la CLR, puede trazar el cronograma con un mayor número de pasos.
La función que no está usando en este tutorial se menciona como el método triangular2
en el documento sobre la CLR. Se exploraron otras dos funciones, concretamente, triangular
y exp
(abreviatura de exponencial).
Entrenamiento de un modelo con CLR
Como era de esperarse, la pérdida comienza en niveles más altos de lo habitual y luego se estabiliza a medida que avanzan los ciclos. Puede comprobarlo visualmente en los siguientes gráficos.
Visualización de pérdidas
Aunque en este ejemplo de laboratorio no se aprecian mucho los efectos de la CLR, hay que tener en cuenta que es uno de los principales ingredientes de la superconvergencia y que puede tener un impacto realmente bueno cuando se entrena en entornos a gran escala.