11 · Prawa i prawdy · 4 min czytania · aktualizacja
Co mówi twierdzenie o uniwersalnej aproksymacji sieci neuronowych?
W skrócie
Sieć z jedną warstwą ukrytą i dostatecznie wieloma neuronami może dowolnie dokładnie przybliżyć każdą funkcję ciągłą na ograniczonym obszarze.
Co to jest
Sieć neuronowa z jedną warstwą ukrytą o nieliniowej funkcji aktywacji może przybliżyć dowolną funkcję ciągłą na zbiorze ograniczonym z dowolną dokładnością, jeśli ma dostatecznie wiele neuronów. Dla aktywacji sigmoidalnej udowodnił to George Cybenko w 1989 roku; w tym samym roku Kurt Hornik, Maxwell Stinchcombe i Halbert White pokazali wersję ogólniejszą, a Moshe Leshno i współautorzy w 1993 roku — że wystarczy dowolna aktywacja niewielomianowa, w tym ReLU.
To twierdzenie odpowiada na pytanie „czy sieć w ogóle potrafi wyrazić daną zależność?”. Odpowiedź brzmi: tak, prawie zawsze. Nie mówi jednak nic o tym, ile neuronów potrzeba, czy uczenie znajdzie odpowiednie wagi ani czy sieć będzie dobrze działać poza danymi treningowymi.
Najlepiej czytać je jako gwarancję braku sufitu, a nie jako przepis na sukces.
Mechanizm — dlaczego tak działa
Intuicja dla ReLU jest geometryczna. Każdy neuron ReLU to funkcja max(0, w·x + b) — „zawias”, który jest płaski do pewnego punktu, a dalej rośnie liniowo. Suma kilku zawiasów z różnymi położeniami i nachyleniami tworzy łamaną. Łamaną o dostatecznie wielu odcinkach da się przybliżyć każdą ciągłą krzywą, tak jak gęsty wielokąt przybliża okrąg. Więcej neuronów = więcej załamań = drobniejsze przybliżenie.
Dla sigmoidy podobnie: dwie strome sigmoidy przesunięte względem siebie tworzą „schodek” lub „garb”. Z wielu garbów można złożyć dowolny kształt, jak histogram przybliża gęstość. W wielu wymiarach dowód jest subtelniejszy (Cybenko korzystał z analizy funkcjonalnej), ale idea pozostaje ta sama: kombinacje liniowe prostych nieliniowości są gęste w przestrzeni funkcji ciągłych.
Czego twierdzenie nie mówi. Po pierwsze, liczba neuronów może rosnąć wykładniczo z wymiarem wejścia — Barron (1993) pokazał, że dla funkcji „gładkich w szczególny sposób” wystarcza rozsądna liczba, ale nie dla wszystkich. Po drugie, istnienie wag nie oznacza, że spadek gradientu je znajdzie. Po trzecie, przybliżenie dotyczy ograniczonego obszaru; poza nim sieć ReLU zachowuje się liniowo i może się mylić dowolnie mocno. Głębokie sieci są w praktyce znacznie wydajniejsze niż szerokie płytkie — pewne funkcje wymagają wykładniczo mniej neuronów przy większej głębokości.
Na przykładzie
Uczyliśmy sieć z jedną warstwą ukrytą ReLU (MLPRegressor, optymalizator L-BFGS) przybliżać funkcję sin(2x) na przedziale [−π, π], który zawiera dwa pełne okresy. Dla każdej szerokości próbowaliśmy 5 ziaren losowości. Z 1, 2 i 4 neuronami nawet najlepsza próba miała maksymalny błąd 1,0 — za mało załamań, by narysować cztery „garby”. Z 8 neuronami najlepsze ziarno osiągnęło maksymalny błąd 0,195, z 16 — 0,069, z 64 — 0,040.
Widać też granice twierdzenia. Przy 8 neuronach typowe (medianowe) ziarno utknęło z maksymalnym błędem 1,13: wagi zdolne do dobrego przybliżenia istnieją, ale uczenie ich nie znalazło. A sieć z 64 neuronami, prawie idealna w przedziale, dla x = 6 przewidziała 4,61, podczas gdy sin(12) ≈ −0,54 — poza danymi przedłuża łamaną w nieskończoność.
W praktyce
- Szerokość warstwy w scikit-learn:
MLPRegressor(hidden_layer_sizes=(64,)); w PyTorch:nn.Linear(d_in, 64)+nn.ReLU(). - W praktyce kilka węższych warstw zwykle działa lepiej niż jedna bardzo szeroka.
- Brak dopasowania na treningu przy dużej sieci to zwykle problem optymalizacji (współczynnik uczenia, inicjalizacja, skala cech), a nie pojemności.
- Nie ufaj prognozom poza zakresem danych treningowych — sieci nie ekstrapolują poprawnie.
- Uruchamiaj trening z kilkoma ziarnami (
random_state), zwłaszcza przy małych sieciach.
Najczęstsze pytania
- Skoro jedna warstwa wystarcza, po co głębokie sieci?
- Bo „wystarcza” może oznaczać astronomiczną liczbę neuronów. Głębokość pozwala wielokrotnie wykorzystywać te same cechy pośrednie, co dla funkcji o strukturze hierarchicznej daje wykładniczą oszczędność.
- Czy twierdzenie gwarantuje dobrą generalizację?
- Nie. Mówi tylko o istnieniu przybliżenia znanej funkcji. Z danych treningowych sieć może równie dobrze nauczyć się szumu, a twierdzenie nie odróżnia jednego od drugiego.
- Czy dotyczy też funkcji nieciągłych?
- Klasyczne wersje dotyczą funkcji ciągłych na zbiorach zwartych; istnieją uogólnienia na funkcje mierzalne w sensie przybliżenia średniego. Ostrej nieciągłości sieć z ciągłymi aktywacjami nie odtworzy dokładnie, ale może przybliżyć ją stromym przejściem.
Źródła
- Cybenko G. (1989). Approximation by Superpositions of a Sigmoidal Function. Mathematics of Control, Signals and Systems, 2(4), 303–314.
- Hornik K., Stinchcombe M., White H. (1989). Multilayer Feedforward Networks are Universal Approximators. Neural Networks, 2(5), 359–366.
- Leshno M., Lin V. Ya., Pinkus A., Schocken S. (1993). Multilayer Feedforward Networks with a Nonpolynomial Activation Function Can Approximate Any Function. Neural Networks, 6(6), 861–867.
- Barron A. R. (1993). Universal Approximation Bounds for Superpositions of a Sigmoidal Function. IEEE Transactions on Information Theory, 39(3), 930–945.
- Goodfellow I., Bengio Y., Courville A. (2016). Deep Learning. MIT Press, rozdz. 6.4.1.