Paramètres d'encodage automatique [Hyper] clairsemés

8

Je viens de commencer à utiliser le package autoencoder dans R.

Les entrées de la autoencode()fonction incluent lambda, beta, rho et epsilon.

Quelles sont les limites de ces valeurs? Varient-ils pour chaque fonction d'activation? Ces paramètres sont-ils appelés "hyperparamètres"?

En supposant un auto-encodeur clairsemé, est rho = .01 bon pour la fonction d'activation logistique et rho = - .9 bon pour la fonction d'activation tangente hyperbolique?

Pourquoi le manuel définit-il epsilon sur .001? Si je me souviens bien, "Efficient Backpropagation" de LeCun recommande des valeurs de départ qui ne sont pas si proches de zéro.

Quelle est la valeur d'une "bonne" valeur pour la version bêta?

Existe-t-il une «règle générale» pour choisir le nombre de nuerons dans la couche cachée? Par exemple, si les couches d'entrée ont N nœuds, est-il raisonnable d'avoir 2N nuerons dans la couche cachée?

Pouvez-vous recommander de la documentation sur l'utilisation pratique des encodeurs automatiques?

Puissance
la source

Réponses:

10

Le autoencoderpackage n'est qu'une implémentation de l'encodeur automatique décrit dans les notes de classe d' Andrew Ng , ce qui pourrait être un bon point de départ pour une lecture plus approfondie. Maintenant, pour répondre à vos questions


Les gens font parfois la distinction entre les paramètres , que l'algorithme d'apprentissage calcule lui-même, et les hyperparamètres , qui contrôlent ce processus d'apprentissage et doivent être fournis à l'algorithme d'apprentissage. Il est important de réaliser qu'il n'y a PAS DE VALEURS MAGIQUES pour les hyperparamètres. La valeur optimale variera en fonction des données que vous modélisez: vous devrez les essayer sur vos données.

a) Lambda ( ) contrôle la façon dont les poids sont mis à jour pendant la rétropropagation. Au lieu de simplement mettre à jour les poids en fonction de la différence entre la sortie du modèle et la vérité du terrain), la fonction de coût comprend un terme qui pénalise les poids importants (en fait la valeur au carré de tous les poids). Lambda contrôle l'importance relative de ce terme de pénalité, qui tend à faire glisser les poids vers zéro et aide à éviter le sur-ajustement.λ

b) Rho ( et beta ) contrôlent la rareté. Rho est l'activation attendue d'une unité cachée (moyenne sur l'ensemble d'entraînement). La représentation deviendra de plus en plus clairsemée à mesure qu'elle deviendra plus petite. Cette rareté est imposée en ajustant le terme de biais, et la version bêta contrôle la taille de ses mises à jour. (Il semble que redimensionne simplement le taux d'apprentissage globalρ)(ββα .)

c) Epsilon (ϵ) contrôle les valeurs de poids initiales, qui sont tirées au hasard de N(0,ϵ2).

Vos valeurs rho ne semblent pas déraisonnables car les deux sont proches du bas de la plage de la fonction d'activation (0 à 1 pour la logistique, -1 à 1 pour le tanh). Cependant, cela dépend évidemment de la quantité de clarté que vous souhaitez et du nombre d'unités cachées que vous utilisez également.


Le souci majeur de LeCunn avec les petits poids que la surface d'erreur devienne très plate près de l'origine si vous utilisez un sigmoïde symétrique. Ailleurs dans cet article, il recommande d'initialiser avec des poids tirés au hasard à partir d'une distribution normale avec une moyenne nulle etm1/2 écart type, où m est le nombre de connexions que chaque unité reçoit.


Il existe de nombreuses "règles de base" pour choisir le nombre d'unités cachées. Votre estimation initiale (entrée 2x) semble conforme à la plupart d'entre eux. Cela dit, ces estimations sont beaucoup plus des suppositions que des estimations. En supposant que vous avez la puissance de traitement, je me tromperais du côté des unités plus cachées, puis imposerais la rareté avec une faible valeur rho.
Une utilisation évidente des encodeurs automatiques est de générer des représentations d'entités plus compactes pour d'autres algorithmes d'apprentissage. Une image brute peut avoir des millions de pixels, mais un autoencodeur (clairsemé) peut représenter cela dans un espace beaucoup plus petit. Geoff Hinton (et d'autres) ont montré qu'ils génèrent des caractéristiques utiles pour une classification ultérieure. Certains travaux d'apprentissage en profondeur utilisent des encodeurs automatiques ou similaires pour pré-former le réseau. Vincent et al. utiliser des encodeurs automatiques directement pour effectuer la classification.

