Pourquoi la reconstruction dans les encodeurs automatiques utilise-t-elle la même fonction d'activation que l'activation directe, et non l'inverse?

9

Supposons que vous ayez une couche d'entrée avec n neurones et que la première couche cachée ait neurones, avec typiquement . Ensuite, vous calculez l'activation du ème neurone dans la couche cachée parmm<nunejj

unej=F(je=1..nwje,jXje+bj) , où est une fonction d'activation comme ou .Ftanhsigmoïde

Pour entraîner le réseau, vous calculez la reconstruction de l'entrée, notée , et minimisez l'erreur entre et . Maintenant, le ème élément de est généralement calculé comme suit:zzXjez

zje=F(j=1..mwj,jeunej+bje)

Je me demande pourquoi les reconstruits sont généralement calculés avec la même fonction d'activation au lieu d'utiliser la fonction inverse, et pourquoi les et séparés sont utiles au lieu d'utiliser des poids et des biais liés? Il me semble beaucoup plus intuitif de calculer le reconstruit avec la fonction d'activation inverse , par exemple, , comme suit:zwbF-1arctanh

zje=j=1..mF-1(unej)-bjwj,jeT

Notez que les poids liés ici sont utilisés, c'est-à-dire , et les biais de la couche cachée sont utilisés, au lieu d'introduire un ensemble supplémentaire de biais pour la couche d'entrée.w=wTbj

Et une question très connexe: pour visualiser les caractéristiques, au lieu de calculer la reconstruction, on créerait généralement une matrice d'identité avec la dimension de la couche cachée. Ensuite, on utiliserait chaque colonne de la matrice comme entrée d'une fonction de réactivation, qui induit une sortie dans les neurones d'entrée. Pour la fonction de réactivation, serait-il préférable d'utiliser la même fonction d'activation (resp. Le ) ou la fonction inverse (resp. Le )?zjezje

Manfred Eppe
la source

Réponses:

5

Je ne pense pas que votre hypothèse vraie. Ou plutôt n'est pas nécessaire, et si cela est fait, ce n'est pas pour inverser en quelque sorte automatiquement le calcul pour créer les entités de calque cachées. Il n'est pas possible d'inverser la compression en général, en passant de n à m plus petit, directement de cette manière. Si tel était le but, alors vous voudriez une forme d'inversion de matrice, pas une simple transposition.w=wT

Au lieu de cela, nous voulons juste pour la représentation compressée des fonctionnalités de niveau supérieur, et nous supprimerons fois l'auto-encodeur terminé.wjejwjej

Vous pouvez définir et lier les poids. Cela peut aider à la régularisation - aider le codeur automatique à généraliser. Mais ce n'est pas nécessaire.w=wT

Pour que l'auto-encodeur fonctionne, la fonction d'activation que vous utilisez après la couche que vous pré-entraînez n'a pas d'importance, à condition que la dernière couche de l'auto-encodeur puisse exprimer la gamme des entrées possibles. Cependant, vous pouvez obtenir des résultats de qualité variable en fonction de ce que vous utilisez, comme d'habitude pour un réseau de neurones.

Il est tout à fait raisonnable d'utiliser la même fonction d'activation que celle pour laquelle vous créez la couche pré-formée, car c'est le choix le plus simple.

L'utilisation d'une fonction inverse est également possible, mais déconseillée pour sigmoïde ou tanh, car par exemple arctanh n'est pas défini <-1 ou> 1, donc ne serait probablement pas numériquement stable.

Neil Slater
la source
Merci! Cependant, lew=wTsemble être une pratique courante, car il est, par exemple, utilisé dans le didacticiel très basique pour débruiter les encodeurs automatiques de deeplearning.net: ( deeplearning.net/tutorial/dA.html#daa ) Je ne trouve pas si raisonnable d'utiliser le même fonction d'activation pour la reconstruction, pourriez-vous nous en dire plus? C'est vrai que c'est le choix le plus simple, mais il me semble beaucoup plus naturel d'utiliser lezje avec le unerctunenh, car cela donne en fait l'inverse mathématique de l'activation.
Manfred Eppe
Tu peux si tu veux. Par exemple de deeplearning.net/tutorial/dA.html " En option , la matrice de poidsW du mappage inverse peut être contraint à être la transposition du mappage direct: W=WT. C'est ce que l'on appelle les poids liés. "(Je souligne). Le point de ma réponse est que si vous faites cela, ce n'est pas pour fournir une inversion automatique de l'encodage, c'est juste une contrainte qui régularisera la formation.
Neil Slater
Merci Neil. Votre commentaire sur lew=wTm'a aidé à généraliser ma question et à la rendre plus précise, j'ai donc édité la question en conséquence. En fait, je ne comprends pas pourquoi il est utile d'avoir desw du tout, au lieu d'utiliser toujours la matrice transposée wT. La réponse pourrait être "car cela donne de meilleurs résultats", mais je me demande alors pourquoi cela donne de meilleurs résultats. Cela ne me semble pas intuitif.
Manfred Eppe
@ManfredEppe: Peut-être devriez-vous plutôt réfléchir à la raison pour laquelle vous pensez que la matrice de poids transposée et la fonction inverse seraient utiles? Il n'y a aucune raison spécifique de les utiliser - quelle est exactement votre intuition derrière l'idée de les utiliser? Si c'est pour la "symétrie", regardez de nouveau l'ordre dans lequel ils sont appliqués - ce n'est pas une inversion symétrique de la couche entrée vers la couche cachée (si elle l'était, la fonction d'activation inverse devrait être la première)
Neil Slater