Qual è il problema del "morire ReLU" nelle reti neurali?


119

Facendo riferimento alle note del corso di Stanford su Convolutional Neural Networks for Visual Recognition , un paragrafo dice:

"Sfortunatamente, le unità ReLU possono essere fragili durante l'allenamento e possono" morire ". Ad esempio, una grande pendenza che fluisce attraverso un neurone ReLU potrebbe far aggiornare i pesi in modo tale che il neurone non si attiverà mai più su nessun punto dati. Se questo accade, quindi il gradiente che fluisce attraverso l'unità sarà per sempre zero da quel momento in poi. Cioè, le unità ReLU possono morire irreversibilmente durante l'allenamento poiché possono essere eliminate dal collettore di dati. Ad esempio, potresti scoprire che fino a 40 La% della tua rete può essere "morta" (cioè neuroni che non si attivano mai nell'intero set di dati di allenamento) se il tasso di apprendimento è impostato troppo alto. Con un'impostazione adeguata del tasso di apprendimento, questo è meno frequentemente un problema. "

Cosa significa morire di neuroni qui?

Potresti fornire una spiegazione intuitiva in termini più semplici.


2
Qualcuno può trovare un riferimento ad alcuni articoli scientifici sui "neuroni morti"? Poiché questo è il primo risultato nei tentativi di Google, sarebbe bello se questa domanda fosse modificata con un riferimento.
Marek Židek,

possiamo prevenire la distorsione dalla regolarizzazione per risolvere questo problema?
Len,

3
Ragazzi, sono riuscito a rivitalizzare i neuroni relu morti dando nuovi valori casuali (distribuiti normalmente) ad ogni epoca per pesi <= 0. Uso questo metodo solo insieme a pesi congelati a diverse profondità mentre l'allenamento continua a epoche più alte (I ' Non sono sicuro se questo è ciò che chiamiamo transizione di fase). Ora è possibile utilizzare tassi di apprendimento più elevati, offre una migliore precisione complessiva (testato solo con regressione lineare). È davvero facile da implementare.
boli,

1
@boli, puoi condividere la tua implementazione qui?
anu

Risposte:


121

Una ReLU "morta" emette sempre lo stesso valore (zero quando succede, ma questo non è importante) per qualsiasi input. Probabilmente questo è ottenuto imparando un grande termine negativo per i suoi pesi.

A sua volta, ciò significa che non ha alcun ruolo nella discriminazione tra input. Per la classificazione, è possibile visualizzarlo come piano decisionale al di fuori di tutti i possibili dati di input.

Una volta che una ReLU finisce in questo stato, è improbabile che si ripristini, poiché anche il gradiente della funzione su 0 è 0, quindi l'apprendimento della discesa del gradiente non altererà i pesi. ReLU "perdite" con un piccolo gradiente positivo per input negativi ( y=0.01xquando x <0 dicono) sono un tentativo di risolvere questo problema e dare la possibilità di recuperare.

I neuroni sigmoidi e tanh possono soffrire di problemi simili ai loro valori saturi, ma c'è sempre almeno un piccolo gradiente che consente loro di recuperare a lungo termine.


7
Un buon commento e vale anche la pena menzionare Exponential Linear Unit (ELU) che può aiutare a risolvere meglio questo problema: arxiv.org/abs/1511.07289
padura

14
@alex: perché la distorsione è molto importante per la precisione. Sbarazzarsi dei pregiudizi equivale a dire che tutti i piani decisionali devono passare attraverso l'origine - con poche eccezioni questa è una scelta sbagliata. In effetti, eliminare i termini di polarizzazione in una rete neurale o modelli correlati (come la regressione lineare o la regressione logistica) di solito significa che il tuo modello soffrirà di pregiudizi! È uno dei pochi modi in cui puoi finire con un modello che è sia in forma che in forma allo stesso tempo,,
Neil Slater

1
@Alex: Penso che sia comune aggiungere un piccolo pregiudizio positivo a ReLUs. Non so se questo aiuta a "morire il problema ReLU" - probabilmente non cambierebbe numericamente i valori del gradiente (perché il gradiente è 1 o 0 per il ReLU, ed è quando è 1 che potrebbe superare, un un piccolo pregiudizio iniziale sembrerebbe fare poca differenza). Principalmente penso che sia solo un trucco per aggiungere una piccola spinta all'apprendimento iniziale, ma ciò potrebbe aiutare ottenendo un inizio migliore e avendo in genere pendenze più basse prima.
Neil Slater,

1
@max: ti manca la parte "per qualsiasi input" della mia risposta. Nessun gradiente fluirà a qualsiasi peso associato al neurone "morto" in una rete feed-forward, perché tutti i percorsi verso quei pesi vengono tagliati - non ci sono percorsi alternativi per il gradiente che fluisce al sottoinsieme di pesi che alimentano quell'unità ReLU. È possibile visualizzare una ReLU, ad esempio in una CNN o come avere pesi condivisi, nel qual caso tutte le posizioni nella mappa delle caratteristiche dovrebbero essere azzerate contemporaneamente. Tuttavia, lo vedrei come un'altra istanza di "per qualsiasi input".
Neil Slater,

1
@anu: per discesa gradiente. Un grande gradiente positivo, causato da un grande valore di errore, può a sua volta causare che un singolo passaggio del termine di polarizzazione sia sufficientemente grande da "uccidere" il neurone, in modo che raggiunga uno stato (per pesi e inclinazione) che input futuri alla funzione ReLU non salire mai sopra 0.
Neil Slater

102

