06 · Sieci · 4 min czytania · aktualizacja
Czym jest harmonogram współczynnika uczenia (learning rate schedule) i po co go stosować?
W skrócie
Harmonogram zmienia współczynnik uczenia w trakcie treningu: duże kroki na początku przyspieszają postęp, małe na końcu pozwalają osiąść w minimum.
Co to jest
Harmonogram współczynnika uczenia (ang. learning rate schedule) to reguła, według której współczynnik uczenia, czyli długość kroku optymalizatora, zmienia się w trakcie treningu sieci. Najczęściej krok jest duży na początku i maleje pod koniec: skokowo, wykładniczo, według kosinusa albo po krótkiej rozgrzewce. Harmonogram jest jednym z najważniejszych hiperparametrów treningu, obok samej wartości startowej.
Intuicja: szukając zgubionych kluczy na dużym parkingu, najpierw przechodzisz szybko między rzędami, a dopiero gdy wiesz, gdzie mniej więcej są, zwalniasz i patrzysz pod nogi. Stały duży krok to bieganie bez końca, stały mały krok to przeszukiwanie parkingu na kolanach.
W treningu z mini-batchami gradient jest zaszumiony, bo pochodzi z małej próbki danych. Duży krok sprawia, że ten szum wprawia wagi w ciągłe drgania wokół dobrego rozwiązania. Zmniejszenie kroku pod koniec tłumi drgania. Dlatego harmonogram poprawia wynik nawet wtedy, gdy optymalizator sam dopasowuje skalę kroków, jak Adam.
Mechanizm — dlaczego tak działa
Na początku treningu wagi są daleko od dobrego rozwiązania, gradient wskazuje wyraźny kierunek, a duży krok szybko obniża stratę. Później krajobraz straty wokół rozwiązania przypomina wąską dolinę. Krok większy niż szerokość doliny powoduje przeskakiwanie z jednego zbocza na drugie. Dla funkcji kwadratowej da się to policzyć: spadek gradientu jest stabilny tylko wtedy, gdy krok jest mniejszy niż 2 podzielone przez największą krzywiznę.
Przy stochastycznym spadku gradientu dochodzi drugi efekt. Nawet w samym minimum gradient z mini-batcha nie jest zerowy, więc stały krok utrzymuje wagi w „chmurze” wokół minimum, której rozmiar rośnie z długością kroku. Teoria SGD mówi, że do zbieżności krok musi maleć, ale nie za szybko. Klasyczne warunki to: suma kroków nieskończona, a suma ich kwadratów skończona, co spełnia np. krok proporcjonalny do 1/t.
W praktyce stosuje się kilka rodzin harmonogramów. Skokowy (step decay) mnoży krok przez np. 0,1 co ustaloną liczbę epok. Kosinusowy (cosine annealing) zmniejsza go płynnie według połowy okresu kosinusa, od wartości startowej do zera. Rozgrzewka (warmup) zwiększa krok liniowo przez pierwsze kroki, co jest standardem w transformerach i przy dużych batchach, bo na starcie statystyki Adama i normalizacji są niestabilne. One-cycle najpierw podnosi krok, potem go obniża. ReduceLROnPlateau zmniejsza krok dopiero wtedy, gdy strata walidacyjna przestaje spadać.
Harmonogram oddziałuje z innymi ustawieniami. Większy batch daje mniej zaszumiony gradient i zwykle pozwala na większy krok. Popularna heurystyka liniowego skalowania mówi, by przy k-krotnie większym batchu zwiększyć krok k razy, z rozgrzewką. To heurystyka, nie prawo: przy bardzo dużych batchach przestaje działać.
Zastrzeżenie: harmonogram nie naprawi źle dobranej wartości startowej. Zbyt mały krok pozostanie zbyt mały przez cały trening, a zbyt duży może rozbić trening w pierwszych krokach, zanim harmonogram zdąży go zmniejszyć.
Na przykładzie
Sieć 64-64-10 z ReLU trenowano na zbiorze Digits 8×8 (piksele podzielone przez 16, 1347 obrazków treningowych, 450 testowych) zwykłym SGD bez momentu, batch 32, przez 30 epok, z pięcioma ziarnami losowymi. Stały krok 0,01 jest zbyt ostrożny: strata treningowa kończy na 0,82, a trafność testowa na 89,8%. Krok 0,1 daje 96,6%, krok 0,5 daje 97,7%. Przy kroku 0,5 strata nie osiada jednak w miejscu: jej odchylenie standardowe z ostatnich pięciu epok wynosi 0,025. Z harmonogramem kosinusowym od 0,5 do zera to odchylenie spada do 0,0001, a trafność wynosi 97,8%. Skokowy (krok razy 0,1 co 10 epok) daje 97,4%.
Przy stałym kroku 1,0 jeden z pięciu treningów wypadł z doliny: skończył ze stratą 0,84 i trafnością 71,6%, co obniżyło średnią do 92,0%. Z kosinusem od tego samego 1,0 wszystkie pięć treningów zakończyło się powodzeniem, z trafnością od 96,2% do 97,6%. Uczciwie trzeba dodać, że przy kroku 0,5 stały wariant osiągnął niższą stratę treningową (0,011 wobec 0,029), bo dłużej robił duże kroki. Harmonogram nie przyspieszył tu nauki, tylko ją ustabilizował.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- PyTorch:
torch.optim.lr_scheduler.CosineAnnealingLR,StepLR,OneCycleLR,LinearLR(rozgrzewka), łączone przezSequentialLR;ReduceLROnPlateauwymaga podania straty walidacyjnej wscheduler.step(val_loss). - Pilnuj, czy harmonogram jest wywoływany co krok, czy co epokę:
T_maxwCosineAnnealingLRmusi być w tych samych jednostkach. - scikit-learn:
MLPClassifier(solver='sgd', learning_rate='invscaling')lub'adaptive'; dla domyślnego Adama harmonogram nie jest stosowany. - Rozsądny punkt startowy: znajdź największy krok, przy którym trening jeszcze się nie rozbiega (test zakresu współczynnika uczenia), weź nieco mniejszy i zastosuj kosinus z krótką rozgrzewką.
- Typowe wartości: Adam 1e-3 do 3e-4, SGD z momentem 0,1 dla sieci z normalizacją; rozgrzewka 1–5% wszystkich kroków.
Najczęstsze pytania
- Czy przy Adamie potrzebny jest harmonogram?
- Zazwyczaj tak. Adam dopasowuje skalę kroku dla każdej wagi, ale nie usuwa szumu mini-batchy, więc globalne zmniejszanie kroku pod koniec nadal poprawia wynik. Rozgrzewka jest przy Adamie szczególnie częsta.
- Który harmonogram wybrać?
- Kosinus z krótką rozgrzewką to dobry domyślny wybór, bo ma mało parametrów. Skokowy działa równie dobrze, jeśli dobrze dobierze się momenty spadku. ReduceLROnPlateau przydaje się, gdy nie wiadomo z góry, ile epok potrzeba.
- Po co restartować współczynnik uczenia (SGDR)?
- Ponowne zwiększenie kroku może wybić wagi z jednej doliny do innej, a zapis modeli z końca każdego cyklu daje tani zespół modeli. W wielu zastosowaniach jeden pełny cykl kosinusa okazuje się jednak wystarczający.
Źródła
- Loshchilov I., Hutter F., „SGDR: Stochastic Gradient Descent with Warm Restarts”, ICLR 2017.
- Goyal P. i in., „Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour”, arXiv:1706.02677, 2017.
- Smith L. N., „Cyclical Learning Rates for Training Neural Networks”, IEEE Winter Conference on Applications of Computer Vision (WACV), 2017.
- Goodfellow I., Bengio Y., Courville A., „Deep Learning”, MIT Press, 2016, podrozdz. 8.3 „Basic Algorithms”.
- Dokumentacja PyTorch, „How to adjust learning rate”: https://pytorch.org/docs/stable/optim.html