Dans le cours sur les réseaux neuronaux et l'apprentissage profond d' Andrew Ng sur Coursera, il dit que l'utilisation de est presque toujours préférable à l'utilisation de .
La raison qu'il donne est que les sorties utilisant centrées autour de 0 plutôt que de 0,5, ce qui "facilite un peu l'apprentissage de la couche suivante".
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?
Y a-t-il d'autres fonctionnalités qui rendent préférable? Le gradient plus raide retarderait-il la disparition des gradients?
Y a-t-il des situations où serait préférable?
Des réponses mathématiques légères et intuitives sont préférées.
Réponses:
Yan LeCun et d'autres soutiennent dans Efficient BackProp que
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:
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:
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+e−kx . Habituellement, nous utilisonsk=1 , mais rien ne vous interdit d'utiliser une autre valeur pourk pour é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.
la source
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 .sigmoid tanh sigmoid
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.tanh sigmoid tanh sigmoid tanh
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:
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:
la source
sigmoid(x) - 0.5
tanh
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.
la source
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.
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!)
la source