Back to archive
#ai#llm#glossary#aigen

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.

Otwarta walizka z regulowanym pokrętłem i zwiniętą taśmą wcześniejszych ruchów, symbolizująca zapis ustawienia wraz z historią potrzebną do dalszego uczenia.

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.

AlgorytmPomocnicza pamięć związana z wagami
Zwykły SGD bez momentumNie potrzebuje historii gradientów między krokami.
SGD z momentumJeden zapamiętany ślad na wagę.
AdamDwie 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.