Zacznę tworzyć listę tych, których do tej pory się nauczyłem. Jak powiedział @marcodena, zalety i wady są trudniejsze, ponieważ w większości są to tylko heurystyki wyuczone z próbowania tych rzeczy, ale wydaje mi się, że przynajmniej lista ich nie jest w stanie zranić.
Po pierwsze, zdefiniuję notację wyraźnie, aby nie było żadnych nieporozumień:
Notacja
Zapis ten pochodzi z książki Neilsena .
Sieć neuronowa Feedforward to wiele warstw neuronów połączonych ze sobą. Pobiera dane wejściowe, a następnie dane te „przepływają” przez sieć, a sieć neuronowa zwraca wektor wyjściowy.
Bardziej formalnie, połączenia ı J aktywacji (czyli odbiorczej) j t h neuronu w I T h warstwy, gdzie 1 j jest j T h elementem wektora wejściowego.zajajotjott godzjat godzza1jotjott godz
Następnie możemy powiązać dane wejściowe następnej warstwy z jej poprzednią poprzez następującą relację:
zajajot= σ( ∑k( wjaj k⋅ ai - 1k) + bjajot)
gdzie
- σ jest funkcją aktywacyjną,
- jest masą odneuronu k t h wwarstwie ( i - 1 ) t h doneuronu j t h wwarstwie i t h ,wjaj kkt godz( i - 1 )t godzjott godzjat godz
- jest polaryzacjąneuronu j t h wwarstwie i t h , abjajotjott godzjat godz
- reprezentuje wartość aktywacji w j t h neuronalnych w I T h warstwy.zajajotjott godzjat godz
Czasami piszemy aby reprezentować ∑ k ( w i j k ⋅ a i - 1 k ) + b i j , innymi słowy, wartość aktywacji neuronu przed zastosowaniem funkcji aktywacji.zjajot∑k( wjaj k⋅ ai - 1k) + bjajot
Aby uzyskać bardziej zwięzły zapis, możemy napisać
zaja= σ( wja× ai - 1+ bja)
Aby skorzystać z tego wzoru obliczyć moc sieci wyprzedzającego pewnego wejścia , ustawione 1 = I , a następnie obliczyć do 2 , 3 , ... , m , gdzie m jest liczbą warstw.ja∈ R.nza1= Jaza2), a3), … , Amm
Funkcje aktywacji
(poniżej napiszemy zamiast e x dla czytelności)exp( x )mix
Tożsamość
Znany również jako liniowa funkcja aktywacji.
zajajot= σ( zjajot) = zjajot
Krok
zajajot= σ( zjajot) = { 01jeśli zjajot< 0jeśli zjajot> 0
Odcinkowo liniowy
x maksxminxmax
zajajot= σ( zjajot) = ⎧⎩⎨⎪⎪⎪⎪0m zjajot+ b1jeśli zjajot< xminjeśli xmin≤ zjajot≤ xmaxjeśli zjajot> xmax
Gdzie
m = 1xmax- xmin
i
b = - m xmin= 1 - m xmax
Sigmoid
zajajot= σ( zjajot) = 11 + exp( - zjajot)
Dziennik uzupełniający
zajajot= σ( zjajot) = 1 - exp( -exp( zjajot) )
Dwubiegunowy
zajajot= σ( zjajot) = { - 1 1jeśli zjajot< 0jeśli zjajot> 0
Sigmoid bipolarny
zajajot= σ( zjajot) = 1 - exp( - zjajot)1 + exp( - zjajot)
Tanh
zajajot= σ( zjajot) = tanh( zjajot)
LeCun's Tanh
Zobacz Efficient Backprop .
zajajot= σ( zjajot) = 1,7159 tanh( 23)zjajot)
Łuskowaty:
Hard Tanh
zajajot= σ( zjajot) = maks( -1,min(1,zjajot) )
Absolutny
zajajot= σ( zjajot) = ∣ zjajot∣
Prostownik
Znany również jako Rectified Linear Unit (ReLU), Max lub Ramp Function .
zajajot= σ( zjajot) = maks. ( 0 , zjajot)
Modyfikacje ReLU
Są to niektóre funkcje aktywacyjne, z którymi grałem, które wydają się mieć bardzo dobrą wydajność dla MNIST z tajemniczych powodów.
zajajot= σ( zjajot) = maks. ( 0 , zjajot) + cos( zjajot)
Łuskowaty:
zajajot= σ( zjajot) = maks. ( 0 , zjajot) + grzech( zjajot)
Łuskowaty:
Gładki prostownik
Znany również jako Smooth Rectified Linear Unit, Smooth Max lub Soft plus
zajajot= σ( zjajot) = log( 1+exp( zjajot) )
Logit
zajajot= σ( zjajot) = log( zjajot( 1 - zjajot))
Łuskowaty:
Probit
zajajot= σ( zjajot) = 2-√erf- 1( 2 zjajot- 1 )
.
Gdzie jest funkcją błędu . Nie można go opisać za pomocą funkcji elementarnych, ale można znaleźć sposoby przybliżenia odwrotności na tej stronie Wikipedii i tutaj .erf
Alternatywnie można to wyrazić jako
zajajot= σ( zjajot) = ϕ ( zjajot)
.
Gdzie to funkcja dystrybucji skumulowanej (CDF). Zobacz tutaj, jak to przybliżyć.ϕ
Łuskowaty:
Cosinus
Zobacz Losowe zlewy kuchenne .
zajajot= σ( zjajot) = cos( zjajot)
.
Softmax
Znany również jako znormalizowany wykładniczy.
zajajot= exp( zjajot)∑kexp( zjak)
Ten jest trochę dziwny, ponieważ produkcja jednego neuronu zależy od innych neuronów w tej warstwie. Trudno też obliczyć, ponieważ może być bardzo wysoką wartością, w którym to przypadku prawdopodobnie przepełni się. Podobnie, jeśli jest bardzo niską wartością, spadnie ona do wartości .zjajotexp( zjajot)zjajot0
Aby temu przeciwdziałać, zamiast tego obliczymy . To daje nam:log( ajajot)
log( ajajot) = log⎛⎝⎜exp( zjajot)∑kexp( zjak)⎞⎠⎟
log( ajajot) = zjajot- log( ∑kexp( zjak) )
Tutaj musimy użyć sztuczki log-sum-exp :
Powiedzmy, że obliczamy:
log( e2)+ e9+ e11+ e- 7+ e- 2+ e5)
Dla wygody najpierw posortujemy nasze wykładnicze według wielkości:
log( e11+ e9+ e5+ e2)+ e- 2+ e- 7)
Następnie, ponieważ jest naszym najwyższym, mnożymy przez :mi11mi- 11mi- 11
log( e- 11mi- 11( e11+ e9+ e5+ e2)+ e- 2+ e- 7) )
log( 1mi- 11( e0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18) )
log( e11( e0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18) )
log( e11) + log( e0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18)
11 + log( e0+ e- 2+ e- 6+ e- 9+ e- 13+ e- 18)
Następnie możemy obliczyć wyrażenie po prawej stronie i zapisać jego log. Można to zrobić, ponieważ suma ta jest bardzo mała w odniesieniu do , więc każde niedopełnienie do zera nie byłoby wystarczająco znaczące, aby coś zmienić. Przepełnienie nie może się zdarzyć w wyrażeniu po prawej stronie, ponieważ gwarantujemy, że po pomnożeniu przez , wszystkie moce będą .log( e11)mi- 11≤ 0
Formalnie nazywamy . Następnie:m = max ( zja1, zja2), zja3), . . . )
log( ∑kexp( zjak) ) = m + log( ∑kexp( zjak- m ) )
Nasza funkcja softmax staje się wtedy:
zajajot= exp( log( ajajot) ) = exp( zjajot- m - log( ∑kexp( zjak- m ) ) )
Również jako sidenote pochodną funkcji softmax jest:
reσ( zjajot)rezjajot= σ′( zjajot) = σ( zjajot) ( 1 - σ( zjajot) )
Maxout
Ten jest również trochę trudny. Zasadniczo chodzi o to, że rozkładamy każdy neuron w naszej warstwie maksimum na wiele pod-neuronów, z których każdy ma własne ciężary i uprzedzenia. Następnie dane wejściowe do neuronu trafiają do każdego z jego pod-neuronów, a każdy pod-neuron po prostu wyprowadza swoje (bez zastosowania jakiejkolwiek funkcji aktywacyjnej). A tego neuronu jest wówczas maksimum wszystkich wyników jego pod-neuronu.zzajajot
Formalnie w jednym neuronie powiedzmy, że mamy pod-neuronów. Następnien
zajajot= maksk ∈ [ 1 , n ]sjaj k
gdzie
sjaj k= ai - 1∙ wjaj k+ bjaj k
( to iloczyn kropkowy )∙
Aby pomóc nam w tym pomyśleć, rozważ macierz wag dla warstwy sieci neuronowej, która używa, powiedzmy, funkcji aktywacji sigmoidalnej. jest macierzą 2D, gdzie każda kolumna jest wektorem dla neuronu zawierającym ciężar dla każdego neuronu w poprzedniej warstwie .W.jajathW.jaW.jajotjoti - 1
Jeśli będziemy mieli pod-neurony, będziemy potrzebować macierzy masy 2D dla każdego neuronu, ponieważ każdy pod-neuron będzie potrzebował wektora zawierającego ciężar dla każdego neuronu w poprzedniej warstwie. Oznacza to, że jest teraz trójwymiarową macierzą wagi, gdzie każda jest macierzą masy 2D dla pojedynczego neuronu . A następnie jest wektorem dla pod-neuronu neuronie który zawiera ciężar dla każdego neuronu w poprzedniej warstwie .W.jaW.jajotjotW.jaj kkjoti - 1
Podobnie, w sieci neuronowej, która ponownie wykorzystuje, powiedzmy, funkcję aktywacji sigmoidalnej, jest wektorem z odchyleniem dla każdego neuronu w warstwie .bjabjajotjotja
Aby to zrobić z pod-neuronami, potrzebujemy macierzy odchylenia 2D dla każdej warstwy , gdzie jest wektorem z odchyleniem dla każdego podnośnika w neuron.bjajabjajotbjaj kkjotth
Mając macierz i wektor polaryzacji dla każdego neuronu, wówczas powyższe wyrażenia są bardzo jasne, po prostu przykłada wagi każdego pod-neuronu do wyników z warstwę , a następnie stosując ich uprzedzenia i biorąc ich maksimum.wjajotbjajotwjaj kzai - 1i - 1bjaj k
Sieci Radial Basis Function
Sieci Radial Basis Function są modyfikacją Feedforward Neural Networks, w których zamiast używać
zajajot= σ( ∑k( wjaj k⋅ ai - 1k) + bjajot)
mamy jedną wagę na węzeł na poprzedniej warstwie (jak zwykle), a także jeden średni wektor i jeden standardowy wektor odchylenia dla każdego węzła w poprzednia warstwa.wjaj kkμjaj kσjaj k
Następnie wywołujemy naszą funkcję aktywacyjną aby uniknąć pomylenia jej ze wektorami odchylenia standardowego . Teraz, aby obliczyć musimy najpierw obliczyć jeden dla każdego węzła w poprzedniej warstwie. Jedną z opcji jest użycie odległości euklidesowej:ρσjaj kzajajotzjaj k
zjaj k= ∥ ( ai - 1- μjaj k∥-----------√= ∑ℓ( ai - 1ℓ- μjaj k ℓ)2)-------------√
Gdzie to element elementu . Ten nie używa . Alternatywnie istnieje odległość Mahalanobisa, która podobno działa lepiej:μjaj k ℓℓthμjaj kσjaj k
zjaj k= ( ai - 1- μjaj k)T.Σjaj k( ai - 1- μjaj k)----------------------√
gdzie jest macierzą kowariancji , zdefiniowaną jako:Σjaj k
Σjaj k= diag ( σjaj k)
Innymi słowy, to macierz diagonalna z jako elementami diagonalnymi. Definiujemy i jako wektory kolumnowe, ponieważ taka notacja jest zwykle używana.Σjaj kσjaj kzai - 1μjaj k
Tak naprawdę mówią tylko, że odległość Mahalanobisa jest zdefiniowana jako
zjaj k= ∑ℓ( ai - 1ℓ- μjaj k ℓ)2)σjaj k ℓ--------------⎷
Gdzie jest elementem elementu . Zauważ, że zawsze musi być dodatnie, ale jest to typowy wymóg dla odchylenia standardowego, więc nie jest to zaskakujące.σjaj k ℓℓthσjaj kσjaj k ℓ
W razie potrzeby odległość Mahalanobisa jest na tyle ogólna, że macierz kowariancji można zdefiniować jako inne macierze. Na przykład, jeśli macierz kowariancji jest macierzą tożsamości, nasza odległość Mahalanobisa zmniejsza się do odległości euklidesowej. jest jednak dość powszechny i jest znany jako znormalizowana odległość euklidesowa .Σjaj kΣjaj k= diag ( σjaj k)
Tak czy inaczej, po wybraniu naszej funkcji odległości możemy obliczyć przezzajajot
zajajot= ∑kwjaj kρ ( zjaj k)
W tych sieciach wybierają mnożenie przez wagi po zastosowaniu funkcji aktywacji z przyczyn.
Opisuje to, jak utworzyć wielowarstwową sieć Radial Basis Function, jednak zwykle jest tylko jeden z tych neuronów, a jego wyjście jest wyjściem sieci. Jest rysowany jako wiele neuronów, ponieważ każdy średni wektor i każdy standardowy wektor odchylenia tego pojedynczego neuronu jest uważany za jeden „neuron”, a następnie po wszystkich tych wyjściach pojawia się kolejna warstwa która przyjmuje sumę tych obliczonych wartości razy wagę, tak jak powyżej. Dzielenie go na dwie warstwy z wektorem „sumującym” na końcu wydaje mi się dziwne, ale tak właśnie robią.μjaj kσjaj kzajajot
Zobacz także tutaj .
Podstawowa funkcja radialna Funkcje aktywacji sieci
Gaussowski
ρ ( zjaj k) = exp( -12)( zjaj k)2))
Wielokwadratowe
Wybierz punkt . Następnie obliczamy odległość od do :( x , y)( zjajot, 0 )( x , y)
ρ ( zjaj k) = ( zjaj k- x )2)+ y2)------------√
To jest z Wikipedii . Nie jest ograniczony i może mieć jakąkolwiek wartość dodatnią, choć zastanawiam się, czy istnieje sposób na jego normalizację.
Gdy , odpowiada to wartości bezwzględnej (z przesunięciem w poziomie ).y= 0x
Odwrotny wielokwadratowy
Taki sam jak kwadratowy, z wyjątkiem odwróconego:
ρ ( zjaj k) = 1( zjaj k- x )2)+ y2)------------√
* Grafika z Intmath's Graphs przy użyciu SVG .