Rivediamo come appare la ReLU (Unità lineare rettificata):

xn

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

Supponendo una misura di errore molto semplice

error=ReLUy

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

=xn

xnx

zn<0

ReLU=max(0.1x,x)inserisci qui la descrizione dell'immagine


Non stai dimenticando il termine di polarizzazione nella formula per l'input al raddrizzatore?
Tom Hale,

Penso di aver seguito la notazione di alcuni libri di testo che ipotizzano che a_0 = 1 per tutti i livelli e w_0 sia il bias. Il pregiudizio non è importante, quindi è meglio ometterlo comunque
MohamedEzz

@MohamedEzz, non ho capito il tuo punto 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 ?, se l'input è negativo, il gradiente sarebbe 0? cosa è ottimale per questo caso? potresti per favore aiutare a capirlo?
anu

1
Per ottimale intendevo dire che, se la rete dovesse fare una previsione migliore per questo input, doveva regolare i pesi in modo che la ReLU fornisse un valore positivo, non sarebbe in grado di fare questa regolazione a causa del gradiente 0 che ha sul lato piatto.
MohamedEzz,

Risposta incredibile. Grazie
David Refaeli il

13

I neuroni ReLU producono zero e non hanno derivati ​​per tutti gli input negativi. Quindi, se i pesi nella tua rete portano sempre a input negativi in ​​un neurone ReLU, quel neurone non sta effettivamente contribuendo all'allenamento della rete. Matematicamente, il contributo del gradiente agli aggiornamenti di peso provenienti da quel neurone è sempre zero (vedere l'Appendice matematica per alcuni dettagli).

L(W)LLWL

In generale, ciò che accade dipende da come le informazioni fluiscono attraverso la rete. Potete immaginare che, man mano che l'allenamento continua, i valori che i neuroni producono possono spostarsi e consentire ai pesi di uccidere tutti i flussi di dati attraverso alcuni di essi. (A volte, tuttavia, possono lasciare queste configurazioni sfavorevoli a causa di aggiornamenti di peso precedenti nella rete!). Ho esplorato questa idea in un post sul blog sull'inizializzazione del peso - che può anche contribuire a questo problema - e sulla sua relazione con il flusso di dati. Penso che il mio punto qui possa essere illustrato da una trama di quell'articolo:

Attivazioni in un MLP ReLU con diverse strategie di inizializzazione

Il grafico mostra le attivazioni in un Perceptron multistrato a 5 strati con attivazioni ReLU dopo un passaggio attraverso la rete con diverse strategie di inizializzazione. Puoi vedere che a seconda della configurazione del peso, le uscite della tua rete possono essere bloccate.

Appendice matematica

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

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

Il primo termine a destra può essere calcolato in modo ricorsivo. Il secondo termine a destra è l'unico posto che coinvolge direttamente il peso e può essere suddiviso inwjk(i)

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

Da ciò si può vedere che se le uscite sono sempre negative, i pesi che portano al neurone non vengono aggiornati e il neurone non contribuisce all'apprendimento.


grande spiegazione !, potresti per favore aiutarmi a capire 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.come i pesi stanno diventando negativi se gli input sono normalizzati?
anu

@anu L'aggiornamento del peso è , quindi se fai un grande passo, nel senso in questo caso selezionando un grande , e se è positivo, allora puoi vedere che potrebbe diventare negativo. Ciò è particolarmente negativo se aggiorniamo il bias in modo che sia un valore negativo elevato. wλdwλdww
Johnson

@JohnsonJia, fantastico, ho capito :), è necessario un ulteriore chiarimento, perché è particolarmente negativo in caso di distorsione rispetto al peso poiché il contributo negativo potrebbe essere sia sul peso che sulla distorsione, correggimi se sbaglio.?
anu

Poiché il bias non viene modificato dall'input: , quindi se è molto negativo, può rimanere negativo per tutti i valori di . b z xz=wx+bbzx
Johnson

5

Per essere più specifici nel linguaggio, mentre il gradiente locale di ReLU (che è ) moltiplica il gradiente che scorre indietro a causa della propagazione all'indietro, il risultato del gradiente aggiornato potrebbe essere un grande numero negativo (se il gradiente che scorre- indietro è un grande numero negativo).1

Un gradiente così grande e negativo aggiornato produce un grande negativo quando il tasso di apprendimento è relativamente grande, quindi reprimerà gli aggiornamenti che accadranno in questo neurone, poiché è quasi impossibile mettere un grande numero positivo per compensare il grande numero negativo portato da quello " rotto " .w iowiwi


4

"ReLU morente" si riferisce al neurone che genera 0 per i tuoi dati nel set di allenamento. Ciò accade perché la somma degli input di peso * in un neurone (chiamato anche attivazione ) diventa <= 0 per tutti i modelli di input. Ciò causa l'output di ReLU 0. Poiché in questo caso la derivata di ReLU è 0, non vengono effettuati aggiornamenti di peso e il neurone è bloccato all'emissione di 0.

Cose da notare:

  1. Morire ReLU non significa che l'output del neurone rimarrà zero anche al momento del test. A seconda delle differenze di distribuzione, ciò può essere o meno il caso.
  2. Morire ReLU non è morto definitivamente. Se aggiungi nuovi dati di allenamento o usi un modello pre-allenato per un nuovo allenamento, questi neuroni potrebbero ritirarsi!
  3. Tecnicamente morente ReLU non deve produrre 0 per TUTTI i dati di allenamento. Può accadere che non generi zero per alcuni dati, ma il numero di epoche non è sufficiente per spostare i pesi in modo significativo.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.