ML Atlas

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 uczeniaSGDSGD + moment 0,9Adam
0,0001——0,933 (0,293)
0,0010,146 (0,093)0,868 (0,117)0,975 (0,889)
0,010,867 (0,127)0,970 (0,749)0,958 (0,928)
0,10,968 (0,570)0,977 (0,860)0,683 (0,507)
0,50,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) z torch.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 dostrojenia learning_rate_init i momentum.
  • 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.

Zobacz też