Descenso de gradiente por lotes versus descenso de gradiente estocástico


101

Supongamos que tenemos un conjunto de entrenamiento para . Supongamos también que ejecutamos algún tipo de algoritmo de aprendizaje supervisado en el conjunto de entrenamiento. Las hipótesis se representan como . Necesitamos encontrar los parámetros que minimicen la "distancia" entre y . Deje(x(i),y(i))i=1,,metrohθ(X(yo))=θ0 0+θ1X(yo)1++θnorteX(yo)norteθy(yo)hθ(X(yo))

J(θ)=12yo=1metro(y(yo)-hθ(X(yo))2

Entonces queremos encontrar que minimice . En el descenso por gradiente inicializamos cada parámetro y realizamos la siguiente actualización:θJ(θ)

θj: =θj-αθjJ(θ)

¿Cuál es la diferencia clave entre el descenso de gradiente por lotes y el descenso de gradiente estocástico?

Ambos usan la regla de actualización anterior. Pero es uno mejor que el otro?

Respuestas:


121

La aplicabilidad del descenso por gradiente por lotes o estocástico realmente depende del múltiple de error esperado.

El descenso de gradiente por lotes calcula el gradiente utilizando todo el conjunto de datos. Esto es ideal para colectores de error convexos o relativamente suaves. En este caso, nos movemos directamente hacia una solución óptima, ya sea local o global. Además, el descenso de gradiente por lotes, dada una tasa de aprendizaje recocido, eventualmente encontrará el mínimo ubicado en su cuenca de atracción.

El descenso de gradiente estocástico (SGD) calcula el gradiente usando una sola muestra. La mayoría de las aplicaciones de SGD en realidad usan un minibatch de varias muestras, por razones que se explicarán un poco más adelante. SGD funciona bien (no bien, supongo, pero mejor que el descenso de gradiente por lotes) para múltiples errores que tienen muchos máximos / mínimos locales. En este caso, el gradiente algo más ruidoso calculado utilizando el número reducido de muestras tiende a sacar el modelo de los mínimos locales a una región que, con suerte, es más óptima. Las muestras individuales son realmente ruidosas, mientras que los minibatches tienden a promediar un poco del ruido. Por lo tanto, la cantidad de tirón se reduce cuando se usan minibatches. Se alcanza un buen equilibrio cuando el tamaño del minibatch es lo suficientemente pequeño como para evitar algunos de los mínimos locales pobres, pero lo suficientemente grande como para que no Evite los mínimos globales o los mínimos locales de mejor desempeño. (Incidentalmente, esto supone que los mejores mínimos tienen una cuenca de atracción más grande y profunda, y por lo tanto son más fáciles de caer).

Una ventaja de SGD es que es computacionalmente mucho más rápido. Los grandes conjuntos de datos a menudo no pueden almacenarse en la RAM, lo que hace que la vectorización sea mucho menos eficiente. Más bien, cada muestra o lote de muestras debe cargarse, trabajarse, almacenarse los resultados, etc. El Minibatch SGD, por otro lado, generalmente se hace intencionalmente lo suficientemente pequeño como para ser manejable computacionalmente.

Por lo general, esta ventaja computacional se aprovecha al realizar muchas más iteraciones de SGD, realizando muchos más pasos que el descenso de gradiente por lotes convencional. Esto generalmente da como resultado un modelo que está muy cerca del que se encontraría a través del descenso de gradiente por lotes, o mejor.

La forma en que me gusta pensar en cómo funciona SGD es imaginar que tengo un punto que representa mi distribución de entrada. Mi modelo está intentando aprender esa distribución de entrada. Alrededor de la distribución de entrada hay un área sombreada que representa las distribuciones de entrada de todos los minibatches posibles que podría probar. Por lo general, es una suposición justa que las distribuciones de entrada de minibatch están muy cerca de la verdadera distribución de entrada. El descenso de gradiente por lotes, en todos los pasos, toma la ruta más empinada para alcanzar la verdadera distribución de entrada. SGD, por otro lado, elige un punto aleatorio dentro del área sombreada, y toma la ruta más empinada hacia este punto. Sin embargo, en cada iteración, elige un nuevo punto. El promedio de todos estos pasos se aproximará a la distribución de entrada verdadera, generalmente bastante bien.


13
En la práctica, nadie usa Batch Gradient Descent. Es simplemente demasiado costoso desde el punto de vista computacional para no obtener una gran ganancia. (La ganancia es que realmente está bajando el gradiente "verdadero"). Cuando tiene una función de pérdida altamente no convexa, solo necesita avanzar en la dirección correcta y eventualmente convergerá en un mínimo local. Por lo tanto, minibatch SGD.
sabalaba

@Jason_L_Bens ¿Tiene alguna referencia (documentos o textos en línea) donde pueda leer más sobre estos algoritmos?
user110320

1
@ user110320 No está fuera de mi alcance, no, aunque son algoritmos muy comunes, por lo que debería haber una tonelada de recursos disponibles sobre el tema con un poco de búsqueda. Si está buscando un enfoque general, le recomiendo leer algunas de las arquitecturas de aprendizaje profundo de Yoshua Bengio para IA. Es donde empecé.
Jason_L_Bens

6

Como sugiere otra respuesta, la razón principal para usar SGD es reducir el costo de cálculo del gradiente mientras se mantiene en gran medida la dirección del gradiente cuando se promedia en muchos mini lotes o muestras, lo que seguramente lo ayuda a llegar a los mínimos locales.

  1. ¿Por qué funciona el minibatch ?

pagsreunatunapags^reunatuna

sol=mipagsreunatuna(J(θ)θ)
Smi(sol^(norte))Smi(sol^(metro))=metronorte
metro
mipags^reunatuna(sol^(metro))=mipags^reunatuna(J(θ)θ)
metro
  1. ¿Por qué el minibatch puede funcionar mejor ?

En primer lugar, el minibatch hace que algunos problemas de aprendizaje sean técnicamente imposibles de abordar debido a la menor demanda de cómputo con un tamaño de lote más pequeño.

En segundo lugar, un tamaño de lote reducido no significa necesariamente una precisión de gradiente reducida. Las muestras de entrenamiento tienen muchos ruidos, valores atípicos o sesgos. Un minibatch muestreado al azar puede reflejar la verdadera distribución de generación de datos mejor (o no peor) que el lote completo original. Si algunas iteraciones de las actualizaciones de gradiente de minibatch le brindan una mejor estimación, en general, el resultado promedio de una época puede ser mejor que el gradiente calculado a partir de un lote completo.

En tercer lugar, el minibatch no solo ayuda a lidiar con muestras de datos desagradables, sino que también ayuda a lidiar con la función de costo desagradable que tiene muchos mínimos locales. Como Jason_L_Bens menciona, a veces los múltiples errores pueden ser más fáciles de atrapar un gradiente regular en un mínimo local, mientras que es más difícil atrapar el gradiente aleatorio temporal calculado con minibatch.

Finalmente, con el descenso de gradiente, no estás alcanzando los mínimos globales en un solo paso, sino iterando en la variedad erro. El degradado en gran medida solo le da la dirección para iterar. Con minibatch, puede iterar mucho más rápido. En muchos casos, cuantas más iteraciones, mejor punto puede alcanzar. No te importa en absoluto el clima, el punto es óptimo a nivel mundial o incluso local. Solo desea alcanzar un modelo razonable que le brinde un error de generalización aceptable. Minibatch lo hace más fácil.

Puede encontrar el libro "Aprendizaje profundo" de Ian Goodfellow, et al., Tiene muy buenas discusiones sobre este tema si lo lee detenidamente.


Para problemas de optimización convexa, lo que dijo está bien. Pero al usar métodos de gradiente en funciones no convexas, se perdió una razón muy crítica de que SGD es mejor que GD por lotes. Ver mi respuesta datascience.stackexchange.com/questions/16807/…
horaceT

@horaceT Gracias por tu comentario. Dado que Jason_L_Bens describió el punto que mencionó anteriormente con detalles, no me molesté en repetirlo, sino en referir su respuesta en el último tercer párrafo, con el debido respeto. Para el problema de optimización del descenso de gradiente, los valores mínimos no convexos se reflejan en el punto de silla de montar local (ver el último tercer párrafo); y en aras de la descripción, mi respuesta describe SGD como minibatch pero con un tamaño de lote de 1 (ver el tercer párrafo).
Xiao-Feng Li

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.