Estoy «usando Python Keras package
para la red neuronal. Este es el link . ¿Es batch_size
igual al número de muestras de prueba? De Wikipedia tenemos esto información:
Sin embargo, en otros casos, evaluar el gradiente de suma puede requerir evaluaciones costosas de los gradientes de todas las funciones de suma. 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 todas las funciones sumando «gradientes». Para economizar el costo computacional en cada iteración, el descenso de gradiente estocástico muestrea un subconjunto de funciones sumando en cada paso. Esto es muy eficaz 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_size
en keras (Número de muestras por actualización de gradiente)?
Comentarios
- Es ‘ bueno ver el curso class.coursera.org/ml-005/lecture/preview , especialmente para su semana 4-6 + 10. Wikipedia puede no ser un recurso tan valioso para aprender redes neuronales.
Respuesta
El tamaño de lote define el número de muestras que se propagarán a través de la red.
Por ejemplo , digamos que tienes 1050 muestras de entrenamiento y quieres configurar un batch_size
igual a 100. El algoritmo toma las primeras 100 muestras (del 1 ° al 100 °) del conjunto de datos de entrenamiento y entrena la red. A continuación, 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. P Podría ocurrir un problema con el último conjunto de muestras. En nuestro ejemplo, hemos utilizado 1050, que no es divisible por 100 sin resto. La solución más sencilla es obtener las 50 muestras finales y entrenar la red.
Ventajas de utilizar un tamaño de lote < número de todas las muestras:
-
Requiere menos memoria. Dado que entrena la red usando menos muestras, el procedimiento de entrenamiento general requiere menos memoria. «Es especialmente importante si no puede colocar todo el conjunto de datos en la memoria de su máquina.
-
Por lo general, las redes se 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, haríamos solo 1 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 siguiente figura, puede ver que la dirección del degradado de mini-lote (color verde) fluctúa mucho más en comparación con la dirección del degradado de lote completo (color azul).
El estocástico es solo un mini-lote con batch_size
igual a 1. En ese caso, el gradiente cambia su dirección incluso más a menudo que un gradiente de mini lotes.
Comentarios
- No, no lo hice ‘ t. Esta es una técnica popular en las redes neuronales y esta terminología se puede ver en diferentes bibliotecas, libros y artículos. ¿Quiere comprobar el error de los datos de prueba en cada época o simplemente verificar el modelo después del entrenamiento?
- 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 hacer que su aprendizaje sea demasiado estocástico, más rápido, pero convergerá en modelos poco confiables, demasiado grande y no cabe en la memoria y aún así llevará años.
- ¿Significa esto que
batch_size=<size of dataset>
se considera aprendizaje en línea, o más bienbatch_size=1
? ¿Y todo esto sigue siendo cierto también para las enfermeras registradas? Cuando se utilizabatch_size
en RNN, el lote se considera una especie de paso de tiempo virtual en el sentido de que todas las instancias de ese lote se calcularán como si hubieran ocurrido a la vez ? - Normalmente, cuando las personas dicen aprendizaje en línea, se refieren a
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.Generalmente, 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 tienebatch_size=100
. - @Oleg Melnikov, si su último lote tiene un tamaño significativamente menor (deje ‘ s dicen que sería 1 en lugar de 50), luego la estimación del gradiente sería menos precisa y puede arruinar un poco sus pesos. En la imagen de arriba, imagina que haces 10 actualizaciones con un mini lote 100 (líneas verdes) y una con 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.
Respuesta
En la terminología de redes neuronales:
- una época = una pasada hacia adelante y una pasada hacia atrás de todos los ejemplos de entrenamiento
- tamaño de lote = el número de ejemplos de entrenamiento en una pasada 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 el pase hacia atrás como dos pases diferentes).
Ejemplo: si tiene 1000 ejemplos de entrenamiento y el tamaño de su lote es 500, entonces se necesitarán 2 iteraciones para completar 1 época.
FYI: Tamaño del lote de compensación frente al número de iteraciones para entrenar una red neuronal
Comentarios
- Pero, ¿cuál es la diferencia entre utilizando números de [tamaño de lote] de ejemplos y entrene a la red en cada ejemplo y continúe con los siguientes ejemplos de números de [tamaño de lote]. Ya que pasa un ejemplo a través de la red y aplica SGD y toma el siguiente ejemplo y así sucesivamente, no diferencia si el tamaño del lote es 10 o 1000 o 100000. Después de [batc h tamaño] número de ejemplos, el siguiente ejemplo del siguiente lote seguirá. Solo hace una diferencia si los números de [tamaño de lote] del ejemplo pasan [número de iteraciones] veces la red y luego continúan con los siguientes ejemplos de [tamaño de lote].
- Una distinción importante es que el paso de aprendizaje (un paso) se aplica una vez por cada lote, mientras que debe 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 sobre más muestras.
- ¿Cuál ‘ es la diferencia entre la época y las iteraciones ?
- @Goldname 1 época incluye todos los ejemplos de entrenamiento, mientras que 1 iteración incluye solo [tamaño de lote] el número de ejemplos de entrenamiento.
- Entonces: si el número de épocas es constante, y ‘ Al trazar la gráfica de convergencia con cada punto que representa el resultado después de cada época, podemos esperar que la gráfica resultante sea ‘ más suave ‘ (y el entrenamiento será más lento) a medida que disminuimos
batch_size
?
Respuesta
Al resolver con una CPU o una GPU un problema de optimización, aplica iterativamente un algoritmo sobre algunos datos de entrada. En cada una de estas iteraciones, normalmente actualiza una métrica de su problema haciendo algunos cálculos sobre los datos. Ahora, cuando el tamaño de sus datos es grande, es posible que necesite 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 parte de los datos para ahorrar tiempo y recursos computacionales. Esta parte es el tamaño de 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, realiza el procesamiento de datos en línea. Supongo que la terminología viene de los años 60, e incluso antes. ¿Alguien recuerda los archivos .bat DOS? Pero, por supuesto, el concepto encarnado significa un hilo o parte de los datos que se utilizarán.
Respuesta
La documentación de Keras
sobre el tamaño del lote se puede encontrar en fit
función en la página Modelos (API funcional)
batch_size
: Entero o Ninguno. Número de muestras por actualización de gradiente. Si no se especifica, batch_size se establecerá por defecto en 32.
Si tiene un conjunto de datos pequeño, sería mejor hacer que el tamaño del lote sea igual al tamaño del datos de entrenamiento. Primero intente con un lote pequeño y luego aumente para ahorrar tiempo. Como mencionó itdxer , existe una compensación entre precisión y velocidad.
Respuesta
El tamaño del lote es un hiperparámetro que define el número de muestra para trabajar antes de actualizar los parámetros internos del modelo.