ML Atlas

06 · Sieci · 4 min czytania · Interaktywne · aktualizacja

Czym jest learning rate i dlaczego za duży psuje trening?

W skrócie

Learning rate to współczynnik skalujący krok wzdłuż ujemnego gradientu przy aktualizacji wag. Za mały spowalnia trening, za duży daje oscylacje i rozbieżność.

Co to jest

Learning rate (współczynnik uczenia, oznaczany η lub α) to liczba, przez którą mnożymy gradient straty, zanim odejmiemy go od wag: waga ← waga − η × gradient. Gradient wskazuje kierunek najszybszego wzrostu straty, a learning rate decyduje, jak daleko w przeciwnym kierunku zrobić krok.

Występuje w każdej metodzie opartej na gradiencie: w sieciach neuronowych, regresji logistycznej, treningu dużych modeli językowych, a w boostingu drzew pod nazwą „eta” lub „shrinkage”. Zwykle jest pierwszym hiperparametrem, który warto stroić.

Intuicja: schodzisz z góry po ciemku. Za drobne kroki — dojdziesz, ale do rana. Za długie — przeskakujesz dolinę i lądujesz wyżej na przeciwległym zboczu, a każdy kolejny skok wynosi cię jeszcze wyżej.

Mechanizm — dlaczego tak działa

Gradient to informacja lokalna: mówi, jak zmienia się strata w najbliższym otoczeniu obecnych wag, ale nic nie mówi o tym, jak daleko leży dno doliny. Z rozwinięcia Taylora strata po kroku wynosi w przybliżeniu L(w) − η‖∇L‖², więc dla dostatecznie małego η strata musi spaść. Przybliżenie psuje się, gdy krok jest za długi w stosunku do krzywizny.

Dla straty kwadratowej, której największa krzywizna wynosi L (największa wartość własna hesjanu), zwykły spadek gradientu jest zbieżny dokładnie wtedy, gdy η < 2/L, a najszybciej w kierunku najbardziej stromym zbiega przy η ≈ 1/L. Przy η > 2/L każdy krok przeskakuje dno i ląduje wyżej na przeciwnym zboczu, a odległość od minimum rośnie geometrycznie — to rozbieżność. Każda gładka strata lokalnie wygląda jak taka parabola, stąd praktyczna reguła „podziel learning rate przez 2–10, gdy strata skacze w górę”.

Przy stałym kroku gradient stochastyczny (liczony na mini-batchu) nie dochodzi do samego dna: szum gradientu zostawia wagi krążące wokół minimum w promieniu proporcjonalnym do η. Warunki Robbinsa–Monro mówią, kiedy malejący krok zbiega: suma kroków musi być nieskończona (dojdziemy wszędzie), a suma ich kwadratów skończona (szum w końcu ucichnie). To uzasadnia harmonogramy learning rate: zaczynamy od większego kroku, by szybko zejść, i zmniejszamy go, by osiąść na dnie.

Zastrzeżenie: krzywizna nie jest jednakowa we wszystkich kierunkach. Jeden learning rate jest wtedy naraz za duży dla stromych kierunków i za mały dla płaskich — to główny powód, dla którego standaryzuje się wejścia i używa optymalizatorów adaptacyjnych, takich jak Adam.

Na przykładzie

Na zbiorze Diabetes (442 pacjentów, 10 standaryzowanych cech) dopasowałem regresję liniową zwykłym spadkiem gradientu w numpy, ze stratą (1/2n)‖Xw − y‖². Strata jest dokładnie kwadratowa, więc granicę da się policzyć: największa wartość własna hesjanu XᵀX/n wynosi 4,02, czyli 2/L = 0,497. Po 200 krokach przy η = 0,47 (tuż pod granicą) błąd średniokwadratowy wynosi 2864, prawie tyle co optimum z najmniejszych kwadratów (2860). Przy η = 0,52 (tuż nad granicą) po 10 krokach jest 15 180, po 50 — 2,5·10⁷, po 200 — 6,6·10¹⁹. Różnica 10% w learning rate dzieli zbieżność od eksplozji. Z kolei η = 0,01 po 200 krokach zostawia błąd 3324: kierunek dobry, tylko za wolno.

