¿Cuál es el tamaño del lote en la red neuronal?

176

Estoy usando Python Keras packagepara la red neuronal. Este es el enlace . ¿Es batch_sizeigual al número de muestras de prueba? De Wikipedia tenemos esta información:

Sin embargo, en otros casos, evaluar el gradiente de suma puede requerir evaluaciones costosas de los gradientes de todas las funciones de sumando. Cuando el conjunto de entrenamiento es enorme y no existen fórmulas simples, evaluar las sumas de gradientes se vuelve muy costoso, porque evaluar el gradiente requiere evaluar todos los gradientes de las funciones de suma y suma. Para economizar el costo computacional en cada iteración, el descenso de gradiente estocástico muestrea un subconjunto de funciones de sumando en cada paso. Esto es muy efectivo en el caso de problemas de aprendizaje automático a gran escala.

¿La información anterior describe datos de prueba? ¿Es esto lo mismo que batch_sizeen keras (número de muestras por actualización de gradiente)?

usuario2991243
fuente
3
Es bueno ver el curso class.coursera.org/ml-005/lecture/preview , especialmente para ti la semana 4-6 + 10. Wikipedia puede no ser un recurso tan valioso para aprender redes neuronales.
404pio

Respuestas:

230

El tamaño del lote define el número de muestras que se propagarán a través de la red.

Por ejemplo, supongamos que tiene 1050 muestras de entrenamiento y desea configurar un batch_sizeigual a 100. El algoritmo toma las primeras 100 muestras (del 1 al 100) del conjunto de datos de entrenamiento y entrena la red. Luego, toma las segundas 100 muestras (de la 101 a la 200) y entrena la red nuevamente. Podemos seguir haciendo este procedimiento hasta que hayamos propagado todas las muestras a través de la red. El problema puede ocurrir con el último conjunto de muestras. En nuestro ejemplo, hemos usado 1050 que no es divisible por 100 sin resto. La solución más simple es obtener las 50 muestras finales y capacitar a la red.

Ventajas de usar un tamaño de lote <número de todas las muestras:

  • Requiere menos memoria. Como entrena la red con menos muestras, el procedimiento de entrenamiento general requiere menos memoria. Eso es especialmente importante si no puede ajustar todo el conjunto de datos en la memoria de su máquina.

  • Por lo general, las redes entrenan más rápido con mini lotes. Eso es porque actualizamos los pesos después de cada propagación. En nuestro ejemplo, hemos propagado 11 lotes (10 de ellos tenían 100 muestras y 1 tenía 50 muestras) y después de cada uno de ellos hemos actualizado los parámetros de nuestra red. Si usáramos todas las muestras durante la propagación, solo haríamos una actualización para el parámetro de la red.

Desventajas de usar un tamaño de lote <número de todas las muestras:

  • Cuanto más pequeño sea el lote, menos precisa será la estimación del gradiente. En la figura siguiente, puede ver que la dirección del gradiente de mini lotes (color verde) fluctúa mucho más en comparación con la dirección del gradiente de lote completo (color azul).

Direcciones de gradiente para diferentes configuraciones de lote

El estocástico es solo un mini-lote con batch_sizeigual a 1. En ese caso, el gradiente cambia su dirección aún más a menudo que un gradiente de mini-lote.

itdxer
fuente
3
No, no lo hice Esta es una técnica popular en redes neuronales y esta terminología se puede ver en diferentes bibliotecas, libros y artículos. ¿Desea verificar el error de los datos de prueba en cada época o simplemente verificar el modelo después del entrenamiento?
itdxer
1
La red también converge más rápido ya que el número de actualizaciones es considerablemente mayor. Configurar el tamaño del mini lote es una especie de arte, demasiado pequeño y corre el riesgo de que su aprendizaje sea demasiado estocástico, más rápido, pero convergerá en modelos poco confiables, demasiado grandes y no cabe en la memoria y aún llevará años.
Ramalho
2
Por lo general, cuando las personas dicen aprendizaje en línea, quieren decir batch_size=1. La idea detrás del aprendizaje en línea es que actualice su modelo tan pronto como vea el ejemplo. Con un tamaño de lote más grande significa que primero está mirando las múltiples muestras antes de realizar la actualización. En RNN el tamaño del lote puede tener diferentes significados. Por lo general, es común dividir la secuencia de entrenamiento en una ventana de tamaño fijo (como 10 palabras). En este caso, incluir 100 de estas ventanas durante el entrenamiento significará que tiene batch_size=100.
itdxer
1
@Oleg Melnikov, si su último lote tiene un tamaño significativamente menor (digamos que sería 1 en lugar de 50), entonces la estimación del gradiente sería menos precisa y puede arruinar un poco sus pesos. En la imagen de arriba, imagine que realiza 10 actualizaciones con un mini lote 100 (líneas verdes) y uno con el mini lote 1 (línea roja). Lo que significa que en la próxima época, algunas primeras iteraciones pueden comenzar a resolver el problema con la última actualización del mini lote 1 de la época anterior.
itdxer
1
@OlegMelnikov El libro de aprendizaje profundo del MIT tiene una buena explicación relacionada con este problema (capítulo 8.1.3): deeplearningbook.org/contents/optimization.html
itdxer
153

