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

Supongamos que tenemos un conjunto de entrenamiento $ (x _ {(i)}, y _ {(i)}) $ para $ i = 1, \ dots, m $ . Supongamos también que ejecutamos algún tipo de algoritmo de aprendizaje supervisado en el conjunto de entrenamiento. Las hipótesis se representan como $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Necesitamos encontrar los parámetros $ \ mathbf {\ theta} $ que minimizan la «distancia» entre $ y _ {(i )} $ y $ h _ {\ theta} (x _ {(i)}) $ . Deje que $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$

Entonces queremos encontrar $ \ theta $ que minimiza $ J (\ theta) $ . En el descenso de gradiente, inicializamos cada parámetro y realizamos la siguiente actualización: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ partial} {\ partial \ theta_ {j}} J (\ theta) $$

¿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 uno es mejor que el otro?

Respuesta

La aplicabilidad del descenso de gradiente por lotes o estocástico realmente depende de la variedad de errores esperada.

El descenso de gradiente por lotes calcula el gradiente utilizando el conjunto de datos completo. Esto es excelente para variedades de error convexas o relativamente suaves. En este caso, nos movemos un poco 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 utilizando una sola muestra. La mayoría de las aplicaciones de SGD en realidad usa un minibatch de varias muestras, por razones que se explicarán un poco más adelante. SGD funciona bien (no bien, supongo, pero es mejor que el descenso de gradiente por lotes) para múltiples de error 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. , la cantidad de sacudidas se reduce cuando se utilizan minibatches. Se logra un buen equilibrio cuando el tamaño del minibatch es lo suficientemente pequeño como para evitar algunos de los mínimos locales deficientes, pero lo suficientemente grande como para no evitar los mínimos globales o un mejor rendimiento. mínimos locales. (Por cierto, esto supone que los mejores mínimos tienen una cuenca de atracción más grande y profunda y, por lo tanto, es más fácil caer en ella).

Una ventaja de SGD es que es computacionalmente mucho más rápido. Grande Los conjuntos de datos a menudo no se pueden almacenar en RAM, lo que hace que la vectorización sea mucho menos eficiente. Más bien, cada muestra o lote de muestras debe cargarse, trabajarse, almacenar los resultados, etc. 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, lo que genera muchos más pasos que el descenso de gradiente de lote 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 pude muestrear. Por lo general, es razonable suponer que las distribuciones de entrada del minibatch están cerca de la distribución de entrada real. El descenso del gradiente de lote, en todos los pasos, toma la ruta más empinada para alcanzar la distribución de entrada verdadera. SGD, por otro lado, elige una 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 real, generalmente bastante bien.

Comentarios

  • En la práctica, nadie usa Batch Gradient Descent. Es ‘ simplemente demasiado costoso computacionalmente por poco de una ganancia (la ganancia es que ‘ en realidad está reduciendo la » true » gradiente.) Cuando tienes una función de pérdida altamente no convexa, solo necesitas dar un paso en la dirección correcta y ‘ eventualmente convergerás o n un mínimo local. Por lo tanto, minibatch SGD.
  • @Jason_L_Bens, ¿tiene alguna referencia (artículos o textos en línea) donde pueda leer más sobre estos algoritmos?
  • @ user110320 No es algo que se me ocurra, 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 algo de Yoshua Bengio ‘ s Aprendizaje de arquitecturas profundas para IA. Es ‘ donde comencé.

Responder

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

  1. Por qué funciona el minibatch .

Las matemáticas detrás de esto son que, el » true » gradiente de la función de costo (el gradiente para el error de generalización o para el conjunto de muestras infinitamente grandes) es la expectativa del gradiente $ g $ sobre la distribución de generación de datos verdaderos $ p_ {data} $ ; el gradiente real $ \ hat {g} $ calculado sobre un lote de muestras es siempre una aproximación al gradiente real con la distribución de datos empíricos $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ partial J (\ theta) \ over \ partial \ theta}) $$ El descenso de gradiente por lotes puede brindarle el posible gradiente » óptimo » dadas todas sus muestras de datos, no es el » true » degradado. Un lote más pequeño (es decir, un minibatch) probablemente no sea tan óptimo como el lote completo, pero ambos son aproximaciones, al igual que el minibatch de muestra única (SGD).

Suponiendo que no hay dependencia entre $ m $ muestras en un minibatch, el $ \ hat {g} (m) $ calculado es imparcial estimación del gradiente real. Los errores estándar (cuadrados) de las estimaciones con diferentes tamaños de minibatch son inversamente proporcionales a los tamaños del minibatch. Es decir, $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Es decir, la reducción del error estándar es la raíz cuadrada del aumento del tamaño de la muestra. Esto significa que si el tamaño del minibatch es pequeño, la tasa de aprendizaje también tiene que ser pequeña para lograr estabilidad sobre la gran variación. Cuando las muestras no son independientes, la propiedad de estimación insesgada ya no se mantiene. Eso requiere que mezcle las muestras antes del entrenamiento, si las muestras no están secuenciadas de manera suficientemente aleatoria.

  1. Por qué el minibatch puede funcionan mejor .

En primer lugar, el minibatch hace que algunos problemas de aprendizaje, desde técnicamente intratables, sean manejables debido a la menor demanda de cálculo 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. Muchas de las muestras de entrenamiento tienen muchos ruidos, valores atípicos o sesgos. Un minibatch muestreado al azar puede reflejar la distribución de generación de datos reales mejor (o no peor) que el lote completo original. Si algunas iteraciones de las actualizaciones del gradiente del 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 situaciones desagradables muestras de datos, pero también ayudan a lidiar con la función de costo desagradable que tiene muchos mínimos locales. Como menciona Jason_L_Bens, a veces los múltiples de error 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 temporalmente aleatorio calculado con minibatch.

Finalmente, con el descenso de gradiente, no es alcanzando los mínimos globales en un paso, pero iterando en la variedad de errores. El degradado le da en gran medida solo 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. Realmente no le importa en absoluto que el punto sea ó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.

Comentarios

  • Para problemas de optimización convexa, lo que dijo está bien.Pero para 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 Gracias por tu comentario. Dado que el punto que mencionaste ha sido descrito por Jason_L_Bens anteriormente con detalles, no me molesté en repetir, pero refiriendo su respuesta en el último tercer párrafo, con el debido respeto. Para el problema de optimización del descenso del gradiente, los mínimos locales reflejan los no convexos, incluido el punto de silla (ver el último tercer párrafo); y por el bien de la descripción, mi respuesta describe SGD como minibatch pero con un tamaño de lote de 1 (consulte el tercer párrafo).
  • ¿Por qué ha dicho virtualmente en * finalmente en una época, está computando virtualmente la media de los gradientes basados en todas las muestras dadas. *? Don ‘ ¿No cree que esta afirmación es incorrecta debido a que se actualizan los pesos en cada paso?
  • @Media Tiene razón. ‘ he eliminado el último párrafo. Gracias.

Respuesta

Para mí, el gradiente por lotes se parece al gradiente magro. En el gradiente magro, el tamaño del lote se elige de modo que cada parámetro que deba actualizarse también se varíe de forma independiente, pero no necesariamente ortogonal, en el lote. Por ejemplo, si el lote contiene 10 experimentos, 10 filas, entonces es posible formar $ 2 ^ {10-1} = 512 $ columnas independientes. 10 filas permiten la actualización independiente, pero no ortogonal, de 512 parámetros.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *