Kompleksowa lista funkcji aktywacyjnych w sieciach neuronowych z zaletami / wadami


94

Czy istnieją jakieś dokumenty referencyjne, które podają wyczerpującą listę funkcji aktywacyjnych w sieciach neuronowych wraz z ich zaletami / wadami (a najlepiej niektóre wskazówki do publikacji, w których były skuteczne lub nie tak skuteczne)?


Nie wiem wystarczająco dużo o ANN, ale jeśli funkcje aktywacyjne nie różnią się zasadniczo kształtem, bardzo trudno będzie je rozróżnić. Aby omówić analogiczną sytuację, możesz zobaczyć moją odpowiedź tutaj: Różnica między modelami logit i probit .
gung

1
nie, to robi całkiem dużą różnicę.
Viliami,

en.wikipedia.org/wiki/Activation_function jest dobrym źródłem; możesz korzystać z wielu innych, w tym sin(x)patrz openreview.net/pdf?id=Sks3zF9eg .
Piotr Migdal

Samouczek wideo na temat funkcji aktywacyjnych można znaleźć na stronie: quickkt.com/tutorials/artificial-intelligence/deep-learning/…
vinay kumar

Odpowiedzi:


143

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.zajotjajotthjathzajot1jotth

Następnie możemy powiązać dane wejściowe następnej warstwy z jej poprzednią poprzez następującą relację:

zajotja=σ(k(wjotkjazakja-1)+bjotja)

gdzie

  • σ jest funkcją aktywacyjną,
  • jest masą odneuronu k t h wwarstwie ( i - 1 ) t h doneuronu j t h wwarstwie i t h ,wjotkjakth(ja-1)thjotthjath
  • jest polaryzacjąneuronu j t h wwarstwie i t h , abjotjajotthjath
  • reprezentuje wartość aktywacji w j t h neuronalnych w I T h warstwy.zajotjajotthjath

Czasami piszemy aby reprezentować k ( w i j ka i - 1 k ) + b i j , innymi słowy, wartość aktywacji neuronu przed zastosowaniem funkcji aktywacji.zjotjak(wjotkjazakja-1)+bjotja

wprowadź opis zdjęcia tutaj

Aby uzyskać bardziej zwięzły zapis, możemy napisać

zaja=σ(wja×zaja-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.jaRnza1=jaza2),za3),,zamm

Funkcje aktywacji

(poniżej napiszemy zamiast e x dla czytelności)exp(x)mix

Tożsamość

Znany również jako liniowa funkcja aktywacji.

zajotja=σ(zjotja)=zjotja

Tożsamość

Krok

zajotja=σ(zjotja)={0Jeśli zjotja<01Jeśli zjotja>0

Krok

Odcinkowo liniowy

x maksxminxmax

zajotja=σ(zjotja)={0Jeśli zjotja<xminmzjotja+bJeśli xminzjotjaxmax1Jeśli zjotja>xmax

Gdzie

m=1xmax-xmin

i

b=-mxmin=1-mxmax

Odcinkowo liniowy

Sigmoid

zajotja=σ(zjotja)=11+exp(-zjotja)

Sigmoid

Dziennik uzupełniający

zajotja=σ(zjotja)=1-exp(-exp(zjotja))

Dziennik uzupełniający

Dwubiegunowy

zajotja=σ(zjotja)={-1Jeśli zjotja<0   1Jeśli zjotja>0

Dwubiegunowy

Sigmoid bipolarny

zajotja=σ(zjotja)=1-exp(-zjotja)1+exp(-zjotja)
Sigmoid bipolarny

Tanh

zajotja=σ(zjotja)=tanh(zjotja)

Tanh

LeCun's Tanh

Zobacz Efficient Backprop .

zajotja=σ(zjotja)=1,7159tanh(2)3)zjotja)

LeCun's Tanh

Łuskowaty:

Skalowany Tanh LeCuna

Hard Tanh

zajotja=σ(zjotja)=max(-1,min(1,zjotja))

Hard Tanh

Absolutny

zajotja=σ(zjotja)= ∣zjotja

Absolutny

Prostownik

Znany również jako Rectified Linear Unit (ReLU), Max lub Ramp Function .

zajotja=σ(zjotja)=max(0,zjotja)

Prostownik

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.

zajotja=σ(zjotja)=max(0,zjotja)+sałata(zjotja)

ReLU cos

Łuskowaty:

Skalowane cos ReLU

zajotja=σ(zjotja)=max(0,zjotja)+grzech(zjotja)

Grzech ReLU

Łuskowaty:

Skalowany grzech ReLU

Gładki prostownik

Znany również jako Smooth Rectified Linear Unit, Smooth Max lub Soft plus

zajotja=σ(zjotja)=log(1+exp(zjotja))

Gładki prostownik

Logit

zajotja=σ(zjotja)=log(zjotja(1-zjotja))

Logit

Łuskowaty:

Logit Scaled

Probit

zajotja=σ(zjotja)=2)erf-1(2)zjotja-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