En la terminología de la red neuronal:

  • una época = un pase hacia adelante y un pase hacia atrás de todos los ejemplos de entrenamiento
  • tamaño de lote = el número de ejemplos de entrenamiento en un pase hacia adelante / hacia atrás. Cuanto mayor sea el tamaño del lote, más espacio de memoria necesitará.
  • número de iteraciones = número de pases, cada pase usando [tamaño de lote] número de ejemplos. Para ser claros, un pase = un pase hacia adelante + un pase hacia atrás (no contamos el pase hacia adelante y hacia atrás como dos pases diferentes).

Ejemplo: si tiene 1000 ejemplos de entrenamiento y el tamaño de su lote es 500, se necesitarán 2 iteraciones para completar 1 época.

FYI: intercambio de tamaño de lote frente a número de iteraciones para entrenar una red neuronal

Franck Dernoncourt
fuente
Pero, ¿cuál es la diferencia entre usar números de ejemplos [tamaño de lote] y capacitar a la red en cada ejemplo y continuar con los siguientes ejemplos de números [tamaño de lote]. Dado que pasa un ejemplo a través de la red y aplica SGD y toma el siguiente ejemplo y así sucesivamente, no habrá diferencia si el tamaño del lote es 10 o 1000 o 100000. Después de que se haga el número de ejemplos [tamaño de lote], el siguiente ejemplo de El siguiente lote seguirá. Solo hace una diferencia si los números de ejemplo [tamaño de lote] pasarán [número de iteraciones] veces la red y luego continúan con los siguientes ejemplos [tamaño de lote].
Erhard Dinhobl
Una distinción importante es que el paso de aprendizaje (un paso) se aplica una vez por cada lote, mientras que tiene que recorrer todos los lotes para hacer una época. Entonces, la diferencia también es algorítmica no solo en la memoria: lotes más grandes significan que promedia el gradiente en más muestras.
Meduz
¿Cuál es la diferencia entre época e iteraciones?
Goldname
2
@Goldname 1 época incluye todos los ejemplos de capacitación, mientras que 1 iteración incluye solo el número [tamaño de lote] de ejemplos de capacitación.
Franck Dernoncourt
3

Al resolver con una CPU un problema de optimización, aplica iterativamente un algoritmo sobre algunos datos de entrada. En cada una de estas iteraciones, generalmente actualiza una métrica de su problema haciendo algunos cálculos en los datos. Ahora, cuando el tamaño de sus datos es grande, puede necesitar una cantidad considerable de tiempo para completar cada iteración y puede consumir muchos recursos. Por lo tanto, a veces elige aplicar estos cálculos iterativos en una porción de los datos para ahorrar tiempo y recursos computacionales. Esta porción es el tamaño del lote y el proceso se llama (en la jerga de la red neuronal) procesamiento de datos por lotes. Cuando aplica sus cálculos en todos sus datos, entonces realiza el procesamiento de datos en línea. Supongo que la terminología proviene de los años 60, e incluso antes. ¿Alguien recuerda el. bat archivos DOS? Pero, por supuesto, el concepto encarnado significa un hilo o una porción de los datos que se utilizarán.

pebox11
fuente
2

La documentación de Kerasaproximadamente el tamaño del lote se puede encontrar bajo la fitfunción en los modelos (API funcional) página

batch_size: Entero o ninguno. Número de muestras por actualización de gradiente. Si no se especifica, el tamaño del lote será por defecto 32.

Si tiene un conjunto de datos pequeño, sería mejor hacer que el tamaño del lote sea igual al tamaño de los datos de entrenamiento. Primero intente con un lote pequeño y luego aumente para ahorrar tiempo. Como mencionó itdxer , hay una compensación entre precisión y velocidad.

otayeby
fuente