Je travaille actuellement sur la mise en œuvre de la descente de gradient stochastique SGD
, pour les réseaux neuronaux utilisant la rétrodiffusion, et bien que je comprenne son objectif, j'ai quelques questions sur la manière de choisir des valeurs pour le taux d'apprentissage.
- Le taux d'apprentissage est-il lié à la forme du gradient d'erreur, puisqu'il détermine le taux de descente?
- Si oui, comment utilisez-vous ces informations pour éclairer votre décision concernant une valeur?
- Si ce n'est pas le type de valeurs que je devrais choisir et comment devrais-je les choisir?
- Il semble que vous souhaitiez éviter les dépassements avec de petites valeurs, mais comment en choisir une de telle sorte que vous ne restiez pas coincé dans les minima locaux ou que vous mettiez trop de temps à descendre?
- Est-il judicieux d’avoir un taux d’apprentissage constant, ou devrais-je utiliser une métrique pour modifier sa valeur à mesure que je me rapproche d’un minimum dans le gradient?
En bref: comment choisir le taux d’apprentissage pour SGD?
Vous trouverez ci-dessous une très bonne note (page 12) sur le taux d’apprentissage dans Neural Nets (Back Propagation) par Andrew Ng. Vous trouverez des détails relatifs au taux d'apprentissage.
http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf
Pour votre quatrième point, vous avez raison, il faut normalement choisir un taux d’apprentissage «équilibré», qui ne doit ni dépasser ni converger trop lentement. On peut tracer le taux d’apprentissage par rapport à la descente de la fonction de coût pour diagnostiquer / ajuster. En pratique, Andrew utilise normalement l'algorithme L-BFGS (mentionné à la page 12) pour obtenir un taux d'apprentissage "assez bon".
la source
La sélection d'un taux d'apprentissage est un exemple de "méta-problème" connu sous le nom d' optimisation d'hyperparamètre . Le meilleur taux d'apprentissage dépend du problème à résoudre, de l'architecture du modèle à optimiser, voire de l'état du modèle dans le processus d'optimisation en cours! Il existe même des progiciels dédiés à l'optimisation d'hyperparamètre tels que la menthe verte et l' hyperopt (quelques exemples, il y en a beaucoup d'autres!).
Outre l'optimisation à grande échelle de l'hyperparamètre, je voulais mentionner une technique assez courante pour la sélection des vitesses d'apprentissage qui n'a pas encore été mentionnée. Le recuit simulé est une technique d'optimisation d'un modèle dans lequel on commence avec un taux d'apprentissage élevé et réduit progressivement le taux d'apprentissage au fur et à mesure que l'optimisation progresse. En général, vous optimisez votre modèle avec un taux d’apprentissage élevé (0,1 ou plus), puis vous le réduisez progressivement, souvent d’un ordre de grandeur (donc à 0,01, puis à 0,001, à 0,0001, etc.).
Cela peut être combiné avec un arrêt précoce pour optimiser le modèle avec un taux d'apprentissage unique tant que des progrès sont réalisés, puis passer à un taux d'apprentissage inférieur lorsque les progrès semblent ralentir. Les taux d'apprentissage plus élevés semblent aider le modèle à localiser les régions d'optima généraux à grande échelle, tandis que les taux plus faibles permettent au modèle de se concentrer sur un optimum local particulier.
la source
Copié-collé de ma thèse de maîtrise :
la source
Le taux d’apprentissage, transformé en «taille de pas» au cours de notre processus d’itération, est un sujet brûlant depuis des années et il continuera.
Il y a trois options de taille de pas dans mon sujet:
alors que t montre le nombre d'itérations actuel, alpha est hyper paramètre
alors que alpha et bêta sont hyper-paramètres, g montre le gradient
ou
J'espère que cela vous aidera, bonne chance -)
la source
Les réseaux de neurones sont souvent formés par descente de gradient sur les poids. Cela signifie qu'à chaque itération, nous utilisons la rétroprojection pour calculer la dérivée de la fonction de perte par rapport à chaque poids et le soustraire de ce poids. Cependant, si vous essayez réellement cela, les poids changeront beaucoup trop à chaque itération, ce qui les rendra «trop corrects» et la perte augmentera / divergera. Ainsi, dans la pratique, les gens multiplient habituellement chaque dérivé par une petite valeur appelée «taux d'apprentissage» avant de le soustraire de son poids correspondant.
Vous pouvez également considérer une fonction de perte de réseaux de neurones comme une surface, où chaque direction dans laquelle vous pouvez vous déplacer représente la valeur d'un poids. La descente de gradient équivaut à faire des sauts dans la direction actuelle de la pente, et le taux d'apprentissage correspond à la longueur du saut que vous faites.
la source
En ajoutant à la réponse de David, je trouve dans fastai le concept de recherche du meilleur taux d'apprentissage pour ces données, en utilisant une architecture particulière.
Mais cette chose n'existe que sur fastai / pytorch. Récemment, quelqu'un a réalisé une implémentation de keras .
qui à leur tour sont basés sur ces papiers:
J'espère que cela t'aides.
la source
Laissez-moi vous donner une brève introduction à une autre approche sur le choix du taux d’apprentissage, basée sur le cours Deep Learning 1 de Jeremy Howard . Si vous voulez aller plus loin, consultez ce billet de blog .
Le taux d'apprentissage proposé dans le cours de Jeremy Howard repose sur une méthode systématique pour essayer différents taux d'apprentissage et choisir celui qui réduit le plus la fonction de perte. Pour ce faire, indiquez de nombreux lots dans la méthode de descente sur gradient en mini-lots et augmentez le taux d’apprentissage à chaque nouveau lot alimenté selon 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 élevé, la fonction de perte augmentera. Entre ces deux régimes, il existe un taux d’apprentissage optimal pour lequel la fonction de perte décroît le plus rapidement. Ceci peut être vu dans la figure suivante:
Nous constatons que la perte diminue très rapidement lorsque le taux d’apprentissage est d’environ . En utilisant cette approche, nous avons un moyen général de choisir une approximation pour obtenir le meilleur taux d’apprentissage constant pour notre réseau.10−3
la source