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 aprendizaje automático y campos relacionados.
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) Σ 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 denominan M-estimadores. Sin embargo, en estadística, se ha reconocido durante mucho tiempo que requerir 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, donde 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 de descenso de gradiente estándar (o "por lotes") realizaría las siguientes iteraciones: w := w - η ∇Q(w) = w - (η/n) Σ ∇Q_i(w). El tamaño del paso se denota por η, a veces llamado tasa de aprendizaje en el aprendizaje automático, y ":=" 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 suma. Por ejemplo, en estadística, las familias exponenciales de un parámetro permiten evaluaciones económicas de funciones y gradientes. Sin embargo, en otros casos, evaluar el gradiente 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 - η ∇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. En pseudocódigo, el descenso de gradiente estocástico puede presentarse de la siguiente manera:
- Elegir un vector de parámetros inicial w y una tasa de aprendizaje η.
- Repetir hasta la convergencia:
- Barajar las muestras de entrenamiento.
- Para cada muestra de entrenamiento i:
- Calcular el gradiente ∇Q_i(w).
- Actualizar los parámetros: w := w - η ∇Q_i(w).
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 un artículo de 1986 donde se llamó "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 η disminuyen con una tasa apropiada, y sujeto a suposiciones relativamente suaves, 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 = w^T x a un conjunto de ejemplos de entrenamiento (x_i, y_i). La función objetivo es el error cuadrático medio: Q(w) = (1/n) Σ (y_i - w^T x_i)^2. El gradiente para un solo ejemplo es ∇Q_i(w) = -2 (y_i - w^T x_i) x_i. En el descenso de gradiente estocástico, la regla de actualización se convierte en w := w + 2η (y_i - w^T x_i) x_i. Esto es equivalente al algoritmo de mínimos cuadrados medios (LMS), también conocido como la regla de Widrow-Hoff, introducido por Bernard Widrow y Ted Hoff en 1960. El algoritmo LMS es un ejemplo clásico de aproximación estocástica y se ha utilizado ampliamente en el procesamiento adaptativo de señales.
Aplicaciones en el Aprendizaje Automático
El descenso de gradiente estocástico es el algoritmo de optimización central para entrenar redes neuronales, incluidos los modelos de aprendizaje profundo. En el aprendizaje profundo moderno, SGD y sus variantes se utilizan para minimizar funciones de pérdida como la entropía cruzada para clasificación o el error cuadrático medio para regresión. La eficiencia del algoritmo en el manejo de grandes conjuntos de datos lo hace esencial para entrenar modelos en corpus masivos, como los utilizados en modelos de lenguaje grandes. Por ejemplo, el entrenamiento de modelos basados en transformadores, como se introdujo en el artículo de 2017 "Attention Is All You Need" de Jakob Uszkoreit, Lukasz Kaiser y otros, se basa en SGD o sus variantes adaptativas como Adam.
SGD también se utiliza en otras áreas de inteligencia artificial, incluyendo visión por computadora, procesamiento de lenguaje natural y aprendizaje por refuerzo. En el aprendizaje por refuerzo, SGD se utiliza para actualizar los parámetros de políticas y funciones de valor, como en los métodos de gradiente de políticas. La naturaleza estocástica del algoritmo le permite escapar de mínimos locales en problemas de optimización no convexos, lo cual es particularmente importante para entrenar redes profundas con paisajes de pérdida complejos.
Variantes y Mejoras
Se han desarrollado varias variantes del descenso de gradiente estocástico para mejorar la convergencia y la estabilidad. Una mejora común es el uso de momento, que acumula un vector de velocidad para acelerar los gradientes en direcciones consistentes y amortiguar las oscilaciones. Otra es el gradiente acelerado de Nesterov, que calcula el gradiente en una posición de anticipación. Los métodos de tasa de aprendizaje adaptativa, como Adam, ajustan la tasa de aprendizaje por parámetro basándose en estimaciones de los primeros y segundos momentos de los gradientes. Estos métodos se utilizan ampliamente en la práctica y a menudo se consideran optimizadores predeterminados para entrenar redes neuronales.
Otras técnicas relacionadas incluyen programas de tasa de aprendizaje, que ajustan la tasa de aprendizaje con el tiempo, y recorte de gradiente, que previene gradientes explosivos al escalar gradientes grandes. Normalización por lotes y normalización de capas se utilizan a menudo junto con SGD para estabilizar el entrenamiento y permitir tasas de aprendizaje más altas. Además, las estrategias de inicialización de pesos, como la inicialización de Xavier o He, son cruciales para un entrenamiento efectivo con SGD.
Desafíos y Consideraciones
Uno de los principales desafíos en el descenso de gradiente estocástico es la selección de la tasa de aprendizaje. Si la tasa de aprendizaje es demasiado alta, el algoritmo puede divergir; si es demasiado baja, la convergencia puede ser lenta. En la práctica, se utilizan programas de tasa de aprendizaje o métodos adaptativos para mitigar este problema. Otro desafío es el ruido introducido al usar un subconjunto de datos, lo que puede causar fluctuaciones en la pérdida. Sin embargo, este ruido también puede ser beneficioso, ya que puede ayudar al algoritmo a escapar de mínimos pronunciados y encontrar mínimos más planos que generalicen mejor.
SGD es sensible a la escala de las características, por lo que se recomienda a menudo la normalización de características. La elección del tamaño del mini-lote también afecta el rendimiento: los lotes más pequeños introducen más ruido pero requieren menos memoria, mientras que los lotes más grandes proporcionan gradientes más suaves pero pueden llevar a una peor generalización. En el entrenamiento distribuido, SGD puede paralelizarse utilizando técnicas como actualizaciones síncronas o asíncronas, como se implementa en marcos como TensorFlow y PyTorch.
Contexto Histórico
Las raíces del descenso de gradiente estocástico se remontan al algoritmo de Robbins-Monro, desarrollado por Herbert Robbins y Sutton Monro en 1951, que introdujo la idea de aproximación estocástica para encontrar raíces. En la década de 1960, el algoritmo LMS de Bernard Widrow y Ted Hoff aplicó principios similares al filtrado adaptativo. La conexión con el entrenamiento de redes neuronales se estableció en la década de 1980 con la popularización de la retropropagación. En 1986, David Rumelhart, Geoffrey Hinton y Ronald Williams publicaron un artículo que demostró la efectividad de la retropropagación con SGD para aprender representaciones internas. Desde entonces, SGD se ha convertido en una piedra angular del aprendizaje automático, permitiendo avances en áreas como el reconocimiento de imágenes, el reconocimiento de voz y el procesamiento de lenguaje natural.
En la década de 2010, el auge del aprendizaje profundo y la disponibilidad de grandes conjuntos de datos y hardware potente, como las GPU de NVIDIA y AMD, aceleraron la adopción de SGD. Instituciones de investigación como Stanford AI Lab, Berkeley AI Research y Universidad de Toronto contribuyeron a avances teóricos y prácticos. Hoy en día, SGD sigue siendo un área activa de investigación, con trabajo continuo sobre la comprensión de sus propiedades de generalización y el desarrollo de nuevas variantes.