06 · Sieci · 5 min czytania · aktualizacja
SGD czy Adam — który optymalizator wybrać do trenowania sieci?
W skrócie
Adam szybciej zbiega i wybacza zły współczynnik uczenia, więc to dobry wybór domyślny. SGD z momentem po dostrojeniu mu dorównuje, a bywa lepszy w uogólnianiu.
Co to jest
Domyślnie wybierz Adama (a przy regularyzacji wag — AdamW) ze współczynnikiem uczenia ok. 0,001: zbiega szybko i działa w szerokim zakresie ustawień; SGD z momentem wybierz, gdy masz budżet na strojenie współczynnika uczenia i harmonogramu, a liczy się ostatni ułamek dokładności, zwłaszcza w klasycznych sieciach splotowych do obrazów. Po dostrojeniu oba zwykle osiągają bardzo podobny wynik; różnią się głównie tym, jak trudno do niego dojść.
SGD (stochastyczny spadek gradientu) robi krok w kierunku przeciwnym do gradientu policzonego na minipaczce, zawsze z tym samym współczynnikiem uczenia dla każdej wagi. Moment dodaje „bezwładność”: krok to wygładzona średnia ostatnich gradientów.
Adam łączy moment z adaptacyjnym współczynnikiem uczenia dla każdej wagi osobno: dzieli krok przez pierwiastek z wygładzonej średniej kwadratów gradientów. Wagi o dużych, hałaśliwych gradientach dostają mniejsze kroki, wagi o małych, rzadkich gradientach — większe.
Mechanizm — dlaczego tak działa
Dlaczego Adam wybacza. Dzieląc gradient przez jego typową wielkość, Adam normalizuje skalę kroku: aktualizacja każdej wagi ma rząd wielkości zbliżony do współczynnika uczenia, niezależnie od tego, czy gradient tej wagi wynosi 0,001 czy 10. Dzięki temu ten sam współczynnik działa w różnych warstwach i różnych modelach. Zwykły SGD przy tym samym współczynniku robi w jednych warstwach kroki za duże (rozbieżność), a w innych za małe (stagnacja).
Dlaczego SGD bywa lepszy w uogólnianiu. Wilson i in. (2017) pokazali przykłady, w których metody adaptacyjne osiągają ten sam lub niższy błąd treningowy co SGD, ale wyższy błąd testowy. Jedno z wyjaśnień: SGD z dużym współczynnikiem i szumem minipaczek preferuje szerokie, płaskie minima, które lepiej uogólniają. Efekt nie jest uniwersalny; duże porównania (Schmidt i in., 2021) nie znalazły optymalizatora, który wygrywa wszędzie.
Moment jest ważniejszy, niż się wydaje. Moment 0,9 uśrednia kierunek z ok. 10 ostatnich kroków, tłumi zygzaki w wąskich dolinach funkcji straty i efektywnie zwiększa krok w kierunkach zgodnych. Ale ten sam współczynnik uczenia z momentem daje ok. 10 razy większe efektywne kroki, więc łatwiej o rozbieżność.
Weight decay i Adam. Kara L2 dodana do straty w Adamie jest dzielona przez adaptacyjny mianownik, więc wagi o dużych gradientach są regularyzowane słabiej. AdamW (Loshchilov i Hutter, 2019) odejmuje część wagi bezpośrednio i jest dziś standardem w transformerach.
Harmonogram ma znaczenie dla obu. Wiele „przewag” jednego optymalizatora znika, gdy oba dostaną dobry harmonogram współczynnika uczenia: rozgrzewkę i spadek (kosinusowy, schodkowy).
Na przykładzie
Digits: 1347 obrazków treningowych, 450 testowych (random_state=0), piksele podzielone przez 16. Sieć MLP 64 → 128 → 128 → 10 z ReLU, minipaczki po 32, 30 epok, stały współczynnik uczenia, trzy ziarna losowości. Trafność na teście po 30 epokach (w nawiasie — po 2 epokach):
| Współczynnik uczenia | SGD | SGD + moment 0,9 | Adam |
|---|---|---|---|
| 0,0001 | — | — | 0,933 (0,293) |
| 0,001 | 0,146 (0,093) | 0,868 (0,117) | 0,975 (0,889) |
| 0,01 | 0,867 (0,127) | 0,970 (0,749) | 0,958 (0,928) |
| 0,1 | 0,968 (0,570) | 0,977 (0,860) | 0,683 (0,507) |
| 0,5 | 0,978 (0,431) | 0,099 (0,273) | — |
Najlepsze wyniki są praktycznie równe: zwykły SGD z dużym współczynnikiem 0,5 osiąga 0,978, SGD z momentem 0,977, Adam 0,975 (AdamW z weight_decay=0.01 — 0,974). Różnice są mniejsze niż rozrzut między ziarnami. Ulubieniec nie wygrywa — ale też nie przegrywa.
Różnica jest w drodze do celu. Adam z domyślnym 0,001 daje dobry wynik od razu i po 2 epokach ma już 0,889, podczas gdy najlepszy SGD po 2 epokach ma 0,431. Adam daje co najmniej 0,93 w trzech z czterech sprawdzonych wartości (od 0,0001 do 0,01). Zwykły SGD przy współczynniku 0,001 nie nauczył się prawie nic (0,146), a SGD z momentem przy 0,5 się rozbiegł (0,099). Okno dobrych ustawień SGD jest węższe i przesunięte w stronę dużych wartości.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
Reguła wyboru:
- Nowy model, mało czasu na strojenie, transformery →
torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01); dla dużych transformerów typowo lr 1e-4–3e-4 z rozgrzewką. - Sieci splotowe do obrazów, budżet na strojenie →
torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9, weight_decay=5e-4, nesterov=True)ztorch.optim.lr_scheduler.CosineAnnealingLR. - Przy SGD zawsze stroisz współczynnik uczenia w skali logarytmicznej (0,01, 0,03, 0,1, 0,3); przy Adamie wystarcza często 1e-4, 3e-4, 1e-3.
- Strata skacze lub rośnie → zmniejsz współczynnik; strata spada bardzo powoli → zwiększ albo przejdź na Adama.
- W scikit-learn:
MLPClassifier(solver="adam")jest domyślny;solver="sgd"wymaga ręcznego dostrojenialearning_rate_initimomentum. - Porównując optymalizatory, strój każdy osobno — porównanie przy jednym, wspólnym współczynniku uczenia jest z góry rozstrzygnięte.
Najczęstsze pytania
- Czy Adam zawsze trenuje szybciej?
- Prawie zawsze w pierwszych epokach, bo adaptacyjne kroki szybko dopasowują skalę. Przy długim treningu z dobrym harmonogramem SGD z momentem często go dogania. W praktyce liczy się czas do osiągnięcia wymaganej jakości, wliczając czas strojenia.
- Czym różni się Adam od AdamW?
- Sposobem regularyzacji wag. W Adamie z karą L2 regularyzacja przechodzi przez adaptacyjny mianownik i działa nierówno; w AdamW wagi są zmniejszane bezpośrednio o stały ułamek. Jeśli używasz weight decay, używaj AdamW.
- Czy są lepsze optymalizatory niż Adam?
- Powstało ich wiele (RAdam, LAMB, Lion i inne) i każdy ma przykłady, w których wygrywa. Duże porównania pokazują jednak, że dobrze dostrojony Adam pozostaje bardzo trudny do pobicia, a zyski z nowszych metod są zwykle mniejsze niż zyski ze strojenia współczynnika uczenia i harmonogramu.
Źródła
- Kingma D. P., Ba J. „Adam: A Method for Stochastic Optimization”, ICLR 2015.
- Wilson A. C., Roelofs R., Stern M., Srebro N., Recht B. „The Marginal Value of Adaptive Gradient Methods in Machine Learning”, NeurIPS 2017.
- Loshchilov I., Hutter F. „Decoupled Weight Decay Regularization”, ICLR 2019.
- Schmidt R. M., Schneider F., Hennig P. „Descending through a Crowded Valley — Benchmarking Deep Learning Optimizers”, ICML 2021.
- Goodfellow I., Bengio Y., Courville A. „Deep Learning”, MIT Press 2016, rozdz. 8.3 i 8.5.