Back to archive
#ai#llm#glossary#aigen

Gradient Accumulation

Gradient Accumulation polega na dodawaniu gradientów z kilku kolejnych małych porcji danych przed jednym krokiem optymalizatora. Parametry pozostają przez ten czas niezmienione. Dzięki temu aktywacje dla całej efektywnej porcji nie muszą jednocześnie mieścić się w pamięci.

Małe strumienie napełniają jeden zbiornik z zamkniętym zaworem, obrazując zbieranie wkładów przed wspólną aktualizacją.

Przy równych porcjach po bb przykładów i kk przebiegach jeden krok obejmuje bkbk przykładów. Z pp replikami Data Parallelism jest to bkpbkp, jeśli każda dostaje odrębne dane. Dokumentacja PyTorch 2.11, Gradient accumulation pokazuje dodawanie gradientów i aktualizację dopiero po całej porcji.

Średnia musi mieć właściwy mianownik

Jeżeli gjg_j jest gradientem średniej straty z porcji liczącej njn_j przykładów, gradient średniej po wszystkich przykładach wynosi:

g=∑jnj∑inigj.g=\sum_j \frac{n_j}{\sum_i n_i}g_j.

Dzielenie każdej straty przez liczbę porcji wystarcza przy równych rozmiarach. Przy nierównych trzeba uwzględnić liczebności. Dla Cross-entropy uśrednianej po tokenach liczą się oceniane tokeny, również z uwzględnieniem Loss masking. To wynika z liniowości sumy i różniczkowania.

Własny przykład poniżej używa czterech celów [0,0,0,8][0,0,0,8], jednej wagi w=1w=1 i straty ℓ=12(w−y)2\ell=\frac12(w-y)^2. Gradienty to [1,1,1,−7][1,1,1,-7], więc średnia wynosi −1-1. Jeden krok SGD z learning rate 0,25 daje w=1,25w=1{,}25, niezależnie od podziału danych. Zobacz, co zepsuje podział 3+1 i zwykła średnia dwóch średnich.

Zgodność z dużym batchem zakłada tę samą funkcję straty i te same parametry podczas wszystkich przebiegów. Operacje zależne od całego batcha, losowość i zaokrąglenia mogą ją naruszyć. Wykonanie kroku optymalizatora po każdej porcji zmienia już sam algorytm.

Przy DDP można odroczyć synchronizację przez no_sync(). Kontekst musi obejmować również forward; pierwszy przebieg poza nim synchronizuje zgromadzone gradienty. Opisuje to dokumentacja DistributedDataParallel.

Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.