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.
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.
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.
fuente
fuente