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 (por ejemplo, diferenciable o subdiferenciable ). Puede considerarse como una aproximación estocástica de la optimización del descenso de gradiente , ya que reemplaza el gradiente real (calculado a partir de todo el conjunto de datos ) por una estimación del mismo (calculado a partir de un subconjunto de datos seleccionado aleatoriamente). Especialmente en problemas de optimización de alta dimensión , esto reduce la carga computacional muy alta , logrando iteraciones más rápidas a cambio de una tasa de convergencia más baja . [1]
La idea básica detrás de la aproximación estocástica se remonta al algoritmo 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 . [2]
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: donde se debe estimar el parámetro que se minimiza . Cada función sumando generalmente está asociada con la observación -ésima en el conjunto de datos (usado para el entrenamiento).
En estadística clásica, los problemas de minimización de suma 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 estimadores M. Sin embargo, en estadística, se reconoce desde hace tiempo que exigir incluso una minimización local es demasiado restrictivo para algunos problemas de estimación de máxima verosimilitud. [3] 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 la suma también surge para la minimización del riesgo empírico . Allí, es el valor de la función de pérdida en el ejemplo -ésimo y 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: El tamaño del paso se denota por (a veces llamado tasa de aprendizaje en el aprendizaje automático) y aquí " " denota la actualización de una variable en el algoritmo.
En muchos casos, las funciones sumando tienen una forma simple que permite realizar 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 realizar evaluaciones económicas de funciones y gradientes.
Sin embargo, en otros casos, evaluar el gradiente de 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 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. [4]
En el descenso de gradiente estocástico (o "en línea"), el gradiente verdadero de se aproxima mediante un gradiente en una sola muestra: A medida que el algoritmo recorre el conjunto de entrenamiento, realiza la actualización anterior para cada muestra de entrenamiento. Se pueden realizar varias pasadas sobre el conjunto de entrenamiento hasta que el algoritmo converja. Si se hace esto, los datos se pueden mezclar en cada pasada para evitar ciclos. Las implementaciones típicas pueden utilizar una tasa de aprendizaje adaptativa para que el algoritmo converja. [5]
En pseudocódigo, el descenso de gradiente estocástico se puede presentar como:
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 "minilote") 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 [6] donde se lo llamó "el algoritmo de retropropagación en modo de grupo". También puede dar como resultado 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 . En resumen, cuando las tasas de aprendizaje disminuyen con una tasa apropiada, y sujeto a suposiciones relativamente suaves, el descenso de gradiente estocástico converge casi con seguridad a un mínimo global cuando la función objetivo es convexa o pseudoconvexa , y de lo contrario converge casi con seguridad a un mínimo local. [2] [7] Esto es de hecho una consecuencia del teorema de Robbins-Siegmund. [8]
Supongamos que queremos ajustar una línea recta a un conjunto de entrenamiento con observaciones y respuestas estimadas correspondientes utilizando mínimos cuadrados . La función objetivo que se minimizará es La última línea en el pseudocódigo anterior para este problema específico se convertirá en: Tenga en cuenta que en cada iteración o paso de actualización, el gradiente solo se evalúa en un solo . Esta es la diferencia clave entre el descenso de gradiente estocástico y el descenso de gradiente por lotes.
En general, dado un problema de regresión lineal, el descenso de gradiente estocástico se comporta de manera diferente cuando (subparametrizado) y (sobreparametrizado). En el caso sobreparametrizado, el descenso de gradiente estocástico converge a . Es decir, SGD converge a la solución de interpolación con una distancia mínima desde el punto de partida . Esto es cierto incluso cuando la tasa de aprendizaje permanece constante. En el caso subparametrizado, SGD no converge si la tasa de aprendizaje permanece constante. [9]
En 1951, Herbert Robbins y Sutton Monro introdujeron los primeros métodos de aproximación estocástica, precediendo al descenso de gradiente estocástico. [10] Basándose en este trabajo un año después, Jack Kiefer y Jacob Wolfowitz publicaron un algoritmo de optimización muy cercano al descenso de gradiente estocástico, utilizando diferencias centrales como una aproximación del gradiente. [11] Más tarde, en la década de 1950, Frank Rosenblatt utilizó SGD para optimizar su modelo de perceptrón , demostrando la primera aplicabilidad del descenso de gradiente estocástico a las redes neuronales. [12]
La retropropagación se describió por primera vez en 1986, y se utilizó el descenso de gradiente estocástico para optimizar de manera eficiente los parámetros en redes neuronales con múltiples capas ocultas . Poco después, se desarrolló otra mejora: el descenso de gradiente en minilotes, donde se sustituyen muestras individuales por lotes pequeños de datos. En 1997, se exploraron por primera vez los beneficios prácticos de rendimiento de la vectorización que se pueden lograr con lotes tan pequeños, [13] allanando el camino para una optimización eficiente en el aprendizaje automático. A partir de 2023, este enfoque de minilotes sigue siendo la norma para el entrenamiento de redes neuronales, equilibrando los beneficios del descenso de gradiente estocástico con el descenso de gradiente . [14]
En la década de 1980, ya se había introducido el momento y se agregó a las técnicas de optimización de SGD en 1986. [15] Sin embargo, estas técnicas de optimización asumieron hiperparámetros constantes , es decir, una tasa de aprendizaje fija y un parámetro de momento. En la década de 2010, se introdujeron enfoques adaptativos para aplicar SGD con una tasa de aprendizaje por parámetro con AdaGrad (para "Gradiente adaptativo") en 2011 [16] y RMSprop (para "Propagación de raíz cuadrada media") en 2012. [17] En 2014, se publicó Adam (para "Estimación de momento adaptativo"), que aplica los enfoques adaptativos de RMSprop al momento; luego se desarrollaron muchas mejoras y ramas de Adam, como Adadelta, Adagrad, AdamW y Adamax. [18] [19]
En el aprendizaje automático, los enfoques de optimización en 2023 están dominados por optimizadores derivados de Adam. TensorFlow y PyTorch, con diferencia las bibliotecas de aprendizaje automático más populares, [20] a partir de 2023 en gran medida solo incluyen optimizadores derivados de Adam, así como predecesores de Adam como RMSprop y SGD clásico. PyTorch también admite parcialmente BFGS de memoria limitada , un método de búsqueda de línea, pero solo para configuraciones de un solo dispositivo sin grupos de parámetros. [19] [21]
El descenso de gradiente estocástico es un algoritmo popular para entrenar una amplia gama de modelos en aprendizaje automático , incluidas máquinas de vectores de soporte (lineales) , regresión logística (ver, por ejemplo, Vowpal Wabbit ) y modelos gráficos . [22] Cuando se combina con el algoritmo de retropropagación , es el algoritmo estándar de facto para entrenar redes neuronales artificiales . [23] También se ha informado de su uso en la comunidad de geofísica , específicamente para aplicaciones de inversión de forma de onda completa (FWI). [24]
El descenso de gradiente estocástico compite con el algoritmo L-BFGS , [ cita requerida ] que también se utiliza ampliamente. El descenso de gradiente estocástico se ha utilizado desde al menos 1960 para entrenar modelos de regresión lineal , originalmente bajo el nombre de ADALINE . [25]
Otro algoritmo de descenso de gradiente estocástico es el filtro adaptativo de mínimos cuadrados medios (LMS) .
Se han propuesto y utilizado muchas mejoras en el algoritmo básico de descenso de gradiente estocástico. En particular, en el aprendizaje automático, se ha reconocido como problemática la necesidad de establecer una tasa de aprendizaje (tamaño de paso). Establecer este parámetro demasiado alto puede hacer que el algoritmo diverja; establecerlo demasiado bajo hace que sea lento para converger. [26] Una extensión conceptualmente simple del descenso de gradiente estocástico hace que la tasa de aprendizaje sea una función decreciente η t del número de iteración t , dando un programa de tasa de aprendizaje , de modo que las primeras iteraciones causan grandes cambios en los parámetros, mientras que las posteriores solo hacen un ajuste fino. Tales programas se conocen desde el trabajo de MacQueen sobre el agrupamiento de k -medias . [27] Spall proporciona una guía práctica para elegir el tamaño de paso en varias variantes de SGD. [28]
Como se mencionó anteriormente, el descenso de gradiente estocástico clásico es generalmente sensible a la tasa de aprendizaje η . La convergencia rápida requiere tasas de aprendizaje altas, pero esto puede inducir inestabilidad numérica. El problema se puede resolver en gran medida [29] considerando actualizaciones implícitas mediante las cuales el gradiente estocástico se evalúa en la siguiente iteración en lugar de la actual:
Esta ecuación es implícita, ya que aparece en ambos lados de la ecuación. Es una forma estocástica del método del gradiente proximal , ya que la actualización también se puede escribir como:
Como ejemplo, considere los mínimos cuadrados con características y observaciones . Queremos resolver: donde indica el producto interno. Tenga en cuenta que podría tener "1" como el primer elemento para incluir una intersección. El descenso de gradiente estocástico clásico se realiza de la siguiente manera:
donde se muestrea de manera uniforme entre 1 y . Aunque la convergencia teórica de este procedimiento ocurre bajo supuestos relativamente moderados, en la práctica el procedimiento puede ser bastante inestable. En particular, cuando se especifica incorrectamente de modo que tenga valores propios absolutos grandes con alta probabilidad, el procedimiento puede divergir numéricamente en unas pocas iteraciones. En contraste, el descenso de gradiente estocástico implícito (abreviado como ISGD) se puede resolver en forma cerrada como:
Este procedimiento permanecerá numéricamente estable prácticamente para todos, ya que la tasa de aprendizaje ahora está normalizada. Esta comparación entre el descenso de gradiente estocástico clásico e implícito en el problema de mínimos cuadrados es muy similar a la comparación entre los mínimos cuadrados medios (LMS) y el filtro de mínimos cuadrados medios normalizado (NLMS) .
Aunque una solución de forma cerrada para ISGD solo es posible en mínimos cuadrados, el procedimiento se puede implementar de manera eficiente en una amplia gama de modelos. Específicamente, supongamos que depende de solo a través de una combinación lineal con características , de modo que podemos escribir , donde también puede depender de pero no de excepto a través de . Los mínimos cuadrados obedecen esta regla, y también lo hace la regresión logística y la mayoría de los modelos lineales generalizados . Por ejemplo, en mínimos cuadrados, , y en regresión logística , donde es la función logística . En regresión de Poisson , , y así sucesivamente.
En tales configuraciones, la ISGD se implementa simplemente de la siguiente manera. Sea , donde es escalar. Entonces, la ISGD es equivalente a:
El factor de escala se puede encontrar a través del método de bisección , ya que en la mayoría de los modelos regulares, como los modelos lineales generalizados antes mencionados, la función es decreciente y, por lo tanto, los límites de búsqueda para son .
Otras propuestas incluyen el método del momento o el método de la bola pesada , que en el contexto de ML apareció en el artículo de Rumelhart , Hinton y Williams sobre el aprendizaje por retropropagación [30] y tomó prestada la idea del artículo de 1964 del matemático soviético Boris Polyak sobre la resolución de ecuaciones funcionales. [31] El descenso del gradiente estocástico con momento recuerda la actualización Δ w en cada iteración y determina la siguiente actualización como una combinación lineal del gradiente y la actualización anterior: [32] [33] que conduce a:
donde el parámetro que se debe estimar es un tamaño de paso (a veces llamado tasa de aprendizaje en el aprendizaje automático) y es un factor de decaimiento exponencial entre 0 y 1 que determina la contribución relativa del gradiente actual y los gradientes anteriores al cambio de peso.
El nombre momentum proviene de una analogía con el momentum en física: el vector de peso , considerado como una partícula que viaja a través del espacio de parámetros, [30] incurre en aceleración a partir del gradiente de la pérdida (" fuerza "). A diferencia del descenso de gradiente estocástico clásico, tiende a seguir viajando en la misma dirección, lo que evita las oscilaciones. Los científicos informáticos han utilizado el momentum con éxito en el entrenamiento de redes neuronales artificiales durante varias décadas. [34] El método del momentum está estrechamente relacionado con la dinámica de Langevin subamortiguada y puede combinarse con el recocido simulado . [35]
A mediados de la década de 1980, Yurii Nesterov modificó el método para utilizar el gradiente predicho en el siguiente punto, y el denominado gradiente acelerado de Nesterov resultante se utilizó a veces en ML en la década de 2010. [36]
El descenso de gradiente estocástico promediado , inventado independientemente por Ruppert y Polyak a fines de la década de 1980, es un descenso de gradiente estocástico ordinario que registra un promedio de su vector de parámetros a lo largo del tiempo. Es decir, la actualización es la misma que para el descenso de gradiente estocástico ordinario, pero el algoritmo también realiza un seguimiento de [37]
Cuando se realiza la optimización, este vector de parámetros promediado toma el lugar de w .
AdaGrad (algoritmo de gradiente adaptativo ) es un algoritmo de descenso de gradiente estocástico modificado con una tasa de aprendizaje por parámetro , publicado por primera vez en 2011. [38] De manera informal, esto aumenta la tasa de aprendizaje para parámetros más dispersos [ aclaración necesaria ] y disminuye la tasa de aprendizaje para los que son menos dispersos. Esta estrategia a menudo mejora el rendimiento de convergencia sobre el descenso de gradiente estocástico estándar en entornos donde los datos son dispersos y los parámetros dispersos son más informativos. Ejemplos de tales aplicaciones incluyen el procesamiento del lenguaje natural y el reconocimiento de imágenes. [38]
Todavía tiene una tasa de aprendizaje base η , pero esta se multiplica por los elementos de un vector { G j , j } que es la diagonal de la matriz del producto externo
donde , el gradiente, en la iteración τ . La diagonal está dada por
Este vector almacena esencialmente una suma histórica de cuadrados de gradiente por dimensión y se actualiza después de cada iteración. La fórmula para una actualización ahora es [a] o, escrita como actualizaciones por parámetro, Cada { G ( i , i ) } da lugar a un factor de escala para la tasa de aprendizaje que se aplica a un solo parámetro w i . Dado que el denominador en este factor es la norma ℓ 2 de las derivadas anteriores, las actualizaciones extremas de los parámetros se amortiguan, mientras que los parámetros que reciben pocas o pequeñas actualizaciones reciben tasas de aprendizaje más altas. [34]
Aunque fue diseñado para problemas convexos , AdaGrad se ha aplicado con éxito a la optimización no convexa. [39]
RMSProp (de Root Mean Square Propagation) es un método inventado en 2012 por James Martens e Ilya Sutskever , en ese momento ambos estudiantes de doctorado en el grupo de Geoffrey Hinton, en el que la tasa de aprendizaje se adapta, como en Adagrad, para cada uno de los parámetros. La idea es dividir la tasa de aprendizaje para un peso por un promedio móvil de las magnitudes de los gradientes recientes para ese peso. [40] Inusualmente, no se publicó en un artículo sino que simplemente se describió en una conferencia de Coursera . [ cita requerida ]
Entonces, primero se calcula el promedio móvil en términos de media cuadrada,
donde, es el factor de olvido. El concepto de almacenar el gradiente histórico como suma de cuadrados se tomó prestado de Adagrad, pero se introdujo el "olvido" para resolver las tasas de aprendizaje decrecientes de Adagrad en problemas no convexos al disminuir gradualmente la influencia de los datos antiguos. [ cita requerida ]
Y los parámetros se actualizan como,
RMSProp ha demostrado una buena adaptación de la tasa de aprendizaje en diferentes aplicaciones. RMSProp puede considerarse una generalización de Rprop y es capaz de trabajar con minilotes, en lugar de solo con lotes completos. [40]
Adam [41] (abreviatura de Adaptive Moment Estimation) es una actualización de 2014 del optimizador RMSProp que lo combina con la característica principal del método Momentum . [42] En este algoritmo de optimización, se utilizan promedios móviles con olvido exponencial tanto de los gradientes como de los segundos momentos de los gradientes. Dados los parámetros y una función de pérdida , donde indexa la iteración de entrenamiento actual (indexada en ), la actualización de parámetros de Adam está dada por:
donde es un pequeño escalar (p. ej. ) utilizado para evitar la división por 0, y (p. ej. 0,9) y (p. ej. 0,999) son los factores de olvido para gradientes y segundos momentos de gradientes, respectivamente. La elevación al cuadrado y la raíz cuadrada se realizan elemento por elemento.
La prueba inicial que establece la convergencia de Adam fue incompleta, y el análisis posterior reveló que Adam no converge para todos los objetivos convexos. [43] [44] A pesar de esto, Adam continúa utilizándose en la práctica debido a su sólido desempeño en la práctica. [45]
La popularidad de Adam inspiró muchas variantes y mejoras. Algunos ejemplos incluyen:
Aunque la optimización basada en signos se remonta al Rprop mencionado anteriormente , en 2018 los investigadores intentaron simplificar Adam eliminando la magnitud del gradiente estocástico y considerando solo su signo. [54] [55]
La búsqueda de línea de retroceso es otra variante del descenso de gradiente. Todo lo que se indica a continuación proviene del enlace mencionado. Se basa en una condición conocida como condición de Armijo-Goldstein. Ambos métodos permiten que las tasas de aprendizaje cambien en cada iteración; sin embargo, la forma del cambio es diferente. La búsqueda de línea de retroceso utiliza evaluaciones de funciones para verificar la condición de Armijo y, en principio, el bucle en el algoritmo para determinar las tasas de aprendizaje puede ser largo y desconocido de antemano. El SGD adaptativo no necesita un bucle para determinar las tasas de aprendizaje. Por otro lado, el SGD adaptativo no garantiza la "propiedad de descenso" (que disfruta la búsqueda de línea de retroceso), que es para todos los n. Si el gradiente de la función de costo es globalmente continuo de Lipschitz, con la constante de Lipschitz L, y la tasa de aprendizaje se elige del orden de 1/L, entonces la versión estándar de SGD es un caso especial de búsqueda de línea de retroceso.
Un análogo estocástico del algoritmo estándar (determinista) de Newton-Raphson (un método de "segundo orden") proporciona una forma asintóticamente óptima o casi óptima de optimización iterativa en el contexto de la aproximación estocástica [ cita requerida ] . Byrd, Hansen, Nocedal y Singer desarrollaron un método que utiliza mediciones directas de las matrices hessianas de los sumandos en la función de riesgo empírica. [56] Sin embargo, determinar directamente las matrices hessianas requeridas para la optimización puede no ser posible en la práctica. Spall y otros ofrecen métodos prácticos y teóricamente sólidos para versiones de segundo orden de SGD que no requieren información hessiana directa. [57] [58] [59] (Ruppert ofrece un método menos eficiente basado en diferencias finitas, en lugar de perturbaciones simultáneas. [60] ) Otro enfoque para la matriz hessiana de aproximación es reemplazarla con la matriz de información de Fisher, que transforma el gradiente habitual en natural. [61] Estos métodos que no requieren información hessiana directa se basan en valores de los sumandos en la función de riesgo empírica anterior o en valores de los gradientes de los sumandos (es decir, las entradas de SGD). En particular, la optimalidad de segundo orden se puede lograr asintóticamente sin el cálculo directo de las matrices hessianas de los sumandos en la función de riesgo empírica. Cuando el objetivo es una pérdida de mínimos cuadrados no lineal donde es el modelo predictivo (por ejemplo, una red neuronal profunda ), la estructura del objetivo se puede explotar para estimar información de segundo orden utilizando solo gradientes. Los métodos resultantes son simples y a menudo efectivos [62]
Para una tasa de aprendizaje pequeña, el descenso de gradiente estocástico se puede considerar como una discretización de la EDO de flujo de gradiente.
sujeto a ruido estocástico adicional. Esta aproximación solo es válida en un horizonte temporal finito en el siguiente sentido: supongamos que todos los coeficientes son suficientemente suaves. Sea y una función de prueba suficientemente suave. Entonces, existe una constante tal que para todos
donde denota tomar la expectativa con respecto a la elección aleatoria de índices en el esquema de descenso de gradiente estocástico.
Dado que esta aproximación no captura las fluctuaciones aleatorias alrededor del comportamiento medio del descenso de gradiente estocástico, se han propuesto soluciones a ecuaciones diferenciales estocásticas (EDS) como objetos limitantes. [63] Más precisamente, la solución a la EDS
donde denota la Ito-integral con respecto a un movimiento browniano es una aproximación más precisa en el sentido de que existe una constante tal que
Sin embargo, esta SDE sólo aproxima el movimiento de un punto del descenso del gradiente estocástico. Para una aproximación del flujo estocástico hay que considerar SDE con ruido de dimensión infinita. [64]
{{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite book}}
: CS1 maint: multiple names: authors list (link){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda )