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?
la source
Réponses:
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 introduit donc un effet de parcimonie sur le réseau. Voici quelques avantages de la clarté du même papier;
Cela répond également à la question que vous avez posée:
Vous pouvez lire le papier pour plus de détails.
la source
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.
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 functions
ne 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.
la source
initialization that corresponds to a type of activation function one is using
dansNOTE
votre 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 .Voici une explication heuristique:
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.
la source
Considérons la relation de récurrence principale qui définit la propagation en arrière du signal d'erreur.
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é.
la source