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:
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 estLx(i)jjif(s)=max(0,s)s(i)j(i+1)i(i+1)
∂L∂w(i)jk=∂L∂x(i+1)k∂x(i+1)k∂w(i)jk.
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
∂x(i+1)k∂w(i)jk=∂f(s(i)j)∂s(i)j∂s(i)j∂w(i)jk=f′(s(i)j)x(i)j.
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.