Guía para iniciar un proyecto nuevo

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

Supuestos

En esta sección, se aconseja lo siguiente:

  • Ya formulaste el problema y preparaste tus datos de entrenamiento hasta cierto punto.
  • Ya configuraste una canalización de entrenamiento y pruebas.
  • Ya seleccionaste y, luego, implementaste métricas que sean lo más representativas posible de lo que planeas medir en el entorno implementado.

Si ya cumpliste con todos los requisitos previos, ya estás listo para dedicar tiempo a la arquitectura del modelo y a la configuración del entrenamiento.

Elige la arquitectura del modelo

Comencemos con las siguientes definiciones:

  • Una arquitectura del modelo es un sistema para producir predicciones. Una arquitectura de modelo contiene el framework para convertir los datos de entrada en predicciones, pero no contiene los valores de los parámetros. Por ejemplo, una red neuronal con tres capas ocultas de 10 nodos, 5 nodos y 3 nodos, respectivamente, es una arquitectura de modelo.
  • Un model es una arquitectura del modelo más valores específicos para todos los parámetros. Por ejemplo, un modelo consiste en la red neuronal descrita en la definición de la arquitectura del modelo, además de valores específicos de los pesos y las ordenadas al origen de cada nodo.
  • Una familia de modelos es una plantilla para construir una arquitectura de modelo a partir de un conjunto de hiperparámetros.

Elegir la arquitectura del modelo en realidad significa elegir un conjunto de modelos diferentes (uno para cada configuración de los hiperparámetros del modelo).

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 como punto de partida.

Elige el optimizador

Ningún optimizador es “mejor” en todos los tipos de problemas de aprendizaje automático y arquitecturas de modelos. Incluso solo comparar el rendimiento de los optimizadores es difícil. 📊 Recomendamos usar optimizadores populares y consolidados, en especial, cuando se inicia un proyecto nuevo.

Recomendamos elegir el optimizador más popular para el tipo de problema en el que estás trabajando. Recomendamos los siguientes optimizadores bien establecidos:

Presta atención a todos los argumentos del optimizador elegido. Por lo general, los optimizadores con más hiperparámetros suelen requerir más esfuerzo de ajuste. Esto es particularmente problemático en las etapas iniciales de un proyecto, cuando intentas encontrar los mejores valores de otros hiperparámetros (por ejemplo, la tasa de aprendizaje) mientras tratas los argumentos del optimizador como inconvenientes. Por lo tanto, recomendamos el siguiente enfoque:

  1. Al comienzo del proyecto, elige un optimizador que no tenga muchos hiperparámetros ajustables. A continuación, presentamos dos ejemplos:
    • SGD con impulso fijo.
    • Adam con Epsilon, Beta1 y Beta2 corregidos
  2. En etapas posteriores del proyecto, cambia a un optimizador más general que ajuste más hiperparámetros en lugar de fijarlos en los valores predeterminados.

Elige el tamaño del lote

Resumen: el tamaño del lote determina la velocidad del 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 consumo de recursos de procesamiento. A menudo, aumentar el tamaño del lote disminuye el tiempo de entrenamiento, lo que hace lo siguiente:

  • Te permite ajustar los hiperparámetros de manera más exhaustiva dentro de un intervalo de tiempo fijo, lo que podría producir un modelo final mejor.
  • Reduce la latencia del ciclo de desarrollo, lo que permite probar ideas nuevas con mayor frecuencia.

El aumento del tamaño del lote puede disminuir o aumentar el consumo de los recursos, o no modificar el consumo de los recursos.

No trates el tamaño del lote como un hiperparámetro ajustable para el rendimiento del conjunto de validación. Si se cumplen todas las condiciones siguientes, el rendimiento del modelo no debería depender del 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.

