04 · Ocena · 4 min czytania · aktualizacja
Czym jest zbiór walidacyjny i jak rozpoznać przeuczenie?
W skrócie
Zbiór walidacyjny to odłożone dane, na których model się nie uczy, a które służą do wyboru ustawień. Przeuczenie widać jako lukę między nim a treningiem.
Co to jest
Zbiór walidacyjny to część danych odłożona przed treningiem, na której model nigdy nie aktualizuje wag; służy do oceny i wyboru hiperparametrów, architektury oraz momentu zatrzymania treningu. Przeuczenie (overfitting) to sytuacja, w której model dopasował się do szczegółów i szumu zbioru treningowego, więc na nowych danych działa gorzej, niż sugeruje wynik treningowy.
Oba pojęcia dotyczą każdego modelu uczonego z danych: sieci neuronowych, drzew, boostingu, dostrajania dużych modeli językowych.
Intuicja: zbiór treningowy to zadania, które rozwiązujesz z podręcznikiem; walidacyjny to próbny egzamin, po którym jeszcze zmieniasz sposób nauki; testowy to prawdziwy egzamin, do którego podchodzisz raz.
Mechanizm — dlaczego tak działa
Model widzi tylko próbkę ze świata. Jego wynik na tej próbce to optymistyczne oszacowanie: wagi zostały dobrane tak, by właśnie na niej wypaść dobrze, włącznie z przypadkowymi zbiegami okoliczności. Jeśli model ma dość pojemności (sieć z wieloma wagami, głębokie drzewo), może zapamiętać każdy przykład razem z jego szumem — wtedy strata treningowa spada dalej, a błąd na nowych danych stoi albo rośnie. Luka między wynikiem treningowym a walidacyjnym mierzy, ile w modelu jest zapamiętywania zamiast uogólniania.
W przybliżeniu: błąd testowy ≈ błąd treningowy + składnik rosnący z pojemnością modelu i malejący z liczbą przykładów. Klasyczny obraz to krzywa w kształcie litery U: zbyt prosty model nie dopasowuje danych (underfitting, oba błędy wysokie), zbyt złożony przeucza (luka rośnie). Współczesne sieci komplikują ten obraz (double descent: bardzo duże modele znów generalizują lepiej), ale praktyka pozostaje ta sama — ufać tylko danym, których model nie widział.
Walidacja musi pochodzić z tego samego rozkładu co przyszłe dane i nie może przeciekać do treningu — ani przez bezpośrednie użycie, ani przez standaryzację czy selekcję cech policzoną na całości przed podziałem. Druga pułapka: wielokrotne wybieranie ustawień na tym samym zbiorze walidacyjnym też go „zużywa”. Wynik najlepszego z wielu ustawień jest zawyżony, bo wygrywa ustawienie, które miało szczęście na tej konkretnej próbce. Stąd trzeci zbiór, testowy, używany raz na końcu, oraz walidacja krzyżowa przy małych danych.
Na przykładzie
Breast Cancer Wisconsin (569 guzów) podzieliłem z warstwowaniem na 341 przykładów treningowych, 114 walidacyjnych i 114 testowych (random_state=0) i trenowałem drzewa decyzyjne o różnej głębokości. Trafność treningowa rośnie z głębokością monotonicznie: 92,7% przy głębokości 1, 98,2% przy 3, 100% od głębokości 6. Walidacyjna rośnie do 96,5% przy głębokości 5, po czym spada do 91,2% — klasyczny obraz przeuczenia: luka między treningiem a walidacją wynosi przy pełnej głębokości prawie 9 punktów procentowych.
Walidacja wybrała więc głębokość 5. Na zbiorze testowym to drzewo osiąga jednak 91,2%, a nie 96,5%. Przy 114 przykładach walidacyjnych jeden przykład to prawie punkt procentowy, a wybór najlepszego z ośmiu ustawień zbiera też szczęście tej konkretnej próbki. Na teście najlepsza okazała się głębokość 2 (93,0%). To nie znaczy, że walidacja zawiodła — znaczy, że jej wynik po selekcji jest zawyżony i że przy małych danych lepiej użyć walidacji krzyżowej.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)
W praktyce
- scikit-learn:
train_test_split(test_size=0.2, stratify=y),cross_val_score(cv=5),GridSearchCV(wewnętrzna walidacja krzyżowa). Standaryzację pakuj wPipeline, by nie wyciekała. - PyTorch: osobny
DataLoaderwalidacyjny,model.eval()itorch.no_grad()przy ocenie. - XGBoost i LightGBM:
eval_setz wczesnym zatrzymaniem przerywa dokładanie drzew, gdy wynik walidacji przestaje się poprawiać. - Typowe proporcje: 60/20/20 lub 80/20 przy jednym podziale; 5–10-krotna walidacja krzyżowa przy tysiącach wierszy i mniej. Dla szeregów czasowych podział chronologiczny, nie losowy.
- Typowy błąd: strojenie dziesiątek ustawień na jednej walidacji i raportowanie najlepszego wyniku jako oczekiwanego.
Najczęstsze pytania
- Czym różni się zbiór walidacyjny od testowego?
- Walidacyjny służy do podejmowania decyzji w trakcie pracy: wybór hiperparametrów, moment zatrzymania, porównanie architektur. Testowy jest używany raz, na końcu, by uczciwie oszacować wynik — bo każda decyzja podjęta na walidacji odrobinę ją „zużywa” i zawyża jej wynik.
- Jak rozpoznać przeuczenie?
- Strata treningowa spada, a walidacyjna przestaje spadać lub rośnie; trafność na treningu zbliża się do 100%, a na walidacji stoi albo maleje. Im większa luka, tym więcej zapamiętywania. Lekarstwa: więcej danych, regularyzacja, mniejszy model, early stopping.
- Ile danych odłożyć na walidację?
- Tyle, by wynik był stabilny: przy 10 000 wierszy 10–20% wystarcza; przy kilkuset użyj walidacji krzyżowej, bo jeden podział daje wynik obarczony dużym szumem. Przy rzadkich klasach dziel z warstwowaniem, by każda klasa była reprezentowana.
Źródła
- Goodfellow, Bengio, Courville (2016). Deep Learning, rozdz. 5.2 "Capacity, overfitting and underfitting", 5.3 "Hyperparameters and validation sets". https://www.deeplearningbook.org/contents/ml.html
- Hastie, Tibshirani, Friedman (2009). The Elements of Statistical Learning, 2nd ed., rozdz. 7.2 "Bias, variance and model complexity", 7.10 "Cross-validation".
- James, Witten, Hastie, Tibshirani (2021). An Introduction to Statistical Learning, 2nd ed., rozdz. 5.1 "Cross-validation".
- Kaufman, Rosset, Perlich, Stitelman (2012). "Leakage in data mining: formulation, detection, and avoidance". ACM TKDD 6(4).
- Nakkiran i in. (2019). "Deep double descent: where bigger models and more data hurt". arXiv:1912.02292