Différence des fonctions d'activation dans les réseaux de neurones en général

15

J'ai étudié les types de fonctions d'activation pour les réseaux de neurones. Les fonctions elles-mêmes sont assez simples, mais la différence d'application n'est pas entièrement claire.

Il est raisonnable de différencier les fonctions de type logique et linéaire, en fonction de la sortie binaire / continue souhaitée, mais quel est l'avantage de la fonction sigmoïde par rapport à la simple fonction linéaire?

ReLU est particulièrement difficile à comprendre pour moi, par exemple: à quoi sert une fonction qui se comporte comme linéaire en cas d'entrées positives mais "plate" en cas de négatifs? Quelle est l'intuition derrière cela? Ou s'agit-il simplement d'une simple erreur d'essai, rien de plus?

Hendrik
la source

Réponses:

16

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:

entrez la description de l'image icientrez la description de l'image ici

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+ex)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σ(2x)1

entrez la description de l'image icientrez la description de l'image ici

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)α

entrez la description de l'image ici

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(w1Tx+b1,w2Tx+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.*

Franck Dernoncourt
la source
Merci, ce résumé donne un aperçu, mais, franchement, je ne peux toujours pas comprendre certains détails de manière intuitive (par exemple, pourquoi ReLU "accélère considérablement la convergence de SGD"), et surtout: lequel choisir? Sur la base de la conclusion, Maxout est le meilleur et c'est la fin. Mais à part le fait que Maxout n'est pas implémenté dans les packages les plus populaires (dans Keras, par exemple), il me semble raisonnable qu'au moins dans la dernière couche d'autres types devraient être placés (sigmoïde pour la biclassification par exemple).
Hendrik