Dlaczego w sieci neuronowej z propagacją wsteczną należy stosować nieliniową funkcję aktywacji?

139

Czytałem kilka rzeczy na temat sieci neuronowych i rozumiem ogólną zasadę jednowarstwowej sieci neuronowej. Rozumiem potrzebę dodatkowych warstw, ale dlaczego są używane nieliniowe funkcje aktywacji?

Po tym pytaniu następuje pytanie: Do czego służy pochodna funkcji aktywacji wykorzystywanej w propagacji wstecznej?

corazza
źródło
najlepsza odpowiedź ze wszystkich tutaj w sztucznej inteligencji
eusoubrasileiro

Odpowiedzi:

167

Celem funkcji aktywacji jest wprowadzenie nieliniowości do sieci

to z kolei umożliwia modelowanie zmiennej odpowiedzi (inaczej zmiennej docelowej, etykiety klasy lub wyniku), która zmienia się nieliniowo wraz ze zmiennymi objaśniającymi

nieliniowe oznacza, że ​​wynik nie może być odtworzony z liniowej kombinacji danych wejściowych (co nie jest tym samym, co wyjście, które renderuje do linii prostej - określenie to jest afiniczne ).

inny sposób myślenia o tym: bez nieliniowej funkcji aktywacji w sieci NN, bez względu na to, ile miał warstw, zachowywałby się jak perceptron jednowarstwowy, ponieważ sumowanie tych warstw dałoby po prostu kolejną funkcję liniową (patrz definicja powyżej).

>>> in_vec = NP.random.rand(10)
>>> in_vec
  array([ 0.94,  0.61,  0.65,  0.  ,  0.77,  0.99,  0.35,  0.81,  0.46,  0.59])

>>> # common activation function, hyperbolic tangent
>>> out_vec = NP.tanh(in_vec)
>>> out_vec
 array([ 0.74,  0.54,  0.57,  0.  ,  0.65,  0.76,  0.34,  0.67,  0.43,  0.53])

Typowa funkcja aktywacji stosowana w backprop ( stycznej hiperbolicznej ) oceniana od -2 do 2:

wprowadź opis obrazu tutaj

Doug
źródło
15
Dlaczego mielibyśmy chcieć wyeliminować liniowość?
corazza
17
Jeśli dane, które chcemy modelować, są nieliniowe, musimy to uwzględnić w naszym modelu.
Doug
38
Odpowiedź w jednym zdaniu: << bez względu na to, ile warstw zachowywałoby się tak jak pojedynczy perceptron (ponieważ zsumowane funkcje liniowe dają tylko funkcję liniową). >> . Miły!
Autonomiczny
12
Jest to trochę mylące - jak wspomniał eski, wyprostowane liniowe funkcje aktywacji są niezwykle skuteczne, a jeśli naszym celem jest tylko modelowanie / aproksymacja funkcji, wyeliminowanie nieliniowości na wszystkich etapach niekoniecznie jest właściwą odpowiedzią. Mając wystarczającą liczbę elementów liniowych, można przybliżyć prawie każdą funkcję nieliniową z dużą dokładnością. Znalazłem to dobre wyjaśnienie, dlaczego działają rektyfikowane jednostki liniowe: stats.stackexchange.com/questions/141960/ ...
tegan
11
@tegan Rectified liniowe funkcje aktywacji są nieliniowe. Nie jestem pewien, co Twój komentarz ma wspólnego z odpowiedzią.
endolith
49

Liniowa funkcja aktywacji może być używana, jednak w bardzo ograniczonych przypadkach. W rzeczywistości, aby lepiej zrozumieć funkcje aktywacji, należy spojrzeć na zwykły najmniejszy kwadrat lub po prostu na regresję liniową. Regresja liniowa ma na celu znalezienie optymalnych wag, które w połączeniu z danymi wejściowymi dają minimalny efekt pionowy między zmiennymi objaśniającymi a docelowymi. Krótko mówiąc, jeśli oczekiwany wynik odzwierciedla regresję liniową, jak pokazano poniżej, można zastosować liniowe funkcje aktywacji: (górny rysunek). Ale tak jak na drugim rysunku poniżej, funkcja liniowa nie da oczekiwanych wyników: (Figura środkowa). Jednak funkcja nieliniowa, jak pokazano poniżej, dałaby pożądane wyniki:

