Introducción al Deep Learning II: Métodos de optimización I

Share on facebook
Share on twitter
Share on linkedin

Esta es la segunda entrega de este artículo sobre el deep learning. Puedes leer la primera parte aquí

Los modelos de aprendizaje profundo o deep learning se caracterizan por la capacidad de mejorar su desempeño cuando la cantidad de información disponible para realizar el entrenamiento aumenta. Esta característica permite un desempeño sobresaliente incluso en tareas complejas en las que algoritmos tradicionales no logran generalizar de manera adecuada la tarea que están resolviendo.

Lo anterior se deriva en que uno de los elementos fundamentales para realizar aprendizaje profundo son los datos. Sin embargo, procesar cantidades masivas de datos implica un uso intensivo de recursos computacionales y la necesidad de optimizar el algoritmo para converger de una forma rápida y estable.

Estimación del Gradiente

Las redes neuronales profundas se optimizan mediante técnicas numéricas basada en gradiente, las cuales, utilizan la geometría de la función de pérdida para acercarse al mínimo global. El mecanismo principal para conocer la dirección y magnitud de la actualización de los parámetros de la red neuronal es la propagación hacia atrás, en la cual se toma el gradiente de los parámetros con respecto a la función de pérdida y se actualizan con una porción de ese gradiente. Esto mueve las hipótesis generadas por la red neuronal hacia el mínimo global.

Para optimizar el cálculo del gradiente y ofrecer actualizaciones constantes de los parámetros de la red neuronal se han utilizado diferentes técnicas.

Batch Gradient Descent

El descenso de gradiente por lotes es una técnica clásica para la optimización de redes neuronales. En esta técnica el gradiente de la función de costo se calcula utilizando los errores de todos los ejemplos de entrenamiento, lo cual permite tener el gradiente real de nuestra hipótesis (parámetros de la red neuronal), con respecto a los datos de entrenamiento.

Cuando utilizamos todo el lote de datos para obtener el gradiente sabemos que tenemos el valor real del gradiente para mover los parámetros de la red neuronal. Sin embargo, debido a que el descenso de gradiente por lote necesita analizar todos los ejemplos de entrenamiento antes de hacer una actualización de parámetros, cuando lidiamos con cantidades masivas de datos le tomará demasiado tiempo a la red neuronal actualizar sus parámetros y por tanto tardará más en acercarse al mínimo de la función de costo.

Stochastic Gradient Descent

Para actualizar los parámetros sin necesidad de recorrer el dataset de entrenamiento entero, se ha utilizado la técnica de descenso de gradiente estocástico, la cual consiste en actualizar los parámetros tomando como estimación del gradiente global, el gradiente de cada ejemplo. Lo anterior ocasiona que podamos actualizar el gradiente cada vez que procesamos un ejemplo de entrenamiento.

El descenso estocástico de gradiente converge hacia el mínimo global más rápido que el descenso de gradiente por lotes. Sin embargo, el gradiente es a menudo más “ruidoso” debido al sesgo que pueden tener los diferentes datos, en comparación a la base de datos de entrenamiento entera. Cuando los datos de entrenamiento son muy “ruidosos” se corre el peligro de que la red neuronal no converja en absoluto.

Otra desventaja es que al procesar un ejemplo a la vez se pierde capacidad de paralelizar las operaciones en un conjunto de datos. Por ello, para conjuntos de datos extremadamente grandes, puede resultar lento para converger, o inestable al momento de optimizar.

Mini Batch Gradient Descent

Para resolver los problemas de las técnicas de descenso de gradiente por lotes y estocástico manteniendo una velocidad de procesamiento y convergencia que permita a la red neuronal lidiar con conjuntos masivos de información, se ha propuesto la técnica de descenso de gradiente en mini lotes, la cual es una generalización del descenso de gradiente por lotes y el estocástico.

En esta técnica se utilizan lotes de tamaño k, con más de un ejemplo de entrenamiento, pero menos ejemplos que el dataset completo. De esta manera pueden realizarse las actualizaciones de los parámetros sin necesidad de analizar cada uno de los ejemplos de entrenamiento, pero al mismo tiempo se mejora la estimación del gradiente al utilizar más datos, cancelando los efectos negativos que se producen en el descenso de gradiente estocástico debido a los datos ruidosos. Esta es la técnica más empleada para el entrenamiento de sistemas de redes neuronales.

Noten que cuando k=1 tenemos el caso del descenso estocástico de gradiente y cuando k=m (donde m es el número de ejemplos de entrenamiento), se tiene el caso del descenso de gradiente por lotes.

El tamaño de k, se escoge generalmente en unidades múltiplos de 2, que puedan ser procesados en paralelo por el GPU, permitiendo mayor velocidad de procesamiento. Es usual escoger como valores de k=32, 64, 128 y 256 según la capacidad de la GPU en la que se lleva a cabo el entrenamiento de la red neuronal.

