ML Atlas

Kurs uczenia maszynowego od zera · Lekcja 3.1 · 14 z 33 gotowych lekcji · 10 min

Przeuczenie: gdy model uczy się na pamięć

W skrócie

Elastyczny model potrafi idealnie dopasować się do danych treningowych i zawieść na nowych. Gdy rośnie stopień wielomianu, błędy się rozchodzą.

Rozgrzewka Dwa pytania z wcześniejszych lekcji. Minuta, a lekcji nie blokuje.
Z lekcji 2.6: Metryka i próg pod koszt pomyłek Filtr spamu: dobry mail w spamie kosztuje 5 razy więcej niż spam w skrzynce. Gdzie postawić próg na P(spam)?

Pokaż odpowiedź

Poprawna odpowiedź: Wysoko, około 5 / (5 + 1) ≈ 0,83: do spamu tylko pewne przypadki

Tu droższy jest fałszywy alarm, więc próg idzie w górę: c_FP / (c_FP + c_FN) = 5/6 ≈ 0,83, jeśli model jest skalibrowany. W labie droższy alarm też przesuwa najtańszy próg powyżej 0,5.

Z lekcji 2.5: Niezrównoważone klasy Wagi klas przy 8 złośliwych w nauce podnoszą czułość z 61,5% do 80,0%. Czego nie robią?

Pokaż odpowiedź

Poprawna odpowiedź: Nie dodają nowych przykładów, więc do pełnych danych wciąż czegoś brakuje

Wagi zmieniają tylko to, ile kosztuje pomyłka na każdej klasie. Pełne dane z wagami dają czułość 86,8%, więc przy 8 złośliwych brakuje 6,8 pkt proc.

Dwoje uczniów szykuje się do matury z matematyki. Jedna przerabia idee stojące za zadaniami. Drugi wkuwa na pamięć odpowiedzi do wszystkich arkuszy z poprzednich lat, słowo w słowo. Na starych arkuszach drugi jest bezbłędny. Potem przychodzi prawdziwy egzamin z nowymi liczbami. Na kogo stawiasz? Modele stoją przed dokładnie tym wyborem, a zostawiony sam sobie elastyczny model chętnie zostanie tym drugim uczniem.

Przewidź, potem sprawdź Dopasowujesz wielomiany stopnia od 0 do 10 do 30 pacjentów. Który stopień da najmniejszy błąd na pacjentach testowych?
Jak bardzo jesteś pewny(-a)?

Eksperyment

Ten interaktywny eksperyment działa w przeglądarce z włączonym JavaScriptem. Tekst wokół opisuje, co w nim widać.

Pokaż odpowiedź

Poprawna odpowiedź: Stopień 1 (zwykła prosta)

Najlepszy jest stopień 1: błąd testowy 64,1. Stopień 3 ma 65,2, stopień 6 70,3, a stopień 10 aż 132,6, choć błąd na danych treningowych spada z 60,2 (stopień 1) do 51,1 (stopień 10). Większa elastyczność zmniejsza błąd treningowy, ale nie testowy.

Spróbuj

  • Zacznij od stopnia 1 i zanotuj oba błędy. Potem podnoś suwak stopnia o jeden krok i patrz, jak spada błąd treningowy.
  • Idź dalej i obserwuj błąd testowy. Znajdź stopień, przy którym jest najmniejszy — to najlepsze miejsce dla tej próbki.
  • Przesuń suwak stopnia na maksimum. Spójrz na krzywą między punktami: czy to wciąż rozsądny opis tego, jak BMI wiąże się z postępem choroby?
  • Porównaj różnicę między błędem treningowym a testowym przy najniższym i najwyższym stopniu. Rosnąca różnica to odcisk palca przeuczenia.

Gdy już sprawdzisz to w labie, zobaczmy, co się tam właściwie działo.

Pomysł w prostych słowach

W lekcji 3 dopasowaliśmy prostą. Prosta jest sztywna: nie wygnie się za krzywą, nawet gdy dane wyraźnie się wyginają. Wielomian to bardziej elastyczna rodzina krzywych:

ŷ = w₀ + w₁x + w₂x² + … + w_d·x^d

Stopień d steruje elastycznością. Stopień 1 to prosta; stopień 2 może się raz wygiąć; wyższe stopnie mogą falować coraz bardziej. Przy wystarczająco wysokim stopniu wielomian przejdzie przez każdy punkt treningowy.

Brzmi jak sukces, ale prawdziwe dane zawierają szum — przypadkową zmienność, której nie wyjaśnia żadna cecha. Dwoje pacjentów z tym samym BMI nie choruje identycznie. Model na tyle giętki, żeby trafić w każdy punkt, uczy się nie tylko trendu, ale też szumu, czyli przypadków tej konkretnej próbki. To jest przeuczenie: model coraz lepiej pasuje do danych treningowych, a jego przewidywania dla nowych danych się pogarszają. Odwrotna porażka, model zbyt sztywny, żeby uchwycić prawdziwy wzorzec, to niedouczenie.

