ML Atlas

06 · Sieci · 4 min czytania · Interaktywne · aktualizacja

Czym jest regularyzacja i jak L2 oraz dropout ograniczają przeuczenie?

W skrócie

Regularyzacja ogranicza dopasowanie modelu do szumu: kara za duże wagi (L2), losowe wyłączanie neuronów (dropout) i wcześniejszy koniec treningu.

Co to jest

Regularyzacja to każda modyfikacja treningu, która ma zmniejszyć błąd na nowych danych kosztem (zwykle) nieco większego błędu na treningu. Trzy najczęstsze w sieciach neuronowych to kara L2 za duże wagi (weight decay), dropout — losowe zerowanie neuronów podczas treningu — oraz early stopping.

W modelach liniowych regularyzacją jest ridge (L2) i lasso (L1); w drzewach ograniczenie głębokości i kary λ, γ w XGBoost; w dużych modelach językowych weight decay i dropout przy dostrajaniu.

Intuicja: uczeń, któremu nie wolno pisać długich ściąg, musi zapamiętać zasady zamiast konkretnych zadań. Regularyzacja to ograniczenie „miejsca na ściągę”: model może dopasować dane, ale tylko prostym, gładkim rozwiązaniem.

Mechanizm — dlaczego tak działa

L2: do straty dodajemy λ/2 × suma kwadratów wag. Gradient tej kary to λ × waga, więc każdy krok ściąga wagi w stronę zera proporcjonalnie do ich wielkości: waga ← waga − η(gradient + λ × waga). Duże wagi oznaczają ostre reakcje na małe zmiany wejścia — dokładnie to, co pozwala zapamiętać pojedynczy przykład. Kara faworyzuje rozwiązania o małych wagach, czyli gładsze funkcje; w ujęciu bayesowskim to prior normalny na wagach. Kara L1 (suma wartości bezwzględnych) zamiast tego zeruje część wag — robi selekcję cech.

Dropout (Srivastava i in. 2014): w każdym kroku każdy neuron ukryty jest wyłączany z prawdopodobieństwem p (zwykle 0,5 dla warstw gęstych, 0,1–0,2 w transformerach). Neuron nie może polegać na obecności konkretnego sąsiada, bo ten w części kroków nie istnieje — musi nauczyć się cech użytecznych w wielu kombinacjach. Równoważnie: trenujemy naraz wykładniczo wiele podsieci dzielących wagi, a przy predykcji uśredniamy je przybliżeniem (wszystkie neurony włączone, aktywacje przeskalowane). Dropout wyłącza się na czas oceny.

Early stopping kończy trening, gdy strata walidacyjna przestaje spadać. Działa jak regularyzacja, bo liczba kroków ogranicza, jak daleko wagi mogą odejść od startu; dla modeli liniowych jest to matematycznie zbliżone do L2 (Goodfellow i in. 2016).

Zastrzeżenie: regularyzacja wymaga strojenia. Za duże λ lub p to niedouczenie — model nie dopasuje nawet prawdziwych reguł. Siłę dobiera się na walidacji, nigdy na treningu, bo na treningu regularyzacja zawsze „szkodzi”.

Na przykładzie

Zbiór Diabetes (442 pacjentów, 10 cech, cel: postęp choroby po roku) podzieliłem 75/25 (random_state=0) i rozszerzyłem cechy o wszystkie kwadraty i iloczyny par (PolynomialFeatures(2)), co dało 65 cech na 331 przykładów treningowych. Potem dopasowałem regresję grzbietową (Ridge, czyli kara L2) o różnej sile α, po standaryzacji.

Prawie bez kary (α = 10⁻⁶) model ma na treningu R² = 0,647, a na teście tylko 0,244, przy normie wektora wag 1139 — dopasował szum. Przy α = 100 R² treningowe spada do 0,603, za to testowe rośnie do 0,340, a norma wag maleje do 37. Przy α = 10 000 kara jest za silna: R² wynosi 0,113 na treningu i 0,080 na teście (niedouczenie). Dla porównania zwykła regresja liniowa na 10 oryginalnych cechach daje na teście 0,359: bogatszy model opłaca się tylko wtedy, gdy jest dobrze zregularyzowany.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: ścieżki wag 10 cech cukrzycy: ridge zmniejsza wszystkie wagi płynnie, lasso zeruje je po kolei — najpierw s2, na końcu BMI — a R² na teście spada z 0,470 do 0,386, gdy zostają 3 cechy.

Dane: Diabetes (progresja cukrzycy)

W praktyce

  • scikit-learn: LogisticRegression(C=1.0) — C to odwrotność λ, mniejsze C to silniejsza regularyzacja; Ridge(alpha=...), Lasso(alpha=...); MLPClassifier(alpha=1e-4) to kara L2.
  • PyTorch: weight_decay w optymalizatorze (w AdamW prawdziwy decay, w Adamie kara L2 dodawana do gradientu); nn.Dropout(p=0.5) i pamiętaj o model.eval() przy ocenie.
  • XGBoost: reg_lambda=1 (L2 na wartościach liści), reg_alpha=0, gamma=0, max_depth=6, min_child_weight=1.
  • Transformery i LLM: dropout 0,1, weight decay 0,01–0,1; w dużych modelach uczonych przez jedną epokę dropout często się pomija.
  • Typowy błąd: ocena modelu z dropoutem bez przełączenia w tryb ewaluacji — przewidywania losowo zmieniają się między wywołaniami.

Najczęstsze pytania

Czym różni się regularyzacja L1 od L2?
L2 karze kwadraty wag: ściąga wszystkie proporcjonalnie, żadnej nie zeruje, daje gładkie rozwiązania. L1 karze wartości bezwzględne: ściąga wszystkie o stałą wielkość, więc małe wagi trafiają dokładnie w zero — model robi selekcję cech. Elastic net łączy obie kary.
Jak działa dropout i dlaczego pomaga?
W każdym kroku treningu losowo zeruje część neuronów (zwykle połowę w warstwach gęstych). Żaden neuron nie może polegać na konkretnych sąsiadach, więc sieć uczy się cech odpornych na ich brak. Przy predykcji wszystkie neurony są włączone — to przybliżone uśrednienie wielu podsieci.
Kiedy użyć regularyzacji?
Gdy wynik na treningu jest wyraźnie lepszy niż na walidacji, a więcej danych nie ma. Zacznij od early stoppingu i weight decay (λ rzędu 10⁻⁴–10⁻²), potem dodaj dropout. Jeśli oba wyniki są słabe, problemem jest niedouczenie — regularyzacja go pogłębi.

Źródła

  • Srivastava, Hinton, Krizhevsky, Sutskever, Salakhutdinov (2014). "Dropout: a simple way to prevent neural networks from overfitting". JMLR 15, 1929–1958.
  • Krogh, A., Hertz, J. (1992). "A simple weight decay can improve generalization". NeurIPS 4.
  • Goodfellow, Bengio, Courville (2016). Deep Learning, rozdz. 7.1 "Parameter norm penalties", 7.8 "Early stopping", 7.12 "Dropout". https://www.deeplearningbook.org/contents/regularization.html
  • Hastie, Tibshirani, Friedman (2009). The Elements of Statistical Learning, 2nd ed., rozdz. 3.4 "Shrinkage methods".
  • Zhang i in. Dive into Deep Learning, rozdz. 3.7 "Weight decay", 5.6 "Dropout". https://d2l.ai/chapter_multilayer-perceptrons/dropout.html

Zobacz też