El mismo rendimiento final debería ser alcanzable con cualquier tamaño de lote (consulta Shallue et ál. 2018 y ¿Por qué no se debería ajustar el tamaño del lote para mejorar directamente el rendimiento del conjunto de validación?.

Determina los tamaños de lotes posibles y estima la capacidad de procesamiento del entrenamiento

Para un modelo y optimizador determinados, el hardware disponible generalmente admite un rango de tamaños de lote. Por lo general, el factor limitante es la memoria del acelerador. Por desgracia, puede ser difícil calcular qué tamaños de lotes se adaptarán a la memoria sin ejecutar, o al menos compilar, el programa de entrenamiento completo. Por lo general, la solución más fácil es ejecutar trabajos de entrenamiento en diferentes tamaños de lote (por ejemplo, aumentar potencias de 2) durante una pequeña cantidad de pasos hasta que uno de los trabajos exceda la memoria disponible. Para cada tamaño del lote, realiza el entrenamiento el tiempo suficiente para obtener una estimación confiable de la capacidad de procesamiento del entrenamiento:

capacidad de procesamiento del entrenamiento = cantidad de ejemplos procesados por segundo

o, equivalente, el tiempo por paso:

tiempo por paso = tamaño del lote / capacidad de procesamiento de entrenamiento

Cuando los aceleradores aún no se saturan, si el tamaño del lote se duplica, la capacidad de procesamiento del entrenamiento también se debería duplicar (o al menos casi el doble). De forma 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, la canalización de entrenamiento tiene un cuello de botella, como E/S o sincronización entre nodos de procesamiento. Considera diagnosticar y corregir el cuello de botella antes de continuar.

Si la capacidad de procesamiento del entrenamiento aumenta solo hasta un tamaño de lote máximo, considera únicamente tamaños de lote hasta ese tamaño de lote máximo, incluso si el hardware admite un tamaño de lote más grande. Todos los beneficios de usar un tamaño de lote más grande suponen que la capacidad de procesamiento del entrenamiento aumenta. De lo contrario, corrige el cuello de botella o usa el tamaño del lote más pequeño.

La acumulación de gradientes simula un tamaño de lote mayor que el que admite el hardware y, por lo tanto, no proporciona ningún beneficio de capacidad de procesamiento. Por lo general, debes evitar la acumulación de gradientes en el trabajo aplicado.

Es posible que debas repetir estos pasos cada vez que cambies el modelo o el optimizador. Por ejemplo, una arquitectura de modelo diferente puede permitir que un tamaño de lote más grande quepa en la memoria.

Elegir el tamaño del lote para minimizar el tiempo de entrenamiento

Esta es nuestra definición de 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:

  • Los cómputos paralelos no generan sobrecarga.
  • Se diagnosticaron y corrigieron todos los cuellos de botella de entrenamiento. (Consulta la sección anterior para obtener información sobre cómo identificar cuellos de botella de entrenamiento. En la práctica, por lo general, se genera al menos una sobrecarga por aumentar el tamaño del lote.

A medida que aumenta el tamaño del lote, la cantidad total de pasos necesarios para alcanzar un objetivo de rendimiento fijo suele disminuir, siempre que vuelvas a ajustar todos los hiperparámetros relevantes cuando cambies el tamaño del lote. (Consulta Shallue et ál. 2018). Por ejemplo, duplicar el tamaño del lote podría reducir a la mitad la cantidad total de pasos requeridos. Esta relación se denomina ajuste de escala perfecto y debe contener 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 resultados que disminuyen. Es decir, aumentar el tamaño del lote ya no reduce la cantidad de pasos de entrenamiento, pero nunca la 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 necesarios. Este tamaño del lote depende del conjunto de datos, el modelo y el optimizador, y es un problema abierto cómo calcularlo en lugar de buscarlo de manera experimental para cada problema nuevo. 🤖

Cuando compares los tamaños de los lotes, ten en cuenta la distinción entre los siguientes elementos:

  • Un presupuesto de ejemplo o un presupuesto de época: se ejecutan todos los experimentos mientras se corrige la cantidad de presentaciones de ejemplo de entrenamiento.
  • Un presupuesto de pasos, que ejecuta todos los experimentos con una cantidad fija de pasos de entrenamiento

La comparación de los tamaños de lotes con un presupuesto de ciclo de entrenamiento solo sondea el régimen de escalamiento perfecto, incluso cuando los tamaños de lote más grandes aún pueden proporcionar una aceleración significativa, ya que se reduce la cantidad de pasos de entrenamiento requeridos. A menudo, el mayor tamaño de lote admitido por el hardware disponible es más pequeño que el tamaño del lote crítico. Por lo tanto, una buena regla general (sin ejecutar ningún experimento) es usar el tamaño de lote más grande posible.No tiene sentido usar un tamaño de lote más grande si termina aumentando el tiempo de entrenamiento.

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 hardware nuevo o reescribir la canalización de entrenamiento para implementar el entrenamiento con varias GPU o TPU.
  • Costos de uso. Por ejemplo, la facturación según los presupuestos de recursos del equipo, la facturación de un proveedor de servicios en la nube y 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 haya madurado y es más fácil evaluar la compensación costo-beneficio. La implementación de programas de entrenamiento paralelo de varios hosts puede generar bugs y problemas leves, por lo que probablemente sea mejor comenzar con una canalización más simple de todos modos. Por otro lado, una aceleración grande en el tiempo de entrenamiento puede ser muy beneficiosa al principio del proceso, cuando se necesitan muchos experimentos de ajuste.

Nos referimos al costo de uso total (que puede incluir varios tipos diferentes de costos) como el consumo de recursos, que se calcula 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. El aumento o la disminución del consumo de recursos depende de cómo cambia el consumo por paso, que depende del tamaño del lote de la siguiente manera:

  • Aumentar el tamaño del lote puede disminuir el consumo de recursos. Por ejemplo, si cada paso con el tamaño del lote más grande se puede ejecutar en el mismo hardware que el tamaño del lote más pequeño (con solo un pequeño aumento de tiempo por paso), cualquier aumento en el consumo de recursos por paso podría compensarse con la disminución en la cantidad de pasos.
  • Es posible que aumentar el tamaño del lote no cambie el consumo de recursos. Por ejemplo, si duplicar el tamaño del lote reduce a la mitad la cantidad de pasos requeridos y duplica la cantidad de GPU usadas, el consumo total (en términos de horas de GPU) no cambiará.
  • 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 en la cantidad de pasos.

Para cambiar el tamaño del lote, es necesario 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, cambiar el tamaño del lote generalmente requiere volver a iniciar el proceso de ajuste. Los hiperparámetros que interactúan más con el tamaño del lote y, por lo tanto, más importantes que se deben ajustar por separado para cada tamaño del 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 en cuenta esto cuando elijas el tamaño del lote al comienzo de un proyecto. Si necesitas cambiar a un tamaño del lote diferente más adelante, puede ser difícil, lento y costoso reajustar los otros hiperparámetros para el nuevo tamaño del lote.

Cómo interactúa la norma de lote con el tamaño del lote

La norma por lotes es complicada y, en general, se debe usar un tamaño de lote diferente al del cálculo de gradientes para calcular las estadísticas. Consulta Detalles de implementación de normalización por lotes para obtener un análisis detallado.

Elige la configuración inicial

La primera etapa en el ajuste de hiperparámetros es determinar los 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 algunas ejecuciones de entrenamiento configuradas de forma manual y prueba y error.

Nuestro principio rector es el siguiente:

Encuentra una configuración de consumo de recursos simple, relativamente rápida y con consumo de recursos relativamente bajo que obtenga un rendimiento razonable.

Donde:

  • Simple significa evitar características de canalización innecesarias, como regularizaciones especiales o trucos de arquitectura. Por ejemplo, una canalización sin regularización de retirados (o con regularización de retirados inhabilitada) es más simple que una con regularización de retirados.
  • El rendimiento razonable depende del problema, pero como mínimo, un modelo entrenado razonable funciona mucho mejor que la probabilidad aleatoria en el conjunto de validación.

Elegir una configuración inicial que sea rápida y consuma recursos mínimos hace que el ajuste de hiperparámetros sea mucho más eficiente. Por ejemplo, comienza con un modelo más pequeño.

Elegir la cantidad de pasos de entrenamiento implica equilibrar la tensión siguiente:

  • El entrenamiento para más pasos puede mejorar el rendimiento y simplificar el ajuste de los hiperparámetros. (Para obtener más detalles, consulta Shallue et ál. 2018).
  • Por el contrario, entrenar con menos pasos significa que cada ejecución de entrenamiento es más rápida y usa menos recursos, lo que aumenta la eficiencia del ajuste, ya que se reduce el tiempo entre ciclos y te permite ejecutar más experimentos en paralelo. Además, si eliges un presupuesto de pasos innecesariamente grande al comienzo del proyecto, puede ser difícil cambiarlo más adelante en el proyecto; por ejemplo, una vez que hayas ajustado el programa de la tasa de aprendizaje para esa cantidad de pasos.