zajotja=σ(zjotja)=ϕ(zjotja)
.

Gdzie to funkcja dystrybucji skumulowanej (CDF). Zobacz tutaj, jak to przybliżyć.ϕ

Probit

Łuskowaty:

Probit skalowane

Cosinus

Zobacz Losowe zlewy kuchenne .

zajotja=σ(zjotja)=sałata(zjotja)
.

Cosinus

Softmax

Znany również jako znormalizowany wykładniczy.

zajotja=exp(zjotja)kexp(zkja)

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 .zjotjaexp(zjotja)zjotja0

Aby temu przeciwdziałać, zamiast tego obliczymy . To daje nam:log(zajotja)

log(zajotja)=log(exp(zjotja)kexp(zkja))

log(zajotja)=zjotja-log(kexp(zkja))

Tutaj musimy użyć sztuczki log-sum-exp :

Powiedzmy, że obliczamy:

log(mi2)+mi9+mi11+mi-7+mi-2)+mi5)

Dla wygody najpierw posortujemy nasze wykładnicze według wielkości:

log(mi11+mi9+mi5+mi2)+mi-2)+mi-7)

Następnie, ponieważ jest naszym najwyższym, mnożymy przez :mi11mi-11mi-11

log(mi-11mi-11(mi11+mi9+mi5+mi2)+mi-2)+mi-7))

log(1mi-11(mi0+mi-2)+mi-6+mi-9+mi-13+mi-18))

log(mi11(mi0+mi-2)+mi-6+mi-9+mi-13+mi-18))

log(mi11)+log(mi0+mi-2)+mi-6+mi-9+mi-13+mi-18)

11+log(mi0+mi-2)+mi-6+mi-9+mi-13+mi-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(mi11)mi-110

Formalnie nazywamy . Następnie:m=max(z1ja,z2)ja,z3)ja,...)

log(kexp(zkja))=m+log(kexp(zkja-m))

Nasza funkcja softmax staje się wtedy:

zajotja=exp(log(zajotja))=exp(zjotja-m-log(kexp(zkja-m)))

Również jako sidenote pochodną funkcji softmax jest:

reσ(zjotja)rezjotja=σ(zjotja)=σ(zjotja)(1-σ(zjotja))

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.zzajotja

Formalnie w jednym neuronie powiedzmy, że mamy pod-neuronów. Następnien

zajotja=maxk[1,n]sjotkja

gdzie

sjotkja=zaja-1wjotkja+bjotkja

( 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.jotjajotja-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.jotjajotW.jotkjakjotja-1

Podobnie, w sieci neuronowej, która ponownie wykorzystuje, powiedzmy, funkcję aktywacji sigmoidalnej, jest wektorem z odchyleniem dla każdego neuronu w warstwie .bjabjotjajotja

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.bjajabjotjabjotkjakjotth

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.wjotjabjotjawjotkjazaja-1ja-1bjotkja

Sieci Radial Basis Function

Sieci Radial Basis Function są modyfikacją Feedforward Neural Networks, w których zamiast używać

zajotja=σ(k(wjotkjazakja-1)+bjotja)

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.wjotkjakμjotkjaσjotkja

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:ρσjotkjazajotjazjotkja

zjotkja=(zaja-1-μjotkja=(zaja-1-μjotkja)2)

Gdzie to element elementu . Ten nie używa . Alternatywnie istnieje odległość Mahalanobisa, która podobno działa lepiej:μjotkjathμjotkjaσjotkja

zjotkja=(zaja-1-μjotkja)T.Σjotkja(zaja-1-μjotkja)

gdzie jest macierzą kowariancji , zdefiniowaną jako:Σjotkja

Σjotkja=diag(σjotkja)

Innymi słowy, to macierz diagonalna z jako elementami diagonalnymi. Definiujemy i jako wektory kolumnowe, ponieważ taka notacja jest zwykle używana.Σjotkjaσjotkjazaja-1μjotkja

Tak naprawdę mówią tylko, że odległość Mahalanobisa jest zdefiniowana jako

zjotkja=(zaja-1-μjotkja)2)σjotkja

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.σjotkjathσjotkjaσjotkja

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 .ΣjotkjaΣjotkja=diag(σjotkja)

