Quel est le problème de "mourant ReLU" dans les réseaux de neurones?


119

En référence aux notes de cours de Stanford sur les réseaux de neurones convolutionnels pour la reconnaissance visuelle , un paragraphe dit:

"Malheureusement, les unités ReLU peuvent être fragiles pendant l'entraînement et peuvent" mourir ". Par exemple, un gradient important traversant un neurone ReLU peut entraîner une mise à jour des poids, de sorte que le neurone ne s'activera plus jamais sur un point de données. À partir de ce moment, le gradient traversant l’unité sera toujours égal à zéro, c’est-à-dire que les unités ReLU peuvent mourir de façon irréversible pendant l’entraînement, car elles peuvent être éjectées du collecteur de données. Par exemple, vous pouvez constater que 40 % de votre réseau peut être "mort" (c'est-à-dire des neurones qui ne s'activent jamais sur l'ensemble du jeu de données d'apprentissage) si le taux d'apprentissage est trop élevé. Avec un réglage approprié du taux d'apprentissage, cela pose moins souvent problème. "

Que veut dire mourir de neurones?

Pourriez-vous s'il vous plaît fournir une explication intuitive en termes plus simples.


2
Quelqu'un peut-il trouver une référence à un article scientifique sur les "neurones morts"? Comme il s’agit du premier résultat obtenu sur Google, il serait bon que cette question soit modifiée avec une référence.
Marek Židek

pouvons-nous éviter le biais par régularisation pour résoudre ce problème?
Len

