El descenso de gradiente estocástico (SGD) es un algoritmo de optimización comúnmente utilizado para mejorar el rendimiento de los modelos de machine learning. Es una variante del algoritmo tradicional de descenso de gradiente, con una modificación clave: en lugar de depender de todo el conjunto de datos para calcular el gradiente en cada paso, SGD emplea una sola muestra de datos a la vez.
El descenso de gradiente (GD) es un algoritmo de optimización que minimiza iterativamente una función objetivo. En el contexto del machine learning (ML), el descenso de gradiente es fundamental para mejorar el rendimiento de los modelos de aprendizaje supervisado durante su fase de entrenamiento. Los modelos de machine learning, como las redes neuronales, son complejos, no lineales y de alta dimensión. Por lo tanto, no existe una ecuación normal para tales modelos que pueda calcular la ponderaciones óptimas, a diferencia de la regresión lineal. En su lugar, se pueden utilizar métodos de aproximación como las variantes de descenso de gradiente, los métodos de Newton y la maximización de expectativas, entre otros.
Cada modelo tiene una función de pérdida, a veces llamada función de costo. Esta función mide qué tan lejos están las predicciones de un modelo de los puntos de datos reales. Piense en esto como una medida de cuán "equivocadas" son las predicciones del modelo. Por ejemplo, el error cuadrático medio a menudo sirve como función de pérdida en problemas de regresión. La fase de entrenamiento del modelo está diseñada para encontrar los valores de los parámetros que minimizan esta pérdida. El descenso de gradiente suele ser la técnica de optimización utilizada en el entrenamiento por este motivo. El algoritmo calcula el gradiente, o la pendiente, de la pérdida con respecto a los parámetros del modelo. Con este gradiente, da un paso en la dirección opuesta para reducir la pérdida. La tasa de aprendizaje (también conocida como tamaño de paso o alfa) es el tamaño de los pasos y permanece fija para todos los parámetros del modelo. Este proceso se repite hasta que el modelo logra una convergencia cercana a un mínimo.
Lo ideal es que la convergencia se produzca en el mínimo global. En la siguiente visualización, puede ver que el valor de pérdida es menor en un mínimo local que en su área circundante inmediata, pero no necesariamente el valor más bajo en general. El mínimo global es el valor absoluto más bajo de la función de pérdida en todo su dominio, lo que representa la mejor solución posible para el problema.
Si la tasa de aprendizaje no es lo suficientemente pequeña, el algoritmo a menudo convergerá en un mínimo local. Una tasa bien elegida es esencial para minimizar la función de pérdida y lograr la convergencia en un mínimo global.
Esta visualización representa el efecto de la tasa de aprendizaje en la convergencia. Una tasa de aprendizaje pequeña conduce a una convergencia lenta, pero estable (izquierda), mientras que una tasa de aprendizaje grande puede causar exceso e inestabilidad (derecha).
El diferenciador clave entre el descenso de gradiente tradicional y el descenso de gradiente estocástico es que SGD actualiza las ponderaciones del modelo utilizando un solo ejemplo de entrenamiento a la vez. El ejemplo se elige aleatoriamente en cada iteración.1 El descenso de gradiente utiliza todo el conjunto de datos de entrenamiento para calcular el gradiente antes de cada actualización de parámetros. Esta diferencia en el uso de datos es lo que hace que SGD sea mucho menos costoso computacionalmente y más fácil de escalar para grandes conjuntos de datos. Alternativamente, el comportamiento de convergencia de SGD es más ruidoso que el ruido de GD porque el punto de datos de ejemplo podría no ser una buena representación del conjunto de datos. Esta tergiversación actualiza los puntos en una dirección ligeramente "incorrecta". Sin embargo, esta aleatoriedad es lo que hace que SGD sea más rápido y, a veces, mejor para problemas de optimización no convexa porque puede escapar de mínimos locales poco profundos o puntos de silla.
Estrictamente hablando, SGD se definió originalmente para actualizar los parámetros utilizando exactamente una muestra de entrenamiento a la vez. En el uso moderno, el término "SGD" se utiliza vagamente para referirse a "descenso de gradiente de minilotes", una variante de GD en la que se utilizan pequeños lotes de datos de entrenamiento a la vez. La principal ventaja de usar subconjuntos de datos en lugar de una muestra singular es un nivel de ruido más bajo, porque el gradiente es igual al promedio de pérdidas del minilote. Por esta razón, el descenso de gradiente de minilotes es el valor predeterminado en el aprendizaje profundo. Por el contrario, el SGD estricto rara vez se utiliza en la práctica. Estos términos incluso se combinan en la mayoría de las bibliotecas de machine learning como PyTorch y TensorFlow; los optimizadores a menudo se denominan "SGD", aunque suelen utilizar minilotes.
La siguiente ilustración proporciona una descripción más clara de cómo aumentar el tamaño de la muestra de los datos de entrenamiento reduce las oscilaciones y el "ruido".
Hay varias otras variantes de GD que se basan en el descenso de gradiente básico al agregar mecanismos para mejorar la velocidad, la estabilidad y la convergencia.
Al acumular impulso en dimensiones con gradientes constantes y amortiguar las actualizaciones en dimensiones con gradientes cambiantes, el impulso ayuda a SGD a converger más rápido y con menos oscilación.2
Los métodos de tasa de aprendizaje adaptativo, como AdaGrad y RMSProp, son únicos en el sentido de que adaptan la tasa de aprendizaje para cada parámetro individualmente. Este enfoque contrasta con los métodos SGD, que utilizan una tasa de aprendizaje fija para todos los parámetros.
AdaGrad (algoritmo de gradiente adaptativo): adapta la tasa de aprendizaje para cada parámetro en función de sus gradientes anteriores. Las características que aparecen con menos frecuencia reciben tasas de aprendizaje más altas, y las características frecuentes reciben tasas más bajas. Este enfoque significa que las características poco frecuentes se aprenden más rápido que con SGD. Esta tasa de aprendizaje adaptativo significa que es un gran método para el procesamiento de lenguaje natural (PLN) y los sistemas de recomendación con datos dispersos, en los que hay una gran discrepancia en la frecuencia de las características.2
RMSProp (propagación de la raíz cuadrada media): otra técnica de optimización de la tasa de aprendizaje adaptativa que escala la tasa de aprendizaje para cada parámetro mediante el uso de un promedio móvil de gradientes cuadrados recientes. El conocimiento del gradiente pasado se descarta y solo se conserva el conocimiento del gradiente actual.4 La tasa de aprendizaje se vuelve mayor para parámetros con gradientes pequeños y menor para aquellos con gradientes grandes. Este método elimina el problema de la tasa de aprendizaje decreciente con AdaGrad. RMSProp ayuda a mantener estable el entrenamiento en aprendizaje profundo, especialmente para modelos como redes neuronales recurrentes, y funciona bien en problemas donde el objetivo sigue cambiando, como en el aprendizaje por refuerzo.
SGD y otras variantes de GD son útiles cuando el tiempo de entrenamiento es el cuello de botella.5
| Variante | Datos utilizados por paso | Características clave | Uso común |
|---|---|---|---|
| GD | Todos los datos | Estable, pero lento | Pequeños conjuntos de datos |
| SGD | 1 muestra para SGD clásico | Ruidoso, pero rápido | Aprendizaje en línea |
| GD de minilote | Pocas muestras | Equilibrado y escalable | Aprendizaje profundo |
| Momentum | Lote/minilote | Acelera en la dirección correcta | Redes neuronales |
| NAG | Lote/minilote | Impulso de anticipación | Convergencia más rápida |
| AdaGrad | Minilote | Tasa de aprendizaje adaptativo | Datos dispersos |
| RMSProp | Minilote | Arreglos del deterioro de AdaGrad | RNN, redes profundas |
| Adam | Minilote | Impulso + RMSProp | Opción predeterminada hoy |
El objetivo de SGD es encontrar parámetros que hacen que las predicciones de nuestro modelo sean lo más cercanas posible a los valores verdaderos . En otras palabras, queremos minimizar la función de pérdida. .
En el caso de la regresión lineal, esos parámetros son (ponderación) y (sesgo). En este caso, minimizar es lo mismo que minimizar .
Una analogía comúnmente utilizada cuando se enseña el descenso de gradiente es que GD es como caminar cuesta abajo en una montaña hasta llegar a un valle (la pérdida mínima). Imagine el gradiente de la función de pérdida, , apunta cuesta arriba y para ir cuesta abajo, debemos dar un paso en la dirección opuesta.
La regla de actualización general para un parámetro es:
dónde es la tasa de aprendizaje y es el gradiente de la pérdida con respecto a .
SGD utiliza solo una muestra elegida al azar para aproximar el gradiente:
Observe que la minúscula representa la pérdida de un solo ejemplo de entrenamiento. Mientras que la mayúscula es la función de pérdida general (el promedio de todas las pérdidas individuales en el conjunto de datos). Este error global es lo que realmente estamos tratando de minimizar en el entrenamiento.
Terminemos con el ejemplo de regresión lineal con SGD.
Para una muestra , la predicción es:
La pérdida local es el error cuadrático para una muestra:
Ahora, durante la retropropagación, los parámetros del modelo se actualizan mediante la regla de cadena que calcula los gradientes de la función de pérdida con respecto a cada parámetro.5 Los gradientes (derivados) son:
Con SGD, actualizamos cada uno de estos parámetros, y , mediante las siguientes reglas:
En lugar de calcular un gradiente promedio pesado en todo el conjunto de datos, SGD utiliza una estimación aleatoria ligera.
Cuando se trabaja con infraestructuras de machine learning, hay clases de optimizador SGD integradas que se pueden usar. Por ejemplo,
Con fines de aprendizaje, veamos una implementación simple de SGD en Python desde cero.
Para reiterar, nuestro objetivo es encontrar los mejores parámetros (ponderaciones del modelo) que minimicen la función de pérdida (una medida de cuán equivocadas son nuestras predicciones). Actualizaremos una muestra a la vez o un tamaño de lote muy pequeño.
Para empezar, podemos inicializar los valores de los parámetros (parámetros) de forma aleatoria. A continuación, podemos seleccionar un punto de datos aleatorio . A partir de ahí, calculamos la predicción y el error. Para esta sencilla demostración, intentemos ajustar una línea simple: . El siguiente paso en el proceso es la retropropagación, en la que se calculan los gradientes de la función de pérdida con respecto a los parámetros. Estos gradientes (derivados) se utilizan para actualizar los parámetros durante el proceso de optimización de SGD. Debido a que el gradiente apunta a la dirección de aumento de la función de pérdida, SGD resta cada gradiente de su respectivo valor de parámetro actual. Podemos pensar en esto como moverse en la dirección opuesta al gradiente para disminuir la función de pérdida. Por lo tanto, el "descenso" en el descenso de gradiente estocástico. Repetimos estos pasos hasta un número fijo de épocas o una vez que la pérdida sea menor que la tolerancia. Esto último significaría que la pérdida apenas está cambiando y ya no estamos mejorando la función objetivo. En otras palabras, nos detenemos una vez que el algoritmo converge.
SGD es el método de optimización más común para entrenar redes neurales. En el aprendizaje profundo, un subconjunto de machine learning dentro del campo más amplio de la ciencia de datos, el objetivo es que las computadoras simulen el complejo poder de toma de decisiones del cerebro humano. Los modelos tradicionales de ML utilizan redes neuronales simples que constan de una o dos capas. Mientras que los modelos de aprendizaje profundo utilizan tres o más capas. Por lo general, se necesitan cientos o miles de capas para entrenar los modelos. Dada la facilidad de SGD para escalar para grandes conjuntos de entrenamiento, a menudo es el enfoque de referencia para entrenar redes neuronales profundas. Otras aplicaciones del entrenamiento SGD incluyen la regresión de cresta,la regresión logística regularizada y la optimización de la función de pérdida hinge utilizada en máquinas de vectores de soporte (SVM) con un kernel lineal.
SGD es una variante de GD que minimiza la función de pérdida de un modelo de machine learning por el uso de una sola muestra de datos a la vez. Este enfoque es diferente a GD, que depende de todo el conjunto de datos en cada paso para calcular el gradiente. Hay varias otras variantes de GD que se pueden agrupar como métodos de aprendizaje basados en el impulso o adaptativos. El descenso de gradiente de impulso y el gradiente acelerado de Nesterov son ejemplos de lo primero. Estos métodos aprovechan el impulso acumulado en dimensiones con gradientes constantes y amortiguan las actualizaciones en dimensiones con gradientes cambiantes. Por lo tanto, ayudan a SGD a converger más rápido y con menos oscilación. Los métodos de tasa de aprendizaje adaptativo, como AdaGrad y RMSProp, adaptan la tasa de aprendizaje para cada parámetro individualmente, a diferencia del SGD tradicional, que utiliza una tasa de aprendizaje fija. Además, los métodos híbridos como Adam ofrecen una alternativa poderosa al combinar las fortalezas de GD basado en impulso y RMSProp.
Entrene, valide, ajuste y despliegue IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de próxima generación para creadores de IA. Diseñe aplicaciones de IA en menos tiempo y con menos datos.
Ponga la IA a trabajar en su negocio con la experiencia en IA líder en la industria y la cartera de soluciones de IBM a su lado.
Reinvente los flujos de trabajo y las operaciones críticas añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.
1 Bottou, L. (2010). Large-Scale Machine Learning with Stochastic Gradient Descent. Lechevallier, Y., Saporta, G. (eds) Proceedings of COMPSTAT’2010. Physica-Verlag HD.
2 Ruder, S. (2016). An overview of gradient descent optimization algorithms.
3 Tian, Y., Zhang, Y., & Zhang, H. (2023). Recent Advances in Stochastic Gradient Descent in Deep Learning. Mathematics, 11(3), 682.
4 Haji, S. H., & Abdulazeez, A. M. (2021). Comparison of optimization techniques based on gradient descent algorithm: A review. PalArch’s Journal of Archaeology of Egypt/Egyptology, 18(4), 2715-2743.
5 Bottou, L. (2012). Stochastic Gradient Descent Tricks. Montavon, G., Orr, G.B., Müller, KR. (eds) Neural Networks: Tricks of the Trade. Lecture Notes in Computer Science, vol 7700. Springer, Berlín, Heidelberg.