Tak czy inaczej, po wybraniu naszej funkcji odległości możemy obliczyć przezzajotja

zajotja=kwjotkjaρ(zjotkja)

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ą.μjotkjaσjotkjazajotja

Zobacz także tutaj .

Podstawowa funkcja radialna Funkcje aktywacji sieci

Gaussowski

ρ(zjotkja)=exp(-12)(zjotkja)2))

Gaussowski

Wielokwadratowe

Wybierz punkt . Następnie obliczamy odległość od do :(x,y)(zjotja,0)(x,y)

ρ(zjotkja)=(zjotkja-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

Wielokwadratowe

Odwrotny wielokwadratowy

Taki sam jak kwadratowy, z wyjątkiem odwróconego:

ρ(zjotkja)=1(zjotkja-x)2)+y2)

Odwrotny wielokwadratowy

* Grafika z Intmath's Graphs przy użyciu SVG .


11
Witamy w CV. +6 jest to bajecznie pouczające. Mam nadzieję, że zobaczymy więcej takich w przyszłości.
gung

1
istnieje również gładka rektyfikowana funkcja liniowa formy i probit. log(1+exp(x))
Memming

Okej, myślę, że dodałem Logit, Probit i Completary log-log, jednak nie mam głębokiego zrozumienia tych tematów, więc mogłem źle zrozumieć ich formę pisemną. Czy to jest poprawne?
Phylliida

3
Byłby to interesujący artykuł z ładną listą referencji. Na przykład arxiv.org/abs/1505.03654 . Skontaktuj się ze mną, jeśli zdecydujesz się napisać artykuł i chcesz uzyskać inne referencje.
Hunaphu,

9
ktoś powinien zaktualizować to o Elu, Leaky ReLU, PReLU i RReLU.
Viliami 21.04.17

24

Jedna taka lista, choć niezbyt wyczerpująca: http://cs231n.github.io/neural-networks-1/

Często używane funkcje aktywacji

Każda funkcja aktywacji (lub nieliniowość ) pobiera jedną liczbę i wykonuje na niej pewną stałą operację matematyczną. W praktyce istnieje kilka funkcji aktywacyjnych:

wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj

Po lewej: Nieliniowość sigmoidalna powoduje zmiażdżenie liczb rzeczywistych w zakresie od [0,1] Po prawej: Nieliniowość sigmoidalna zmiażdży liczby rzeczywiste w zakresie od [-1,1].

