Teoría de optimización en Deep Learning

Autor: | Última modificación: 18 de abril de 2024 | Tiempo de Lectura: 4 minutos
Temas en este post:

Algunos de nuestros reconocimientos:

Premios KeepCoding

La teoría de optimización en Deep Learning es uno de los conocimientos base para la manipulación de redes profundas en el procesamiento de los macrodatos y por ello, en este post, te explicamos la teoría de optimización en Deep Learning.

Teoría de optimización en Deep Learning

La teoría de optimización en Deep Learning hace referencia a las diferentes formas de utilizar el gradient descent para ganar velocidad. Para ello, vamos a recordar brevemente cómo funciona el descenso de gradiente:

  1. Cálculo del error de todas las muestras del set de training.
  2. Actualizar los pesos en la dirección que indica el gradiente respecto a cada uno de ellos.

Por tanto, necesitamos, para cada época, calcular todas las predicciones (etapa forward), luego los errores y, después, propagar los errores hacia atrás para ver cuánto influye cada peso en ese error y actualizarlo en consecuencia.

Imagina que:

  • Tenemos un dataset de 100.000 muestras.
  • Cada etapa forward tarda 2ms.
  • Cada cálculo del error, 1ms.
  • Cada etapa de backpropagation3ms.

Si hacemos el cálculo, en esta teoría de optimización en Deep Learning tenemos:

Tiempo por época= (2ms+1ms+3ms)·100.000 muestras =600.000ms=600 segundos = 10 minutos

Una red puede requerir cientos, si no miles de épocas, para conseguir una convergencia adecuada. Pongamos que necesitamos 100 épocas, que es un número bajo. ¿Cuánto tardaría en total en entrenarse la red?

Tiempo total de entrenamiento =10 minutos ·100 épocas =1.000 minutos = 16’6 horas.

No parece muy cómodo tener que esperar más de 16 horas para ver los resultados de una red y hemos sido cautos suponiendo que teníamos solo 100.000 muestras.

ImageNet, por ejemplo, consta de 1.2 millones de imágenes, lo que nos costaría 2h por época (es decir, 8.3 días). Esto es más de una semana para ver el comportamiento de una red.

Una forma de reducir drásticamente el tiempo necesario sería utilizar una sola muestra escogida aleatoriamente cada vez que quisiéramos actualizar los pesos. De esta forma, para actualizar los pesos simplemente tendríamos que calcular las predicciones, errores y backpropagation de una muestra. Esto reduciría nuestro tiempo total a:

Tiempo total de entrenamiento =(2ms+1ms+3ms)·1 muestra ·100 épocas =600ms= 0,6s

A este método se le conoce como Stochastic Gradient Descent; sin embargo, este tiene una desventaja muy importante dentro de la teoría de optimización en Deep Learning.

Teoría de optimización en Deep Learning

El camino rojo es el que sigue el gradient descent, que al calcular el gradiente usando todas las muestras del dataset consigue unas actualizaciones coherentes en la dirección que permite minimizar el error.

El camino magenta es el seguido por el SGD. Aquí, cada actualización de los pesos se hace para minimizar el error teniendo en cuenta solo una muestra, así que lo que minimizamos es el error para esa muestra en particular. Por eso, tiene un comportamiento más caótico y le cuesta más converger, aunque, a cambio, se ejecuta mucho más rápido. Es decir, en el tiempo que el GD necesita para ejecutar una época, el SGD puede ejecutar miles.

Como siempre, la virtud se encuentra en el término medio. ¡La línea verde es la buena! ¿Cómo llegamos a ella?

Vamos a pensar qué tenemos hasta ahora:

  • Un método que calcula las predicciones y errores de todos los elementos de nuestro training set: (Vanilla) Gradient Descent.
  • Un método que calcula las predicciones y errores de 1 elemento escogido aleatoriamente de nuestro training set: Stochastic Gradient Descent.

¿Qué tal si, en vez de 1 solo elemento, escogiésemos N elementos? De esta forma:

  • Aumentamos la estabilidad del algoritmo, ya que no solo nos fijamos en un solo elemento, sino en k (es decir, disminuimos los cambios de dirección tan abruptos y caóticos que tiene la línea magenta).
  • Disminuimos el tiempo de ejecución con respecto al gradient descent tradicional, pues pasamos de las N muestras que tiene nuestro training set a k, donde k<<N.

Este método dentro de la teoría de optimización en Deep Learning se conoce como Mini-batch Stochastic Gradient Descent y es realmente el que se utiliza en la práctica.

Normalmente, k se elige para que sea una potencia de 2, ya que eso permite aprovechar algunas optimizaciones que tienen las GPUs implementadas para estos casos. Un k típico podría ser k=32, pero al final esto lo limita la memoria de la GPU.

  • Cuanto más bajo sea k, más se parecerá al SGD puro y también más épocas le costará converger, aunque es cierto que las calculará más rápido.
  • Cuanto más alto sea k, más se parecerá al GD puro y más le costará calcular cada época, pero necesitará menos para converger.

Con esto, ya sabes lo más relevante sobre la teoría de optimización en Deep Learning.

Conoce más sobre el manejo del Big Data

En este post, te hemos expuesto cómo funciona la teoría de optimización en Deep Learning, sin embargo, ¡todavía queda más por aprender!

Gracias a nuestro Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning, podrás conseguir convertirte en un experto en menos de 9 meses. Aquí aprenderás, entre muchas otras cosas, a profundizar en el análisis de los datos mediante el reporting, familiarizar a los no desarrolladores con un ecosistema de desarrollo y aprender a extraer el conocimiento a través de grandes volúmenes de datos. ¡Apúntate ya!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado