Dropout

Technika regularyzacji polegająca na losowym wyłączaniu części neuronów podczas treningu. Zmusza sieć do uczenia się bardziej odpornych reprezentacji.

Dropout to technika regularyzacji sieci neuronowych, która podczas treningu losowo „wyłącza” część neuronów — w danym kroku ich aktywacje są zerowane, więc tymczasowo znikają z sieci. Brzmi jak sabotaż własnego modelu, ale to działa: sieć nie może już polegać na pojedynczych, wyspecjalizowanych neuronach i uczy się reprezentacji bardziej odpornych na zmiany. Pomysł spopularyzowali Geoffrey Hinton i współpracownicy, a najczęściej cytowany opis pochodzi z pracy Srivastavy i in. z 2014 roku.

Jak to działa

Mechanizm sterujesz jednym parametrem — prawdopodobieństwem wyłączenia neuronu (dropout rate). Przy wartości 0.5 w każdym przejściu treningowym statystycznie połowa neuronów w danej warstwie idzie spać. Zbiór wyłączanych jednostek losuje się od nowa dla każdego batcha, więc model przy każdym kroku trenuje trochę inną „podsieć”. Efekt przypomina uśrednianie wielu mniejszych sieci (ensemble), tyle że za darmo, w obrębie jednego modelu.

Kluczowe: dropout działa tylko podczas treningu. W trybie inference (ewaluacja, produkcja) wszystkie neurony są aktywne, a ich wyjścia odpowiednio skalowane, żeby średnia aktywacja się zgadzała. Dlatego frameworki rozróżniają model.train() i model.eval() — to nie kosmetyka.

Przykład z praktyki

W PyTorch dorzucasz dropout jako zwykłą warstwę między warstwami liniowymi:

self.drop = nn.Dropout(p=0.5)

a w forward wołasz x = self.drop(x) po aktywacji. W Kerasie analogicznie: layers.Dropout(0.3). Typowy scenariusz: trenujesz klasyfikator obrazów, na zbiorze treningowym masz 99% accuracy, a na walidacyjnym 80% — klasyczny overfitting. Wrzucasz dropout do warstw gęstych, krzywe trening/walidacja zbliżają się do siebie, model lepiej generalizuje.

Częste błędy i mity

  • Zapominanie o model.eval() — jeśli zostawisz model w trybie treningowym przy ewaluacji, wyniki będą losowo gorsze i niepowtarzalne. Najczęstszy błąd początkujących.
  • „Więcej dropoutu = lepiej” — przy zbyt wysokim rate (np. 0.8) sieć nie ma z czego się uczyć i zaczyna underfittować. Zwykle startujesz od 0.20.5.
  • Dropout zamiast danych — to nie cudowny lek na mały zbiór. Czasem więcej dadzą augmentacja danych albo prostszy model.
  • Łączenie z BatchNorm — te dwie techniki potrafią ze sobą walczyć; kolejność warstw i dobór rate trzeba przetestować, a nie kopiować w ciemno.

Pojęcia powiązane: regularyzacja, overfitting, regularyzacja L1/L2, batch normalization, early stopping, ensemble learning oraz wariant DropConnect.