Sigmoid. Nieliniowość sigmoidalna ma postać matematyczną i jest pokazana na obrazku powyżej po lewej stronie. Jak wspomniano w poprzedniej sekcji, przyjmuje liczbę o wartościach rzeczywistych i „zgniata” ją w zakresie od 0 do 1. W szczególności duże liczby ujemne stają się 0, a duże liczby dodatnie stają się 1. Funkcja sigmoidalna była często używana historycznie ponieważ ma niezłą interpretację jako szybkość odpalania neuronu: od całkowitego odpalenia (0) do pełnego nasycenia przy założonej maksymalnej częstotliwości (1). W praktyce sigmoidalna nieliniowość ostatnio popadła w niełaskę i jest rzadko używana. Ma dwie główne wady:σ(x)=1/(1+mi-x)

  • Sigmoidy nasycają i zabijają gradienty . Bardzo niepożądaną właściwością esicy neuronu jest to, że gdy aktywacja neuronu nasyca się na ogonie 0 lub 1, gradient w tych obszarach jest prawie zerowy. Przypomnij sobie, że podczas propagacji wstecznej ten (lokalny) gradient zostanie pomnożony przez gradient wyniku tej bramki dla całego celu. Dlatego jeśli lokalny gradient jest bardzo mały, skutecznie „zabije” gradient i prawie żaden sygnał nie przepłynie przez neuron do jego wag i rekurencyjnie do jego danych. Ponadto należy zachować szczególną ostrożność podczas inicjowania ciężaru neuronów esowatych, aby zapobiec nasyceniu. Na przykład, jeśli początkowe ciężary są zbyt duże, wówczas większość neuronów ulegnie nasyceniu, a sieć prawie się nie nauczy.
  • Wyjścia sigmoidalne nie są wyśrodkowane na zero . Jest to niepożądane, ponieważ neurony w późniejszych warstwach przetwarzania w sieci neuronowej (więcej o tym wkrótce) otrzymywałyby dane, które nie są wyśrodkowane. Ma to wpływ na dynamikę podczas opadania gradientu, ponieważ jeśli dane wchodzące do neuronu są zawsze dodatnie (np. elementarnie w )), to gradient na wagach podczas propagacji wstęgowej będzie albo wszystkie są dodatnie lub wszystkie ujemne (w zależności od gradientu całego wyrażenia x>0fa=wT.x+bwfa). Może to wprowadzić niepożądaną dynamikę zygzakowatą w aktualizacjach gradientu dla odważników. Należy jednak zauważyć, że po dodaniu tych gradientów do partii danych ostateczna aktualizacja wag może mieć zmienne znaki, co nieco łagodzi ten problem. Jest to zatem niedogodność, ale ma mniej poważne konsekwencje w porównaniu do powyższego problemu z nasyconą aktywacją.

Tanh Nieliniowość tanh pokazano na powyższym obrazku po prawej stronie. Zgniata liczbę rzeczywistą do zakresu [-1, 1]. Podobnie jak sigmoidalny neuron, jego aktywacje są nasycone, ale w przeciwieństwie do sigmoidalnego neuronu jego moc wyjściowa jest zerowa. Dlatego w praktyce nieliniowość tanh jest zawsze preferowana w stosunku do nieliniowości sigmoidalnej. Zauważ też, że neuron tanh jest po prostu skalowanym neuronem esicy, w szczególności następujące: .tanh(x)=2)σ(2)x)-1

wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj

Po lewej: funkcja aktywacji rektyfikowanej jednostki liniowej (ReLU), która wynosi zero, gdy x <0, a następnie liniowa ze spadkiem 1, gdy x> 0. Po prawej: Wykres z Kriżewskiego i in. (pdf) dokument wskazujący na 6-krotną poprawę konwergencji z jednostką ReLU w porównaniu z jednostką tanh.

ReLU. Prostowana jednostka liniowa stała się bardzo popularna w ciągu ostatnich kilku lat. Oblicza funkcję . Innymi słowy, aktywacja jest po prostu progowana na zero (patrz obrazek powyżej po lewej). Istnieje kilka zalet i wad korzystania z ReLU:fa(x)=max(0,x)

  • (+) Stwierdzono, że znacznie przyspiesza (np. Współczynnik 6 w Kriżewskim i wsp. ) Zbieżność stochastycznego spadku gradientu w porównaniu z funkcjami sigmoid / tanh. Twierdzi się, że wynika to z jego liniowej, nienasyconej formy.
  • (+) W porównaniu do neuronów tanh / sigmoidalnych, które wymagają drogich operacji (wykładnicze itp.), ReLU można wdrożyć, po prostu progując macierz aktywacji na zero.
  • (-) Niestety jednostki ReLU mogą być kruche podczas treningu i mogą „umrzeć”. Na przykład duży gradient przepływający przez neuron ReLU może spowodować aktualizację wag w taki sposób, że neuron nigdy więcej się nie aktywuje w żadnym punkcie danych. Jeśli tak się stanie, gradient przepływający przez jednostkę będzie na zawsze wynosił zero od tego momentu. Oznacza to, że jednostki ReLU mogą nieodwracalnie umrzeć podczas treningu, ponieważ mogą zostać zrzucone z rozmaitości danych. Na przykład może się okazać, że nawet 40% twojej sieci może być „martwe” (tj. Neurony, które nigdy nie aktywują się w całym zestawie danych treningowych), jeśli szybkość uczenia się jest ustawiona zbyt wysoko. Przy odpowiednim ustawieniu współczynnika uczenia się jest to rzadziej problem.