Przykład spoza medycyny: model kredytowy „odkrywa” w danych treningowych, że klienci z jednego konkretnego kodu pocztowego zawsze spłacają raty — bo akurat trafiło się ich trzech i wszyscy spłacili. To nie jest wiedza o świecie, tylko przypadek, który elastyczny model wziął za regułę. Na nowych klientach z tego kodu reguła nie ma żadnej mocy.

Dlaczego to działa

Weźmy małą losową próbkę pacjentów z cukrzycą z lekcji 3 i podzielmy ją na punkty treningowe i testowe. Mała próbka ułatwia zobaczenie efektu, bo kilka nietypowych punktów potrafi mocno zepchnąć giętką krzywą z kursu.

Prześledźmy, co dzieje się z dwoma błędami, gdy stopień rośnie. Błąd treningowy ciągle spada: bardziej giętka krzywa zawsze poradzi sobie co najmniej tak samo dobrze z punktami, do których ją dopasowano, bo może naśladować każdą prostszą krzywą. Błąd testowy zachowuje się inaczej. Najpierw też spada, bo dodatkowa elastyczność łapie prawdziwą strukturę. Potem, od pewnego stopnia, zaczyna rosnąć, bo krzywa wygina się już za pojedynczymi punktami treningowymi, a te wygięcia są złe dla wszystkich innych. Wychodzi słynny kształt litery U.

Ten mechanizm ma nazwę: kompromis między obciążeniem a wariancją. Sztywny model ma duże obciążenie — myli się systematycznie, jakąkolwiek próbkę zobaczy. Bardzo giętki model ma dużą wariancję — wylosuj trochę inną próbkę, a dostaniesz zupełnie inną krzywą. Najlepszy model leży pośrodku: na tyle giętki, żeby iść za sygnałem, i na tyle sztywny, żeby ignorować szum. Gdzie leży ten punkt, zależy od ilości danych: przy większej liczbie punktów szum się uśrednia i większa elastyczność staje się bezpieczna.

Częsty błąd

Podstawowy błąd to wybieranie złożoności modelu według błędu treningowego. Błąd treningowy zawsze nagradza elastyczność, więc zawsze zagłosuje za najbardziej złożonym modelem — za uczniem, który wkuwa. Drugi błąd to przekonanie, że przeuczenie jest rzadkie albo egzotyczne. To domyślne zachowanie każdego elastycznego modelu na ograniczonych danych, a to obejmuje drzewa decyzyjne, sieci neuronowe i większość tego, co zbudujesz. Lekarstwem nie jest unikanie elastycznych modeli, tylko ich kontrolowanie: prostsze modele, więcej danych albo regularyzacja, która karze skrajne wagi.

W tym rozumowaniu kryje się haczyk: najlepszy stopień wskazaliśmy, patrząc na błąd testowy, a przed tym właśnie ostrzegała lekcja 2. W następnej lekcji nauczymy się uczciwie wybierać ustawienia — za pomocą walidacji i walidacji krzyżowej.

Złap błąd AI

Tak odpowiedział chatbot. Jedno zdanie jest merytorycznie błędne. Które?

Pytanie: Dopasowałem wielomiany stopnia od 1 do 10 do 30 pacjentów, BMI względem postępu choroby. Który stopień wybrać?

Odpowiedź chatbota

Pokaż błędne zdanie

Błędne zdanie: Dlatego stopień z najmniejszym błędem treningowym, tutaj stopień 10, najlepiej przewidzi też nowych pacjentów.

Błąd treningowy zawsze nagradza elastyczność, więc nie może wybrać stopnia. W lekcji stopień 10 ma najmniejszy błąd treningowy (51,1 wobec 60,2 dla stopnia 1), ale jego błąd testowy to 132,6, ponad dwa razy więcej niż 64,1 zwykłej prostej.

Quiz

Trzy pytania na sprawdzenie się. Wybierz odpowiedź albo rozwiń odpowiedź pod pytaniem. Z klawiatury: strzałki wybierają, Enter albo spacja zatwierdza.

1. Co dzieje się z błędem treningowym, gdy rośnie stopień wielomianu?
Pokaż odpowiedź

Poprawna odpowiedź: Spada albo stoi w miejscu, bo giętsza krzywa może skopiować prostszą

Wielomian wyższego stopnia zawiera każdy niższy jako szczególny przypadek, więc nigdy nie dopasuje się do punktów treningowych gorzej.