wprowadź opis obrazu tutaj

Funkcje aktywacji nie mogą być liniowe, ponieważ sieci neuronowe z liniową funkcją aktywacji są skuteczne tylko na głębokości jednej warstwy, niezależnie od tego, jak złożona jest ich architektura. Dane wejściowe do sieci są zwykle transformacjami liniowymi (wejście * waga), ale rzeczywistość i problemy są nieliniowe. Aby przychodzące dane były nieliniowe, używamy mapowania nieliniowego zwanego funkcją aktywacji. Funkcja aktywacji to funkcja decyzyjna, która określa obecność określonej cechy neuronowej. Jest odwzorowywany między 0 a 1, gdzie zero oznacza brak cechy, a jeden oznacza jej obecność. Niestety, niewielkie zmiany zachodzące w wagach nie mogą być odzwierciedlone w wartościach aktywacji, ponieważ mogą one przyjmować tylko 0 lub 1. Dlatego funkcje nieliniowe muszą być ciągłe i różniczkowalne w tym zakresie. Sieć neuronowa musi być w stanie przyjmować dowolne dane wejściowe od -infinity do + infinite, ale powinna być w stanie odwzorować je na dane wyjściowe w zakresie od {0,1} lub między {-1,1} w niektórych przypadkach - stąd potrzeba funkcji aktywacji. Nieliniowość jest potrzebna w funkcjach aktywacji, ponieważ jej celem w sieci neuronowej jest wytworzenie nieliniowej granicy decyzyjnej poprzez nieliniowe kombinacje wagi i danych wejściowych.

chibole
źródło
1
+ Po pierwsze, można więc wywnioskować, że funkcja nieliniowa służy do ustalenia idealnej granicy?
SIslam
1
Tak, dokładnie. Stale wytwarzając tylko 0 lub 1, może wytwarzać 0,4 lub 0,78, czyniąc go ciągłym w zakresie granic.
chibole
3
Sieć neuronowa musi być w stanie przyjmować dowolne dane wejściowe od -infinity do + nieskończoności, ale powinna być w stanie odwzorować je na dane wyjściowe w zakresie od {0,1} lub między {-1,1} ... przypomina mi tym ograniczeniem ReLU jest to, że powinien być używany tylko w ukrytych warstwach modelu sieci neuronowej.
Cloud Cho
21

Jeśli pozwolimy tylko na liniowe funkcje aktywacji w sieci neuronowej, wynikiem będzie po prostu liniowa transformacja danych wejściowych, co nie wystarczy do utworzenia uniwersalnego aproksymatora funkcji . Taką sieć można po prostu przedstawić jako mnożenie macierzy i nie byłbyś w stanie uzyskać bardzo interesujących zachowań z takiej sieci.

To samo dotyczy przypadku, gdy wszystkie neurony mają afiniczne funkcje aktywacji (tj. Funkcję aktywacji w postaci f(x) = a*x + c, gdzie ai csą stałymi, co jest uogólnieniem liniowych funkcji aktywacji), co spowoduje po prostu transformację afiniczną od wejścia do wyjścia , co też nie jest zbyt ekscytujące.

Sieć neuronowa może bardzo dobrze zawierać neurony z liniowymi funkcjami aktywacji, takimi jak warstwa wyjściowa, ale wymagają one towarzystwa neuronów z nieliniową funkcją aktywacji w innych częściach sieci.

Uwaga: Ciekawym wyjątkiem są syntetyczne gradienty DeepMind , dla których używają małej sieci neuronowej do przewidywania gradientu w przebiegu wstecznej propagacji, biorąc pod uwagę wartości aktywacji, i odkrywają, że mogą uciec z użyciem sieci neuronowej bez ukrytych warstw i z tylko aktywacje liniowe.

