Ajuste automático para la implementación de redes neuronales profundas

Ajuste automático de redes neuronales profundas

¿Qué, por qué y lo más importante… cómo?

Foto de S. Tsuchiya en Unsplash

Introducción

Una de las métricas utilizadas para comparar diferentes arquitecturas de Redes Neuronales (NN) es el tiempo que tardan en entrenarse. ¿Toma horas? ¿Días? ¿Semanas? Por lo general, esto se puede mejorar simplemente actualizando el hardware utilizado para entrenarlos. Reemplazar GPUs de menor potencia con otras más potentes, paralelizar el entrenamiento en múltiples GPUs, etc. Algo similar ocurre con el paso de inferencia. ¿Desplegaremos nuestra red entrenada en un dispositivo integrado, como un microcontrolador? ¿O la ejecutaremos en un dispositivo móvil? Tal vez la red sea demasiado grande, y necesitemos una GPU integrada o incluso una GPU de tamaño de servidor para ejecutarla.

Seleccionemos uno de ellos. Tomamos nuestra NN, la compilamos para nuestro dispositivo y probamos qué tan rápido se ejecuta. ¡Oh no! ¡No cumple con nuestros requisitos de latencia! ¡Necesitábamos que la NN se ejecutara más rápido de 1 segundo, y nuestra NN tardó 2 segundos en ejecutarse! ¿Cuáles son las opciones ahora?

  • Reemplazar el dispositivo con uno más potente: Esto puede ser muy problemático, especialmente cuando existen restricciones de aplicación. Tal vez solo se le permita usar hardware específico ya certificado. O tiene restricciones de energía difíciles de cumplir.
  • Reducir la complejidad de la NN: Esto también puede ser difícil porque se puede perder calidad en la métrica de la NN si no se hace con cuidado.
  • Autosintonizar la NN para su hardware particular.

Espera, ¿qué? ¿Qué quieres decir con autosintonizar? Bueno, ese es el tema de este artículo. Quédate conmigo para aprender sobre esta fascinante técnica. En este artículo, intentaré explicar este tema desde un punto de vista de alto nivel. Si te quedas conmigo hasta el final del artículo, encontrarás ejemplos de marcos de software que se pueden utilizar para optimizar tu NN, junto con enlaces a sus tutoriales.

Auto… ¿por qué?

Si leíste mi último artículo, tal vez recuerdes una explicación muy simplista de la arquitectura de computadoras. En ella, hablé sobre dos elementos: unidades de cómputo y unidades de memoria.

Para ejecutar una capa de una NN, los datos deben transferirse a través de la jerarquía de memoria hasta que lleguen a las unidades de cómputo. Luego, las unidades de cómputo ejecutarán…