Nieszczelne ReLU. Nieszczelne ReLU to jedna z prób rozwiązania problemu „umierania ReLU”. Zamiast funkcji wynoszącej zero, gdy x <0, nieszczelna ReLU będzie miała niewielkie ujemne nachylenie (około 0,01). Oznacza to, że funkcja oblicza gdzie jest małą stałą. Niektóre osoby zgłaszają sukces dzięki tej formie funkcji aktywacji, ale wyniki nie zawsze są spójne. Nachylenie w regionie ujemnym można również przekształcić w parametr każdego neuronu, jak widać w neuronach PReLU, wprowadzonych w Delving Deep into Rectifiers , przez Kaiming He i in., 2015. Jednak spójność korzyści między zadaniami jest obecnie niejasny.fa(x)=1(x<0)(αx)+1(x> =0)(x)α

wprowadź opis zdjęcia tutaj

Maxout . Zaproponowano inne typy jednostek, które nie mają postaci funkcjonalnej których nieliniowość jest stosowana do iloczynu kropkowego między wagami a danymi. Stosunkowo popularnym wyborem jest neuron Maxout (wprowadzony niedawno przez Goodfellow i in. ), Który uogólnia ReLU i jego nieszczelną wersję. Neuron Maxout oblicza funkcję . Zauważ, że zarówno ReLU, jak i Leaky ReLU są szczególnym przypadkiem tego formularza (na przykład dla ReLU mamyfa(wT.x+b)max(w1T.x+b1,w2)T.x+b2))w1,b1=0). Dlatego neuron Maxout cieszy się wszystkimi zaletami jednostki ReLU (liniowy reżim działania, brak nasycenia) i nie ma wad (umierający ReLU). Jednak w przeciwieństwie do neuronów ReLU podwaja liczbę parametrów dla każdego pojedynczego neuronu, co prowadzi do dużej całkowitej liczby parametrów.

To kończy naszą dyskusję na temat najczęstszych rodzajów neuronów i ich funkcji aktywacyjnych. Ostatnim komentarzem jest bardzo rzadkie mieszanie i łączenie różnych typów neuronów w tej samej sieci, chociaż nie ma z tym podstawowego problemu.

TLDR : „ Jakiego typu neuronu powinienem użyć? ” Użyj nieliniowości ReLU, uważaj na szybkość uczenia się i ewentualnie monitoruj ułamek „martwych” jednostek w sieci. Jeśli dotyczy to Ciebie, wypróbuj Leaky ReLU lub Maxout. Nigdy nie używaj sigmoidu. Spróbuj tanh, ale spodziewaj się, że będzie działać gorzej niż ReLU / Maxout.


Licencja:


Licencja MIT (MIT)

Prawa autorskie (c) 2015 Andrej Karpathy

Niniejszym udziela się bezpłatnie każdej osobie, która otrzymuje kopię tego oprogramowania i powiązanych plików dokumentacji („Oprogramowanie”), do czynienia z Oprogramowaniem bez ograniczeń, w tym między innymi prawa do używania, kopiowania, modyfikowania, łączenia , publikować, rozpowszechniać, udzielać podlicencji i / lub sprzedawać kopie Oprogramowania oraz zezwalać na to osobom, dla których Oprogramowanie zostało dostarczone, z zastrzeżeniem następujących warunków:

Powyższa informacja o prawach autorskich i ta informacja o pozwoleniu będą zawarte we wszystkich kopiach lub znacznych częściach Oprogramowania.

OPROGRAMOWANIE JEST DOSTARCZANE „W STANIE, W JAKIM JEST”, BEZ ŻADNEJ GWARANCJI, WYRAŹNEJ LUB DOROZUMIANEJ, W TYM, ALE NIE OGRANICZONE DO GWARANCJI PRZYDATNOŚCI HANDLOWEJ, PRZYDATNOŚCI DO OKREŚLONEGO CELU I NARUSZENIA. W ŻADNYM WYPADKU AUTORZY LUB POSIADACZE PRAW AUTORSKICH NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIE, SZKODY LUB INNE ODPOWIEDZIALNOŚCI, NAWET W DZIAŁANIU UMOWY, TORTU LUB INNYCH INNYCH DZIAŁALNOŚCI, WYNIKAJĄCE Z, LUB ZWIĄZANE Z OPROGRAMOWANIEM LUB WYKORZYSTANIEM INNYCH USŁUG OPROGRAMOWANIE.*