W sieci neuronowej wygląda to podobnie. MLPClassifier (64 neurony ukryte, Adam, 30 epok, random_state=0) na Digits 8×8 daje na teście 44,9% przy lr = 0,0001 (za wolno), 94,2% przy 0,001, 97,1% przy 0,01 i 18,2% przy 1,0 (trening się rozsypał).

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: ta sama sieć trenowana z sześcioma długościami kroku: za krótki krok pełznie, za długi wybucha.

Dane: Digits (ręcznie pisane cyfry 8×8) Diabetes (progresja cukrzycy)

W praktyce

  • Typowe starty: SGD 0,01–0,1; Adam/AdamW 0,001 (domyślne lr=1e-3 w PyTorch i learning_rate_init=0.001 w MLPClassifier). W XGBoost eta domyślnie 0,3, w LightGBM learning_rate 0,1.
  • Przeszukuj learning rate w skali logarytmicznej (0,1 → 0,01 → 0,001), nie liniowej.
  • Harmonogramy: stopniowe zmniejszanie (step decay), kosinusowy, cykliczny; rozgrzewka (warm-up) od małego η chroni przed wybuchem na starcie. W treningu LLM standardem jest rozgrzewka + kosinus, z najwyższą wartością rzędu 10⁻⁴.
  • Reguła liniowego skalowania: k razy większy batch → k razy większy learning rate (działa do pewnego k).
  • Typowy błąd: strata rośnie lub staje się NaN — learning rate za duży; strata spada powoli i liniowo przez wiele epok — za mały. Obie sytuacje wyglądają jak „model się nie uczy”.

Najczęstsze pytania

Jaki learning rate wybrać na początek?
Dla Adama 0,001, dla SGD z momentum 0,01–0,1 — potem sprawdź rząd wielkości wyżej i niżej. Przydatny jest test zakresu (Smith 2017): zwiększaj learning rate stopniowo w krótkim treningu i wybierz wartość tuż przed tą, przy której strata zaczyna rosnąć.
Co się dzieje, gdy learning rate jest za duży lub za mały?
Za duży: krok przeskakuje dno doliny, strata oscyluje lub rośnie, w skrajności wagi uciekają do nieskończoności (NaN). Za mały: trening posuwa się bardzo powoli, może utknąć na płaskim odcinku i wyglądać, jakby się nie uczył, choć kierunek jest dobry.
Dlaczego learning rate zmniejsza się w trakcie treningu?
Na początku duży krok szybko zbliża wagi do dobrego obszaru. Blisko dna szum gradientu z mini-batchy sprawia, że stały krok krąży wokół minimum zamiast w nim osiąść. Zmniejszanie kroku pozwala temu szumowi ucichnąć — to intuicja stojąca za warunkami Robbinsa–Monro.

Źródła

  • Goodfellow, Bengio, Courville (2016). Deep Learning, rozdz. 8.3.1 "Stochastic gradient descent", 11.4.1 "Manual hyperparameter tuning". https://www.deeplearningbook.org/contents/optimization.html
  • Zhang i in. Dive into Deep Learning, rozdz. 12.3 "Gradient descent", 12.11 "Learning rate scheduling". https://d2l.ai/chapter_optimization/gd.html
  • Robbins, H., Monro, S. (1951). "A stochastic approximation method". Annals of Mathematical Statistics 22(3), 400–407.
  • Smith, L. (2017). "Cyclical learning rates for training neural networks". WACV. arXiv:1506.01186
  • Goyal i in. (2017). "Accurate, large minibatch SGD: training ImageNet in 1 hour". arXiv:1706.02677

Zobacz też