Question

Je travaille actuellement sur la mise en œuvre Stochastique Descente du Gradient, SGD, pour les réseaux de neurones en utilisant rétropropagation, et si je comprends son but j'ai quelques questions sur la façon de choisir des valeurs pour le taux d'apprentissage.

  • Est-ce que le taux d'apprentissage lié à la forme du gradient d'erreur, car elle dicte la vitesse de descente?
  • Si oui, comment utilisez-vous ces informations pour informer votre décision au sujet d'une valeur?
  • Si ce n'est pas ce genre de valeurs dois-je choisir, et comment dois-je les choisir?
  • Il semble que vous voudriez les petites valeurs pour éviter une surévaluation, mais comment choisissez-vous un tel que vous ne soyez pas coincé dans des minima locaux ou de prendre à temps pour descendre?
  • Est-il logique d'avoir un taux d'apprentissage constant, ou devrais-je utiliser une mesure de modifier sa valeur que je me rapproche un minimum dans le gradient?

En bref: Comment choisir le taux d'apprentissage pour SGD

Était-ce utile?

La solution

  • Est-ce que le taux d'apprentissage lié à la forme du gradient d'erreur, comme il dicte la vitesse de descente?

    • En SGD simple, la réponse est non. Un taux global d'apprentissage est utilisé qui est indifférent au gradient d'erreur. Cependant, l'intuition que vous obtenez a inspiré à diverses modifications de la règle de mise à jour du SGD.
  • Si oui, comment utilisez-vous ces informations pour informer votre décision au sujet d'une valeur?

    • Adagrad est le plus largement connu de ces derniers et des échelles un taux global d'apprentissage ? sur chaque dimension en fonction de la norme L2 de l'histoire du gradient d'erreur gt sur chaque dimension:

      entrer image description ici

    • Adadelta est un autre tel algorithme de formation qui utilise à la fois l'histoire de gradient d'erreur comme adagrad et la mise à jour de poids l'histoire et a l'avantage de ne pas avoir à fixer un taux d'apprentissage à tous .

  • Si ce n'est pas ce genre de valeurs dois-je choisir, et comment dois-je les choisir?

    • La fixation des taux d'apprentissage pour SGD simple dans les réseaux de neurones est généralement processus de démarrage d'une valeur telle que 0,01 sain et de faire ensuite la validation croisée pour trouver une valeur optimale. Les valeurs typiques vont sur quelques ordres de amplitude de 0,0001 à 1.
  • Il semble que vous voudriez les petites valeurs pour éviter une surévaluation, mais Comment choisissez-vous un tel que vous ne soyez pas coincé dans des minima locaux ou prendre trop de temps pour descendre? Est-il logique d'avoir un taux d'apprentissage constant, ou devrais-je utiliser une mesure de modifier sa valeur que je me rapproche un minimum du gradient?

    • En général, la valeur qui est le mieux est proche du plus haut l'apprentissage stable le taux et l'apprentissage carie taux / recuit (linéaire ou de façon exponentielle) est utilisé au cours de la formation. La raison derrière cela est que dès le début il y a un signal d'apprentissage clair si des mises à jour agressives encouragent l'exploration de temps après sur les taux d'apprentissage plus petits permettent une exploitation plus délicate de la surface d'erreur locale.

Autres conseils

Voici une très bonne note (page 12) sur le taux d'apprentissage dans les réseaux de neurones (Back propagation) par Andrew Ng. Vous trouverez tous les détails concernant les taux d'apprentissage.

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

Pour 4 points, vous avez raison que, normalement, on doit choisir un taux d'apprentissage « équilibré », qui ne doit ni dépasser ni converger trop lentement. On peut tracer le taux d'apprentissage w.r.t. la descente de la fonction de coût pour diagnostiquer / affiner. Dans la pratique, Andrew utilise normalement l'algorithme L-BFGS (mentionné dans la page 12) pour obtenir un « assez bon » taux d'apprentissage.

