AI 101
¿Qué es el descenso de gradiente?
¿Qué es un descenso de gradiente?
Si ha leído sobre cómo se entrenan las redes neuronales, es casi seguro que se habrá encontrado antes con el término "descenso de gradiente". Descenso de gradiente es el método principal para optimizar el rendimiento de una red neuronal, reduciendo la tasa de pérdida/error de la red. Sin embargo, el descenso de gradientes puede ser un poco difícil de entender para aquellos nuevos en el aprendizaje automático, y este artículo se esforzará por brindarle una intuición decente sobre cómo funciona el descenso de gradientes.
El descenso de gradiente es un algoritmo de optimización. Se utiliza para mejorar el rendimiento de una red neuronal al realizar ajustes en los parámetros de la red de modo 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 descenso de gradiente toma los valores iniciales de los parámetros y usa 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 necesita saber mucho de cálculo para comprender cómo funciona el descenso de gradientes, pero sí debe comprender los gradientes.
¿Qué son los degradados?
Suponga 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 mayor. Queremos movernos desde la parte superior del gráfico hasta la parte inferior. 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. se puede graficar como una pendiente, con pesos incorrectos produciendo más error. La inclinación de la pendiente/gradiente representa qué tan rápido está aprendiendo el modelo.
Una pendiente más pronunciada significa que se están logrando grandes reducciones en el error y que el modelo está aprendiendo rápidamente, mientras que si la pendiente es cero, el modelo está estancado y no está aprendiendo. Podemos movernos cuesta abajo hacia menos error calculando un gradiente, una dirección de movimiento (cambio en los parámetros de la red) para nuestro modelo.
Cambiemos un poco la metáfora e imaginemos una serie de colinas y valles. Queremos llegar al pie de la colina y encontrar la parte del valle que representa la menor pérdida. Cuando comenzamos en la cima de la colina, podemos dar grandes pasos cuesta 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 más bajo del valle, nuestros pasos deberán volverse más pequeños, o de lo contrario podríamos sobrepasar el verdadero punto más bajo. De manera similar, es posible que al ajustar los pesos de la red, los ajustes puedan alejarla más del punto de pérdida más baja y, por lo tanto, los ajustes deben reducirse con el tiempo. En el contexto de descender una colina hacia un punto de menor pérdida, la pendiente es un vector/instrucciones que detallan el camino que debemos tomar y qué tan grandes deben ser nuestros pasos.
Ahora que sabemos que los gradientes son instrucciones que nos dicen en qué dirección movernos (qué coeficientes se deben actualizar) y qué tan grandes son los pasos que debemos dar (cuánto se deben actualizar los coeficientes), podemos explorar cómo se calcula el gradiente.
Cálculo de gradientes y descenso de gradiente

El descenso de gradiente comienza en un lugar de gran 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 de peso óptima. Foto: Роман Сузи a través de Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Para realizar el descenso de gradientes, primero se deben calcular los gradientes. En orden para calcular el gradienteNecesitamos 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 a la pendiente de una función en un punto dado, por lo que básicamente calculamos la pendiente de la colina con base en la función de pérdida. Determinamos la pérdida aplicando los coeficientes a la función de pérdida. Si representamos la función de pérdida como "f", podemos afirmar que la ecuación para calcular la pérdida es la siguiente (simplemente aplicamos los coeficientes a la 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á 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 qué dirección es cuesta 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 de valor apropiado determinado por 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 pérdida más baja, 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 no 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 hacerse más pequeños o, de lo contrario, sobrepasaremos el verdadero punto de menor pérdida y terminaremos 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 acabar aumentando de nuevo. Si los tamaños de paso son demasiado grandes, el rendimiento de la red continuará rebotando alrededor del punto de pérdida más baja, superándolo en un lado y luego en el otro. Si esto sucede, la red nunca convergerá en la verdadera configuración de peso óptima.
Por el contrario, si la tasa de aprendizaje es demasiado pequeña, la red puede tardar potencialmente un tiempo extraordinariamente largo en converger en los pesos óptimos.
Tipos de descenso de gradiente
Ahora que entendemos cómo funciona el descenso de gradiente en general, echemos un vistazo a algunos de los diferentes tipos de descenso de gradiente.
Descenso de gradiente por lotes: esta forma de descenso de gradiente se ejecuta a través de todas las muestras de entrenamiento antes de actualizar los coeficientes. Es probable que este tipo de descenso de gradiente sea la forma de descenso de gradiente más eficiente desde el punto de vista computacional, ya que los pesos solo se actualizan una vez que se ha procesado todo el lote, lo que significa que hay menos actualizaciones en total. Sin embargo, si el conjunto de datos contiene una gran cantidad de ejemplos de entrenamiento, el descenso de gradiente por lotes puede hacer que el entrenamiento tarde mucho tiempo.
Descenso de gradiente estocástico: En Descenso de gradiente estocástico, solo se procesa un único ejemplo de entrenamiento para cada iteración de descenso de gradiente y actualización de parámetros. Esto ocurre para cada ejemplo de entrenamiento. Debido a que solo se procesa un ejemplo de entrenamiento antes de que se actualicen los parámetros, tiende a converger más rápido que el Descenso de gradiente por lotes, ya que las actualizaciones se realizan antes. Sin embargo, debido a que el proceso debe llevarse a cabo en cada elemento del conjunto de entrenamiento, puede llevar mucho tiempo completarlo si el conjunto de datos es grande, por lo que se debe usar uno de los otros tipos de descenso de gradiente si se prefiere.
Descenso de gradiente de mini lotes: el descenso de gradiente de mini lotes funciona dividiendo todo el conjunto de datos de entrenamiento en subsecciones. Crea minilotes más pequeños que se ejecutan a través de la red, y cuando el minilote se ha utilizado para calcular el error, los coeficientes se actualizan. El descenso de gradiente de mini lotes se encuentra en un término medio entre el descenso de gradiente estocástico y el descenso de gradiente por lotes. El modelo se actualiza con más frecuencia que en el caso de Batch Gradient Descent, lo que significa una convergencia un poco más rápida y sólida en los parámetros óptimos del modelo. También es más eficiente desde el punto de vista computacional que el descenso de gradiente estocástico.