Cześć Żegnaj
źródło
1
Funkcje wyższego rzędu można aproksymować za pomocą liniowych funkcji aktywacji przy użyciu wielu ukrytych warstw. Uniwersalne twierdzenie o aproksymacji jest specyficzne dla MLP z tylko jedną ukrytą warstwą.
eski
Właściwie uważam, że masz rację w swoim stwierdzeniu o afinicznych funkcjach aktywacyjnych powodujących transformację afiniczną, ale fakt, że transformacja jest wyuczona przez propagację wsteczną (lub w jakikolwiek inny sposób), sprawia, że ​​nie jest ona całkowicie bezużyteczna, jeśli chodzi o pierwotne pytanie.
eski
4
@eski Nie można nie zbliżenie funkcja wyższego rzędu tylko liniowych funkcji aktywacji, można tylko model liniowy (lub afinicznej, jeśli masz dodatkowy węzeł stały w każdym oprócz ostatniej warstwie) funkcje i transformacje, nie ma znaczenia ile warstwy, mieć.
HelloGoodbye
Czy można powiedzieć, że głównym celem funkcji aktywacji jest umożliwienie sieci neuronowej wytworzenia nieliniowej granicy decyzyjnej?
stackoverflowuser2010
@ stackoverflowuser2010 To byłby jeden ze sposobów spojrzenia na to. Ale funkcja aktywacji to coś więcej niż tylko to. Artykuł Wikipedii o funkcjach aktywacji wymienia kilka funkcji aktywacji, z których wszystkie (oprócz jednej) są nieliniowe, i porównuje różne cechy, jakie może mieć funkcja aktywacji.
HelloGoodbye,
9

Sieć neuronowa ze sprzężeniem zwrotnym z liniową aktywacją i dowolną liczbą ukrytych warstw jest równoważna tylko liniowej neuronowej sieci neuronowej bez warstwy ukrytej. Na przykład rozważmy sieć neuronową na rysunku z dwiema ukrytymi warstwami i bez aktywacji wprowadź opis obrazu tutaj

y = h2 * W3 + b3 
  = (h1 * W2 + b2) * W3 + b3
  = h1 * W2 * W3 + b2 * W3 + b3 
  = (x * W1 + b1) * W2 * W3 + b2 * W3 + b3 
  = x * W1 * W2 * W3 + b1 * W2 * W3 + b2 * W3 + b3 
  = x * W' + b'

Możemy zrobić ostatni krok, ponieważ kombinację kilku transformacji liniowych można zastąpić jedną transformacją, a kombinacja kilku składników odchylenia to tylko jedno odchylenie. Wynik jest taki sam, nawet jeśli dodamy trochę liniowej aktywacji.

Moglibyśmy więc zastąpić tę sieć neuronową jednowarstwową siecią neuronową, którą można rozszerzyć na nwarstwy. Oznacza to, że dodanie warstw w ogóle nie zwiększa mocy aproksymacji liniowej sieci neuronowej. Potrzebujemy nieliniowych funkcji aktywacji, aby przybliżyć funkcje nieliniowe, a większość problemów w świecie rzeczywistym jest bardzo złożona i nieliniowa. W rzeczywistości, gdy funkcja aktywacji jest nieliniowa, wówczas dwuwarstwowa sieć neuronowa z wystarczająco dużą liczbą jednostek ukrytych może zostać udowodniona jako uniwersalny aproksymator funkcji.

xashru
źródło
5

„W niniejszym artykule wykorzystano twierdzenie Stone'a-Weierstrassa i cosinus squasher'a Gallanta i White'a do ustalenia, że ​​standardowa wielowarstwowa architektura sieci z wyprzedzeniem z wyprzedzeniem wykorzystująca funkcje zgniatania ścierania może przybliżyć praktycznie każdą interesującą funkcję z dowolnym pożądanym stopniem dokładności, pod warunkiem, że jest wystarczająco dużo ukrytych jednostki są dostępne ”. ( Hornik i wsp., 1989, Sieci neuronowe )

Funkcja zgniatania jest na przykład nieliniową funkcją aktywacji, która jest odwzorowywana na [0,1], podobnie jak sigmoidalna funkcja aktywacji.

alfa
źródło
3

Są chwile, kiedy czysto liniowa sieć może dać użyteczne wyniki. Powiedzmy, że mamy sieć trzech warstw z kształtami (3, 2, 3). Ograniczając warstwę środkową tylko do dwóch wymiarów, otrzymujemy wynik będący „płaszczyzną najlepszego dopasowania” w pierwotnej przestrzeni trójwymiarowej.

Ale są łatwiejsze sposoby na znalezienie liniowych transformacji tej postaci, takich jak NMF, PCA itp. Jest to jednak przypadek, w którym sieć wielowarstwowa NIE zachowuje się tak samo jak perceptron jednowarstwowy.

