Na czym polega problem „umierania ReLU” w sieciach neuronowych?

119

Odnosząc się do notatek z kursu Stanford na temat sieci neuronowych splotowych do rozpoznawania wzrokowego , akapit mówi:

„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 to tak się stanie, wtedy gradient przepływający przez jednostkę będzie odtąd zawsze wynosił zero. 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 aż 40 % sieci może być „martwy” (tj. neurony, które nigdy nie aktywują się w całym zbiorze danych szkoleniowych), jeśli szybkość uczenia się jest ustawiona na zbyt wysoką wartość. Przy właściwym ustawieniu szybkości uczenia się jest to mniejszy problem. ”

Co oznacza tutaj umieranie neuronów?

Czy możesz podać intuicyjne wyjaśnienie w prostszych terminach.

tejaskhot
źródło
2
Czy ktoś może znaleźć odniesienie do jakiegoś artykułu naukowego na temat „martwych neuronów”? Ponieważ jest to pierwszy wynik prób Google, byłoby świetnie, gdyby to pytanie było edytowane za pomocą odwołania.
Marek Židek
czy możemy zapobiec tendencyjności poprzez regularyzację w celu rozwiązania tego problemu?
Len.
3
Kolesie, którym udało mi się zrewitalizować martwe neurony relu, podając nowe losowe (normalnie rozmieszczone) wartości w każdej epoce dla wag <= 0. Używam tej metody tylko razem z zamrażaniem ciężarów na różnych głębokościach, ponieważ trening kontynuuje do wyższych epok (I ' Nie jestem pewien, czy to właśnie nazywamy przejściem fazowym. Może teraz korzystać z wyższych wskaźników uczenia się, zapewnia lepszą ogólną dokładność (testowane tylko przy regresji liniowej). Jest to naprawdę łatwe do wdrożenia.
boli
1
@boli, możesz podzielić się swoją implementacją tutaj?
anu

Odpowiedzi:

120

„Martwa” ReLU zawsze wypisuje tę samą wartość (zero, jak to się dzieje, ale to nie jest ważne) dla każdego wejścia. Prawdopodobnie osiąga się to poprzez naukę dużego negatywnego terminu obciążenia dla jego wag.

To z kolei oznacza, że ​​nie odgrywa żadnej roli w rozróżnianiu danych wejściowych. Do celów klasyfikacji można to wyobrazić jako płaszczyznę decyzyjną poza wszystkimi możliwymi danymi wejściowymi.

Gdy ReLU znajdzie się w tym stanie, jest mało prawdopodobne, aby odzyskać, ponieważ gradient funkcji przy 0 jest również równy 0, więc uczenie się spadku gradientu nie zmieni wag. „Nieszczelne” jednostki ReLU z niewielkim dodatnim gradientem dla negatywnych danych wejściowych ( y=0.01xgdy x <0 powiedzą) to jedna próba rozwiązania tego problemu i szansa na odzyskanie.

Neurony sigmoidalne i tanh mogą cierpieć z powodu podobnych problemów, ponieważ ich wartości są nasycone, ale zawsze istnieje co najmniej mały gradient pozwalający im odzyskać się w dłuższej perspektywie.

Neil Slater
źródło
7
Dobry komentarz i warto też wspomnieć wykładniczego jednostek liniowych (ELUs), które mogą pomóc w tej kwestii podczas wizyty w lepszy sposób: arxiv.org/abs/1511.07289
Padura
14
@alex: Ponieważ odchylenie jest bardzo ważne dla dokładności. Pozbycie się uprzedzeń jest bardzo podobne do powiedzenia, że ​​wszystkie samoloty decyzyjne muszą przejść przez pochodzenie - z kilkoma wyjątkami jest to zły wybór. W rzeczywistości pozbycie się stronniczości w sieci neuronowej lub powiązanych modelach (takich jak regresja liniowa lub regresja logistyczna) zwykle oznacza, że ​​twój model będzie cierpiał z powodu błędu! Jest to jeden z niewielu sposobów, w jaki możesz skończyć z modelem, który jest jednocześnie niedopasowany i przełożony w tym samym czasie,,
Neil Slater,
1
@Alex: Myślę, że dodawanie małego pozytywnego nastawienia do ReLU jest powszechne. Nie wiem, czy to pomaga w „umierającym problemie ReLU” - prawdopodobnie nie zmieniłoby to liczbowo wartości gradientu bardzo dużo (ponieważ gradient ma wartość 1 lub 0 dla ReLU, a gdy jest to 1, może on przekroczyć, a małe początkowe odchylenie wydaje się mieć niewielką różnicę). Przede wszystkim myślę, że to tylko sztuczka, aby dodać niewielkiego przyspieszenia do początkowej nauki - ale może to pomóc, zapewniając lepszy start i generalnie wcześniej niższy gradient.
Neil Slater,
1
@max: Brakuje części odpowiedzi „dla dowolnego wejścia”. Żaden gradient nie popłynie do żadnej masy związanej z „martwym” neuronem w sieci sprzężenia zwrotnego , ponieważ wszystkie ścieżki do tych wag przecięte - nie ma alternatywnych ścieżek dla gradientu przepływającego do podzbioru ciężarów zasilających tę jednostkę ReLU. Możesz zobaczyć ReLU np. W CNN lub jako posiadające wspólne wagi, w którym to przypadku wszystkie lokalizacje na mapie obiektów musiałyby zostać wyzerowane jednocześnie. Widziałbym to jednak jako kolejną instancję „dla dowolnego wejścia”.
Neil Slater
1
@anu: Przez opadanie gradientu. Duży gradient dodatni, spowodowany dużą wartością błędu, może z kolei spowodować, że jeden krok terminu polaryzacji będzie na tyle duży, że „zabije” neuron, tak że osiągnie stan (dla wag i polaryzacji), który w przyszłości zostanie wprowadzony do funkcji ReLU nigdy nie wzrośnie powyżej zera
Neil Slater
102

Zobaczmy, jak wygląda ReLU (Rectified Linear Unit):

xn

zn=i=0kwiain
wiainxnReLU=max(0,zn)

Zakładając bardzo prosty miernik błędu

error=ReLUy

errorzn=δn={1zn00zn<0
wj
error=errorwj=errorzn×znwj=δn×ajn={ajnzn00zn<0

=xn

xnx

zn<0

ReLU=max(0.1x,x)wprowadź opis zdjęcia tutaj

MohamedEzz
źródło
Czy nie zapominasz o wyrażeniu odchylenia we wzorze na dane wejściowe do prostownika?
Tom Hale
Myślę, że postępowałem zgodnie z zapisem niektórych podręczników, które zakładają, że a_0 = 1 dla wszystkich warstw, a w_0 to błąd systematyczny. Odchylenie nie jest ważne, więc i tak lepiej je pominąć
MohamedEzz,
@MohamedEzz, nie rozumiem twojego punktu What if, for the input 𝑥𝑛, the current weights put the ReLU on the left flat side while it optimally should be on the right side for this particular input ?, jeśli dane wejściowe są ujemne, gradient wynosiłby 0? co jest optymalne dla tego przypadku? czy mógłbyś pomóc w zrozumieniu tego?
anu
1
Przez „optymalne” rozumiałem, że jeśli sieć ma lepsze przewidywanie dla tego wejścia, musi wyregulować wagi, aby ReLU podała wartość dodatnią, nie byłby w stanie dokonać tej korekty ze względu na gradient 0, który ma na płaskiej stronie.
MohamedEzz
Niesamowita odpowiedź. Dzięki
David Refaeli,
13

Neurony ReLU wytwarzają zero i mają zerowe pochodne dla wszystkich ujemnych sygnałów wejściowych. Tak więc, jeśli wagi w twojej sieci zawsze prowadzą do ujemnych danych wejściowych do neuronu ReLU, neuron ten faktycznie nie przyczynia się do szkolenia sieci. Matematycznie udział gradientu w aktualizacjach masy pochodzących z tego neuronu jest zawsze równy zero (więcej szczegółów znajduje się w dodatku matematycznym).

L(W)LLWL

Zasadniczo to, co się dzieje, zależy od tego, jak informacje przepływają przez sieć. Możesz sobie wyobrazić, że w miarę trwania treningu wartości wytwarzane przez neurony mogą dryfować i umożliwiać ciężarówkom zabicie całego przepływu danych przez niektóre z nich. (Czasami mogą pozostawić te niekorzystne konfiguracje z powodu aktualizacji wagi wcześniej w sieci!). Badałem ten pomysł w poście na blogu o inicjalizacji wagi - która może również przyczynić się do tego problemu - i jej związku z przepływem danych. Myślę, że mój punkt tutaj można zilustrować fabułą z tego artykułu:

Aktywacje w ReLU MLP z różnymi strategiami inicjalizacji

Wykres wyświetla aktywacje w 5-warstwowym Perceptronie wielowarstwowym z aktywacjami ReLU po jednym przejściu przez sieć z różnymi strategiami inicjalizacji. Widać, że w zależności od konfiguracji wagi, wyjścia twojej sieci mogą zostać zdławione.

Dodatek matematyczny

Lxj(i)jif(s)=max(0,s)sj(i)(i+1)i(i+1)

Lwjk(i)=Lxk(i+1)xk(i+1)wjk(i).

Pierwszy termin po prawej stronie można wyliczyć rekurencyjnie. Drugi termin po prawej to jedyne miejsce bezpośrednio związane z wagą i można je podzielić nawjk(i)

xk(i+1)wjk(i)=f(sj(i))sj(i)sj(i)wjk(i)=f(sj(i))xj(i).

Z tego widać, że jeśli wyniki są zawsze ujemne, wagi prowadzące do neuronu nie są aktualizowane, a neuron nie przyczynia się do uczenia się.

Andre P.
źródło
świetne wyjaśnienie !, czy mógłbyś mi pomóc zrozumieć, w Therefore, if your inputs are on roughly the same scale, a large step in the direction of the gradient can leave you with weights that give similar inputs which can end up being negative.jaki sposób wagi stają się ujemne, jeśli dane wejściowe są znormalizowane?
anu
@anu Aktualizacja wagi to , więc jeśli zrobisz duży krok, co oznacza w tym przypadku wybranie dużej , a jeśli jest dodatni, możesz zobaczyć, że może stać się negatywny. Jest to szczególnie złe, jeśli zaktualizujemy odchylenie, aby było dużą wartością ujemną. wλdwλdww
Johnson
@JohnsonJia, świetnie, mam to :), potrzebne jest jeszcze jedno wyjaśnienie, dlaczego jest to szczególnie złe w przypadku odchylenia w porównaniu do wagi, ponieważ ujemny wkład może mieć zarówno wagę, jak i odchylenie, popraw mnie, jeśli się mylę.
anu
Ponieważ odchylenie nie jest modyfikowane przez dane wejściowe: , więc jeśli jest bardzo ujemne, może pozostać ujemne dla wszystkich wartości . z=wx+bbzx
Johnson
5

Mówiąc dokładniej w języku, podczas gdy lokalny gradient ReLU (który wynosi ) pomnaża gradient, który płynie wstecz z powodu propagacji wstecznej, wynikiem zaktualizowanego gradientu może być duża liczba ujemna (jeśli gradient ten płynie powrót jest dużą liczbą ujemną).1

Tak duży ujemny zaktualizowany gradient wytwarza duży ujemny gdy szybkość uczenia się jest względnie duża, dlatego będzie tłumić aktualizacje, które będą miały miejsce w tym neuronie, ponieważ prawie niemożliwe jest ustawienie dużej liczby dodatniej w celu zrekompensowania dużej liczby ujemnej spowodowanej przez to „ zepsuty " .wiwi

Misairu
źródło
4

„Dying ReLU” odnosi się do neuronu, który generuje 0 dla danych w zestawie treningowym. Dzieje się tak, ponieważ suma danych wejściowych wagi * w neuronie (zwana także aktywacją ) wynosi <= 0 dla wszystkich wzorców wejściowych. Powoduje to, że ReLU wyprowadza wartość 0. Ponieważ pochodna ReLU ma w tym przypadku wartość 0, nie dokonuje się aktualizacji wagi, a neuron utknął na wyjściu 0.

Ważne uwagi:

  1. Umieranie ReLU nie oznacza, że ​​wyjście neuronu również pozostanie zerowe w czasie testu. W zależności od różnic w dystrybucji może tak być lub nie.
  2. Umierająca ReLU nie jest permanentnie martwa. Jeśli dodasz nowe dane treningowe lub użyjesz wstępnie wyszkolonego modelu do nowego treningu, neurony te mogą się wycofać!
  3. Technicznie umierająca ReLU nie musi generować wartości 0 dla WSZYSTKICH danych treningowych. Może się zdarzyć, że dla niektórych danych generuje wartość niezerową, ale liczba epok nie jest wystarczająca do znacznego przesunięcia wag.
Shital Shah
źródło