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.