06 · Sieci · 5 min czytania · Interaktywne · aktualizacja
Czym jest pojemność (capacity) sieci neuronowej i jak wpływa na przeuczenie?
W skrócie
Pojemność sieci to zakres funkcji, jakie może ona odwzorować. Za mała nie uchwyci wzorca, duża zapamięta nawet losowe etykiety, a mimo to potrafi uogólniać.
Co to jest
Pojemność (ang. capacity) sieci neuronowej to miara tego, jak bogaty zbiór funkcji sieć może odwzorować, dobierając wagi. Rośnie z liczbą neuronów, warstw i parametrów. Sieć o zbyt małej pojemności nie dopasuje się nawet do danych treningowych (niedouczenie), sieć o dużej pojemności dopasuje się do prawie wszystkiego, łącznie z szumem. Pojemność to górna granica możliwości modelu, a nie opis tego, czego model faktycznie się nauczy.
Intuicja: pojemność to rozmiar „słownika” funkcji, z którego trening wybiera jedną. Mała sieć ma słownik ubogi i musi uogólniać, bo nie ma jak zapamiętać szczegółów. Duża sieć ma słownik tak bogaty, że mieści w nim funkcję przechodzącą dokładnie przez każdy punkt treningowy, nawet bezsensowny.
Klasyczna teoria uczenia mówi, że model o pojemności znacznie większej niż ilość danych powinien się przeuczać. Współczesne sieci są często właśnie takie, mają więcej parametrów niż przykładów, a mimo to uogólniają dobrze. Ten pozorny paradoks jest jednym z centralnych tematów teorii uczenia głębokiego.
Mechanizm — dlaczego tak działa
Pojemność można rozumieć na kilka sposobów. Pojemność reprezentacyjna mówi, jakie funkcje sieć może przedstawić. Z ReLU każdy neuron dokłada możliwość jednego „zgięcia” funkcji, więc liczba liniowych kawałków, z których składa się funkcja sieci, rośnie z szerokością, a z głębokością może rosnąć nawet wykładniczo. Twierdzenie o uniwersalnej aproksymacji mówi, że przy dostatecznej szerokości sieć przybliży dowolną funkcję ciągłą.
Formalne miary, takie jak wymiar Vapnika–Chervonenkisa, mierzą, ile punktów model potrafi dowolnie podzielić na klasy. Dla sieci z W wagami rosną one mniej więcej jak W (z czynnikami logarytmicznymi i zależnością od głębokości). Klasyczne granice uogólnienia oparte na tych miarach są dla dużych sieci puste: ograniczają błąd testowy z góry wartością przekraczającą 100%, czyli nie mówią nic.
Pojemność efektywna to to, co sieć faktycznie może osiągnąć danym algorytmem treningu w danym czasie. Spadek gradientu startujący z małych losowych wag nie przeszukuje całego słownika równomiernie. Ma wbudowaną preferencję (tzw. niejawną regularyzację) dla funkcji gładkich i prostych, które dobrze pasują do danych. Wczesne zatrzymanie, regularyzacja L2, dropout i augmentacja dodatkowo ograniczają pojemność efektywną bez zmiany architektury.
Zhang i in. (2017) pokazali, że typowe sieci konwolucyjne potrafią bezbłędnie zapamiętać zbiór obrazów z losowo przetasowanymi etykietami. Ta sama architektura na prawdziwych etykietach uogólnia dobrze. Wniosek: sama liczba parametrów nie wyjaśnia uogólnienia, bo ta sama sieć raz uczy się wzorca, a raz zapamiętuje szum. Decydują struktura danych i przebieg optymalizacji.
Z tym łączy się zjawisko podwójnego zejścia: gdy pojemność rośnie, błąd testowy najpierw maleje, potem rośnie w okolicy progu, w którym model ledwo mieści dane treningowe, a po jego przekroczeniu znowu maleje. Klasyczna krzywa w kształcie litery U jest tylko pierwszą częścią tej historii. Zjawisko jest dobrze udokumentowane, ale jego wyrazistość zależy od szumu w etykietach i regularyzacji.
Na przykładzie
Na zbiorze Digits 8×8 (1347 obrazków treningowych, 450 testowych, standaryzowane piksele) wytrenowano MLPClassifier z jedną warstwą ukrytą o rosnącej szerokości (random_state=0). Z 1 neuronem (85 parametrów) trafność wynosi 32,1% na zbiorze treningowym i 29,1% na testowym, z 2 neuronami odpowiednio 75,2% i 73,8%, z 4: 96,1% i 87,3%, z 8: 99,9% i 93,3%. Od 16 neuronów (1210 parametrów) zbiór treningowy jest dopasowany w 100%, a wynik testowy dalej rośnie: 96,0% przy 16, 98,0% przy 32, 97,6% przy 256 neuronach i 19 210 parametrach. Wzrost pojemności grubo powyżej liczby przykładów nie zepsuł uogólnienia.
Potem etykiety treningowe losowo przetasowano, niszcząc jakikolwiek związek obrazka z cyfrą, i wyłączono regularyzację L2. Sieć z 16 neuronami dopasowała tylko 42,5% losowych etykiet. Sieć z 64 neuronami (4810 parametrów) zapamiętała wszystkie 1347 losowych etykiet bezbłędnie, ale na zbiorze testowym trafiała w 9,8% przypadków, czyli na poziomie zgadywania. Zapamiętanie szumu zajęło jej 2138 epok, wobec 172 epok na prawdziwych etykietach: sieć może zapamiętać szum, ale prawdziwy wzorzec uczy się znacznie łatwiej.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- Liczbę parametrów sprawdzisz w PyTorch przez
sum(p.numel() for p in model.parameters()), a w scikit-learn sumując rozmiarycoefs_iintercepts_. - Diagnoza: jeśli model nie osiąga niskiej straty nawet na zbiorze treningowym, zwiększ pojemność; jeśli luka między treningiem a walidacją jest duża, dodaj regularyzację lub dane, zanim zmniejszysz sieć.
- Częsta strategia: wybrać sieć nieco za dużą i kontrolować pojemność efektywną przez wczesne zatrzymanie (
early_stopping=True),alpha(L2) w scikit-learn lubweight_decayi dropout w PyTorch. - Test zdrowego rozsądku: model powinien umieć przeuczyć się na jednym małym batchu; jeśli nie potrafi, w kodzie jest błąd, a nie za mała pojemność.
- Krzywe walidacyjne (
validation_curvew scikit-learn) dla szerokości warstwy pokazują, od którego momentu dalsze powiększanie przestaje pomagać.
Najczęstsze pytania
- Czy więcej parametrów zawsze oznacza przeuczenie?
- Nie. Duże sieci często uogólniają lepiej niż średnie, zwłaszcza z regularyzacją i wczesnym zatrzymaniem. Przeuczenie zależy od relacji pojemności efektywnej do ilości i jakości danych, a nie od samej liczby parametrów.
- Szersza czy głębsza sieć?
- Głębokość pozwala wielokrotnie wykorzystywać cechy z niższych warstw i dla wielu funkcji wymaga wykładniczo mniej neuronów niż płytka szeroka sieć. Głębsze sieci trudniej jednak trenować, dlatego potrzebują normalizacji i połączeń rezydualnych.
- Jak zmierzyć pojemność w praktyce?
- Najprościej empirycznie: sprawdzić, jaką część zbioru treningowego model potrafi dopasować, także z losowymi etykietami. Formalne miary, jak wymiar VC, są dla dużych sieci zbyt pesymistyczne, by służyć do wyboru architektury.
Źródła
- Zhang C., Bengio S., Hardt M., Recht B., Vinyals O., „Understanding deep learning requires rethinking generalization”, ICLR 2017.
- Belkin M., Hsu D., Ma S., Mandal S., „Reconciling modern machine-learning practice and the classical bias–variance trade-off”, PNAS 116(32), 2019, s. 15849–15854.
- Goodfellow I., Bengio Y., Courville A., „Deep Learning”, MIT Press, 2016, podrozdz. 5.2 „Capacity, Overfitting and Underfitting”.
- Bartlett P. L., Harvey N., Liaw C., Mehrabian A., „Nearly-tight VC-dimension and Pseudodimension Bounds for Piecewise Linear Neural Networks”, Journal of Machine Learning Research 20(63), 2019, s. 1–17.