Optimizer State
Przerywasz uczenie modelu i zapisujesz jego wagi — liczby sterujące obliczeniami. Jutro wczytujesz je i podajesz tę samą następną porcję danych. Model zaczyna z tymi samymi ustawieniami, ale kolejna zmiana wag może być inna. Dlaczego? Algorytm uczenia mógł korzystać także z pamięci wcześniejszych zmian, której nie zapisałeś.
Optimizer State to pomocnicze dane utrzymywane między krokami przez optymalizator, czyli algorytm wyznaczający aktualizacje wag. Mogą obejmować zapamiętane kierunki zmian, statystyki ich wielkości i licznik kroków. To odrębne dane od samych wag modelu.

Wróćmy do przerwanego uczenia. Uprośćmy model do jednej wagi o wartości 1. Gradient jest liczbą opisującą, jak zmiana tej wagi wpływa na błąd. Dodatni gradient podpowiada zmniejszenie wagi; ujemny — zwiększenie. Wybieramy algorytm z momentum: zachowuje on ślad poprzednich gradientów i łączy go z bieżącym. Nie przechowuje wszystkich dawnych przykładów.
Załóżmy, że zapamiętany ślad wynosi 1, zachowujemy 80% jego wartości, nowy gradient wynosi 1, a wielkość kroku ustawiamy na 0,1. Po odtworzeniu historii nowy ślad to 0,8 × 1 + 1 = 1,8, więc waga spada do 1 − 0,1 × 1,8 = 0,82. Po utracie historii ślad zaczyna od nowego gradientu, czyli 1, a waga spada tylko do 0,9. Te własne liczby ilustrują regułę z dokumentacji PyTorch 2.11 SGD, uwaga o momentum. Stosujemy podstawowy wariant momentum, bez innych korekt aktualizacji.
Ile historii trzeba przechowywać?
SGD (Stochastic Gradient Descent) zmienia wagi na podstawie gradientu bieżącej porcji danych. Dodanie momentum daje mu także pamięć wcześniejszych kroków.
| Algorytm | Pomocnicza pamięć związana z wagami |
|---|---|
| Zwykły SGD bez momentum | Nie potrzebuje historii gradientów między krokami. |
| SGD z momentum | Jeden zapamiętany ślad na wagę. |
| Adam | Dwie statystyki na wagę: średnia gradientów i średnia ich kwadratów; dodatkowo licznik kroków. |
Adam wykorzystuje te statystyki do ustalania kolejnych zmian; opisuje je praca Kingmy i Ba, §2–3 i algorytm 1. Tabela opisuje podstawowe warianty, bez dodatkowych buforów implementacji.
W PyTorch zapis optymalizatora zawiera także ustawienia, np. wielkość kroku. Jego część state przechowuje dane pomocnicze przypisane do parametrów, czyli wag modelu, ale nie zapisuje samych parametrów. Rozdział opisuje dokumentacja Optimizer.state_dict.
ZeRO dzieli tę pamięć między urządzenia. W analizowanej w nim recepturze Mixed Precision Training do kategorii pamięci optymalizatora wliczono również kopię master (§3.1), czyli dokładniejszą kopię wag FP32. To liczby zapisane z większą precyzją, a nie historia gradientów; kategorie kosztu zależą od przyjętej receptury.
Do kontynuowania uczenia zapisujemy więc wagi i stan algorytmu. Poradnik PyTorch, „Saving & Loading a General Checkpoint” pokazuje oba zapisy. To nadal nie gwarantuje identycznego dalszego przebiegu: znaczenie mogą mieć także kolejność danych, losowania i harmonogram wielkości kroku. Stan optymalizatora rozwiązuje jeden konkretny brak, nie zastępuje całego zapisu treningu.
Co zabierzesz do kolejnego kroku?
Poniższa próba zawsze startuje od wagi 1. Wybierz zawartość zapisu, potem zmień nowy gradient. Sprawdź także −0,5: zachowany ślad może jeszcze zmniejszać wagę, mimo że sam bieżący gradient podpowiada jej zwiększenie. To demonstracja jednego kroku momentum, bez pomiaru jakości modelu.
Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.