Algunos Frameworks de deep learning como Tensorflow permiten la configuración del dataset para su consumo en lotes. En este caso, un lote se aloja en el GPU, mientras el siguiente se carga de disco y se prepara para su análisis. Lo anterior aumenta considerablemente el rendimiento del entrenamiento.

Función de pérdida y learning rate

La porción del gradiente que se utiliza para actualizar los parámetros es un hiperparámetro escalar conocido como learning rate, denotado a menudo con la letra griega alfa y es uno de los valores más críticos para optimizar el rendimiento de la red neuronal.

Si el learning rate es demasiado grande las actualizaciones serán grandes y la red neuronal dará saltos abruptos alrededor del mínimo global que en ocasiones pueden ocasionar que el algoritmo no converja en lo absoluto. Si el learning rate es demasiado pequeño, las actualizaciones serán muy lentas ocasionando desperdicio de los recursos de cómputo y aumentando el tiempo de entrenamiento necesario para optimizar los parámetros de la red neuronal.

A menudo se utilizan estrategias de grid search para explorar diferentes valores de learning rate buscando aquellos que funcionen mejor para la función de pérdida de la red neuronal. Sin embargo, cuando la función de pérdida es compleja y posee una forma particularmente difícil, resultaría útil modificar el learning rate de manera que sea grande cuando estamos “aprendiendo rápido” y pequeño cuando el “aprendizaje es más lento”. Esto ha ocasionado que los investigadores diseñen técnicas que incluyen learning rates adaptativos, capaces de modificarse de acuerdo al ritmo de aprendizaje de la red neuronal, mejorando su tiempo de convergencia. Algunas de las técnicas más utilizadas son las estrategias de decaimiento de pesos, las cuales vamos a revisar en el próximo artículo de la serie.

Decaimiento de pesos ponderado

Una de las estrategias principales detrás de generar un learning rate adaptativo, es generar una buena estimación del gradiente cuando utilizamos técnicas de procesamiento por mini lotes. Cuando empleamos técnicas de optimización que no utilizan todos los ejemplos en el conjunto de datos de entrenamiento, nuestra estimación del gradiante será mejor o peor dependiendo de que tan ruidosos sean los datos en el lote que estamos procesando.

Si queremos una mejor estimación del gradiente real de los datos una alternativa es almacenar los últimos gradientes y de esta forma hacer un promedio de esos valores para tener una mejor estimación. Sin embargo, a medida que el conjunto de datos crece y el tamaño de los lotes es mayor, no resulta práctico almacenar en la memoria los valores previos. En lugar de eso puede utilizarse la ecuación de decaimiento de pesos para suavizar la forma del gradiente y ayudar a la velocidad de convergencia de la red neuronal.

La forma general para la ecuación de decaimiento de pesos se ilustra en la figura 1. En donde se utiliza un parámetro beta para controlar el aporte de los valores anteriores junto con el valor actual para reducir el ruido en las estimaciones.

deep learning 1
Fig 1. Ecuación de decaimiento de pesos

El prámetro beta indica el grado de suavizado que aplicaremos en nuestras estimaciones. Mientras beta se acerque más a 1, el suavizado será menor y a medida que se acerque a 0 el suavizado será mayor. En la figura 2 se puede apreciar el efecto de parámetro beta en los datos de la temperatura anual de la ciudad de Madrid en el año de 1995. Puedes encontrar el código completo aquí.

deep learning 2
Fig 2. Efectos del parámetro beta en el suavizado

Conclusiones

Las técnicas de optimización para el descenso de gradiente cobran particular importancia a medida que las redes neuronales profundas utilizan más información y utilizar la totalidad de los datos para obtener el gradiente resulta impráctico. De esta manera se han propuesto distintas técnicas de procesamietno por lote, gradiente estocástico y mini lote.

Así mismo la definición del learning rate es una decisión importante al entrenar la red neuronal. Estrategias que permitan adaptar el learning rate de acuerdo a la forma de la función de pérdida y la cantidad de aprendizaje que se genera en cada uno de los lotes que se procesan. Dado que no es computacionalmente eficiente guardar los promedios de los gradientes calculados con anterioridad se han propuesto estrategias de decaimiento de pesos ponderadas que almacenen la información anterior, permitiendo así suavizar el cómputo del gradiente en datos ruidosos. En el próximo artículo veremos algunas de las técncias de optimización específicas que utilizan estrategias derivadas del decaimiento de pesos ponderado.

Share on facebook
Share on twitter
Share on linkedin

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*

*

¡Conozcámonos mejor!

Súmate a nuestra newsletter donde además de ofertas exclusivas y novedades de SoldAI estaremos envíandote noticias y tendencias del mundo de la tecnología e Inteligencia Artificial.

¡Entérate de todo!