W jaki sposób funkcja aktywacji prostoliniowej rozwiązuje problem znikającego gradientu w sieciach neuronowych?

40

Znalazłem rektyfikowaną jednostkę liniową (ReLU) chwaloną w kilku miejscach jako rozwiązanie problemu znikającego gradientu sieci neuronowych. Oznacza to, że jako funkcję aktywacji używa się max (0, x). Gdy aktywacja jest dodatnia, oczywiste jest, że jest ona lepsza niż, powiedzmy, funkcja aktywacji sigmoidalnej, ponieważ jej pochodna wynosi zawsze 1 zamiast arbitralnie małej wartości dla dużego x. Z drugiej strony, wyprowadzenie wynosi dokładnie 0, gdy x jest mniejsze niż 0. W najgorszym przypadku, gdy jednostka nigdy nie jest aktywowana, wagi dla tej jednostki również nigdy się nie zmieniłyby, a jednostka byłaby na zawsze bezużyteczna - co wydaje się znacznie gorsze niż znikające nawet niewielkie gradienty. Jak algorytmy uczenia się radzą sobie z tym problemem, gdy używają ReLU?

Hans-Peter Störr
źródło
2
To, co opisujesz
Martin Thoma
Myślę, że chodzi o to, że w przypadku funkcji logistycznej, ponieważ gradient może stać się arbitralnie mały, można uzyskać gradient zanikający numerycznie , komponując kilka „nieistotnych” logistyki (problem pogłębiłby się w przypadku głębszych architektur). W przypadku funkcji rampy, ponieważ gradient jest częściowo stały, zanikający gradient kompozytowy może wystąpić tylko wtedy, gdy istnieje składnik, który w rzeczywistości jest
równy
(Nie jestem jednak pewien, czy jest to „na zawsze”? Czy nie może stać się niezerowe po
dalszym

Odpowiedzi:

33

Oto artykuł wyjaśniający problem. Cytuję jego część, aby wyjaśnić problem.

Funkcja aktywacji prostownika pozwala sieci łatwo uzyskać rzadkie reprezentacje. Na przykład, po jednolitej inicjalizacji wag, około 50% wartości ciągłych wyjściowych jednostek ukrytych to prawdziwe zera, a frakcja ta może łatwo wzrosnąć dzięki regularyzacji indukującej rzadkość.

Tak więc funkcja aktywacji prostownika wprowadza efekt rzadkości w sieci. Oto kilka zalet rzadkości z tego samego papieru;

  • Rozplątywanie informacji . Jednym z twierdzonych celów algorytmów głębokiego uczenia się (Bengio, 2009) jest rozplątanie czynników wyjaśniających różnice w danych. Gęsta reprezentacja jest mocno splątana, ponieważ prawie każda zmiana danych wejściowych modyfikuje większość pozycji w wektorze reprezentacji. Zamiast tego, jeśli reprezentacja jest zarówno rzadka, jak i odporna na małe zmiany danych wejściowych, zestaw funkcji niezerowych jest prawie zawsze w przybliżeniu zachowywany przez małe zmiany danych wejściowych.

  • Wydajna reprezentacja zmiennej wielkości . Różne dane wejściowe mogą zawierać różne ilości informacji i byłyby wygodniej reprezentowane przy użyciu struktury danych o zmiennej wielkości, co jest powszechne w komputerowych reprezentacjach informacji. Zróżnicowanie liczby aktywnych neuronów pozwala modelowi kontrolować efektywną wymiarowość reprezentacji dla danego wejścia i wymaganą precyzję.

  • Rozdzielność liniowa . Rzadkie reprezentacje są również bardziej podatne na separację liniową lub łatwiejsze do oddzielenia za pomocą mniej nieliniowej maszynerii, po prostu dlatego, że informacja jest reprezentowana w przestrzeni o dużych wymiarach. Poza tym może to odzwierciedlać oryginalny format danych. Na przykład w aplikacjach tekstowych oryginalne surowe dane są już bardzo rzadkie.

  • Rozproszone, ale rzadkie . Zwarte rozproszone reprezentacje są najbogatszymi reprezentacjami, potencjalnie wykładniczo wydajniejszymi niż czysto lokalne (Bengio, 2009). Wydajność rzadkich reprezentacji jest wciąż wykładniczo większa, przy czym potęgą wykładnika jest liczba cech niezerowych. Mogą stanowić dobry kompromis w odniesieniu do powyższych kryteriów.

Odpowiada również na zadane pytanie:

softplus(x)=log(1+ex)(Dugas i in., 2001), gładka wersja nieliniowości korygującej. Tracimy dokładną rzadkość, ale możemy mieć nadzieję na łatwiejszy trening. Jednak wyniki eksperymentów wydają się być sprzeczne z tą hipotezą, sugerując, że twarde zera mogą w rzeczywistości pomóc w nadzorowanym treningu. Stawiamy hipotezę, że twarde nieliniowości nie bolą, dopóki gradient może rozprzestrzeniać się wzdłuż niektórych ścieżek, tj. Że niektóre z ukrytych jednostek w każdej warstwie są niezerowe, a przypisanie i winy przypisane są do tych jednostek ON, a nie rozproszone bardziej równomiernie, zakładamy, że optymalizacja jest łatwiejsza.

Możesz przeczytać artykuł, aby uzyskać więcej szczegółów.

yasin.yazici
źródło
18

Dlatego prawdopodobnie lepszym pomysłem jest użycie PReLU, ELU lub innych nieszczelnych aktywacji podobnych do ReLU, które nie tylko umierają do zera, ale spadają do około 0,1 * x, gdy x staje się ujemny, aby kontynuować naukę. Przez długi czas wydawało mi się, że ReLU są historią jak sigmoid, choć z jakiegoś powodu ludzie nadal publikują z nimi artykuły. Dlaczego? Nie wiem

Dmytro Mishkin i inni faceci faktycznie przetestowali sieć z wieloma różnymi rodzajami aktywacji, powinieneś sprawdzić ich wyniki na temat wydajności różnych funkcji aktywacyjnych i innych rzeczy. Jednak niektóre funkcje, takie jak XOR, są lepiej poznawane przy użyciu zwykłego ReLU. Nie myśl o żadnych neuronach w kategoriach dogmatycznych, ponieważ sieci neuronowe są bardzo w toku. Nikt na świecie tak naprawdę ich nie zna i nie rozumie na tyle dobrze, aby powiedzieć boską prawdę. Nikt. Wypróbuj różne rzeczy, dokonuj własnych odkryć. Pamiętaj, że korzystanie z ReLU jest bardzo nowym osiągnięciem i przez dziesięciolecia wszyscy doktoranci w tej dziedzinie korzystali z nadmiernie skomplikowanych funkcji aktywacyjnych, z których teraz możemy się tylko śmiać. Zbyt często „zbyt duża wiedza” może przynieść złe wyniki. Ważne jest, aby zrozumieć, że sieci neuronowe nie są nauką ścisłą. Nic w matematyce nie mówi, że sieci neuronowe faktycznie będą działać tak dobrze, jak one. To heurystyka. A więc jest bardzo plastyczny.

FYI nawet aktywacja wartości bezwzględnej daje dobre wyniki w przypadku niektórych problemów, na przykład problemów podobnych do XOR. Różne funkcje aktywacji są lepiej dostosowane do różnych celów. Próbowałem Cifar-10 z abs () i wydawało się, że działa gorzej. Chociaż nie mogę powiedzieć, że „jest to gorsza funkcja aktywacji do rozpoznawania wizualnego”, ponieważ nie jestem pewien, na przykład, czy moja wstępna inicjalizacja była dla niego optymalna itp. Sam fakt, że uczyła się względnie dobrze mnie zadziwiło.

Ponadto w prawdziwym życiu „pochodne” przekazywane do backpropu niekoniecznie muszą odpowiadać faktycznym pochodnym matematycznym.

Posunąłbym się nawet do stwierdzenia, że ​​powinniśmy zakazać nazywania ich „pochodnymi” i zacząć nazywać je czymś innym, na przykład: error activation functionsaby nie zamykać naszych umysłów na możliwości majstrowania przy nich. Można na przykład użyć aktywacji ReLU, ale podać wartość 0,1 lub coś takiego zamiast 0 jako pochodną dla x <0. W pewnym sensie masz wtedy zwykły ReLU, ale neurony nie są w stanie „umrzeć z powodu adaptacji”. Nazywam to NecroRelu, ponieważ jest to ReLU, które nie może umrzeć. W niektórych przypadkach (choć zdecydowanie nie w większości) działa to lepiej niż zwykły LeakyReLU, który faktycznie ma pochodną 0,1 przy x <0 i lepszą niż zwykle ReLU. Nie sądzę jednak, aby zbyt wielu innych badało taką funkcję, ale może to być ogólnie fajna funkcja aktywacji, której nikt nie rozważał tylko dlatego, że są zbyt skoncentrowani na matematyce.

Jeśli chodzi o to, co jest powszechnie używane, w przypadku aktywacji tanH (x) zwykle przyjmuje się 1 - x² zamiast 1 - tanH (x) ² jako pochodną w celu szybszego obliczenia.

Pamiętaj też, że ReLU nie jest wcale takie „oczywiście lepsze” niż, na przykład, TanH. TanH może być lepszy w niektórych przypadkach. Po prostu, jak się wydaje, nie w rozpoznawaniu wizualnym. Chociaż na przykład ELU ma nieco sigmoidalną miękkość i jest to obecnie jedna z najbardziej znanych funkcji aktywacyjnych do rozpoznawania wizualnego. Naprawdę nie próbowałem, ale założę się, że można ustawić kilka grup z różnymi funkcjami aktywacji na tym samym poziomie warstwy, co jest korzystne. Ponieważ inną logikę lepiej opisują różne funkcje aktywacyjne. A czasem prawdopodobnie potrzebujesz kilku rodzajów oceny.

Zauważ, że ważne jest, aby mieć inicjalizację odpowiadającą typowi twojej funkcji aktywacyjnej. Przeciekające ReLU potrzebują na przykład innego inicjatora niż zwykłe ReLU.

EDYCJA: W rzeczywistości standardowa ReLU wydaje się mniej podatna na przeregulowanie w porównaniu z nieszczelnymi przy nowoczesnej architekturze. Przynajmniej w rozpoznawaniu obrazu. Wydaje się, że jeśli wybierasz sieć o bardzo wysokiej dokładności z ogromnym obciążeniem parametrów, lepiej trzymać się zwykłego ReLU vs. nieszczelne opcje. Ale oczywiście przetestuj to wszystko sam. Być może niektóre nieszczelne rzeczy będą działać lepiej, jeśli zostanie podana większa regularność.

Íhor Mé
źródło
Interesuje mnie twoja NecroReLU, ale nie mogę czerpać z tego, co napisałeś, czym różni się od LeakyReLU. Czy możesz to wyjaśnić?
Tom Hale
Różni się tym, że aktywacją jest ReLU, ale pochodną jest LReLU
Íhor Mé
@ ÍhorMé, jak wspomniano o initialization that corresponds to a type of activation function one is usingw sposób NOTEw swoim poście, można proszę podać swoje sugestie do tego na tych samych liniach, nie jestem w pełni przekonany, że za pomocą Relu aktywacje ponad esicy / TANH jest rozwiązaniem dla zanikającego / eksplodującego problemu gradientu .
anu
16

Oto heurystyczne wyjaśnienie:

  • Każda aktualizacja gradientu w backpropie składa się z wielu pomnożonych czynników.
  • Im bardziej zbliżasz się do początku sieci, tym więcej tych czynników mnożymy razem, aby uzyskać aktualizację gradientu.
  • Wiele z tych czynników to pochodne funkcji aktywacyjnej neuronów - reszta to ciężary, uprzedzenia itp.
  • Spośród tych czynników intuicyjnie istotne są wagi, odchylenia itp. Pochodne funkcji aktywacji są raczej rodzajem parametru dostrajającego, zaprojektowanym tak, aby gradient opadał we właściwym kierunku z właściwą prędkością.
  • Jeśli pomnożysz kilka warunków, które są mniejsze niż 1, będą one dążyć do zera, im więcej masz warunków. Stąd zanikający gradient w miarę oddalania się od warstwy wyjściowej, jeśli masz funkcje aktywacyjne o nachyleniu <1.
  • Jeśli pomnożysz wiązkę terminów, które są większe niż 1, będą one miały tendencję do nieskończoności, im więcej masz, stąd wybuchanie gradientu w miarę oddalania się od warstwy wyjściowej, jeśli masz funkcje aktywacji o nachyleniu> 1.
  • A może byśmy w jakiś sposób magicznie sprawili, że te terminy wnoszą pochodną funkcji aktywacji do 1. To intuicyjnie oznacza, że ​​wszystkie wkłady w aktualizacje gradientu pochodzą z danych wejściowych do problemu i modelu - wag, dane wejściowe, odchylenia - zamiast niektórych artefaktów wybranych funkcji aktywacji.
  • RELU ma gradient 1, gdy wyjście> 0, a zero w przeciwnym razie.
  • Dlatego pomnożenie wiązki pochodnych RELU razem w równaniach wstecznych ma tę zaletę, że wynosi 1 lub zero - aktualizacja jest albo niczym, albo bierze udział w całości z innych wag i stronniczości.

Możesz pomyśleć, że lepiej byłoby mieć funkcję liniową, niż spłaszczyć, gdy x <0. Chodzi tutaj o to, że RELU generuje rzadkie sieci ze stosunkowo niewielką liczbą użytecznych łączy, które mają większą biologiczną wiarygodność, więc utrata wiązka ciężarów jest naprawdę pomocna. Również symulacja interesujących funkcji za pomocą sieci neuronowych jest możliwa tylko z pewną nieliniowością funkcji aktywacji. Liniowa funkcja aktywacji daje liniowy sygnał wyjściowy, co wcale nie jest bardzo interesujące.

Tom Walker
źródło
świetne wyjaśnienie, czy mógłbyś rozwinąć więcej informacji na temat szóstej kwestii. Czy mógłbyś również przedstawić swoje sugestie w tej samej sprawie, nie jestem w pełni przekonany, że użycie aktywacji ReLu w stosunku do sigmoid / tanH jest rozwiązaniem problemu znikania / eksplodowania gradientu.
anu
1
Ważna jest również inicjalizacja rozsądnej masy; ale tak samo jest z wyborem funkcji aktywacji. Jako trywialny przykład, jeśli wszystkie twoje wagi domyślnie wynoszą zero i użyjesz RELU, wtedy wszystkie wyjścia z twoich neuronów będą zerowe i pozostaną zerowe ... Ani sama RELU, ani same techniki inicjalizacji w pełni nie rozwiązują gradientu znikania / eksplodowania, ale oba pomagają. Nie jestem pewien, co masz na myśli, opracowując punkt 6, co jest niejasne?
Tom Walker
1

Rozważmy główną relację powtarzalności, która określa propagację wsteczną sygnału błędu.

Wibiif

hii

si=Wi(hi1)+bi

hi=f(si)

δi

δi=Wi+1(δi+1f(si))

ff(si)=(1hi2)hi

f=Relu=max(0,x)ff=numpy.where(hi>0,1,0)

Równanie to pokazuje również inny problem charakterystyczny dla aktywacji relu - martwe neurony: jeśli dany neuron został zainicjowany w taki sposób, że nie strzela do żadnego wejścia (jego aktywacja wynosi zero), jego gradient również wynosiłby zero, i dlatego nigdy nie zostałby aktywowany.

użytkownik1767774
źródło