Przetwarzanie Mini Batch oferuje kilka korzyści w porównaniu z przetwarzaniem całkowitą, szczególnie podczas korzystania z frameworków takich jak JAX do obliczeń numerycznych i zadań uczenia maszynowego. Oto kilka kluczowych zalet:
1. Wydajność pamięci: Przetwarzanie mini-partii wymaga mniej pamięci w porównaniu z przetwarzaniem całkowitego. Wynika to z faktu, że tylko część zestawu danych jest ładowana do pamięci w danym momencie, dzięki czemu można obsłużyć duże zestawy danych, które mogą nie zmieścić się w pamięci inaczej [3] [4].
2. Szybsze aktualizacje gradientu: Mini partie pozwalają na częstsze aktualizacje parametrów modelu. Wynika to z faktu, że gradienty są obliczane i aktualizowane po każdej mini-partii, zamiast czekać na przetworzenie całego zestawu danych. W wielu przypadkach prowadzi to do szybszej konwergencji [3] [4].
3. Wtrysk hałasu i unikanie punktów siodłowych: Mini przetwarzanie partii wprowadza hałas do aktualizacji gradientu, co może pomóc uniknąć lokalnych punktów minimów lub siodłowych podczas optymalizacji. Hałas ten może prowadzić do silniejszej konwergencji w porównaniu z deterministycznymi aktualizacjami przetwarzania całej partii [3] [4].
4. Elastyczność i skalowalność: Mini partie są szczególnie przydatne w przypadku dużych zestawów danych lub gdy zasoby obliczeniowe są ograniczone. Umożliwiają one równoległe przetwarzanie i mogą być łatwe do rozmieszczania się na wielu GPU lub maszynach, zwiększając skalowalność [2] [4].
5. Przetwarzanie w czasie rzeczywistym lub w czasie rzeczywistym: chociaż nie jest tak natychmiastowe jak przetwarzanie strumienia, przetwarzanie mini-partii może zapewnić wyniki w czasie rzeczywistym, co czyni go odpowiednim dla aplikacji, w których terminowe spostrzeżenia są kluczowe, ale niekoniecznie natychmiastowe [2] .
W JAX używając mini-partii można skutecznie zarządzać za pomocą narzędzi takich jak `vmap`, które umożliwiają stosowanie funkcji między partiami danych bez konieczności jawnych pętli lub obsługi wymiaru wsadowego. Upraszcza to kod i wykorzystuje optymalizacje Jaxa do równoległego wykonywania akceleratorów sprzętowych, takich jak GPU i TPU [1] [9].
Cytaty:[1] https://apxml.com/courses/getting-started-with-jax/chapter-4-vectoration-with-jax/batch-processing
[2] https://www.upsolver.com/blog/batch-stream-a-cheat-sheet
[3] https://datasciience.stackexchange.com/questions/16807/why-mini-batch-size-is-better-than-one-single-batch-with-all-training-data
[4] https://datasciience.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-andline-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-efftitus-as-comprened-to-batched-ps