markemus
źródło
2

Aby zrozumieć logikę stojącą za nieliniowymi funkcjami aktywacji, najpierw należy zrozumieć, dlaczego używane są funkcje aktywacji. Ogólnie rzecz biorąc, rzeczywiste problemy wymagają nieliniowych rozwiązań, które nie są trywialne. Potrzebujemy więc pewnych funkcji, aby wygenerować nieliniowość. Zasadniczo funkcja aktywacji generuje tę nieliniowość podczas mapowania wartości wejściowych w pożądanym zakresie.

Jednak liniowe funkcje aktywacji mogą być używane w bardzo ograniczonym zestawie przypadków, w których nie są potrzebne ukryte warstwy, takie jak regresja liniowa. Zwykle nie ma sensu generowanie sieci neuronowej dla tego rodzaju problemów, ponieważ niezależnie od liczby warstw ukrytych, sieć ta generuje liniową kombinację danych wejściowych, którą można wykonać w jednym kroku. Innymi słowy, zachowuje się jak pojedyncza warstwa.

Istnieje również kilka bardziej pożądanych właściwości funkcji aktywacji, takich jak ciągła różniczkowalność . Ponieważ używamy wstecznej propagacji, generowana przez nas funkcja musi być w dowolnym momencie różniczkowalna. Zdecydowanie radzę sprawdzić stronę wikipedii pod kątem funkcji aktywacji stąd, aby lepiej zrozumieć temat.

Alican Şafak Özdek
źródło
2

Oto kilka dobrych odpowiedzi. Warto zwrócić uwagę na książkę „Rozpoznawanie wzorców i uczenie maszynowe” autorstwa Christophera M. Bishopa. Jest to książka, do której warto się odnieść, aby uzyskać głębszy wgląd w kilka koncepcji związanych z ML. Wyciąg ze strony 229 (rozdział 5.1):

Jeżeli funkcje aktywacji wszystkich ukrytych jednostek w sieci są traktowane jako liniowe, to dla każdej takiej sieci zawsze możemy znaleźć równoważną sieć bez ukrytych jednostek. Wynika to z faktu, że kompozycja kolejnych przekształceń liniowych sama w sobie jest przekształceniem liniowym. Jeśli jednak liczba ukrytych jednostek jest mniejsza niż liczba jednostek wejściowych lub wyjściowych, wówczas transformacje, które może wygenerować sieć, nie są najbardziej ogólnymi możliwymi transformacjami liniowymi z wejść do wyjść, ponieważ informacje są tracone w redukcji wymiarowości na ukryte jednostki. W sekcji 12.4.2 pokazujemy, że sieci jednostek liniowych dają początek analizie głównych składowych. Generalnie jednak zainteresowanie wielowarstwowymi sieciami jednostek liniowych jest niewielkie.

haripkannan
źródło
1

Jak pamiętam - funkcje sigmoidalne są używane, ponieważ ich pochodna pasująca do algorytmu BP jest łatwa do obliczenia, coś prostego, jak f (x) (1-f (x)). Nie pamiętam dokładnie matematyki. Właściwie można użyć dowolnej funkcji z pochodnymi.

Anton
źródło
7
Funkcja nadal chce się monotonicznie zwiększać, o czym pamiętam. Więc nie ma żadnej funkcji.
Novak
1

Warstwowy NN kilku neuronów może służyć do uczenia liniowo nierozłącznych problemów. Na przykład funkcję XOR można uzyskać za pomocą dwóch warstw z funkcją aktywacji krokowej.

david
źródło
0

Pozwól, że wyjaśnię ci to tak prosto, jak to tylko możliwe:

Sieci neuronowe są używane w rozpoznawaniu wzorców, prawda? A znajdowanie wzorców jest techniką bardzo nieliniową.

Załóżmy, że ze względu na argumentację używamy liniowej funkcji aktywacji y = wX + b dla każdego pojedynczego neuronu i ustawiamy coś w rodzaju, jeśli y> 0 -> klasa 1 w przeciwnym razie klasa 0.

Teraz możemy obliczyć naszą stratę za pomocą kwadratowej utraty błędu i odwrotnie ją propagować, aby model się dobrze uczył, prawda?