La sélection d'un taux d'apprentissage est un exemple d'une « méta-problème » connu sous le nom l'optimisation hyperparam'etre . Le meilleur taux d'apprentissage dépend du problème à portée de main, ainsi que sur l'architecture du modèle en cours d'optimisation, et même sur l'état du modèle dans le processus d'optimisation en cours! Il y a des paquets même de logiciels dédiés à l'optimisation de hyperparam'etre tels que et la menthe verte hyperopt (juste quelques exemples, il y a beaucoup d'autres!).

En dehors de l'optimisation des hyperparam'etre à grande échelle, je voulais parler d'une technique qui est tout à fait commun pour la sélection des taux d'apprentissage qui n'a pas été mentionné jusqu'à présent. recuit est Simulé une technique pour l'optimisation d'un modèle dans lequel on commence avec un grand taux d'apprentissage et réduit progressivement le taux d'apprentissage à mesure que progresse d'optimisation . En général, vous optimisez votre modèle avec un grand taux d'apprentissage (0,1 environ), puis réduire progressivement ce taux, souvent par un ordre de grandeur (donc à 0,01, puis 0,001, 0,0001, etc.).

Ceci peut être combiné avec arrêt précoce pour optimiser le modèle avec un taux d'apprentissage aussi longtemps que des progrès sont réalisés, puis passer à un plus petit taux d'apprentissage une fois le progrès semble ralentir. Les taux d'apprentissage plus importants semblent aider le modèle localiser les régions du optima général, à grande échelle, tandis que les petits taux aident la mise au point sur un modèle optimum local particulier.

Copier-coller de ma thèse de maîtrise :

  • Si la perte ne diminue pas pendant plusieurs époques, le taux d'apprentissage est peut-être trop faible. Le processus d'optimisation peut aussi être coincé dans un minimum local.
  • perte étant NAN pourrait être due à des taux d'apprentissage trop élevé. Une autre raison est la division par zéro ou en prenant le logarithme de zéro.
  • Suivi de la mise à jour Poids: Andrej Karpathy proposé dans la 5ème conférence de CS231n pour suivre les mises à jour de poids pour vérifier si le taux d'apprentissage est bien choisi. Il suggère que la mise à jour de poids devrait être dans l'ordre de 10-3. Si la mise à jour de poids est trop élevé, le taux d'apprentissage doit être diminué. Si la mise à jour de poids est trop faible, le taux d'apprentissage doit être augmenté.
  • Taux d'apprentissage typiques sont [0,1, 0,00001]

Taux d'apprentissage, transformé en « pas de progression » au cours de notre processus d'itération, a été un sujet brûlant depuis des années, et il continuera.

Il y a trois options pour la taille de pas dans mon concernant:

  • Un est lié à " Heure ", et chaque dimension doit partager la même taille de pas. Vous pourriez avoir quelque chose comme remarqué
  

$ \ it \ huge \ bf \ frac {\ alpha} {\ sqrt {t}} $

lorsque t montre le numéro de l'itération courante, alpha est hyper paramètre

  • la suivante est reliée à gradient , et chaque dimension ont leur propre pas de progression. Vous pourriez avoir quelque chose comme remarqué
  

$ \ it \ huge \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} -  \ Frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} $

tout en alpha et bêta sont hyper paramètre, g démontre gradient

  • le dernier est le combinaison de temps et de gradient , et il devrait être comme
  

$ \ it \ huge \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} + \ frac {\ gamma} {\ sqrt {t}} $

ou

  

$ \ it \ huge \ frac {1} {\ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t - 1} {g_ {s} ^ 2}}} - \ frac {\ alpha} {\ beta + \ sqrt {\ sum_ {s = 1} ^ {t} {g_ {s} ^ 2}}}} * \ frac {\ gamma} {\ sqrt {t}} $

espère que cela vous aidera, bonne chance -)

Les réseaux de neurones sont souvent formés par descente de gradient sur les poids. Ce moyen à chaque itération, nous utilisons rétropropagation pour calculer la dérivée de la fonction de perte par rapport à chaque poids et de le soustraire de ce poids. Cependant, si vous essayez en fait que, les poids vont changer beaucoup trop chaque itération, ce qui les rendra « surcorrection » et la perte va augmenter / diverger. Ainsi, dans la pratique, les gens se multiplient généralement chaque dérivé par une petite valeur appelée le « taux d'apprentissage » avant soustraient de son poids correspondant.

Vous pouvez aussi penser à une fonction de perte de réseaux de neurones comme une surface, où chaque direction que vous pouvez déplacer en représente la valeur d'un poids. descente de gradient est comme prendre des sauts dans la direction actuelle de la pente, et le taux d'apprentissage est comme la longueur du saut que vous prenez.

Ajout à la réponse de David, dans fastai est où je trouve le concept de trouver le meilleur taux d'apprentissage pour que les données, en utilisant une architecture particulière.

Mais cette chose existe que sur fastai / pytorch. Récemment, quelqu'un a fait un keras de mise en œuvre.

qui à leur tour sont basés sur ces documents:

Hope this helps.

Permettez-moi de donner une brève introduction à une autre approche sur le choix du taux d'apprentissage, basé sur Jeremy Howard apprentissage en profondeur cours 1. Si vous voulez creuser plus profond, voir ce blogpost .

Le taux d'apprentissage proposé dans le cours de Jeremy Howard est basé sur une façon systématique d'essayer différents rythmes d'apprentissage et choisir celui qui rend la fonction de perte descendre le plus. Cela se fait par l'alimentation de nombreux lots à la méthode de descente de gradient mini-lot, et en augmentant le taux d'apprentissage chaque nouveau lot que vous nourrissez à la méthode. Lorsque le taux d'apprentissage est très faible, la fonction de perte diminuera très lentement. Lorsque le taux d'apprentissage est très grande, la fonction de perte augmentera. Inbetween ces deux régimes, il y a un taux d'apprentissage optimal pour lequel la fonction de perte diminue le plus rapide. Cela peut être vu dans la figure suivante:

Nous voyons que la perte diminue très rapidement lorsque le taux d'apprentissage est d'environ 10 $ ^ {- 3} $. En utilisant cette approche, nous avons une façon générale de choisir une approximation pour le meilleur taux d'apprentissage constant pour notre netowork.

Licencié sous: CC-BY-SA avec attribution
scroll top