El procesamiento de mini lotes ofrece varios beneficios sobre el procesamiento de lotes completos, especialmente cuando se usa marcos como Jax para cálculos numéricos y tareas de aprendizaje automático. Aquí hay algunas ventajas clave:
1. Eficiencia de memoria: el procesamiento de mini lotes requiere menos memoria en comparación con el procesamiento de lotes completos. Esto se debe a que solo una parte del conjunto de datos se carga en la memoria en un momento dado, lo que hace que sea factible manejar grandes conjuntos de datos que de otra manera no encajen en la memoria [3] [4].
2. Actualizaciones de gradiente más rápidas: los mini lotes permiten actualizaciones más frecuentes de los parámetros del modelo. Esto se debe a que los gradientes se calculan y actualizan después de cada mini lote, en lugar de esperar que se procese todo el conjunto de datos. Esto conduce a una convergencia más rápida en muchos casos [3] [4].
3. Inyección de ruido y evitación de puntos de silla de montar: el procesamiento de mini lotes introduce ruido en las actualizaciones de gradiente, lo que puede ayudar a evitar mínimos locales o puntos de silla de montar durante la optimización. Este ruido puede conducir a una convergencia más robusta en comparación con las actualizaciones deterministas del procesamiento de lotes completos [3] [4].
4. Flexibilidad y escalabilidad: los mini lotes son particularmente útiles cuando se trata de conjuntos de datos grandes o cuando los recursos computacionales son limitados. Habilitan el procesamiento paralelo y se pueden distribuir fácilmente en múltiples GPU o máquinas, mejorando la escalabilidad [2] [4].
5. Procesamiento en tiempo real o casi en tiempo real: aunque no es tan inmediato como el procesamiento de la corriente, el procesamiento de mini lotes puede proporcionar resultados en tiempo real, lo que lo hace adecuado para aplicaciones donde las ideas oportunas son cruciales pero no necesariamente instantáneas [2] .
En JAX, el uso de mini lotes se puede administrar de manera eficiente con herramientas como 'VMAP`, que permite aplicar funciones a través de lotes de datos sin necesidad de bucles explícitos o manejo de dimensiones por lotes. Esto simplifica el código y aprovecha las optimizaciones de Jax para la ejecución paralela en aceleradores de hardware como GPU y TPU [1] [9].
Citas:[1] https://apxml.com/courses/getting-started-with-jax/chapter-4-vectorization-with-jax/batch-processing
[2] https://www.upsolver.com/blog/batch-stream-a-heatheet
[3] https://datascience.stackexchange.com/questions/16807/why-mini-batch-size-is-better-than-one-single-batch-with-all-training-data
[4] https://datascience.stackexchange.com/questions/73656/batch-cradient-descent-vs-mini-batch-in-deep-learning
[5] https://dinocausvic.com/2023/06/18/jax-in-action-linear-regression/
[6] https://www.kaggle.com/code/residentmario/full-batch-mini-batch-and-online-learning
[7] https://www.reddit.com/r/machinelearning/comments/st8b11/d_should_we_be_using_jax_in_2022/
[8] https://www.baeldung.com/cs/mini-batch-vs-single-batch-training-data
[9] https://stackoverflow.com/questions/75020544/is-vmap-eficiente-as-compared-to-batched-ops