Comment choisir une fonction d'activation?


13

Je choisis la fonction d'activation pour la couche de sortie en fonction de la sortie dont j'ai besoin et des propriétés de la fonction d'activation que je connais. Par exemple, je choisis la fonction sigmoïde lorsque je traite des probabilités, une ReLU lorsque je traite des valeurs positives et une fonction linéaire lorsque je traite des valeurs générales.

Dans les couches cachées, j'utilise un ReLU qui fuit pour éviter les neurones morts au lieu du ReLU et le tanh au lieu du sigmoïde. Bien sûr, je n'utilise pas de fonction linéaire dans les unités cachées.

Cependant, le choix pour eux dans la couche cachée est principalement dû à des essais et erreurs.

Existe-t-il une règle empirique indiquant quelle fonction d'activation est susceptible de fonctionner correctement dans certaines situations? Prenez le terme situations aussi général que possible: cela pourrait se référer à la profondeur de la couche, à la profondeur du NN, au nombre de neurones pour cette couche, à l'optimiseur que nous avons choisi, au nombre de caractéristiques d'entrée de cette couche, à l'application de ce NN, etc.

Dans sa réponse , cantordust fait référence à d'autres fonctions d'activation que je n'ai pas mentionnées, comme ELU et SELU. Ces informations sont plus que bienvenues. Cependant, plus je découvre de fonctions d'activation, plus je suis confus dans le choix de la fonction à utiliser dans les couches cachées. Et je ne pense pas que lancer une pièce soit un bon moyen de choisir une fonction d'activation.

Réponses:


10

Il me semble que vous comprenez déjà les lacunes des ReLU et des sigmoïdes (comme les neurones morts dans le cas du ReLU ordinaire). Je suggérerais de regarder ELU (unités linéaires exponentielles) et SELU (version auto-normalisante d'ELU). Sous certaines hypothèses légères, ces dernières ont la belle propriété de l'auto-normalisation, ce qui atténue le problème de la disparition et de l'explosion des gradients. De plus, ils propagent la normalisation - c'est-à-dire qu'ils garantissent que l'entrée de la couche suivante aura une moyenne et une variance unitaire nulles.

Éditer:


Il serait incroyablement difficile de recommander une fonction d'activation qui fonctionne pour tous les cas d'utilisation (bien que je pense que SELU a été conçu pour qu'il fasse la bonne chose avec à peu près n'importe quelle entrée). Il existe de nombreuses considérations - à quel point il est difficile de calculer la dérivée (si elle est du tout différenciable!), À quelle vitesse un réseau avec votre AF choisi converge, à quel point il est lisse, s'il satisfait aux conditions du théorème d'approximation universel , si il préserve la normalisation, etc. Vous pouvez ou non vous soucier de certains ou de certains d'entre eux.

L'essentiel est qu'il n'y a pas de règle universelle pour choisir une fonction d'activation pour les couches cachées. Personnellement, j'aime utiliser les sigmoids (en particulier tanh) car ils sont joliment délimités et très rapides à calculer, mais surtout parce qu'ils fonctionnent pour mes cas d'utilisation . D'autres recommandent ReLU qui fuit pour les couches d'entrée et cachées comme une fonction de choix si votre réseau ne parvient pas à apprendre. Vous pouvez même mélanger et assortir des fonctions d'activation pour faire évoluer des réseaux de neurones pour des applications sophistiquées .

À la fin de la journée, vous obtiendrez probablement autant d'opinions qu'il y a de gens sur le bon choix de fonction d'activation, donc la réponse courte devrait probablement être: commencez par l'AF du jour (ReLU / SELU qui fuit?) et progressez dans d'autres AF par ordre de popularité décroissante si votre réseau a du mal à apprendre quoi que ce soit.


1
Bon, j'ai oublié la propagation de la normalisation. Merci de me le rappeler. Cependant, la question est toujours sans réponse. Il y a une règle ou quelque chose pour choisir quelles fonctions d'activation dois-je mettre dans les couches cachées? Par souci de simplicité, je ne parle que de couches simplement entièrement connectées. Je ne veux pas compliquer le sujet avec des circonvolutions, des regroupements, etc.
gvgramazio

@gvgramazio J'ai édité la réponse, j'espère qu'elle est un peu plus utile maintenant.
cantordust le

Avec l'édition, je pense que vous avez répondu à ma question ainsi que fourni des liens intéressés (en particulier celui sur le mix and match ). Ce n'est malheureusement pas la réponse que je voulais entendre. Je garderai ma question ouverte pendant un peu plus de jours. Si personne ne trouve une meilleure réponse, je marquerai la vôtre comme acceptée.
gvgramazio

-1

Je ne sais pas sur quel type de réseaux de neurones vous travaillez. Mais il faut également considérer les fonctions d'activation de tanh lorsqu'il s'agit d'un réseau neuronal récurrent. La raison est d'éviter d'exploser les problèmes de gradient puisque la fonction tanh est limitée à la différence de la fonction RELU par exemple.


Dans la question, j'ai déclaré que j'utilise tanh et sigmoid, pas seulement ReLU. De plus, pour faire simple, je me réfère en général aux couches classiques entièrement connectées cachées. Si vous pensez que le fait d'avoir affaire à un réseau neuronal récurrent est important pour le choix de la fonction d'activation, veuillez en indiquer la raison. Les phénomènes d'explosion / de fuite pourraient également se produire dans le réseau neuronal non récurrent.
gvgramazio
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.