ŹLE.

  • Dla ostatniej ukrytej warstwy zaktualizowaną wartością będzie w {l} = w {l} - (alpha) * X.

  • Dla przedostatniej ukrytej warstwy zaktualizowaną wartością będzie w {l-1} = w {l-1} - (alpha) * w {l} * X.

  • Dla i-tej ostatniej ukrytej warstwy zaktualizowaną wartością będzie w {i} = w {i} - (alfa) * w {l} ... * w {i + 1} * X.

Powoduje to, że mnożymy wszystkie macierze wag razem, co daje następujące możliwości: A) w {i} zmienia się ledwo z powodu zanikającego gradientu B) w {i} zmienia się dramatycznie i niedokładnie z powodu eksplodującego gradientu C) w {i} zmienia się dobrze wystarczy, by dać nam dobry wynik dopasowania

W przypadku C, oznacza to, że nasz problem klasyfikacji / predykcji był najprawdopodobniej prostym problemem opartym na regresorze liniowym / logistycznym i nigdy nie wymagał sieci neuronowej!

Bez względu na to, jak mocny lub dobrze dostrojony jest Twój NN, jeśli używasz liniowej funkcji aktywacji, nigdy nie będziesz w stanie rozwiązać nieliniowych problemów wymagających rozpoznawania wzorców

Kaustubh J
źródło
-3

To wcale nie jest wymóg. W rzeczywistości wyprostowana liniowa funkcja aktywacji jest bardzo przydatna w dużych sieciach neuronowych. Obliczanie gradientu jest znacznie szybsze i wywołuje rzadkość, ustawiając minimalną granicę na 0.

Aby uzyskać więcej informacji, zobacz: https://www.academia.edu/7826776/Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks


Edytować:

Odbyła się dyskusja na temat tego, czy wyprostowaną liniową funkcję aktywacji można nazwać funkcją liniową.

Tak, z technicznego punktu widzenia jest to funkcja nieliniowa, ponieważ nie jest liniowa w punkcie x = 0, jednak nadal można powiedzieć, że jest liniowa we wszystkich innych punktach, więc nie sądzę, aby warto było tu szukać dziurawego dzioba,

Mogłem wybrać funkcję tożsamości i nadal byłaby to prawda, ale jako przykład wybrałem ReLU ze względu na jego niedawną popularność.

eski
źródło
8
Rektyfikowana liniowa funkcja aktywacji jest również nieliniowa (pomimo swojej nazwy). Jest to po prostu liniowe dla wartości dodatnich
Plankalkül
4
Jesteś technicznie poprawny, nie jest to liniowe w całej domenie, konkretnie przy x = 0 (właściwie jest liniowe dla x <0, ponieważ f (x) = 0 jest funkcją liniową). Nie jest również różniczkowalna, więc funkcja gradientu również nie jest w pełni obliczalna, ale w praktyce te techniczne aspekty są łatwe do przezwyciężenia.
eski
4
Jest nie tylko poprawny technicznie, ale także ma rację w praktyce (czy coś w tym rodzaju). To nieliniowość ReLU czyni je użytecznymi. Gdyby były liniowe, miałyby funkcję aktywacji na formularzu f(x) = a*x(ponieważ jest to jedyny rodzaj liniowej funkcji aktywacji), która jest bezużyteczna jako funkcja aktywacji (chyba że połączysz ją z nieliniowymi funkcjami aktywacji ).
HelloGoodbye
10
Rektyfikowana jednostka liniowa (ReLU) nie jest liniowa i nie jest to tylko „drobny szczegół”, który ludzie szukają, to ważny powód, dla którego warto zacząć od tego. Sieć neuronowa z macierzą tożsamości lub zwykłą jednostką liniową wykorzystywaną jako funkcja aktywacji nie byłaby w stanie modelować funkcji nieliniowych. To, że jest liniowa powyżej 0, nie oznacza, że ​​jest to praktycznie funkcja liniowa. Dziurawy ReLU jest również „liniowy” poniżej 0, ale nadal nie jest funkcją liniową i zdecydowanie nie można go tak po prostu zastąpić funkcją tożsamości. Nieliniowość jest zdecydowanie wymaganiem.
Essam Al-Mansouri
3
W rzeczywistości jest to pojęcie zwane fragmentaryczną funkcją liniową.
eski