06 · Sieci · 4 min czytania · aktualizacja
Ile neuronów dać warstwie ukrytej i kiedy więcej już nie pomaga?
W skrócie
Szerokość warstwy to liczba jej neuronów, czyli część pojemności sieci. Za mało — sieć nie wyrazi reguły; za dużo — rośnie koszt i ryzyko uczenia się szumu.
Co to jest
Szerokość warstwy ukrytej to liczba neuronów w tej warstwie. Razem z głębokością wyznacza pojemność sieci — klasę funkcji, które sieć potrafi wyrazić. Każdy neuron dokłada jedno zagięcie (ReLU) albo jedno cięcie przestrzeni cech, więc więcej neuronów to bardziej złożone granice decyzji.
To hiperparametr obecny w każdym MLP i w blokach MLP transformerów, gdzie wynosi zwykle cztery razy wymiar modelu. W drzewach jego odpowiednikiem jest liczba liści albo głębokość.
Mechanizm — dlaczego tak działa
Dolne ograniczenie wynika z zadania. Jeśli dane mają k ostrych progów na jednej cesze, potrzeba około 2k zagięć, a więc 2k neuronów; jeśli regułę wyznacza kilka hiperpłaszczyzn, tyle neuronów jest minimum. Za wąska sieć nie dopasuje nawet zbioru treningowego — to niedouczenie, w którym oba błędy, treningowy i walidacyjny, są wysokie.
Powyżej tego minimum każdy dodatkowy neuron ma coraz mniej do zrobienia: prawdziwe reguły są już reprezentowane, więc gradient może go użyć do dopasowania resztek — szumu i pojedynczych przykładów. Wynik treningowy rośnie dalej, a walidacyjny stoi albo spada: to klasyczna krzywa U wobec pojemności. Koszt obliczeń rośnie przy tym liniowo z szerokością, a gdy rośnie szerokość dwóch sąsiednich warstw — kwadratowo. Dlatego szuka się „kolana”: szerokości, od której przyrost wyniku walidacyjnego jest mniejszy niż szum pomiaru.
Współczesne wyniki komplikują ten obraz. Przy bardzo dużej szerokości i niejawnej regularyzacji spadku gradientu błąd testowy potrafi znów maleć (double descent, Belkin i in. 2019; Nakkiran i in. 2019), a szersze sieci bywają łatwiejsze do optymalizacji. Dla małych zbiorów tabelarycznych to jednak rzadko praktyczny reżim: koszt rośnie, a zysk jest niepewny.
Głębokość czy szerokość? Ta sama liczba neuronów ułożona w kilka warstw może reprezentować wykładniczo więcej regionów liniowych niż w jednej warstwie (Montúfar i in. 2014). Dla danych hierarchicznych (obrazy, tekst) opłaca się głębokość, dla tabel zwykle wystarczą 1–2 warstwy o rozsądnej szerokości.
Zastrzeżenie: szerokość oddziałuje z regularyzacją. Szeroka sieć z dropoutem, weight decay i early stoppingiem może generalizować lepiej niż wąska bez nich — pojemność nominalna to nie pojemność efektywna.
Na przykładzie
Zbiór Digits (1797 obrazów cyfr 8×8), MLPClassifier z jedną warstwą ukrytą (random_state=0), 5-krotna walidacja krzyżowa. Średnia trafność walidacyjna w zależności od szerokości: 1 neuron — 33%, 2 — 75%, 4 — 92%, 8 — 96%, 16 — 97%, 32 — 97%, 64 — 98%, 128 — 98%, 256 — 98%.
Kolano leży w okolicy 16 neuronów: dalej szesnastokrotne poszerzenie warstwy dało około jednego punktu procentowego. Trafność treningowa osiągnęła 100% już przy 32 neuronach, więc od tego miejsca dodatkowa pojemność nie miała czego się uczyć z danych treningowych. Na tym czystym zbiorze szersze sieci nie zaczęły tracić na walidacji — przy zaszumionych etykietach i mniejszej próbce spadek byłby bardziej prawdopodobny.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- scikit-learn:
MLPClassifier(hidden_layer_sizes=(64,))w pętli po 8, 16, 32, 64, 128, 256 zcross_val_score; wykres wyniku w funkcji szerokości, wybór kolana.validation_curverobi to automatycznie. - PyTorch: potęgi dwójki ze względu na wydajność GPU; dla tabel zwykle 32–256 neuronów, dla bloków MLP transformera 4 ×
d_model. - Przy szerokiej sieci dołóż regularyzację (dropout 0,1–0,5, weight decay) i early stopping.
- Szerokość, głębokość i learning rate oddziałują ze sobą — przeszukuj je razem (Optuna, losowe przeszukiwanie).
- Typowy błąd: „więcej neuronów nie zaszkodzi” na kilkuset wierszach — zaszkodzi czasowi, a wynik treningowy będzie mylił.
Najczęstsze pytania
- Ile neuronów powinna mieć warstwa ukryta?
- Co najmniej tyle, ile cięć lub zagięć wymaga reguła, co zwykle nie jest znane z góry. W praktyce przeszukaj zakres 8–256 z walidacją i wybierz najmniejszą szerokość, powyżej której wynik przestaje rosnąć ponad szum.
- Czy szersza sieć zawsze jest lepsza?
- Nie. Powyżej potrzebnej pojemności dodatkowe neurony mogą uczyć się szumu, a koszt rośnie. W reżimie bardzo dużej szerokości błąd testowy może znów maleć (double descent), ale to kosztowny i niepewny obszar dla małych zbiorów.
- Głębokość czy szerokość?
- Dla danych o strukturze hierarchicznej (obrazy, tekst, sekwencje) — głębokość, bo reprezentuje złożone funkcje znacznie oszczędniej. Dla danych tabelarycznych 1–2 warstwy umiarkowanej szerokości; większa głębokość rzadko pomaga, a boosting drzew często jest lepszy.
Źródła
- Hastie, T., Tibshirani, R., Friedman, J. (2009). The Elements of Statistical Learning, 2nd ed., Springer, rozdz. 7.2 "Bias, variance and model complexity", rozdz. 11.5.4 "Number of hidden units and layers".
- Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, MIT Press, rozdz. 5.2 "Capacity, overfitting and underfitting", rozdz. 6.4.1. https://www.deeplearningbook.org/
- Montúfar, G., Pascanu, R., Cho, K., Bengio, Y. (2014). "On the number of linear regions of deep neural networks". NeurIPS. arXiv:1402.1869
- Belkin, M., Hsu, D., Ma, S., Mandal, S. (2019). "Reconciling modern machine-learning practice and the classical bias–variance trade-off". PNAS 116(32), 15849–15854. arXiv:1812.11118
- Nakkiran, P. i in. (2019). "Deep double descent: where bigger models and more data hurt". arXiv:1912.02292