ML Atlas

04 · Ocena · 4 min czytania · Interaktywne · aktualizacja

Czym jest przeuczenie (overfitting) i jak je rozpoznać?

W skrócie

Przeuczony model zapamiętuje szum ze zbioru treningowego i gorzej działa na nowych danych, a niedouczony jest za prosty, by uchwycić nawet główny wzorzec.

Co to jest

Przeuczenie (overfitting) to sytuacja, w której model dopasował się do zbioru treningowego tak dokładnie, że nauczył się także jego przypadkowych cech — szumu, wyjątków, błędów w etykietach — i przez to gorzej przewiduje na nowych danych. Niedouczenie (underfitting) to sytuacja odwrotna: model jest zbyt prosty albo trenowany zbyt krótko, by uchwycić nawet główną zależność, więc myli się zarówno na treningu, jak i na nowych danych.

Intuicja: student, który wykuł na pamięć odpowiedzi z zeszłorocznego egzaminu, zda go na 100%, ale na nowym zestawie pytań polegnie — to przeuczenie. Student, który zapamiętał tylko „odpowiedź to zwykle B”, wypadnie słabo na obu egzaminach — to niedouczenie. Chcemy kogoś pomiędzy: kto zrozumiał zasady i dlatego radzi sobie z pytaniami, których nie widział.

Kluczowe jest to, że przeuczenia nie widać na danych treningowych. Tam przeuczony model wygląda najlepiej. Ujawnia się dopiero w porównaniu wyniku treningowego z wynikiem na danych, których model nie oglądał.

Mechanizm — dlaczego tak działa

Każdy zbiór treningowy to tylko próbka. Zawiera prawdziwy sygnał (np. „większe guzy częściej są złośliwe”) i przypadkowość tej konkretnej próbki (ten jeden pacjent o nietypowych wartościach). Algorytm uczący minimalizuje błąd na treningu i nie ma jak odróżnić sygnału od szumu — dla niego oba są po prostu wzorcami do dopasowania.

Model o dużej pojemności (głębokie drzewo, sieć z milionami wag, wielomian wysokiego stopnia) potrafi dopasować niemal dowolny układ punktów, więc dopasuje też szum. Szum w nowych danych jest jednak inny, więc te „nauczone” szczegóły przestają pasować i dokładają błędu. Model o małej pojemności (prosta przez wyraźnie zakrzywione dane, drzewo o jednym podziale) nie zmieści nawet sygnału — to niedouczenie.

W języku statystyki to kompromis obciążenia i wariancji. Niedouczony model ma duże obciążenie (bias): systematycznie myli się w ten sam sposób. Przeuczony ma dużą wariancję: wytrenowany na innej próbce z tej samej populacji dałby wyraźnie inne przewidywania. Błąd na nowych danych to w przybliżeniu suma obu składników i nieredukowalnego szumu, dlatego minimum leży gdzieś pośrodku skali złożoności.

Ryzyko przeuczenia rośnie, gdy danych jest mało w stosunku do liczby parametrów, gdy cech jest dużo (łatwiej znaleźć przypadkową korelację), gdy etykiety są zaszumione i gdy trenujemy zbyt długo. Maleje dzięki większej liczbie danych, regularyzacji, prostszemu modelowi, wczesnemu zatrzymaniu i uśrednianiu wielu modeli.

Zastrzeżenie: obraz „U-kształtnej” krzywej błędu nie zawsze jest kompletny. W bardzo dużych sieciach obserwuje się podwójne zejście (double descent) — po przekroczeniu progu, przy którym model dokładnie interpoluje dane, błąd testowy może znowu spadać. Nie unieważnia to pojęcia przeuczenia, ale pokazuje, że „liczba parametrów” to niedoskonała miara złożoności.

Na przykładzie

