Une question similaire a été posée sur CV: Liste complète des fonctions d'activation dans les réseaux de neurones avec des avantages / inconvénients .
Je copie ci-dessous une des réponses:
Une telle liste, mais pas très exhaustive:
http://cs231n.github.io/neural-networks-1/
Fonctions d'activation couramment utilisées
Chaque fonction d'activation (ou non-linéarité ) prend un seul numéro et y effectue une certaine opération mathématique fixe. Il existe plusieurs fonctions d'activation que vous pouvez rencontrer dans la pratique:
Gauche: la non-linéarité sigmoïde écrase les nombres réels pour qu'ils soient compris entre [0,1] Droite: la non-linéarité tanh écrase les nombres réels pour qu'ils se situent entre [-1,1].
σ( x ) = 1 / ( 1 + e- x)et est montré dans l'image ci-dessus à gauche. Comme évoqué dans la section précédente, il prend un nombre réel et le "serre" dans une plage comprise entre 0 et 1. En particulier, les grands nombres négatifs deviennent 0 et les grands nombres positifs deviennent 1. La fonction sigmoïde a été utilisée fréquemment dans le passé car il a une belle interprétation comme la cadence de tir d'un neurone: de ne pas tirer du tout (0) au tir entièrement saturé à une fréquence maximale supposée (1). En pratique, la non-linéarité sigmoïde est récemment tombée en disgrâce et elle est rarement utilisée. Il présente deux inconvénients majeurs:
- Les sigmoides saturent et tuent les dégradés . Une propriété très indésirable du neurone sigmoïde est que lorsque l'activation du neurone sature à l'une ou l'autre queue de 0 ou 1, le gradient à ces régions est presque nul. Rappelons que pendant la rétropropagation, ce gradient (local) sera multiplié par le gradient de la sortie de cette porte pour l'ensemble de l'objectif. Par conséquent, si le gradient local est très petit, il "tuera" efficacement le gradient et presque aucun signal ne traversera le neurone vers ses poids et récursivement vers ses données. De plus, il faut être très prudent lors de l'initialisation du poids des neurones sigmoïdes pour éviter la saturation. Par exemple, si les poids initiaux sont trop grands, la plupart des neurones deviendraient saturés et le réseau apprendrait à peine.
- x > 0F= wTx + bwF). Cela pourrait introduire une dynamique de zigzag indésirable dans les mises à jour de gradient pour les poids. Cependant, notez qu'une fois ces gradients ajoutés à un lot de données, la mise à jour finale des poids peut avoir des signes variables, ce qui atténue quelque peu ce problème. Par conséquent, ceci est un inconvénient mais il a des conséquences moins graves par rapport au problème d'activation saturé ci-dessus.
tanh( x ) = 2 σ( 2 x ) - 1
Gauche: fonction d'activation de l'unité linéaire rectifiée (ReLU), qui est nulle lorsque x <0 et ensuite linéaire avec la pente 1 lorsque x> 0. Droite: un tracé de Krizhevsky et al. (pdf) papier indiquant l'amélioration de 6x de la convergence avec l'unité ReLU par rapport à l'unité tanh.
F( x ) = max ( 0 , x )
- (+) Il s'est avéré accélérer considérablement (par exemple un facteur 6 dans Krizhevsky et al. ) La convergence de la descente de gradient stochastique par rapport aux fonctions sigmoïde / tanh. On fait valoir que cela est dû à sa forme linéaire non saturante.
- (+) Par rapport aux neurones tanh / sigmoïdes qui impliquent des opérations coûteuses (exponentielles, etc.), le ReLU peut être implémenté en seuillant simplement une matrice d'activations à zéro.
- (-) Malheureusement, les unités ReLU peuvent être fragiles pendant l'entraînement et peuvent "mourir". Par exemple, un grand gradient traversant un neurone ReLU pourrait entraîner une mise à jour des poids de telle sorte que le neurone ne s'activera plus jamais sur aucun point de données. Si cela se produit, alors le gradient traversant l'unité sera toujours nul à partir de ce moment. Autrement dit, les unités ReLU peuvent mourir de manière irréversible pendant l'entraînement, car elles peuvent être renversées du collecteur de données. Par exemple, vous pouvez constater que jusqu'à 40% de votre réseau peut être «mort» (c'est-à-dire des neurones qui ne s'activent jamais sur l'ensemble des données d'entraînement) si le taux d'apprentissage est trop élevé. Avec un bon réglage du taux d'apprentissage, c'est moins souvent un problème.
Leaky ReLU. Les ReLU qui fuient sont une tentative pour résoudre le problème "ReLU mourant". Au lieu que la fonction soit nulle lorsque x <0, un ReLU qui fuit aura à la place une petite pente négative (de 0,01 environ). Autrement dit, la fonction calcule où est une petite constante. Certaines personnes signalent le succès de cette forme de fonction d'activation, mais les résultats ne sont pas toujours cohérents. La pente dans la région négative peut également être transformée en paramètre de chaque neurone, comme on le voit dans les neurones PReLU, présenté dans Delving Deep into Rectifiers , par Kaiming He et al., 2015. Cependant, la cohérence de l'avantage entre les tâches est actuellement pas clair.f(x)=1(x<0)(αx)+1(x>=0)(x)α
Maxout . D'autres types d'unités ont été proposés qui n'ont pas la forme fonctionnelle où une non-linéarité est appliquée sur le produit scalaire entre les poids et les données. Un choix relativement populaire est le neurone Maxout (introduit récemment par Goodfellow et al. ) Qui
généralise le ReLU et sa version qui fuit. Le neurone Maxout calcule la fonction . Notez que ReLU et Leaky ReLU sont un cas spécial de ce formulaire (par exemple, pour ReLU, nous avonsmax ( w T 1 x + b 1 , w T 2 x + b 2 ) w 1 , b 1 = 0f(wTx+b)max(wT1x+b1,wT2x+b2)w1,b1=0). Le neurone Maxout bénéficie donc de tous les avantages d'une unité ReLU (régime de fonctionnement linéaire, pas de saturation) et n'a pas ses inconvénients (ReLU mourant). Cependant, contrairement aux neurones ReLU, il double le nombre de paramètres pour chaque neurone, conduisant à un nombre total élevé de paramètres.
Ceci conclut notre discussion sur les types de neurones les plus courants et leurs fonctions d'activation. En dernier commentaire, il est très rare de mélanger et de faire correspondre différents types de neurones dans le même réseau, même s'il n'y a pas de problème fondamental à le faire.
TLDR : " Quel type de neurone dois-je utiliser? " Utilisez la non-linéarité ReLU, soyez prudent avec vos taux d'apprentissage et surveillez éventuellement la fraction d'unités "mortes" dans un réseau. Si cela vous concerne, essayez Leaky ReLU ou Maxout. N'utilisez jamais de sigmoïde. Essayez tanh, mais attendez-vous à ce qu'il fonctionne moins bien que ReLU / Maxout.
Licence:
La licence MIT (MIT)
Copyright (c) 2015 Andrej Karpathy
La permission est accordée, sans frais, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le "Logiciel"), de traiter le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion , publier, distribuer, sous-licencier et / ou vendre des copies du Logiciel, et autoriser les personnes à qui le Logiciel est fourni à le faire, sous réserve des conditions suivantes:
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI «TEL QUEL», SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS S'Y LIMITER LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET DE NON-CONTREFAÇON. EN AUCUN CAS, LES AUTEURS OU LES DÉTENTEURS DE DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, TORTURE OU AUTRE, DÉCOULANT DU LOGICIEL OU DE L'UTILISATION OU D'AUTRES OPÉRATIONS DANS LE LOGICIEL.*