Comment la fonction d'activation rectiligne résout-elle le problème du gradient en voie de disparition dans les réseaux de neurones?

40

J'ai trouvé des unités linéaires rectifiées (ReLU) louées à plusieurs endroits comme solution au problème du gradient de fuite pour les réseaux de neurones. En d’autres termes, on utilise max (0, x) comme fonction d’activation. Lorsque l'activation est positive, il est évident qu'elle est meilleure que, par exemple, la fonction d'activation sigmoïde, puisque sa dérivation est toujours égale à 1 au lieu d'une valeur arbitrairement petite pour un grand x. D'autre part, la dérivation est exactement 0 lorsque x est inférieur à 0. Dans le pire des cas, lorsqu'une unité n'est jamais activée, les poids pour cette unité ne changeront plus jamais et l'unité serait pour toujours inutilisable - ce qui semble bien pire que même de très faibles gradients. Comment les algorithmes d'apprentissage traitent-ils ce problème lorsqu'ils utilisent ReLU?

Hans-Peter Störr
la source
2
Ce que vous décrivez comme le pire des cas s'appelle un ReLU mourant
Martin Thoma
Je pense que l'idée est que pour une fonction logistique, puisque le gradient peut devenir arbitrairement petit, vous pouvez obtenir un gradient numériquement disparaissant en composant plusieurs logistiques "négligeables" (le problème s'aggraverait alors pour des architectures plus profondes). Pour la fonction rampe, le gradient étant constant par morceaux, un gradient composite qui s'annule ne peut se produire que s'il existe un composant dont la valeur est réellement 0.
GeoMatt22
(Je ne sais pas si c'est "pour toujours" cependant? Ne pourrait-il pas devenir non nul après plus d'entraînement? Des dépendances à d'autres nœuds et / ou au mini-lot de données actuel? (Pour la descente de gradient stochastique)
GeoMatt22

Réponses:

33

Voici un document qui explique la question. Je cite une partie de celle-ci pour clarifier le problème.

La fonction d'activation du redresseur permet à un réseau d'obtenir facilement des représentations clairsemées. Par exemple, après l’initialisation uniforme des poids, environ 50% des valeurs de sortie continue des unités cachées sont des zéros réels et cette fraction peut facilement augmenter avec une régularisation induisant une faible densité de population.

La fonction d'activation du redresseur introduit donc un effet de parcimonie sur le réseau. Voici quelques avantages de la clarté du même papier;

  • Informations démêlantes . L'un des objectifs déclarés des algorithmes d'apprentissage profond (Bengio, 2009) est de démêler les facteurs expliquant les variations des données. Une représentation dense est fortement enchevêtrée, car presque tout changement d’entrée modifie la plupart des entrées du vecteur de représentation. Au lieu de cela, si une représentation est à la fois clairsemée et robuste face à de petits changements d’entrée, l’ensemble des entités non nulles est presque toujours grossièrement conservé par de petits changements d’entrée.

  • Représentation efficace de taille variable . Différentes entrées peuvent contenir différentes quantités d'informations et seraient plus facilement représentées à l'aide d'une structure de données de taille variable, courante dans les représentations informatiques d'informations. La variation du nombre de neurones actifs permet à un modèle de contrôler la dimensionnalité effective de la représentation pour une entrée donnée et la précision requise.

  • Séparabilité linéaire . Les représentations clairsemées sont également plus susceptibles d'être séparables linéairement ou plus facilement avec des machines moins linéaires, simplement parce que les informations sont représentées dans un espace de grande dimension. En outre, cela peut refléter le format de données d'origine. Dans les applications liées au texte, par exemple, les données brutes d'origine sont déjà très rares.

  • Distribué mais clairsemé . Les représentations distribuées denses sont les représentations les plus riches, étant potentiellement plus efficaces de manière exponentielle que les représentations purement locales (Bengio, 2009). L'efficacité des représentations éparses est encore plus grande de manière exponentielle, l'exposant étant le nombre d'entités non nulles. Ils peuvent représenter un bon compromis par rapport aux critères ci-dessus.

Cela répond également à la question que vous avez posée:

On peut supposer que la saturation dure à 0 pourrait nuire à l'optimisation en bloquant la propagation en retour du gradient. Pour évaluer l'impact potentiel de cet effet, nous avons également étudié l'activation de softplus:softplus(x)=log(1+ex)(Dugas et al., 2001), une version lisse de la non-linéarité de rectification. Nous perdons la parcimonie exacte, mais pouvons espérer gagner une formation plus facile. Cependant, les résultats expérimentaux tendent à contredire cette hypothèse, suggérant que les zéros durs peuvent en fait aider la formation supervisée. Nous émettons l'hypothèse que les non-linéarités dures ne font pas mal tant que le gradient peut se propager le long de certains chemins, c'est-à-dire que certaines des unités cachées de chaque couche sont non nulles. plus uniformément, nous supposons que l'optimisation est plus facile.

Vous pouvez lire le papier pour plus de détails.

yasin.yazici
la source
18

C’est pourquoi il est probablement préférable d’utiliser PReLU, ELU ou d’autres activations qui ressemblent à celles de ReLU mais qui ne meurent pas à 0, mais tombent à quelque chose comme 0.1 * x lorsque x devient négatif pour continuer à apprendre. Il me semblait depuis longtemps que les ReLU sont une histoire comme le sigmoïde, bien que, pour une raison quelconque, les gens publient encore des articles avec ceux-ci. Pourquoi? Je ne sais pas.

Dmytro Mishkin et d’autres gars ont en fait testé un réseau comportant de nombreux types d’activation; vous devriez donc consulter leurs conclusions sur les performances de différentes fonctions d’activation et autres éléments.. Certaines fonctions, comme XOR, sont cependant mieux apprises avec Plain ReLU. Ne pensez à aucune substance neurale en termes de dogme, car les réseaux de neurones sont en constante évolution. Personne au monde ne les connaît et ne les comprend suffisamment pour dire la vérité divine. Personne. Essayez des choses, faites vos propres découvertes. Rappelez-vous que l'utilisation de ReLU elle-même est un développement très récent et que, depuis des décennies, tous les doctorants sur le terrain ont utilisé des fonctions d'activation trop compliquées dont nous ne pouvons que rire. Trop souvent, en savoir trop peut vous donner de mauvais résultats. Il est important de comprendre que les réseaux de neurones ne sont pas une science exacte. Rien en maths ne dit que les réseaux de neurones fonctionneront aussi bien qu’ils le font. C'est heuristique. Et donc c'est très malléable.

Pour votre information, même l'activation en valeur absolue donne de bons résultats sur certains problèmes, par exemple des problèmes de type XOR. Différentes fonctions d'activation sont mieux adaptées à différents objectifs. J'ai essayé Cifar-10 avec abs () et il semblait avoir de moins bonnes performances. Bien que je ne puisse pas dire que "c'est une fonction d'activation plus mauvaise pour la reconnaissance visuelle", parce que je ne suis pas sûr, par exemple, si ma pré-initialisation était optimale pour elle, etc. Le fait même qu'elle apprenait relativement bien m'a surpris.

En outre, dans la vraie vie, les «dérivés» que vous passez à l’arrière-plan ne doivent pas nécessairement correspondre aux dérivés mathématiques réels.

J'irais même jusqu'à dire que nous devrions interdire de les appeler "dérivés" et commencer à les appeler autrement, par exemple: error activation functionsne pas fermer notre esprit aux possibilités de bricoler avec eux. Vous pouvez en fait, par exemple, utiliser l’activation ReLU, mais en fournissant un 0,1 ou quelque chose comme cela au lieu de 0 en tant que dérivé pour x <0. D'une certaine manière, vous avez alors un ReLU simple, mais les neurones ne peuvent pas "mourir de capacité d'adaptation". J'appelle cela NecroRelu, parce que c'est un ReLU qui ne peut pas mourir. Et dans certains cas (certainement pas dans la plupart des cas), cela fonctionne mieux que LeakyReLU ordinaire, qui a en fait 0,1 dérivé à x <0 et meilleur que ReLU habituel. Je ne pense pas que beaucoup d'autres aient étudié une telle fonction, cependant, ceci, ou quelque chose de similaire, pourrait en fait être une fonction d'activation généralement cool que personne ne considérait juste parce qu'ils étaient trop concentrés sur les mathématiques.

En ce qui concerne ce qui est généralement utilisé, pour la fonction d’activation tanH (x), il est habituel de passer 1 - x² au lieu de 1 - tanH (x) ² en tant que dérivé afin de calculer les choses plus rapidement.

De plus, rappelez-vous que ReLU n'est pas si "manifestement meilleur" que TanH, par exemple. TanH peut probablement être mieux dans certains cas. Juste, semble-t-il, pas en reconnaissance visuelle. Cependant, ELU, par exemple, possède un peu de douceur sigmoïde et constitue l'une des fonctions d'activation les plus connues pour la reconnaissance visuelle du moment. Je n'ai pas vraiment essayé, mais je parie que l'on peut configurer plusieurs groupes avec des fonctions d'activation différentes sur le même niveau de couche. Parce que différentes logiques sont mieux décrites avec différentes fonctions d'activation. Et parfois, vous avez probablement besoin de plusieurs types d’évaluations.

Notez qu’il est important d’avoir une initialisation qui correspond au type de votre fonction d’activation. Les ReLU qui fuient ont besoin d'un autre init que les ReLU simples, par exemple.

EDIT: En fait, le ReLU standard semble moins enclin à sur-équiper que ceux qui fuient avec des architectures modernes. Au moins en reconnaissance d'image. Il semble que si vous optez pour un filet de très haute précision avec une énorme charge de paramètres, il serait peut-être préférable de vous en tenir aux options simples ReLU vs leaky. Mais, bien sûr, testez tout cela par vous-même. Peut-être que certaines choses qui fuiront fonctionneront mieux si plus de régularisation est donnée.

Íhor Mé
la source
Votre NecroReLU m'intéresse, mais je ne peux pas comprendre ce que vous avez écrit en quoi il est différent de LeakyReLU. Pourriez-vous clarifier?
Tom Hale
Différent en ce que l'activation est ReLU, mais le dérivé est LReLU
Íhor Mé le
@ ÍhorMé, comme vous l' avez mentionné au sujet de la initialization that corresponds to a type of activation function one is usingdans NOTEvotre poste, pourriez - vous s'il vous plaît fournir vos suggestions pour ce sur les mêmes lignes, je ne suis pas convaincu que l' utilisation d' activations Relu plus sigmoïde / Tanh est une solution pour le problème de gradient de fuite / explosion .
Anu
16

Voici une explication heuristique:

  • Chaque mise à jour de gradient dans backprop consiste en un nombre de facteurs multipliés.
  • Plus vous avancez vers le début du réseau, plus ces facteurs sont multipliés ensemble pour obtenir la mise à jour du gradient.
  • Bon nombre de ces facteurs sont des dérivés de la fonction d'activation des neurones - les autres sont des poids, des biais, etc.
  • Parmi ces facteurs, ceux qui ont une importance intuitive sont les poids, les biais, etc. Les dérivées de la fonction d'activation sont davantage une sorte de paramètre de réglage, conçu pour que la descente du gradient aille dans la bonne direction et dans la bonne vitesse.
  • Si vous multipliez les termes inférieurs à 1, ils tendent vers zéro, plus vous avez de termes. Par conséquent, le gradient disparaît à mesure que vous vous éloignez de la couche de sortie si vous avez des fonctions d'activation dont la pente est <1.
  • Si vous multipliez les termes supérieurs à 1, ils auront tendance à tendre davantage vers l'infini, d'où l'explosion du gradient au fur et à mesure que vous vous éloignerez de la couche en sortie si vous disposez de fonctions d'activation dont la pente est> 1.
  • Que diriez-vous si nous pouvions, d'une manière ou d'une autre, obtenir comme par magie ces termes ajoutés par la dérivée des fonctions d'activation, ce qui signifie intuitivement que toutes les contributions aux mises à jour de gradient proviennent de l'entrée du problème et du modèle - les poids, des entrées, des biais - plutôt qu'un artefact de la fonction d'activation choisie.
  • RELU a un gradient 1 lorsque la sortie est> 0 et zéro sinon.
  • Par conséquent, multiplier une série de dérivés RELU dans les équations de backprop a la propriété d'être 1 ou zéro - la mise à jour n'est rien, ou prend des contributions entièrement à partir des autres poids et biais.

Vous pourriez penser qu’il serait préférable d’avoir une fonction linéaire plutôt que d’aplatir lorsque x <0. L’idée ici est que RELU génère des réseaux clairsemés avec un nombre relativement réduit de liens utiles, ce qui a une plus grande plausibilité biologique, de sorte que la perte de un tas de poids est réellement utile. De plus, la simulation de fonctions intéressantes avec des réseaux de neurones n'est possible qu'avec une certaine non-linéarité de la fonction d'activation. Une fonction d'activation linéaire donne une sortie linéaire, ce qui n'est pas très intéressant du tout.

Tom Walker
la source
grande explication, pourriez-vous nous en dire plus sur le sixième point? Pourriez-vous également donner vos suggestions à cet égard dans le même sens, je ne suis pas totalement convaincu que l’utilisation des activations ReLu par rapport à sigmoid / tanH est une solution au problème de gradient disparaissant / explosant.
Anu
1
L'initialisation du poids sensible est également importante; mais le choix de la fonction d'activation l'est aussi. Comme exemple trivial, si tous vos poids par défaut sont à zéro et que vous utilisez RELU, toutes les sorties de vos neurones seront nulles et resteront nuls ... Ni RELU seul, ni les techniques d’initialisation à elles seules ne résolvent complètement le gradient de disparition / explosion, mais elles sont toutes les deux utiles. Vous ne savez pas vraiment ce que vous voulez dire par rapport au point 6, qu'est-ce qui n'est pas clair?
Tom Walker
1

Considérons la relation de récurrence principale qui définit la propagation en arrière du signal d'erreur.

Wibiif

hii

si=Wi(hi1)+bi

hi=f(si)

δi

δi=Wi+1(δi+1f(si))

ff(si)=(1hi2)hi

f=Relu=max(0,x)ff=numpy.where(hi>0,1,0)

Cette équation montre également l’autre problème lié à l’activation de relusion: les neurones morts: si un neurone donné était initialisé de manière à ne se déclencher pour aucune entrée (son activation est égale à zéro), son gradient serait également nul, et par conséquent, il ne serait jamais activé.

utilisateur1767774
la source