Zbiór Breast Cancer Wisconsin (569 guzów, 30 cech, klasa pozytywna = złośliwy) podzieliłem warstwowo na 426 przykładów treningowych i 143 testowe (train_test_split, test_size=0.25, random_state=0) i trenowałem drzewa decyzyjne o rosnącej maksymalnej głębokości. Drzewo o głębokości 1 (jeden podział, 2 liście) ma trafność 92,5% na treningu i 87,4% na teście — to niedouczenie: myli się sporo i tu, i tu. Drzewo o głębokości 3 (8 liści): 97,4% na treningu i 95,8% na teście.

Drzewo bez limitu głębokości rośnie, aż każdy liść jest czysty (18 liści), i osiąga 100% na treningu, ale tylko 94,4% na teście — mniej niż drzewo trzypoziomowe. Te dodatkowe liście opisują pojedyncze nietypowe przypadki z próbki treningowej, a nie regułę. Różnica między wynikiem treningowym a testowym (tu 5,6 punktu procentowego) jest podstawowym sygnałem przeuczenia. Na zbiorze testowym liczącym 143 przykłady jeden błąd to 0,7 punktu, więc drobne różnice między głębokościami 3–5 mieszczą się w szumie — dlatego głębokość wybiera się walidacją krzyżową, a nie jednym podziałem.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: wielomiany stopnia 0–15 dopasowane do 20 zaszumionych punktów sinusoidy: błąd treningowy stale spada, a błąd na 200 nowych punktach najpierw maleje, potem rośnie lawinowo.

Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)

W praktyce

  • Zawsze porównuj wynik treningowy z walidacyjnym: cross_validate(model, X, y, return_train_score=True). Wysoki trening i niski walidacja = przeuczenie; oba niskie = niedouczenie.
  • Narysuj krzywą walidacyjną (ValidationCurveDisplay) dla parametru złożoności, np. max_depth, C, alpha, i krzywą uczenia (LearningCurveDisplay), by sprawdzić, czy pomogą nowe dane.
  • Środki na przeuczenie: regularyzacja (Ridge, C w LogisticRegression), ograniczenie drzewa (max_depth, min_samples_leaf), dropout i weight decay w PyTorch, wczesne zatrzymanie, więcej danych, augmentacja.
  • Środki na niedouczenie: bogatszy model, dodatkowe cechy (np. PolynomialFeatures), słabsza regularyzacja, dłuższy trening.
  • Typowy błąd: wybór modelu „pod zbiór testowy” wielokrotnymi próbami — to też przeuczenie, tylko na poziomie decyzji badacza.

Najczęstsze pytania

Jak duża różnica między treningiem a walidacją oznacza przeuczenie?
Nie ma uniwersalnego progu. Liczy się, czy zmniejszenie złożoności poprawia wynik walidacyjny. Pewna luka jest normalna — modele prawie zawsze wypadają lepiej na danych, które widziały. Problemem jest luka, która rośnie, gdy dokładamy złożoności, a wynik walidacyjny przy tym spada.
Czy 100% trafności na treningu zawsze oznacza przeuczenie?
Nie zawsze. Lasy losowe i duże sieci często idealnie dopasowują trening, a mimo to dobrze uogólniają. O przeuczeniu świadczy dopiero wynik na danych niewidzianych i porównanie z prostszymi wariantami.
Czy więcej danych zawsze leczy przeuczenie?
Zwykle pomaga, bo szum w większej próbce częściej się znosi i trudniej go zapamiętać. Nie pomoże na niedouczenie — model za prosty pozostanie za prosty niezależnie od liczby przykładów. Krzywa uczenia pokazuje, z którym przypadkiem masz do czynienia.

Źródła

  • James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., Springer 2021, rozdz. 2.2 (Assessing Model Accuracy).
  • Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., Springer 2009, rozdz. 7 (Model Assessment and Selection).
  • Goodfellow I., Bengio Y., Courville A. „Deep Learning”, MIT Press 2016, rozdz. 5.2 (Capacity, Overfitting and Underfitting).
  • Geman S., Bienenstock E., Doursat R. (1992). Neural Networks and the Bias/Variance Dilemma. Neural Computation, 4(1).
  • Dokumentacja scikit-learn: Underfitting vs. Overfitting — https://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.html

Zobacz też