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.
la source
Réponses:
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.01x
lorsque 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.
la source
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
En supposant une mesure d'erreur très simple
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 :
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 ∗xn x∗
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)
la source
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?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) L L en 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.W L
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:
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 estL x(i)j j i f(s)=max(0,s) s(i)j (i+1) i (i+1)
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é enw(i)jk
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.
la source
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?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é " .wi wi
la source
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:
la source