04 · Ocena · 4 min czytania · Interaktywne · aktualizacja
Dlaczego 100% trafności na małym zbiorze treningowym nic nie znaczy?
W skrócie
Przy kilku przykładach model dopasuje dowolne etykiety, więc idealny wynik treningowy nie mówi, czy poznał regułę. Wymiar VC klasyfikatora liniowego to d+1.
Co to jest
Model uczony na małej liczbie przykładów łatwo osiąga 100% trafności na treningu, bo kilka punktów da się rozdzielić na wiele sposobów. Trening zatrzymuje się na pierwszym rozwiązaniu, które pasuje, niekoniecznie na tym, które opisuje rzeczywistość. Miarą problemu jest różnica między wynikiem treningowym a wynikiem na nowych danych.
Zjawisko dotyczy każdego modelu z pojemnością większą niż liczba przykładów: regresji logistycznej z wieloma cechami, sieci neuronowych, drzew decyzyjnych.
Intuicja: przez trzy punkty na kartce zawsze przeprowadzisz parabolę. To, że przeszła idealnie, nie dowodzi, że zjawisko jest paraboliczne — dowodzi tylko, że parabola ma dość swobody. Dopiero czwarty, piąty i setny punkt mogą to rozstrzygnąć.
Mechanizm — dlaczego tak działa
Klasyfikator liniowy w d wymiarach ma wymiar Vapnika–Czerwonenkisa d + 1: dowolne etykiety d + 1 punktów w ogólnym położeniu da się rozdzielić hiperpłaszczyzną. Cover (1965) pokazał więcej: klasyfikator liniowy z d wejściami rozdzieli z dużym prawdopodobieństwem nawet około 2d losowo etykietowanych punktów. Wynik 100% na treningu jest więc matematycznie gwarantowany dla n ≤ d + 1 i bardzo prawdopodobny do około 2d — także dla czystego szumu. Nie niesie wtedy informacji o regule.
Każdy kolejny przykład wyklucza część hipotez zgodnych z poprzednimi. Dopiero gdy n wyraźnie przekracza pojemność modelu, trening musi wybierać między rozwiązaniami, a wybrane rozwiązanie z dużym prawdopodobieństwem odzwierciedla strukturę danych. Reguła kciuka Bauma–Hausslera (1989): dla błędu generalizacji ε potrzeba rzędu W/ε przykładów, gdzie W to liczba wag. Sieć z 50 wagami i celem 10% błędu — około 500 przykładów.
Krzywa uczenia pokazuje to wprost: błąd na nowych danych maleje z n, a błąd treningowy rośnie od zera, gdy model przestaje nadążać z zapamiętywaniem. Luka między nimi to miara zgadywania.
Pewność nie zastępuje danych. Sieć z warstwą ukrytą może po kilku krokach na jednym przykładzie zwracać pewność bliską 100%, bo wagi już przesunęły się w stronę tej jednej odpowiedzi — model nie wie, ile danych widział. Wysoką pewność przy małym n trzeba traktować jak brak informacji, a nie jak dowód.
Na przykładzie
Breast Cancer Wisconsin ma 30 cech, więc wymiar VC klasyfikatora liniowego wynosi 31. Losowałem z części treningowej (426 guzów, random_state=0) próbki o rozmiarze n i trenowałem prawie nieregularyzowaną regresję logistyczną (C=10000, cechy standaryzowane), po 20 powtórzeń dla każdego n. Raz z prawdziwymi etykietami, raz z etykietami losowo przetasowanymi.
Dla n = 5, 10, 20 i 31 trafność treningowa wynosiła 100% w obu wersjach — także dla etykiet czystego szumu, które na teście dawały 48–54%, czyli rzut monetą. Przy n = 50 model z losowymi etykietami miał jeszcze 98,4% na treningu, przy n = 100 — 78,8%, a na pełnych 426 przykładach — 65,5%. Dopiero gdy przykładów jest wyraźnie więcej niż pojemność modelu, wynik treningowy przestaje być gwarantowany i zaczyna cokolwiek mówić. Model z prawdziwymi etykietami miał na treningu zawsze 100%, a na teście od 87,3% (n = 5) do 95,4% (n = 100): sam wynik treningowy nie odróżnia go od modelu uczonego na szumie.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi)
W praktyce
- Zanim zaufasz wynikowi treningowemu, odłóż dane na sprawdzian; przy kilkudziesięciu przykładach użyj walidacji krzyżowej leave-one-out lub powtarzanej k-krotnej (
RepeatedStratifiedKFold). - scikit-learn:
learning_curverysuje wynik treningu i walidacji w funkcji n — jeśli krzywe się nie zbiegły, danych jest za mało. - Dla małych tabel preferuj modele o małej pojemności (regresja logistyczna z silną regularyzacją, płytkie drzewa) zamiast sieci.
- Few-shot w LLM to inna sytuacja: model nie uczy się wag na kilku przykładach, tylko korzysta z wiedzy z pretreningu — dlatego działa tam, gdzie klasyczny trening na 5 przykładach nie ma szans.
- Typowy błąd: „model ma 100% na treningu, więc działa” — przy n ≤ liczba cech + 1 to tautologia.
Najczęstsze pytania
- Dlaczego 100% trafności na danych treningowych to zły znak?
- Niekoniecznie zły, ale pusty: jeśli przykładów jest mniej niż pojemność modelu, 100% jest gwarantowane nawet dla losowych etykiet. Informację niesie dopiero wynik na danych, których model nie widział, i luka między nim a treningiem.
- Ile przykładów trzeba na jedną cechę w modelu?
- Klasyczna reguła dla modeli liniowych to co najmniej 10 przykładów na cechę (w klasyfikacji: 10 przykładów rzadszej klasy na cechę); dla sieci rzędu liczba wag podzielona przez docelowy błąd. To rzędy wielkości, nie progi — rozstrzyga krzywa uczenia na walidacji.
- Jak sprawdzić, czy mam za mało danych?
- Narysuj krzywą uczenia: trenuj na 10%, 20%, …, 100% danych i mierz wynik walidacji. Jeśli wynik nadal rośnie przy 100%, więcej danych pomoże. Jeśli luka trening–walidacja jest duża, a wynik walidacji stoi, pomoże mniejszy model lub regularyzacja.
Źródła
- Cover, T. (1965). "Geometrical and statistical properties of systems of linear inequalities with applications in pattern recognition". IEEE Trans. Electronic Computers EC-14(3), 326–334. doi:10.1109/PGEC.1965.264137
- Goodfellow, Bengio, Courville (2016). Deep Learning, rozdz. 5.2 "Capacity, overfitting and underfitting". https://www.deeplearningbook.org/contents/ml.html
- Shalev-Shwartz, S., Ben-David, S. (2014). Understanding Machine Learning, rozdz. 6 "The VC-dimension". https://www.cs.huji.ac.il/~shais/UnderstandingMachineLearning/
- Baum, E., Haussler, D. (1989). "What size net gives valid generalization?". Neural Computation 1(1), 151–160.
- Géron, A. (2022). Hands-On Machine Learning, 3rd ed., rozdz. 4 "Learning curves".