¿El entrenamiento en redes neuronales se realiza uno por uno? [duplicar]


9

Estoy tratando de aprender redes neuronales viendo esta serie de videos e implementando una red neuronal simple en Python.

Esta es una de las cosas que me pregunto: estoy entrenando a la red neuronal en datos de muestra, y tengo 1,000 muestras. La capacitación consiste en cambiar gradualmente los pesos y sesgos para que la función de costo resulte en un costo menor.

Mi pregunta: ¿Debería cambiar los pesos / sesgos en cada muestra antes de pasar a la siguiente muestra, o debería calcular primero los cambios deseados para el lote completo de 1,000 muestras, y solo luego comenzar a aplicarlos a la red?

Respuestas:


9

¿Debo cambiar los pesos / sesgos en cada muestra antes de pasar a la siguiente muestra,

Puede hacer esto, se llama descenso de gradiente estocástico (SGD) y generalmente barajará el conjunto de datos antes de trabajar en él cada vez.

¿o debería calcular primero los cambios deseados para el lote completo de 1,000 muestras, y solo luego comenzar a aplicarlos a la red?

Puede hacer esto, se llama descenso de gradiente por lotes , o en algunos casos (especialmente en recursos más antiguos) simplemente asumido como el enfoque normal y llamado descenso de gradiente.

Cada enfoque ofrece ventajas y desventajas. En general:

  • SGD realiza cada actualización antes en términos de cantidad de datos que se han procesado. Por lo tanto, puede necesitar menos épocas antes de converger en valores razonables.

  • SGD procesa más por muestra (porque se actualiza con mayor frecuencia), por lo que también es más lento en el sentido de que tomará más tiempo procesar cada muestra.

  • SGD puede aprovechar menos la paralelización, ya que los pasos de actualización significan que debe ejecutar cada elemento de datos en serie (ya que los pesos han cambiado y los resultados de error / gradiente se calculan para un conjunto específico de pesos).

  • Los pasos individuales de SGD generalmente hacen suposiciones muy aproximadas de los gradientes correctos para cambiar los pesos. Esto es tanto una desventaja (el rendimiento del NN frente al objetivo en el conjunto de entrenamiento puede disminuir como aumentar) y una ventaja (hay menos probabilidades de quedar atrapado en un punto estacionario local debido al "jitter" que causan estas diferencias aleatorias).

Lo que sucede en la práctica es que la mayoría del software le permite comprometer el procesamiento por lotes y el procesamiento de una sola muestra, para tratar de obtener el mejor rendimiento y las características de actualización. Esto se llama procesamiento de mini lotes, que implica:

  • Barajar el conjunto de datos al comienzo de cada época.

  • Trabajando a través de los datos barajados, N elementos por vez donde N puede variar de quizás 10 a 1000, dependiendo del problema y cualquier restricción en el hardware. Una decisión común es procesar el tamaño de lote más grande que la aceleración de GPU permite ejecutar en paralelo.

  • Calcule la actualización requerida para cada lote pequeño, luego aplíquela.

Este es hoy en día el método de actualización más común que asumen la mayoría de las bibliotecas de redes neuronales, y casi universalmente aceptarán un parámetro de tamaño de lote en la API de entrenamiento. La mayoría de las bibliotecas todavía llamarán optimizadores simples que hacen ese SGD; técnicamente es cierto, los gradientes calculados todavía son algo aleatorios debido a que no usan el lote completo, pero puede encontrar esto llamado descenso de gradiente de mini lote en algunos documentos más antiguos.


"Una decisión común es procesar el tamaño de lote más grande que la aceleración de GPU permite ejecutar en paralelo". ¿Cómo se determina esto? No he visto ningún recurso en el que se pueda comentar cuando el tamaño del lote es suficiente para la paralelización máxima
DuttaA,


Una pregunta similar se hizo antes en este sitio web. Incluso creo que es un duplicado (aunque desde otra perspectiva ligeramente). Ver: ai.stackexchange.com/q/11667/2444 .
nbro

"Una decisión común es procesar el tamaño de lote más grande que la aceleración de GPU permite ejecutar en paralelo". - ¡Lo tienes al revés! La primera heurística es procesar el tamaño de mini lote más pequeño que da como resultado un rendimiento aceptable. Sin embargo, con muchos modelos, alcanza los límites de memoria antes de saturar la eficiencia del hardware, por lo que termina ejecutando el modelo más grande que se ajustará a la RAM. En general, sin embargo, los tamaños de lote más pequeños encuentran mejores mínimos ya que exhiben más estocasticidad. Una advertencia es que la norma del lote se rompe con tamaños de lote muy pequeños.
Aleksandr Dubinsky

@AleksandrDubinsky RAM es hardware.
DuttaA

0

Idealmente, debe actualizar los pesos revisando todas las muestras en el conjunto de datos. Esto se llama Descenso de gradiente de lote . Pero, como el no. de ejemplos de entrenamiento aumenta, el cómputo se vuelve enorme y el entrenamiento será muy lento. Con el advenimiento del aprendizaje profundo, el tamaño del entrenamiento es de millones y la computación con todos los ejemplos de entrenamiento es muy poco práctica y muy lenta.

Aquí es donde, dos técnicas de optimización se hicieron prominentes.

  1. Descenso de gradiente de mini lote
  2. Descenso de gradiente estocástico (SGD)

En el descenso de gradiente de mini lotes, utiliza un tamaño de lote que es considerablemente menor que el no total. de ejemplos de entrenamiento y actualice sus pesos después de pasar por estos ejemplos.

En el descenso de gradiente estocástico, actualiza los pesos después de pasar por cada ejemplo de entrenamiento.

Llegando a las ventajas y desventajas de los tres métodos que discutimos.

  • El descenso de gradiente por lotes converge gradualmente al mínimo global, pero es lento y requiere una gran potencia informática.

  • El descenso de gradiente estocástico converge rápidamente pero no al mínimo global, converge en algún lugar cercano al mínimo global y se desplaza alrededor de ese punto, pero nunca converge al mínimo global. Pero, el punto convergente en el descenso de gradiente estocástico es lo suficientemente bueno para todos los fines prácticos.

  • El gradiente Mini-Batch es una compensación entre los dos métodos anteriores. Pero, si tiene una implementación vectorizada de la actualización de pesos y
    está entrenando con una configuración de múltiples núcleos o enviando la capacitación a
    varias máquinas, este es el mejor método tanto en términos de tiempo para la capacitación como de convergencia al mínimo global.

Puede trazar la función de costo, wrt el no. de iteraciones para comprender la diferencia entre la convergencia en los 3 tipos de descenso de gradiente.

  • El diagrama de descenso de gradiente por lotes cae suave y lentamente y se estabiliza y llega al mínimo global.

  • La trama de descenso de gradiente estocástico tendrá oscilaciones, caerá rápidamente pero se desplazará alrededor del mínimo global.

Estos son algunos blogs donde hay una explicación detallada de las ventajas, desventajas de cada método y también gráficos de cómo cambia la función de costo para los tres métodos con iteraciones.

https://adventuresinmachinelearning.com/stochastic-gradient-descent/

https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/

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.