Connect with us

IA 101

¿Qué es el Gradiente Descendente?

mm

¿Qué es el Gradiente Descendente?

Si ha leído sobre cómo se entrenan las redes neuronales, casi con certeza ha encontrado el término “gradiente descendente” antes. El gradiente descendente es el método principal para optimizar el rendimiento de una red neuronal, reduciendo la tasa de error/pérdida de la red. Sin embargo, el gradiente descendente puede ser un poco difícil de entender para aquellos que son nuevos en el aprendizaje automático, y este artículo intentará darle una intuición decente de cómo opera el gradiente descendente.

El gradiente descendente es un algoritmo de optimización. Se utiliza para mejorar el rendimiento de una red neuronal realizando ajustes a los parámetros de la red de tal manera que la diferencia entre las predicciones de la red y los valores reales/esperados de la red (denominados pérdida) sea lo más pequeña posible. El gradiente descendente toma los valores iniciales de los parámetros y utiliza operaciones basadas en cálculo para ajustar sus valores hacia los valores que harán que la red sea lo más precisa posible. No necesitas saber mucho cálculo para entender cómo funciona el gradiente descendente, pero debes tener una comprensión de los gradientes.

¿Qué son los Gradientes?

Supongamos que hay un gráfico que representa la cantidad de error que comete una red neuronal. La parte inferior del gráfico representa los puntos de menor error, mientras que la parte superior del gráfico es donde el error es el más alto. Queremos movernos desde la parte superior del gráfico hacia abajo. Un gradiente es solo una forma de cuantificar la relación entre el error y los pesos de la red neuronal. La relación entre estas dos cosas puede ser graficada como una pendiente, con pesos incorrectos que producen más error. La inclinación de la pendiente/gradiante representa lo rápido que el modelo está aprendiendo.

Una pendiente más pronunciada significa que se están produciendo grandes reducciones en el error y el modelo está aprendiendo rápido, mientras que si la pendiente es cero, el modelo está en un plano y no está aprendiendo. Podemos movernos hacia abajo por la pendiente hacia menos error calculando un gradiente, una dirección de movimiento (cambio en los parámetros de la red) para nuestro modelo.

Cambiemos ligeramente la metáfora e imaginemos una serie de colinas y valles. Queremos llegar al fondo de la colina y encontrar la parte del valle que representa la pérdida más baja. Cuando comenzamos en la parte superior de la colina, podemos dar pasos grandes hacia abajo y estar seguros de que nos dirigimos hacia el punto más bajo del valle.

Sin embargo, a medida que nos acercamos al punto de menor pérdida, nuestros pasos deben ser más pequeños, o de lo contrario podríamos pasar el punto de menor pérdida real y terminar en el otro lado. De manera similar, es posible que cuando se ajustan los pesos de la red, los ajustes puedan alejar la red del punto de menor pérdida, y por lo tanto los ajustes deben ser más pequeños con el tiempo. En el contexto de descender una colina hacia un punto de menor pérdida, el gradiente es un vector/instrucciones que detallan el camino que debemos tomar y cuán grandes deben ser nuestros pasos.

Ahora que sabemos que los gradientes son instrucciones que nos dicen en qué dirección movernos (qué coeficientes deben actualizarse) y cuán grandes deben ser nuestros pasos (cuánto deben actualizarse los coeficientes), podemos explorar cómo se calcula el gradiente.

Calculando Gradientes y Gradiente Descendente

El gradiente descendente comienza en un lugar de alta pérdida y, a través de múltiples iteraciones, da pasos en la dirección de menor pérdida, con el objetivo de encontrar la configuración óptima de pesos. Foto: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Para llevar a cabo el gradiente descendente, primero se deben calcular los gradientes. Para calcular el gradiente, necesitamos conocer la función de pérdida/costo. Usaremos la función de costo para determinar la derivada. En cálculo, la derivada se refiere simplemente a la pendiente de una función en un punto determinado, así que básicamente estamos calculando la pendiente de la colina en función de la función de pérdida. Determinamos la pérdida ejecutando los coeficientes a través de la función de pérdida. Si representamos la función de pérdida como “f”, entonces podemos establecer que la ecuación para calcular la pérdida es la siguiente (estamos ejecutando los coeficientes a través de nuestra función de costo elegida):

Pérdida = f(coeficiente)

Luego calculamos la derivada, o determinamos la pendiente. Obtener la derivada de la pérdida nos dirá en qué dirección es hacia arriba o hacia abajo de la pendiente, dándonos el signo apropiado para ajustar nuestros coeficientes. Representaremos la dirección apropiada como “delta”.

delta = función_derivada(pérdida)

Ahora hemos determinado en qué dirección está hacia abajo, hacia el punto de menor pérdida. Esto significa que podemos actualizar los coeficientes en los parámetros de la red neuronal y, con suerte, reducir la pérdida. Actualizaremos los coeficientes en función de los coeficientes anteriores menos el cambio apropiado en valor, según la dirección (delta) y un argumento que controla la magnitud del cambio (el tamaño de nuestro paso). El argumento que controla el tamaño de la actualización se llama “tasa de aprendizaje” y lo representaremos como “alfa”.

coeficiente = coeficiente – (alfa * delta)

Luego simplemente repetimos este proceso hasta que la red haya convergido alrededor del punto de menor pérdida, que debería estar cerca de cero.

Es muy importante elegir el valor correcto para la tasa de aprendizaje (alfa). La tasa de aprendizaje elegida debe ser ni demasiado pequeña ni demasiado grande. Recuerde que a medida que nos acercamos al punto de menor pérdida, nuestros pasos deben ser más pequeños, o de lo contrario podríamos pasar el punto de menor pérdida real y terminar en el otro lado. El punto de menor pérdida es pequeño y si nuestra tasa de cambio es demasiado grande, el error puede aumentar nuevamente. Si los tamaños de los pasos son demasiado grandes, el rendimiento de la red seguirá saltando alrededor del punto de menor pérdida, pasándolo por un lado y luego por el otro. Si esto sucede, la red nunca convergerá en la configuración óptima de pesos.

Por el contrario, si la tasa de aprendizaje es demasiado pequeña, la red puede tardar mucho tiempo en converger en los pesos óptimos.

Tipos de Gradiente Descendente

Ahora que entendemos cómo funciona el gradiente descendente en general, veamos algunos de los diferentes tipos de gradiente descendente.

Bloguero y programador con especialidades en Machine Learning y Deep Learning temas. Daniel espera ayudar a otros a utilizar el poder de la IA para el bien social.