Pourquoi tanh est-il presque toujours meilleur que sigmoïde comme fonction d'activation?

33

Dans le cours sur les réseaux neuronaux et l'apprentissage profond d' Andrew Ng sur Coursera, il dit que l'utilisation de tanh est presque toujours préférable à l'utilisation de sigmoid .

La raison qu'il donne est que les sorties utilisant tanh centrées autour de 0 plutôt que de 0,5, ce qui "facilite un peu l'apprentissage de la couche suivante".sigmoid

  1. Pourquoi le centrage de l'apprentissage de la vitesse de sortie de l'activation? Je suppose qu'il fait référence à la couche précédente car l'apprentissage se produit pendant le backprop?

  2. Y a-t-il d'autres fonctionnalités qui rendent préférable? Le gradient plus raide retarderait-il la disparition des gradients?tanh

  3. Y a-t-il des situations où serait préférable?sigmoid

Des réponses mathématiques légères et intuitives sont préférées.

Tom Hale
la source
13
Une fonction sigmoïde est en forme de S (d'où le nom). Vous parlez probablement de la fonction logistique ex1+ex . Mis à part l'échelle et l'emplacement, les deux sont essentiellement les mêmes:logistic(x)=12+12tanh(x2). Donc, le vrai choix est de savoir si vous voulez des sorties dans l'intervalle(1,1)ou l'intervalle(0,1)
Henry

Réponses:

21

Yan LeCun et d'autres soutiennent dans Efficient BackProp que

La convergence est généralement plus rapide si la moyenne de chaque variable d'entrée sur l'ensemble d'apprentissage est proche de zéro. Pour voir cela, considérons le cas extrême où toutes les entrées sont positives. Les poids d'un nœud particulier dans la première couche de poids sont mis à jour d'une quantité proportionnelle à δxδ est l'erreur (scalaire) à ce nœud et x est le vecteur d'entrée (voir les équations (5) et (10)). Lorsque toutes les composantes d'un vecteur d'entrée sont positives, toutes les mises à jour des poids qui alimentent un nœud auront le même signe (c'est-à-dire signe ( δ )). En conséquence, ces poids ne peuvent que tous diminuer ou augmenter tous ensemblepour un modèle d'entrée donné. Ainsi, si un vecteur de poids doit changer de direction, il ne peut le faire qu'en zigzagant ce qui est inefficace et donc très lent.

C'est pourquoi vous devez normaliser vos entrées afin que la moyenne soit nulle.

La même logique s'applique aux couches intermédiaires:

Cette heuristique doit être appliquée à toutes les couches, ce qui signifie que nous voulons que la moyenne des sorties d'un nœud soit proche de zéro car ces sorties sont les entrées de la couche suivante.

Postscript @craq fait valoir que cette citation n'a pas de sens pour ReLU (x) = max (0, x) qui est devenu une fonction d'activation très populaire. Bien que ReLU évite le premier problème de zigzag mentionné par LeCun, il ne résout pas ce deuxième point de LeCun qui dit qu'il est important de pousser la moyenne à zéro. J'aimerais savoir ce que LeCun a à dire à ce sujet. Dans tous les cas, il existe un document appelé Normalisation par lots , qui s'appuie sur le travail de LeCun et offre un moyen de résoudre ce problème:

On sait depuis longtemps (LeCun et al., 1998b; Wiesler et Ney, 2011) que la formation du réseau converge plus rapidement si ses entrées sont blanchies - c'est-à-dire transformées linéairement pour avoir des moyennes et des variances unitaires nulles et décorrélées. Comme chaque couche observe les entrées produites par les couches ci-dessous, il serait avantageux d'obtenir le même blanchiment des entrées de chaque couche.


Soit dit en passant, cette vidéo de Siraj explique beaucoup de choses sur les fonctions d'activation en 10 minutes amusantes.


@elkout dit "La vraie raison pour laquelle le tanh est préféré par rapport au sigmoïde (...) est que les dérivés du tanh sont plus grands que les dérivés du sigmoïde."

Je pense que ce n'est pas un problème. Je n'ai jamais vu cela être un problème dans la littérature. Si cela vous dérange qu'un dérivé soit plus petit qu'un autre, vous pouvez simplement le mettre à l'échelle.

La fonction logistique a la forme σ(x)=11+ekx . Habituellement, nous utilisonsk=1, mais rien ne vous interdit d'utiliser une autre valeur pourkpour élargir vos dérivés, si tel était votre problème.


Nitpick: tanh est également une fonction sigmoïde . Toute fonction avec une forme en S est un sigmoïde. Ce que vous appelez sigmoïde, c'est la fonction logistique. La raison pour laquelle la fonction logistique est plus populaire tient aux raisons historiques. Il est utilisé depuis plus longtemps par les statisticiens. En outre, certains estiment que c'est plus biologiquement plausible.

