El descenso de gradiente estocástico (a menudo abreviado como SGD) es un método iterativo para optimizar una función objetivo con propiedades de suavidad adecuadas, como la diferenciabilidad o la subdiferenciabilidad. Puede considerarse una aproximación estocástica de la optimización por descenso de gradiente, ya que reemplaza el gradiente real, calculado a partir de todo el conjunto de datos, con una estimación del mismo, calculada a partir de un subconjunto seleccionado aleatoriamente de los datos. Especialmente en problemas de optimización de alta dimensión, esto reduce la carga computacional muy elevada, logrando iteraciones más rápidas a cambio de una tasa de convergencia más baja. La idea básica detrás de la aproximación estocástica se remonta al algoritmo de Robbins-Monro de la década de 1950. Hoy en día, el descenso de gradiente estocástico se ha convertido en un método de optimización importante en el aprendizaje automático y, de manera más amplia, en la inteligencia artificial.
Antecedentes
Tanto la estimación estadística como el aprendizaje automático consideran el problema de minimizar una función objetivo que tiene la forma de una suma: Q(w) = (1/n) * sum_{i=1}^{n} Q_i(w), donde se debe estimar el parámetro w que minimiza Q(w). Cada función sumando Q_i se asocia típicamente con la i-ésima observación en el conjunto de datos utilizado para el entrenamiento. En la estadística clásica, los problemas de minimización de sumas surgen en los mínimos cuadrados y en la estimación de máxima verosimilitud para observaciones independientes. La clase general de estimadores que surgen como minimizadores de sumas se denomina M-estimadores. Sin embargo, en estadística, se ha reconocido durante mucho tiempo que exigir incluso la minimización local es demasiado restrictivo para algunos problemas de estimación de máxima verosimilitud. Por lo tanto, los teóricos estadísticos contemporáneos a menudo consideran puntos estacionarios de la función de verosimilitud, o ceros de su derivada, la función de puntuación, y otras ecuaciones de estimación.
El problema de minimización de sumas también surge en la minimización del riesgo empírico. Allí, Q_i(w) es el valor de la función de pérdida en el i-ésimo ejemplo, y Q(w) es el riesgo empírico. Cuando se utiliza para minimizar la función anterior, un método estándar (o "por lotes") de descenso de gradiente realizaría iteraciones de la forma w := w - eta nabla Q(w) = w - (eta/n) sum_{i=1}^{n} nabla Q_i(w). El tamaño de paso se denota por eta, a veces llamado tasa de aprendizaje en el aprendizaje automático, y el símbolo ":=" denota la actualización de una variable en el algoritmo.
En muchos casos, las funciones sumando tienen una forma simple que permite evaluaciones económicas de la función suma y del gradiente de la suma. Por ejemplo, en estadística, las familias exponenciales de un parámetro permiten evaluaciones económicas de funciones y de gradientes. Sin embargo, en otros casos, evaluar el gradiente de la suma puede requerir evaluaciones costosas de los gradientes de todas las funciones sumando. Cuando el conjunto de entrenamiento es enorme y no existen fórmulas simples, evaluar las sumas de gradientes se vuelve muy costoso, porque evaluar el gradiente requiere evaluar los gradientes de todas las funciones sumando. Para economizar en el costo computacional en cada iteración, el descenso de gradiente estocástico muestrea un subconjunto de funciones sumando en cada paso. Esto es muy efectivo en el caso de problemas de aprendizaje automático a gran escala.
Método Iterativo
En el descenso de gradiente estocástico (o "en línea"), el gradiente verdadero de Q(w) se aproxima mediante un gradiente en una sola muestra: w := w - eta * nabla Q_i(w). A medida que el algoritmo recorre el conjunto de entrenamiento, realiza la actualización anterior para cada muestra de entrenamiento. Se pueden hacer varias pasadas sobre el conjunto de entrenamiento hasta que el algoritmo converja. Si se hace esto, los datos pueden barajarse para cada pasada para prevenir ciclos. Las implementaciones típicas pueden usar una tasa de aprendizaje adaptativa para que el algoritmo converja.
Un compromiso entre calcular el gradiente verdadero y el gradiente en una sola muestra es calcular el gradiente contra más de una muestra de entrenamiento, llamado "mini-lote", en cada paso. Esto puede funcionar significativamente mejor que el descenso de gradiente estocástico "verdadero" descrito, porque el código puede hacer uso de bibliotecas de vectorización en lugar de calcular cada paso por separado, como se mostró por primera vez en el contexto del "algoritmo de retropropagación en modo de grupo". También puede resultar en una convergencia más suave, ya que el gradiente calculado en cada paso se promedia sobre más muestras de entrenamiento.
La convergencia del descenso de gradiente estocástico se ha analizado utilizando las teorías de minimización convexa y de aproximación estocástica. Brevemente, cuando las tasas de aprendizaje eta disminuyen con una tasa apropiada, y sujeto a suposiciones relativamente leves, el descenso de gradiente estocástico converge casi seguramente a un mínimo global cuando la función objetivo es convexa o pseudoconvexa, y de lo contrario converge casi seguramente a un mínimo local. Esto es de hecho una consecuencia del teorema de Robbins-Siegmund.
Regresión Lineal
Supongamos que queremos ajustar una línea recta y = a + bx a un conjunto de ejemplos de entrenamiento (x_i, y_i) usando mínimos cuadrados. La función objetivo es Q(a, b) = (1/n) sum_{i=1}^{n} (y_i - (a + bx_i))^2. El descenso de gradiente por lotes calcularía el gradiente de Q con respecto a a y b usando todos los n ejemplos. El descenso de gradiente estocástico, en contraste, elige un ejemplo aleatorio i y actualiza a y b usando solo el gradiente del error cuadrático para ese ejemplo: a := a - eta (-2)(y_i - (a + bx_i)), y b := b - eta (-2x_i)(y_i - (a + bx_i)). Esto es mucho más barato por iteración, especialmente cuando n es grande.
Aplicaciones en el Aprendizaje Automático
El descenso de gradiente estocástico es la piedra angular del entrenamiento de redes neuronales y modelos de aprendizaje profundo. En estos contextos, la función objetivo es típicamente el riesgo empírico, y la función de pérdida mide la discrepancia entre las salidas predichas y las reales. Por ejemplo, en el entrenamiento de un modelo transformador para el procesamiento del lenguaje natural, SGD o sus variantes se utilizan para actualizar los pesos de la red basándose en mini-lotes de datos de texto. El método es particularmente efectivo para problemas a gran escala, como los que se encuentran en modelos de lenguaje grandes, donde los datos de entrenamiento pueden consistir en miles de millones de tokens.
SGD también se ha aplicado en otros dominios, incluyendo visión por computadora (aunque no en los slugs proporcionados, es una aplicación común), aprendizaje por refuerzo y IA generativa. En IA generativa, modelos como la serie GPT de OpenAI y Claude de Anthropic se entrenan utilizando técnicas de optimización estocástica. La elección del optimizador, a menudo SGD con momento o el optimizador Adam, afecta significativamente la velocidad y la calidad de la convergencia.
Variantes y Mejoras
Se han desarrollado varias variantes del descenso de gradiente estocástico para abordar sus limitaciones, como la convergencia lenta y la sensibilidad a la tasa de aprendizaje. Estas incluyen variantes de SGD como el momento, el gradiente acelerado de Nesterov, AdaGrad, RMSProp y Adam. Cada variante modifica la regla de actualización para mejorar las propiedades de convergencia. Por ejemplo, el momento añade una fracción de la actualización anterior a la actual, ayudando a acelerar los gradientes en la dirección correcta y a amortiguar las oscilaciones. Adam, que significa Estimación Adaptativa de Momentos, mantiene tasas de aprendizaje por parámetro que se adaptan basándose en estimaciones de los primeros y segundos momentos de los gradientes.
Otra mejora importante es el uso de programas de tasa de aprendizaje, que ajustan la tasa de aprendizaje durante el entrenamiento. Los programas comunes incluyen la disminución por pasos, la disminución exponencial y el recocido de coseno. Estos programas ayudan al algoritmo a converger de manera más confiable al reducir el tamaño del paso a medida que avanza la optimización.
Otras técnicas que interactúan con SGD incluyen recorte de gradientes, que previene gradientes explosivos al escalar hacia abajo los gradientes que exceden un umbral, y normalización por lotes y normalización de capas, que estabilizan la distribución de las entradas a cada capa, a menudo permitiendo tasas de aprendizaje más altas.
Convergencia y Desafíos
Aunque SGD es computacionalmente eficiente, introduce varianza en las estimaciones del gradiente, lo que puede causar que la pérdida fluctúe. La tasa de convergencia de SGD es generalmente más lenta que la del descenso de gradiente por lotes en términos del número de iteraciones, pero el costo por iteración es mucho menor, lo que lleva a un entrenamiento general más rápido en entornos a gran escala. La elección del tamaño del mini-lote es un hiperparámetro crítico: lotes más pequeños introducen más ruido pero requieren menos memoria, mientras que lotes más grandes proporcionan gradientes más suaves pero pueden converger a mínimos más agudos, que pueden generalizar peor.
SGD también puede quedarse atascado en puntos de silla o mínimos locales, especialmente en problemas no convexos como aprendizaje profundo. Varias estrategias, como reiniciar, usar momento o emplear tasas de aprendizaje adaptativas, ayudan a mitigar estos problemas. En la práctica, SGD y sus variantes han tenido un éxito notable en el entrenamiento de redes profundas, logrando resultados de vanguardia en muchas tareas.
Contexto Histórico
Las raíces del descenso de gradiente estocástico se encuentran en el algoritmo de Robbins-Monro, introducido por Herbert Robbins y Sutton Monro en 1951 para la aproximación estocástica. El método fue adaptado más tarde al aprendizaje automático en la década de 1980, particularmente en el contexto de la retropropagación para redes neuronales. El término "descenso de gradiente estocástico" se volvió ampliamente utilizado a medida que crecía el campo del aprendizaje automático. Hoy en día, es una herramienta fundamental en el arsenal de todo profesional del aprendizaje automático, y está implementado en todos los principales marcos de aprendizaje profundo, incluidos los utilizados por empresas como Google DeepMind, Amazon Web Services y Microsoft Azure.