O processamento de mini-lote oferece vários benefícios sobre o processamento completo, especialmente ao usar estruturas como Jax para cálculos numéricos e tarefas de aprendizado de máquina. Aqui estão algumas vantagens importantes:
1. Eficiência de memória: o processamento do mini-lote requer menos memória em comparação com o processamento completo. Isso ocorre porque apenas uma parte do conjunto de dados é carregada na memória a qualquer momento, viável lidar com grandes conjuntos de dados que podem não se encaixar na memória [3] [4].
2. Atualizações mais rápidas de gradiente: os mini-lotes permitem atualizações mais frequentes dos parâmetros do modelo. Isso ocorre porque os gradientes são calculados e atualizados após cada mini-lote, em vez de esperar que todo o conjunto de dados seja processado. Isso leva a uma convergência mais rápida em muitos casos [3] [4].
3. Injeção de ruído e evitar pontos de sela: o processamento de mini-lote introduz ruído nas atualizações do gradiente, o que pode ajudar a evitar mínimos locais ou pontos de sela durante a otimização. Esse ruído pode levar a uma convergência mais robusta em comparação com as atualizações determinísticas do processamento em lotes completos [3] [4].
4. Flexibilidade e escalabilidade: os mini-lotes são particularmente úteis ao lidar com grandes conjuntos de dados ou quando os recursos computacionais são limitados. Eles permitem o processamento paralelo e podem ser facilmente distribuídos por várias GPUs ou máquinas, aumentando a escalabilidade [2] [4].
5. Processamento em tempo real ou próximo em tempo real: embora não seja tão imediato quanto o processamento de fluxos, o processamento de mini-lote pode fornecer resultados em tempo real, tornando-o adequado para aplicações em que as idéias oportunas são cruciais, mas não necessariamente instantâneas [2] .
No JAX, o uso de mini-lotes pode ser gerenciado com eficiência com ferramentas como o `vmap`, que permitem que as funções sejam aplicadas em lotes de dados sem precisar de loops explícitos ou manuseio de dimensões em lote. Isso simplifica o código e aproveita as otimizações de Jax para execução paralela em aceleradores de hardware como GPUs e TPUs [1] [9].
Citações:[1] https://apxml.com/courses/getting-started-with-jax/chapter-4-vectorization-with-jax/batch-processing
[2] https://www.upsolver.com/blog/batch-stream-theatheet
[3] https://datascience.stackexchange.com/questions/16807/why-mini-batch-size-is-s-better-than-one-single-batch-with-all-data-data
[4] https://datascience.stackexchange.com/questions/73656/batch-gradient-descent-vs-mini-batch-in-deep-learning
[5] https://dinocausevic.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-data-data
[9] https://stackoverflow.com/questions/75020544/is-vmap-efficeficiente-as-as-pared to-batched-ops