2. Błąd treningowy jest malutki, a testowy duży. Jaka diagnoza jest najbardziej prawdopodobna?
Pokaż odpowiedź

Poprawna odpowiedź: Przeuczenie, czyli model dopasowany do szumu treningu

Duża różnica między błędem treningowym a testowym oznacza, że model nauczył się szczegółów próbki, które się nie uogólniają.

3. Dlaczego więcej danych treningowych zwykle czyni elastyczny model bezpieczniejszym?
Pokaż odpowiedź

Poprawna odpowiedź: Bo przy większej liczbie punktów szum się uśrednia, więc krzywa nie goni szumu

Szum w pojedynczych punktach zostaje, ale przy wielu punktach się znosi, więc dopasowanie idzie za prawdziwym trendem.

Najważniejsze wnioski

  • Przeuczenie to dopasowanie do szumu w danych treningowych, przez które wynik na teście się pogarsza.
  • Błąd treningowy zawsze nagradza elastyczność; przeuczenie ujawniają tylko dane, na których model się nie uczył.
  • Błąd testowy zwykle układa się w literę U: z jednej strony niedouczenie, z drugiej przeuczenie.
  • Więcej danych, prostsze modele i regularyzacja zmniejszają przeuczenie.

Głębiej: wzór, kod, praktyka

Matematyka

Wielomian stopnia d ma d + 1 wag: ŷ = w₀ + w₁x + … + w_d·x^d. Dopasowanie metodą najmniejszych kwadratów minimalizuje błąd treningowy. Każdy wielomian stopnia d − 1 jest też wielomianem stopnia d (z w_d = 0), więc najlepszy błąd treningowy może tylko zostać taki sam albo spaść, gdy d rośnie. Przy n punktach o różnych x stopień n − 1 przechodzi przez każdy punkt i błąd treningowy wynosi 0.

Błąd testowy rozkłada się na trzy części: E[(y − ŷ)²] = bias² + wariancja + σ². Obciążenie to systematyczne pudło zbyt sztywnego modelu. Wariancja mówi, jak bardzo dopasowana krzywa zmienia się między próbami. σ² to szum, którego nikt nie usunie. Wyższy stopień obniża obciążenie i podnosi wariancję, co daje kształt litery U.

Lab podaje RMSE, czyli √MSE, w jednostkach celu.

W kodzie (Python)

Trzydziestu losowych pacjentów z cukrzycą jako zbiór treningowy, pozostali pacjenci (w zakresie BMI zbioru treningowego) jako testowy. To ten sam rodzaj eksperymentu co w labie, ale inna losowa próba, więc liczby różnią się od labowych:

import numpy as np
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True, scaled=False)
x, y = X["bmi"].to_numpy(), y.to_numpy()
perm = np.random.default_rng(0).permutation(len(x))
tr, te = perm[:30], perm[30:]
te = te[(x[te] >= x[tr].min()) & (x[te] <= x[tr].max())]  # zostajemy w zakresie danych treningowych
rmse = lambda i, p: np.sqrt(np.mean((y[i] - p(x[i])) ** 2))
for deg in (1, 3, 10):
    p = np.polynomial.Polynomial.fit(x[tr], y[tr], deg)  # dopasowanie na przeskalowanym x, więc stopień 10 jest stabilny
    print(f"degree {deg:2d}: train RMSE {rmse(tr, p):6.1f}, test RMSE {rmse(te, p):6.1f}")

Wynik

degree  1: train RMSE   61.6, test RMSE   63.5
degree  3: train RMSE   60.9, test RMSE   63.8
degree 10: train RMSE   54.7, test RMSE  199.5

Błąd treningowy stale maleje ze stopniem. Błąd testowy stopnia 10 jest ponad trzy razy większy niż stopnia 1.

Dla praktyka
  • Nigdy nie wybieraj stopnia ani żadnego innego ustawienia elastyczności według błędu treningowego. Zawsze zagłosuje on na najbardziej elastyczny model.
  • Patrz na lukę między błędem treningowym a testowym. Mały błąd treningowy przy dużym testowym to przeuczenie. Oba duże to niedouczenie.
  • Wielomiany wysokich stopni „wybuchają” poza zakresem danych treningowych. Nie używaj ich do ekstrapolacji.
  • Przy jednej małej próbie obraz jest zaszumiony. Powtórz podział z kilkoma ziarnami, zanim uwierzysz w „najlepszy stopień”.
  • Żeby okiełznać elastyczny model, spróbuj najpierw więcej danych, prostszego modelu albo regularyzacji (ridge, lasso), zanim całkiem zrezygnujesz z elastyczności.

Więcej w Atlasie

Hasła encyklopedii o pojęciach z tej lekcji: