Batch Size

Wprowadzenie

Batch Size, czyli rozmiar partii (lub paczki), to jeden z kluczowych hiperparametrów w uczeniu maszynowym, zwłaszcza w kontekście treningu sieci neuronowych. Odnosi się on do liczby próbek danych treningowych, które są przetwarzane jednocześnie przed dokonaniem aktualizacji wag modelu. Wybór odpowiedniego rozmiaru partii ma fundamentalny wpływ na efektywność, stabilność i jakość procesu uczenia.

Jak działają rozmiary partii?

W trakcie treningu modelu uczenia maszynowego cały zbiór danych treningowych jest zazwyczaj zbyt duży, aby przetworzyć go jednocześnie. Dlatego też jest on dzielony na mniejsze podzbiory, zwane partiami (batches). W każdej iteracji treningowej model otrzymuje jedną taką partię danych. Na podstawie predykcji dla tej partii obliczany jest błąd (loss), a następnie gradient błędu względem wag modelu. Gradienty te są uśredniane dla wszystkich próbek w danej partii, a następnie używane do aktualizacji wag modelu za pomocą algorytmu optymalizacyjnego, np. spadku gradientu (Gradient Descent). Proces ten powtarza się dla kolejnych partii, aż do przetworzenia całego zbioru danych treningowych, co stanowi jedną epokę (epoch). Liczba iteracji w jednej epoce jest równa liczbie partii. Rozmiar partii wpływa na jakość estymacji gradientu: małe partie generują bardziej 'szumne' gradienty, które jednak mogą pomóc w unikaniu lokalnych minimów, natomiast duże partie dają stabilniejsze, ale potencjalnie mniej reprezentatywne gradienty. Wybór Batch Size ma bezpośrednie konsekwencje dla wymogów pamięciowych (zwłaszcza pamięci GPU) oraz efektywności obliczeniowej, ponieważ większe partie mogą lepiej wykorzystywać równoległe przetwarzanie.

Główne zalety i charakterystyka

Odpowiedni dobór rozmiaru partii niesie ze sobą szereg korzyści. Małe rozmiary partii (np. 1-32) często prowadzą do lepszej generalizacji modelu, ponieważ 'szumne' gradienty pomagają eksplorować przestrzeń wag i unikać utknięcia w płytkich minimach. Ponadto, wymagają mniej pamięci RAM/VRAM, co umożliwia trening na sprzęcie o ograniczonych zasobach lub z bardzo dużymi modelami. Z kolei duże rozmiary partii (np. 128-2048+) pozwalają na szybsze przetwarzanie jednej iteracji, efektywnie wykorzystując moc obliczeniową nowoczesnych akceleratorów (GPU, TPU). Generują bardziej stabilne estymacje gradientu, co może przyspieszyć zbieżność treningu (liczoną w epokach) i zmniejszyć wahania w funkcji straty.

Zastosowania w praktyce

  • Trening dużych modeli językowych (LLM) z wykorzystaniem dużych partii dla efektywnego wykorzystania TPU/GPU.
  • Uczenie systemów wizyjnych na zbiorach danych o wysokiej rozdzielczości, gdzie pamięć VRAM jest ograniczona (mniejsze partie).
  • Uczenie federacyjne i na urządzeniach brzegowych, gdzie dane są rozproszone i dostępne w małych porcjach (Batch Size = 1 lub małe partie).
  • Szybkie prototypowanie i eksperymenty, gdzie mniejsze partie mogą przyspieszyć feedback na temat architektury modelu.
  • Optymalizacja dla równoległego przetwarzania na wielu GPU/TPU, często z bardzo dużymi, rozproszonymi partiami.
  • Trenowanie modeli reinforcement learning, gdzie doświadczenia są często zbierane w małych partiach.

Porównanie z innymi strukturami danych

Batch Size to pojęcie ściśle związane z wariantami algorytmu spadku gradientu. Gdy Batch Size wynosi 1, mówimy o Stochastycznym Spadku Gradientu (Stochastic Gradient Descent – SGD). W tym przypadku wagi modelu są aktualizowane po przetworzeniu każdej pojedynczej próbki danych. Charakteryzuje się dużą niestabilnością, ale również potencjalnie lepszą generalizacją i zdolnością do ucieczki z lokalnych minimów. Na drugim końcu spektrum znajduje się Pełny Spadek Gradientu (Full Batch Gradient Descent), gdzie Batch Size jest równy liczbie wszystkich próbek w zbiorze treningowym. Gwarantuje najbardziej stabilne gradienty, ale jest niezwykle wolny i pamięciożerny dla dużych zbiorów danych. Najczęściej stosowanym podejściem jest Mini-Batch Gradient Descent, który wykorzystuje pośrednie rozmiary partii (np. od 16 do 256), łącząc w sobie zalety obu skrajności – względną stabilność z efektywnością obliczeniową i akceptowalnym zużyciem pamięci.

Najlepsze praktyki (2026)

  • Zacznij od małego lub średniego rozmiaru partii (np. 32-128) i stopniowo zwiększaj go, jeśli pozwala na to pamięć VRAM/RAM, obserwując wpływ na zbieżność i metryki walidacyjne.
  • Dostosuj współczynnik uczenia (learning rate) do rozmiaru partii: większe partie często wymagają większych współczynników uczenia, aby utrzymać tempo zbieżności.
  • Wykorzystaj techniki 'learning rate warm-up' w przypadku bardzo dużych partii, aby stopniowo zwiększać learning rate na początku treningu.
  • W przypadku treningu rozproszonego, upewnij się, że efektywny rozmiar partii (suma partii na wszystkich urządzeniach) jest odpowiednio zoptymalizowany dla algorytmów komunikacji.
  • Zawsze mierz wydajność i zużycie zasobów (GPU/CPU memory, czas treningu) dla różnych rozmiarów partii, aby znaleźć optymalny punkt dla konkretnego problemu i sprzętu.

Typowe błędy i pułapki

  • Wybór zbyt dużego Batch Size, który prowadzi do gorszej generalizacji modelu i utknięcia w słabych lokalnych minimach funkcji straty.
  • Używanie zbyt małego Batch Size, co skutkuje bardzo niestabilnym procesem treningu, dużymi fluktuacjami funkcji straty i powolną zbieżnością.
  • Niedostosowanie współczynnika uczenia do wybranego rozmiaru partii, co może prowadzić do rozbieżności lub zbyt wolnego uczenia.
  • Ignorowanie ograniczeń pamięciowych sprzętu, co skutkuje błędami 'out of memory' przy próbie użycia zbyt dużej partii.
  • Nieprzeprowadzenie testów z różnymi rozmiarami partii, co uniemożliwia znalezienie optymalnego kompromisu między stabilnością, szybkością a jakością modelu.

Powiązane pojęcia