3
Les mecs, j’ai réussi à revitaliser les neurones morts en donnant de nouvelles valeurs aléatoires (distribuées normales) à chaque époque pour des poids <= 0. J’utilise cette méthode uniquement avec le gel de poids à différentes profondeurs alors que l’entraînement se poursuit à des époques plus hautes (I ' m ne sais pas si c’est ce que nous appelons la transition de phase) Peut maintenant utiliser des vitesses d’apprentissage plus élevées, pour une meilleure précision globale (testé uniquement avec une régression linéaire). C'est vraiment facile à mettre en œuvre.
boli

1
@boli, pouvez-vous partager votre mise en œuvre ici?
Anu

Réponses:


121

Une ReLU "morte" fournit toujours la même valeur (zéro comme il arrive, mais ce n'est pas important) pour n'importe quelle entrée. On y parvient probablement en apprenant un grand terme de biais négatif pour ses poids.

Cela signifie à son tour que cela ne joue aucun rôle dans la discrimination entre les intrants. Pour la classification, vous pouvez visualiser cela comme un plan de décision en dehors de toutes les données d'entrée possibles.

Une fois qu'une unité ReLU se retrouve dans cet état, il est peu probable qu'elle récupère, car le gradient de la fonction à 0 est également égal à 0; l'apprentissage par descente de gradient ne modifiera donc pas les poids. Les ReLU "qui fuient" avec un faible gradient positif pour les entrées négatives ( y=0.01xlorsque x <0 par exemple) constituent une tentative pour résoudre ce problème et donner une chance de récupération.

Les neurones sigmoïde et tanh peuvent souffrir de problèmes similaires car leurs valeurs saturent, mais il existe toujours au moins un faible gradient leur permettant de récupérer à long terme.


7
Un bon commentaire et il convient également de mentionner les unités linéaires exponentielles (ELU) qui peuvent aider à résoudre ce problème de manière plus efficace
padura

14
@alex: Parce que le biais est très important pour la précision. Se débarrasser du biais revient en quelque sorte à dire que tous les plans de décision doivent passer par l'origine - à quelques exceptions près, c'est un mauvais choix. En fait, éliminer les termes de biais dans un réseau de neurones ou des modèles associés (comme une régression linéaire ou une régression logistique) signifie généralement que votre modèle souffrira de biais! C'est l'une des rares façons dont vous pouvez vous retrouver avec un modèle qui est à la fois sous-équipé et sur-adapté à la fois,,
Neil Slater

1
@Alex: Je pense qu'il est courant d'ajouter un petit biais positif aux ReLU. Je ne sais pas si cela aide à "résoudre le problème ReLU" - cela ne modifierait probablement pas beaucoup les valeurs de dégradé (car le dégradé est 1 ou 0 pour le ReLU, et c'est à 1 qu'il risque de dépasser, un faible biais de départ semblerait faire très peu de différence). La plupart du temps, je pense que ce n’est qu’une astuce d’ajouter un petit coup de pouce à l’apprentissage initial - mais cela pourrait aider en prenant un meilleur départ et en ayant des pentes généralement moins élevées plus tôt.
Neil Slater

1
@ max: Il vous manque la partie "pour toute entrée" de ma réponse. Aucun gradient ne sera associé à un poids associé au neurone "mort" dans un réseau à feed-forward, car tous les chemins menant à ces poids sont coupés - il n'y a pas de chemin alternatif permettant au gradient de se rendre au sous-ensemble de poids alimentant cette unité ReLU. Vous pouvez voir une ReLU dans un CNN, par exemple, ou comme ayant des poids partagés, auquel cas tous les emplacements de la carte des fonctionnalités doivent être mis à zéro en même temps. Cependant, je considérerais cela comme une autre instance de "pour toute entrée".
Neil Slater

1
@anu: par descente de gradient. Un grand gradient positif, provoqué par une valeur d'erreur importante, peut à son tour rendre un seul pas du terme biais suffisamment grand pour "tuer" le neurone, de sorte qu'il atteigne un état (poids et biais) que les entrées futures pour que la fonction ReLU ne dépasse jamais 0.
Neil Slater

102

Voyons comment se présente l’unité linéaire rectifiée (ReLU):

L'entrée du redresseur pour certaines entrées est pour les poids et les activations de la couche précédente pour cette entrée particulière . La fonction neuronale du redresseur estxn

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

En supposant une mesure d'erreur très simple

error=ReLUy

le redresseur n'a que 2 valeurs de gradient possibles pour les deltas de l'algorithme de rétropropagation: (si nous utilisons une mesure d'erreur correcte, alors le 1 deviendra autre chose, mais le 0 restera le même) et ainsi pour un certain poids :

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

Une question qui me vient à l’esprit est de savoir comment ReLU fonctionne "du tout" avec le dégradé 0 sur le côté gauche. Que se passe-t-il si, pour l’entrée , les poids actuels placent le ReLU sur le côté plat gauche alors qu’il devrait, de manière optimale, se trouver sur le côté droit pour cette entrée particulière? Le gradient est 0 et le poids ne sera donc pas mis à jour, pas même un tout petit peu, alors où est "apprendre" dans ce cas?x n=xn

L'essence de la réponse réside dans le fait que Stochastique Descente du Gradient ne compte qu'une seule entrée , mais beaucoup d'entre eux, et l'espoir est que tous les intrants seront mis la Relu sur le côté plat, de sorte que le gradient sera non -zéro pour certaines entrées (il peut être + ve ou -ve cependant). Si au moins une entrée a notre ReLU sur le côté escarpé, alors le ReLU est toujours en vie car l'apprentissage est en cours et les poids sont mis à jour pour ce neurone. Si toutes les entrées placent le ReLU sur le côté plat, il n'y a aucun espoir que les poids changent et que le neurone soit mort .x xnx

Une unité ReLU peut être vivante puis mourir en raison de l' gradient pour un lot d'entrées conduisant aux poids plus petits, rendant pour toutes les entrées. Un taux d'apprentissage élevé amplifie ce problème.zn<0

Comme @Neil Slater l'a mentionné, un correctif consiste à modifier le côté plat de manière à avoir un petit gradient, de sorte qu'il devienne comme ci-dessous, appelé LeakyReLU. ReLU=max(0.1x,x)entrez la description de l'image ici


N'oubliez-vous pas le terme de biais dans la formule pour la saisie dans le redresseur?
Tom Hale

Je pense avoir suivi la notation de certains manuels qui supposent que a_0 = 1 pour toutes les couches et que w_0 est le biais. Le parti pris n'est pas important, il est donc préférable de l'omettre de toute façon
MohamedEzz

@MohamedEzz, je n'ai pas compris votre argument 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 ?. Si l'entrée est négative, le dégradé serait 0? Qu'est-ce qui est optimal pour ce cas? Pourriez-vous s'il vous plaît aider à comprendre?
anu

1
Par optimal, je voulais dire que si le réseau devait mieux prédire cette entrée, il devait ajuster les poids de manière à ce que le ReLU donne une valeur positive, il ne pourrait pas effectuer cet ajustement en raison du gradient 0 qu'il a. sur le côté plat.
MohamedEzz

Réponse étonnante. Merci
David Refaeli

13

Les neurones ReLU produisent zéro et ont des dérivées zéro pour toutes les entrées négatives. Ainsi, si les poids de votre réseau entraînent toujours des entrées négatives dans un neurone ReLU, ce neurone ne contribue effectivement pas à la formation du réseau. Mathématiquement, la contribution du gradient aux mises à jour de poids provenant de ce neurone est toujours nulle (voir l'annexe mathématique pour plus de détails).

Quelles sont les chances pour que vos poids finissent par produire des nombres négatifs pour toutes les entrées dans un neurone donné? Il est difficile de répondre à cette question en général, mais cela peut se produire notamment lorsque vous effectuez une mise à jour trop importante des poids. Rappelez-vous que les réseaux de neurones sont généralement formés en minimisant une fonction de perte par rapport aux poids utilisant la descente de gradient. C'est-à-dire que les poids d'un réseau de neurones sont les "variables" de la fonction (la perte dépend du jeu de données, mais uniquement de manière implicite: il s'agit généralement de la somme de chaque exemple d'apprentissage et chaque exemple est effectivement une constante). Comme la pente d'une fonction pointe toujours dans la direction de la plus forte augmentation, il suffit de calculer la pente deL L W LL(W)LLen ce qui concerne les poids et déplacez un peu dans la direction opposée, puis rincez et répétez. De cette façon, nous nous retrouvons au minimum (local) . Par conséquent, si vos entrées ont à peu près la même échelle, un grand pas dans la direction du gradient peut vous laisser des poids qui donnent des entrées similaires qui peuvent être négatives.WL

En général, ce qui se passe dépend de la manière dont l'information circule sur le réseau. Vous pouvez imaginer qu'au cours de l'entraînement, les valeurs produites par les neurones peuvent dériver et permettre aux poids d'éliminer tous les flux de données qui les traversent. (Parfois, ils peuvent laisser ces configurations défavorables en raison de mises à jour de poids plus tôt sur le réseau, cependant!). J'ai exploré cette idée dans un article de blog sur l'initialisation du poids - qui peut également contribuer à ce problème - et sa relation avec le flux de données. Je pense que mon propos ici peut être illustré par un complot tiré de cet article:

Activations dans un MLP ReLU avec différentes stratégies d'initialisation

Le graphique affiche les activations dans un Perceptron multicouches à 5 couches avec les activations ReLU après un passage dans le réseau avec différentes stratégies d'initialisation. Vous pouvez voir qu'en fonction de la configuration du poids, les sorties de votre réseau peuvent être étouffées.

Annexe mathématique

Mathématiquement, si est la fonction de perte de votre réseau, est la sortie du neurone de la ème couche, est le neurone ReLU et est l'entrée linéaire dans la couche -st, puis, par la règle de la chaîne, la dérivée de la perte par rapport à une pondération reliant la ième et - st couches estLxj(i)jif(s)=max(0,s)sj(i)(i+1)i(i+1)

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

Le premier terme à droite peut être calculé de manière récursive. Le second terme à droite est le seul endroit impliquant directement le poids et peut être décomposé enwjk(i)

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

Vous pouvez ainsi en déduire que si les sorties sont toujours négatives, les poids menant au neurone ne sont pas mis à jour et que le neurone ne contribue pas à l'apprentissage.


bonne explication !, pourriez-vous m'aider à comprendre 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.comment les poids deviennent négatifs si les entrées sont normalisées?
anu

@anu La mise à jour du poids est , donc si vous faites un grand pas, c'est-à-dire que vous sélectionnez un grand , et que est positif, vous pouvez voir que peut devenir négatif. Ceci est particulièrement grave si nous mettons à jour le biais comme une valeur négative importante. wλdwλdww
Johnson

@JohnsonJia, génial, je l'ai eu :), encore une clarification, pourquoi c'est particulièrement mauvais en cas de biais par rapport au poids puisque la contribution négative pourrait être à la fois poids et biais, corrigez-moi si je me trompe.
anu

Comme le biais n'est pas modifié par l'entrée: , donc si est très négatif, peut rester négatif pour toutes les valeurs de . z=wx+bbzx
Johnson

5

Pour être plus précis dans la langue, alors que le gradient local de ReLU (qui est ) multiplie le gradient renvoyé en raison de la propagation en arrière, le résultat du gradient mis à jour peut être un grand nombre négatif (si le gradient qui le dos est un grand nombre négatif).1

Ce grand gradient mis à jour négatif produit un grand négatif lorsque le taux d’apprentissage est relativement important, par conséquent, réprimera les mises à jour qui se produiront dans ce neurone, car il est presque impossible d’afficher un grand nombre positif pour compenser le grand nombre négatif apporté par ce neurone " cassé " .wiwi


4

Le terme "Dying ReLU" fait référence au neurone dont le résultat est 0 pour vos données dans un ensemble d’entraînement. Cela se produit parce que la somme des entrées poids * dans un neurone (également appelée activation ) devient <= 0 pour tous les modèles d'entrée. Cela provoque la sortie de ReLU à 0. Comme le dérivé de ReLU est à 0 dans ce cas, aucune mise à jour du poids n’est effectuée et le neurone est bloqué à la sortie de 0.

Choses à noter:

  1. Dying ReLU ne signifie pas que la sortie du neurone restera égale à zéro au moment du test. En fonction des différences de distribution, cela peut être ou ne pas être le cas.
  2. Mourir ReLU n'est pas une mort permanente. Si vous ajoutez de nouvelles données d'entraînement ou utilisez un modèle pré-entraîné pour un nouvel entraînement, ces neurones pourraient se détendre!
  3. Techniquement, Mourir ReLU n'a pas à sortir 0 pour TOUTES les données d'entraînement. Il peut arriver que certaines données soient non nulles mais que le nombre d'époques ne soit pas suffisant pour déplacer les poids de manière significative.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.