Inne linki:


10

Nie sądzę, żeby istniała lista zalet i wad. Funkcje aktywacyjne są wysoce zależne od aplikacji i zależą także od architektury sieci neuronowej ( tutaj na przykład widać zastosowanie dwóch funkcji softmax, które są podobne do sigmoidalnej).

Możesz znaleźć kilka badań na temat ogólnego zachowania funkcji, ale myślę, że nigdy nie będziesz mieć zdefiniowanej i ostatecznej listy (o co pytasz ...).

Nadal jestem studentem, więc wskazuję to, co do tej pory wiem:

  • tutaj znajdziesz kilka przemyśleń na temat zachowań tanh i sigmoidów z propagacją wsteczną. Tanh są bardziej ogólne, ale sigmoidy ... (zawsze będzie „ale”)
  • W Deep Sparse Rectifier Neural Networks Glorot Xavier i wsp. Stwierdzili, że jednostki prostownicze są bardziej biologicznie prawdopodobne i działają lepiej niż inne (sigmoid / tanh)

To jest „poprawna” odpowiedź. Można stworzyć listę, ale wady i zalety są całkowicie zależne od danych. W rzeczywistości funkcje aktywacji uczenia się są znacznie bardziej rozsądne w teorii. Powodem, dla którego nie koncentruje się wiele badań, jest to, że sigmoid „po prostu działa”. Ostatecznie twoim jedynym zyskiem jest szybkość konwergencji, która często jest nieistotna
runDOSrun

4

Tylko dla kompletności wywodu na wielką odpowiedź Danielle, istnieją inne paradygmaty, gdzie jeden losowo „kręci kołem” na wadze i / lub rodzaju aktywacji: maszyn stanie ciekłym , ekstremalnych maszyn uczenia się i echa sieci państwowych .

Jeden ze sposobów myślenia o tych architekturach: zbiornik jest rodzajem jądra, jak w SVM-ach lub jedną dużą ukrytą warstwą w prostym FFNN, gdzie dane są rzutowane do jakiejś hiperprzestrzeni. Nie ma faktycznego uczenia się, zbiornik jest ponownie generowany, dopóki nie zostanie osiągnięte satysfakcjonujące rozwiązanie.

Zobacz także tę miłą odpowiedź .


2

Artykuł opisujący ostatnie funkcje aktywacyjne można znaleźć w

Funkcje aktywacji: porównanie trendów w praktyce i badaniach do głębokiego uczenia się ” Chigozie Enyinny Nwankpy, Winifreda Ijomah, Anthony'ego Gachagana i Stephena Marshalla

Głębokie sieci neuronowe były z powodzeniem wykorzystywane w różnych rozwijających się domenach do rozwiązywania złożonych problemów w świecie rzeczywistym z bardziej zaawansowanymi architekturami głębokiego uczenia (DL), które są rozwijane do tej pory. Aby osiągnąć te najnowsze osiągnięcia, architektury DL używają funkcji aktywacyjnych (AF), aby wykonywać różnorodne obliczenia między warstwami ukrytymi i warstwami wyjściowymi dowolnej architektury DL. W tym artykule przedstawiono ankietę na temat istniejących AF używanych w aplikacjach do głębokiego uczenia się i podkreślono najnowsze trendy w korzystaniu z funkcji aktywacji w aplikacjach do głębokiego uczenia się. Nowość tego artykułu polega na tym, że zestawia on większość AF używanych w DL i przedstawia aktualne trendy w stosowaniu i wykorzystaniu tych funkcji w praktycznych wdrożeniach do głębokiego uczenia się w porównaniu z najnowszymi wynikami badań. Ta kompilacja pomoże w podejmowaniu skutecznych decyzji w wyborze najbardziej odpowiedniej i odpowiedniej funkcji aktywacji dla dowolnej aplikacji, gotowej do wdrożenia. Artykuł ten jest aktualny, ponieważ większość prac naukowych na temat AF podkreśla podobne prace i wyniki, podczas gdy ten dokument będzie pierwszym, który zestawi trendy w zastosowaniach AF w praktyce z wynikami badań z literatury, znalezionymi do tej pory w badaniach głębokiego uczenia się.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.