Ricardo Cruz
la source
1
Vous n'avez pas besoin d'une citation pour montrer que , juste du calcul secondaire. σ ( x ) = σ ( x ) ( 1 - σ ( x ) ) 0,25 Nous savons que cela est vrai parce que 0 < σ ( x ) < 1 , il vous suffit donc de maximiser un quadratique concave. tanh maxxσ(x)<maxxtanh(x)
σ(x)=σ(x)(1σ(x))0.25
0<σ(x)<1qui peut être vérifié par inspection.
tanh(x)=sech2(x)=2exp(x)+exp(x))1.0
Sycorax dit Réintégrer Monica le
En dehors de cela, j'ai dit que dans la plupart des cas, les dérivés du tanh sont plus grands que les dérivés du sigmoïde. Cela se produit principalement lorsque nous sommes autour de 0. Vous êtes invités à consulter ce lien et les réponses claires fournies ici question qui indiquent également que les dérivés de sont généralement plus grands que les dérivés du sigmoïde . tanhsigmoid
ekoulier
attendez ... cela semble plausible, mais si les couches intermédiaires devraient avoir une sortie moyenne de zéro, comment se fait-il que ReLU fonctionne si bien? N'est-ce pas une contradiction?
craq
@ekoulier, le dérivé de étant plus grand que sigmoid n'est pas un problème. Vous pouvez simplement le mettre à l'échelle s'il vous dérange. tanhsigmoid
Ricardo Cruz
@craq, bon point, je pense que c'est un défaut dans l'argument de LeCun. J'ai ajouté un lien vers le document de normalisation des lots où il discute plus sur ce problème et comment il peut être amélioré. Malheureusement, ce papier ne compare pas relu avec tanh, il ne compare que relu avec logistic (sigmoid).
Ricardo Cruz
14

Ce n'est pas que ce soit nécessairement mieux que . En d'autres termes, ce n'est pas le centre d'une fonction d'activation qui le rend meilleur. Et l'idée derrière les deux fonctions est la même, et elles partagent également une "tendance" similaire. Inutile de dire que la fonction tanh est appelée une version décalée de la fonction sigmoïde .sigmoidtanhsigmoid

La vraie raison pour laquelle le est préféré par rapport au sigmoïde , en particulier lorsqu'il s'agit de mégadonnées lorsque vous avez généralement du mal à trouver rapidement le minimum local (ou global), c'est que les dérivés du tanh sont plus grands que les dérivés du sigmoïde . En d'autres termes, vous minimisez votre fonction de coût plus rapidement si vous utilisez tanh comme fonction d'activation.tanhsigmoidtanhsigmoidtanh

Mais pourquoi la tangente hyperbolique a-t-elle des dérivées plus importantes? Juste pour vous donner une intuition très simple, vous pouvez observer le graphique suivant:

Sigmoïde vs tangente hyperbolique

Le fait que la plage soit comprise entre -1 et 1 par rapport à 0 et 1, rend la fonction plus pratique pour les réseaux de neurones. En dehors de cela, si j'utilise des mathématiques, je peux prouver que:

tanhx=2σ(2x)1

|tanh(x)x|>|σ(x)x|

ekoulier
la source
0
2
tanhsigmoidtanh
2xsigmoid(x) - 0.52xtanh
2x
3

Répondre à la partie de la question jusqu'ici sans réponse:

Andrew Ng dit que l'utilisation de la fonction logistique (communément appelée sigmoïde) n'a vraiment de sens que dans la couche finale d'un réseau de classification binaire.

01(0,1)tanh

Tom Hale
la source
Pour la sortie, la fonction logistique a du sens si vous voulez produire des probabilités, nous pouvons tous nous mettre d'accord. Ce qui est discuté, c'est pourquoi tanh est préféré à la fonction logistique comme activation pour les couches moyennes.
Ricardo Cruz
Comment savez-vous que c'est ce que le PO prévoyait? Il semble qu'il posait une question générale.
Tom Hale
2

Tout dépend essentiellement des dérivées de la fonction d'activation, le principal problème avec la fonction sigmoïde est que la valeur maximale de sa dérivée est de 0,25, ce qui signifie que la mise à jour des valeurs de W et b sera faible.

La fonction tanh, d'autre part, a un dérivé allant jusqu'à 1.0, ce qui rend les mises à jour de W et b beaucoup plus importantes.

Cela rend la fonction tanh presque toujours meilleure en tant que fonction d'activation (pour les couches cachées) plutôt que la fonction sigmoïde.

Pour le prouver moi-même (au moins dans un cas simple), j'ai codé un simple réseau de neurones et utilisé sigmoïde, tanh et relu comme fonctions d'activation, puis j'ai tracé comment la valeur d'erreur a évolué et c'est ce que j'ai obtenu.

enter image description here

Le cahier complet que j'ai écrit est ici https://www.kaggle.com/moriano/a-showcase-of-how-relus-can-speed-up-the-learning

Si cela aide, voici les graphiques des dérivées de la fonction tanh et de la fonction sigmoïde (attention à l'axe vertical!)

enter image description here

enter image description here

Juan Antonio Gomez Moriano
la source
(-1) Bien que ce soit une idée intéressante, elle n'est pas autonome. En particulier, la plupart des méthodes d'optimisation utilisées pour DL / NN sont des méthodes de gradient de premier ordre, qui ont un taux d'apprentissageα. Si la dérivée maximale par rapport à une fonction d'activation est trop petite, on pourrait facilement simplement augmenter le taux d'apprentissage.
Cliff AB
Ne courez-vous pas le risque de ne pas avoir une courbe d'apprentissage stable avec un taux d'apprentissage plus élevé?
Juan Antonio Gomez Moriano
Eh bien, si les dérivés sont plus stables, l'augmentation du taux d'apprentissage est moins susceptible de déstabiliser l'estimation.
Cliff AB
C'est un bon point, avez-vous un lien où je pourrais en savoir plus?
Juan Antonio Gomez Moriano