En esta sección, se explica cómo elegir lo siguiente al comienzo de un proyecto de AA:
- la arquitectura del modelo
- el optimizador
- el tamaño del lote
- la configuración inicial
Suposiciones
Los consejos de esta sección suponen lo siguiente:
- Ya formulaste el problema. y preparaste tus datos de entrenamiento hasta cierto punto.
- Ya configuraste una canalización de entrenamiento y prueba.
- Ya seleccionaste e implementaste métricas que son tan representativas de lo que planeas medir en el entorno implementado.
Si cumpliste con todos los requisitos previos, ya puedes dedicar tiempo a la arquitectura del modelo y la configuración del entrenamiento.
Elige la arquitectura del modelo
Comencemos con las siguientes definiciones:
- Una arquitectura de modelo es un sistema para producir predicciones. Una arquitectura de modelo contiene el framework para convertir datos de entrada en predicciones, pero no contiene parámetro. Por ejemplo: una red neuronal con tres capas ocultas de 10, 5 nodos y 3 nodos respectivamente, es una arquitectura de modelo.
- Un modelo es una arquitectura de modelo más valores específicos para todas las parámetros. Por ejemplo, un modelo consta de la red neuronal descrita en la definición de la arquitectura del modelo, además de los valores específicos y el sesgo de cada nodo.
- Una familia de modelos es una plantilla para construir la arquitectura de un modelo. dado un conjunto de hiperparámetros.
Elegir la arquitectura del modelo realmente significa elegir un conjunto de (uno para cada configuración de hiperparámetros).
Cuando sea posible, intenta encontrar una base de código documentada que aborde algo lo más parecido posible al problema actual. Luego, reproduce ese modelo un punto de partida.
Elige el optimizador
Ningún optimizador es el "mejor" para todos los tipos de problemas de aprendizaje automático y las arquitecturas de modelos. Incluso el simple hecho de comparar el rendimiento de los optimizadores es difícil. ####Recomendamos usar optimizadores populares y bien establecidos, especialmente al comenzar un nuevo proyecto.
Recomendamos elegir el optimizador más popular para el tipo de problema en los que estás trabajando. Recomendamos los siguientes optimizadores establecidos:
- SGD con impulso. Recomendamos la variante Nesterov.
- Adam y NAdam, que son más generales que SGD con impulso. Ten en cuenta que Adam tiene cuatro argumentos ajustables y todos pueden ser importantes. Consulta ¿Cómo deberían ser los hiperparámetros de Adam? ajustar?.
Presta atención a todos los argumentos del optimizador elegido. Los optimizadores con más hiperparámetros suelen requerir más esfuerzo de ajuste. Esto es particularmente doloroso en las etapas iniciales de un proyecto cuando intentas encontrar los mejores valores de varios otros hiperparámetros (por ejemplo, tasa de aprendizaje), mientras se consideran los argumentos del optimizador como sin inconvenientes. Por lo tanto, recomendamos el siguiente enfoque:
- Al comienzo del proyecto, elegir un optimizador sin muchos ajustes
hiperparámetros. A continuación, presentamos dos ejemplos:
- SGD con impulso fijo
- Adán con Épsilon, Beta1 y Beta2 fijos.
- En etapas posteriores del proyecto, cambiar a un optimizador más general que ajusta más hiperparámetros en lugar de corregirlos en los valores predeterminados.
Elige el tamaño del lote
Resumen: El tamaño del lote determina la velocidad de entrenamiento. no uses el tamaño del lote para ajustar directamente el rendimiento del conjunto de validación.
El tamaño del lote determina en gran medida el tiempo de entrenamiento y el recurso de procesamiento. consumo de energía. Aumentar el tamaño del lote suele disminuir el tiempo de entrenamiento, que:
- Te permite ajustar los hiperparámetros con más detalle en un tiempo fijo. para generar un mejor modelo final.
- Reduce la latencia del ciclo de desarrollo, lo que permite que se puedan generar nuevas ideas se prueban con más frecuencia.
Aumentar el tamaño del lote puede disminuir o aumentar el consumo de recursos, o dejar el consumo de recursos sin modificar.
No trates el tamaño del lote como un hiperparámetro ajustable para la validación establecido. Si todos se cumplen las siguientes condiciones, el rendimiento del modelo no debe depender tamaño del lote:
- Todos los hiperparámetros del optimizador están bien ajustados.
- La regularización es suficiente y está bien ajustada.
- La cantidad de pasos de entrenamiento es suficiente.
Se debe poder alcanzar el mismo rendimiento final con cualquier tamaño de lote (Consulta Shallue et al. 2018 y ¿Por qué no se debería ajustar el tamaño del lote para mejorar directamente? rendimiento del conjunto de validación?)
Determinar los tamaños de lote posibles y estimar la capacidad de procesamiento del entrenamiento
Para un optimizador y modelo determinado, el hardware disponible generalmente admite un rango de tamaños de lote. El factor limitante suele ser memoria del acelerador. Lamentablemente, puede ser difícil calcular en la memoria sin ejecutar, o al menos compilar, programa de capacitación completo. Por lo general, la solución más fácil es ejecutar trabajos de entrenamiento con distintos tamaños de lote (por ejemplo, potencias incrementales de 2) para un grupo pequeño la cantidad de pasos hasta que uno de los trabajos supere la memoria disponible. Para de cada tamaño de lote, entrena el tiempo suficiente para obtener una estimación confiable capacidad de procesamiento del entrenamiento:
capacidad de procesamiento del entrenamiento = cantidad de ejemplos procesados por segundo
o, de manera equivalente, el tiempo por paso:
tiempo por paso = tamaño del lote / capacidad de procesamiento de entrenamiento
Cuando los aceleradores aún no están saturados, si el tamaño del lote se duplica, la capacidad de procesamiento del entrenamiento también debería duplicarse (o al menos casi el doble). De manera equivalente, el tiempo por paso debe ser constante (o al menos casi constante) a medida que aumenta el tamaño del lote. Si este no es el caso, entonces Si la canalización de entrenamiento tiene un cuello de botella, como E/S o sincronización entre los nodos de procesamiento. Considera diagnosticar y corregir el cuello de botella. antes de continuar.
Si la capacidad de procesamiento del entrenamiento aumenta solo hasta cierto tamaño máximo del lote entonces solo considera los tamaños de lote hasta ese tamaño máximo, aun si cuando el hardware admita un tamaño de lote más grande. Todos los beneficios de usar un tamaño de lote más grande suponen la capacidad de procesamiento del entrenamiento aumenta. De lo contrario, soluciona el cuello de botella o usa el tamaño de lote más pequeño.
La acumulación de gradientes simula un tamaño de lote mayor que el que puede alcanzar el hardware y, por lo tanto, no proporciona ningún beneficio en términos de capacidad de procesamiento. Deberías suelen evitar la acumulación de gradientes en el trabajo aplicado.
Es posible que debas repetir estos pasos cada vez que cambies el modelo el optimizador. Por ejemplo, una arquitectura de modelo diferente puede permitir una un tamaño de lote más grande para que quepa en la memoria.
Elige el tamaño del lote para minimizar el tiempo de entrenamiento
Esta es nuestra definición del tiempo de entrenamiento:
- tiempo de entrenamiento = (tiempo por paso) x (cantidad total de pasos)
A menudo, puedes considerar que el tiempo por paso es casi constante. para todos los tamaños de lote posibles. Esto es así en los siguientes casos:
- No se generan sobrecargas de procesamientos paralelos.
- Se diagnosticaron y corrigieron todos los cuellos de botella en el entrenamiento. (Consulta la sección anterior para saber cómo identificar cuellos de botella en el entrenamiento. En la práctica, suele haber al menos la sobrecarga del aumento del tamaño del lote.
A medida que aumenta el tamaño del lote, la cantidad total de pasos necesarios un objetivo de rendimiento fijo suele disminuir, siempre y cuando los hiperparámetros relevantes cuando se cambia el tamaño del lote. (Consulta Shallue et al. 2018). Por ejemplo, duplicar el tamaño del lote podría reducir a la mitad la cantidad total de los pasos necesarios. Esta relación se denomina escalamiento perfecto y debe para todos los tamaños de lote hasta un tamaño de lote crítico.
Más allá del tamaño crítico del lote, aumentar el tamaño del lote produce la disminución del retorno. Es decir, aumentar el tamaño del lote con el tiempo ya no reduce el número de pasos de entrenamiento, pero nunca lo aumenta. Por lo tanto, el tamaño del lote que minimiza el tiempo de entrenamiento suele ser El tamaño del lote más grande que aún reduce la cantidad de pasos de entrenamiento como en los productos necesarios. El tamaño del lote depende del conjunto de datos, el modelo, y optimizador. Es un problema abierto cómo calcularlo de una forma distinta a de encontrar de forma experimental para cada problema nuevo. 🤖
Cuando compares los tamaños de los lotes, ten en cuenta la distinción entre lo siguiente:
- Un presupuesto de ejemplo o presupuesto de época que ejecute todos los experimentos mientras y corregir el número de presentaciones de ejemplo de capacitación.
- Un presupuesto de pasos (es decir, ejecutar todos los experimentos con una cantidad fija de pasos de entrenamiento.
La comparación de los tamaños de lotes con un presupuesto de época solo sondea la ideal de escalamiento vertical, incluso cuando los tamaños de lotes más grandes aún una aceleración significativa mediante la reducción del número de pasos de entrenamiento requeridos. A menudo, el tamaño de lote más grande que admite el hardware disponible es menor que el tamaño de lote crítico. Por lo tanto, una buena regla general (sin ejecutar ningún experimento) es usar el conjunto de datos posible.No tiene sentido usar un tamaño de lote más grande si termina aumentando el tiempo de capacitación.
Elige el tamaño del lote para minimizar el consumo de recursos
Existen dos tipos de costos de recursos asociados con el aumento del tamaño del lote:
- Costos iniciales. Por ejemplo, comprar un nuevo hardware o reescribir el para implementar el entrenamiento de varias GPU o TPU.
- Costos de uso. Por ejemplo, la facturación se basa en los presupuestos de recursos del equipo la facturación de un proveedor de servicios en la nube, los costos de electricidad o mantenimiento.
Si hay costos iniciales significativos por aumentar el tamaño del lote podría ser mejor postergar el aumento del tamaño del lote hasta que el proyecto ha madurado y es más fácil evaluar la relación costo-beneficio. Implementar programas de capacitación paralelo de hosts múltiples puede introducir errores y problemas leves por lo que probablemente sea mejor comenzar canalización de todos modos. Por otro lado, una gran aceleración en el tiempo de entrenamiento puede ser muy beneficioso al principio del proceso, cuando se deben realizar muchos ajustes se necesitan experimentos.
Nos referimos al costo de uso total (que puede incluir varias tipos de costos) como el consumo de recursos, calculado de la siguiente manera:
consumo de recursos = consumo de recursos por paso x cantidad total de pasos
Por lo general, aumentar el tamaño del lote reduce la cantidad total de pasos. Que el consumo de recursos aumente o disminuya cómo cambia el consumo por paso, que depende del tamaño del lote de la siguiente manera:
- Aumentar el tamaño del lote podría disminuir el consumo de recursos. Por ejemplo, si cada paso con el tamaño del lote mayor puede ejecutarse en el mismo hardware que el tamaño de lote más pequeño (con solo un de aumento en el tiempo por paso), cualquier aumento en los recursos y consumo por paso podría superarse con la disminución del la cantidad de pasos.
- Es posible que aumentar el tamaño del lote no cambie el consumo de recursos. Por ejemplo, si se duplica el tamaño del lote, se reduce a la mitad la cantidad de pasos. necesarias y duplica la cantidad de GPU usadas, el consumo total (en cuanto a horas de GPU) no cambia.
- Aumentar el tamaño del lote puede aumentar el consumo de recursos. Por ejemplo, si aumentar el tamaño del lote requiere hardware actualizado, el aumento en el consumo por paso podría superar la reducción la cantidad de pasos.
Para cambiar el tamaño del lote, se debe volver a ajustar la mayoría de los hiperparámetros.
Los valores óptimos de la mayoría de los hiperparámetros son sensibles al tamaño del lote. Por lo tanto, para cambiar el tamaño del lote, es necesario iniciar el ajuste de nuevo. Los hiperparámetros que interactúan con mayor intensidad con el tamaño del lote y, por lo tanto, es importante ajustarlo por separado para cada tamaño de lote, son los siguientes:
- Los hiperparámetros del optimizador (por ejemplo, la tasa de aprendizaje y el impulso)
- Los hiperparámetros de regularización
Ten esto en cuenta cuando elijas el tamaño del lote al comienzo de un proyecto. Si necesitas cambiar a un tamaño de lote diferente más adelante, es posible que difícil, lento y costoso reajustar los otros hiperparámetros para el nuevo tamaño del lote.
Cómo interactúa la norma del lote con el tamaño del lote
La norma de los lotes es complicada y, en general, se debería usar que el cálculo del gradiente para calcular las estadísticas. Consulta Implementación de la normalización por lotes Details para obtener un análisis detallado.
Elige la configuración inicial
La primera etapa en el ajuste de hiperparámetros es determinar puntos de partida para lo siguiente:
- la configuración del modelo (p.ej., el número de capas)
- los hiperparámetros del optimizador (p.ej., la tasa de aprendizaje)
- la cantidad de pasos de entrenamiento
Determinar esta configuración inicial requiere cierta ejecuciones de entrenamiento configuradas y pruebas y errores.
Nuestro principio básico es el siguiente:
Encuentra un consumo de recursos simple, relativamente rápido y relativamente bajo que obtenga un rendimiento razonable.
Donde:
- Sencillo significa evitar atributos de canalización innecesarios, como solicitudes regularización o trucos de arquitectura. Por ejemplo, una canalización sin abandonos regularización (o con la regularización de retirados inhabilitada) es más simple que regularización de retirados.
- El rendimiento razonable depende del problema, pero, como mínimo, un modelo entrenado razonablemente tiene un rendimiento mucho mejor que una posibilidad en el conjunto de validación.
Elegir una configuración inicial que sea rápida y que consuma un mínimo consumo hace que el ajuste de hiperparámetros sea mucho más eficiente. Por ejemplo, empieza con un modelo más pequeño.
Elegir el número de pasos de entrenamiento implica equilibrar la siguiente tensión:
- Entrenar más pasos puede mejorar el rendimiento y simplificar los hiperparámetros ajustes. (Para obtener más detalles, consulta Shallue et al. 2018).
- Por el contrario, entrenar con menos pasos significa que cada ejecución más rápido y usa menos recursos, lo que mejora la eficiencia del ajuste reduciendo el tiempo entre ciclos y permitirte ejecutar más experimentos en paralelo. Además, si eliges un presupuesto de pasos innecesariamente grande al comienzo de el proyecto, puede ser difícil cambiarlo más adelante en el proyecto; por ejemplo, una vez que hayas ajustado el programa de tasa de aprendizaje para esa cantidad de pasos.