04 · Ocena · 4 min czytania · Interaktywne · aktualizacja
Co pokazuje krzywa uczenia (learning curve) i jak z niej odczytać, czy pomogą nowe dane?
W skrócie
Krzywa uczenia pokazuje wynik treningowy i walidacyjny modelu w zależności od liczby przykładów. Mówi, czy więcej danych pomoże, czy model jest za prosty.
Co to jest
Krzywa uczenia (learning curve) to wykres wyniku modelu na zbiorze treningowym i walidacyjnym w funkcji liczby przykładów treningowych. Trenuje się ten sam model na coraz większych fragmentach danych — np. 5%, 10%, 20%… 100% — i dla każdego rozmiaru zapisuje oba wyniki. Kształt i odległość dwóch krzywych odpowiadają na jedno z najdroższych pytań w projekcie: czy warto zbierać więcej danych?
Uwaga na terminologię: w uczeniu głębokim „krzywą uczenia” nazywa się też wykres straty w funkcji epok. To inne narzędzie — pokazuje przebieg optymalizacji, a nie wpływ liczby danych. To hasło dotyczy wersji klasycznej, z liczbą przykładów na osi poziomej.
Mechanizm — dlaczego tak działa
Przy kilku przykładach model łatwo dopasowuje je wszystkie, więc wynik treningowy jest wysoki, a walidacyjny niski: model nauczył się przypadkowości małej próbki. Gdy przykładów przybywa, coraz trudniej zapamiętać każdy z nich — wynik treningowy zwykle spada. Jednocześnie szum się uśrednia, a model widzi coraz więcej prawdziwej różnorodności — wynik walidacyjny rośnie. Obie krzywe zbliżają się do siebie i dążą do wspólnej granicy, wyznaczonej przez pojemność modelu i szum w danych.
Z tego wynikają dwa typowe obrazy. Wysoka wariancja (przeuczenie): duża luka między treningiem a walidacją, a krzywa walidacyjna wciąż wyraźnie rośnie na prawym końcu. Więcej danych prawdopodobnie pomoże, podobnie jak regularyzacja. Wysokie obciążenie (niedouczenie): obie krzywe szybko się spotykają na niskim poziomie i spłaszczają. Model nie umie wykorzystać więcej danych — zamiast nich potrzebna jest większa pojemność, lepsze cechy albo inny algorytm.
Kształt krzywej walidacyjnej często przypomina prawo potęgowe: kolejne podwojenie danych daje coraz mniejszy przyrost. Pozwala to ostrożnie ekstrapolować, ile dałoby np. dwa razy więcej przykładów — ostrożnie, bo przy małej liczbie punktów ekstrapolacja jest niepewna, a zbieranie danych z innego rozkładu może zmienić obraz całkowicie.
Krzywe uczenia pokazują też, że ranking modeli zależy od rozmiaru danych. Prosty model z silnymi założeniami (np. naiwny Bayes, regresja logistyczna) bywa najlepszy przy małej próbie, a model elastyczny wyprzedza go dopiero po przekroczeniu pewnej liczby przykładów. Perlich, Provost i Simonoff pokazali to systematycznie dla drzew i regresji logistycznej. Wniosek „model A jest lepszy od B” bez podania liczby danych bywa więc niepełny.
Na przykładzie
Na zbiorze Digits (1797 cyfr 8 × 8) narysowałem krzywe uczenia z 5-krotną warstwową walidacją krzyżową (learning_curve, StratifiedKFold(5, shuffle=True, random_state=0)), dla rozmiarów treningu od 71 do 1437 przykładów. Regresja logistyczna ze standaryzacją ma wynik treningowy praktycznie 100% przy każdym rozmiarze, a walidacyjny rośnie z 74,8% (71 przykładów) przez 93,8% (574) do 96,9% (1437). Luka maleje, ale krzywa walidacyjna wciąż rośnie — klasyczny obraz wariancji: więcej danych powinno jeszcze pomóc.
Naiwny klasyfikator bayesowski (GaussianNB) zachowuje się inaczej. Przy 71 przykładach ma 99,7% na treningu i 50,8% na walidacji; przy 1437 — odpowiednio 86,0% i 85,1%. Krzywe się zetknęły, a walidacyjna od około 1150 przykładów przestała rosnąć (86,0% wobec 85,1% na końcu, różnica w granicach szumu). To obciążenie: założenie niezależności pikseli jest zbyt grube i dodatkowe dane go nie naprawią. Dla porównania SVM z jądrem RBF (gamma=0.001) dochodzi do 99,0% walidacji.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
learning_curve(model, X, y, train_sizes=np.linspace(0.1, 1.0, 8), cv=5)zwraca rozmiary oraz wyniki treningowe i walidacyjne dla każdego foldu; wykres:LearningCurveDisplay.from_estimator(scikit-learn 1.2+).- Rysuj średnią i pasmo odchylenia z foldów — przy małych rozmiarach wyniki bardzo skaczą.
- Używaj warstwowej CV i
shuffle=True, by małe podzbiory zawierały wszystkie klasy. - Do oceny opłacalności zbierania danych zwróć uwagę na nachylenie walidacji przy ostatnich punktach; najlepiej na osi logarytmicznej liczby przykładów.
- W uczeniu głębokim analogiczny eksperyment robi się, trenując sieć na 10%, 25%, 50% i 100% danych, z tym samym budżetem strojenia.
- Typowy błąd: mylenie krzywej uczenia z krzywą straty w epokach albo z krzywą walidacyjną (oś pozioma = hiperparametr).
Najczęstsze pytania
- Czym różni się krzywa uczenia od krzywej walidacyjnej?
- Krzywa uczenia ma na osi poziomej liczbę przykładów i mówi, czy pomogą nowe dane. Krzywa walidacyjna ma na osi poziomej wartość hiperparametru (np. głębokość drzewa) i mówi, jaka złożoność modelu jest najlepsza przy obecnych danych.
- Co, jeśli wynik walidacyjny jest wyższy niż treningowy?
- Zdarza się przy silnej regularyzacji, dropoucie (aktywnym tylko w treningu), augmentacji utrudniającej dane treningowe albo przy przypadkowo łatwym zbiorze walidacyjnym. Jeśli różnica jest duża i stała, sprawdź, czy nie ma przecieku lub duplikatów między zbiorami.
- Ile punktów potrzeba na krzywej?
- Zwykle 5–10 rozmiarów rozłożonych logarytmicznie wystarcza. Ważniejsze od liczby punktów jest powtórzenie każdego pomiaru na kilku foldach, by odróżnić trend od szumu.
Źródła
- Perlich C., Provost F., Simonoff J. S. (2003). Tree Induction vs. Logistic Regression: A Learning-Curve Analysis. Journal of Machine Learning Research, 4.
- Banko M., Brill E. (2001). Scaling to Very Very Large Corpora for Natural Language Disambiguation. Proceedings of ACL 2001.
- Géron A. „Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow”, 3rd ed., O’Reilly 2022, rozdz. 4 (Training Models — Learning Curves).
- Dokumentacja scikit-learn: Validation curves and learning curves — https://scikit-learn.org/stable/modules/learning_curve.html