La possibilité de générer des représentations d'entités succinctes peut également être utilisée dans d'autres contextes. Voici un petit projet soigné où des états produits par un encodeur automatique sont utilisés pour guider un algorithme d'apprentissage par renforcement à travers les jeux Atari .

Enfin, on peut également utiliser des auto-encodeurs pour reconstruire des entrées bruyantes ou dégradées, comme cela , ce qui peut être une fin utile en soi.

Matt Krause
la source
Merci. Alors, comment se fait-il beta = 6dans l' autoencoderexemple de code?
puissance
1
Il semble que ce soit juste un facteur de taux / échelle d'apprentissage. Si vous regardez l'équation 9 du texte, la mise à jour d'une unité est mise à l'échelle par alpha, mais la mise à jour du biais est mise à l'échelle parαβ. Siβ=6, puis le biais se met à jour 6 fois plus vite ...
Matt Krause
1
Merci de l'acceptation! J'ai pensé à quelque chose de similaire pour le travail et c'était amusant de l'écrire. À l'avenir, vous aurez peut-être plus de chance de poser des questions plus petites (par exemple, demandez séparément la plage, les valeurs de départ et les unités cachées). Les gens semblent aimer les réponses qu'ils peuvent assommer en dix minutes.
Matt Krause
Oui, c'est logique. Surtout si vous n'avez que 10 minutes de temps d'arrêt au travail.
puissance du
2

Une partie de la réponse de Matt Krause ne me semble pas correcte (Lambda et Beta), aussi epsilon n'est pas mentionné. En fait, ce message devrait être un commentaire, mais je réponds à la question en raison de la restriction de 50 réputation. N'hésitez pas à commenter si vous voyez une erreur.

De http://web.stanford.edu/class/archive/cs/cs294a/cs294a.1104/sparseAutoencoder.pdf Lambda est le terme de décroissance du coefficient de poids qui décourage les poids d'atteindre de grandes valeurs car il peut s'adapter. Le terme de décroissance du poids (ou terme de régularisation du poids) fait partie de la fonction de coût comme le terme de rareté expliqué ci-dessous.

rho est une contrainte de rareté qui contrôle le nombre moyen d'activation sur la couche cachée. Il est inclus pour faire fonctionner l'encodeur automatique même avec un nombre relativement élevé d'unités cachées par rapport aux unités d'entrée. Par exemple, si la taille d'entrée est 100 et la taille cachée est 100 ou plus (encore plus petite mais proche de 100), la sortie peut être construite sans aucune perte, car les unités cachées peuvent apprendre la fonction d'identité. La bêta est un coefficient de clarté qui fait partie de la fonction de coût. Il contrôle l'importance relative du terme de rareté. Lambda et Beta spécifient l'importance relative de leurs termes dans la fonction de coût.

Epsilon (s'ils ont utilisé la même notation avec Andrew Ng) est un paramètre de régularisation pour le processus de blanchiment qui a un effet de filtre passe-bas sur l'entrée. Cela a des effets importants sur les méthodes de reconstruction. Vérifiez le lien pour cela dans les modèles basés sur la reconstruction. Je pense qu'ils ont utilisé une activation linéaire pour la couche de sortie et utilisé un certain type de blanchiment (caractéristiques univariantes).

Le taux de mise à jour des paramètres (poids et biais) est appelé taux d'apprentissage et désigné par eta en général. Cependant, il a été utilisé comme alpha par Andrew Ng. Vérifiez le premier lien.

yasin.yazici
la source
Vous avez raison - j'étais un peu flou sur lambda et je l'ai fait sonner un peu comme le taux d'apprentissage global. J'espère que le montage vous aidera. Je pense que la notation est quelque peu différente pour epsilon. Les notes et le code suggèrent que c'est l'écart std des valeurs initiales, qui sont tirées de N (0,ϵ2).
Matt Krause du