ML Atlas

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.

Zobacz też