Choisir un taux d'apprentissage

85

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?

ragingSloth
la source

Réponses:

69
  • Le taux d'apprentissage est-il lié à la forme du gradient d'erreur, puisqu'il détermine le taux de descente?

    • En clair SGD, la réponse est non. On utilise un taux d’apprentissage global indifférent au gradient d’erreur. Cependant, l’intuition à laquelle vous vous rendez a inspiré diverses modifications de la règle de mise à jour de SGD.
  • Si oui, comment utilisez-vous ces informations pour éclairer votre décision concernant une valeur?

    • Adagrad est le plus connu d'entre eux et met à l'échelle le taux d'apprentissage global η sur chaque dimension en fonction de la norme l2 de l'historique du gradient d'erreur gt sur chaque dimension:

      entrez la description de l'image ici

    • Adadelta est un autre algorithme d’entraînement qui utilise à la fois l’historique du gradient d’erreur tel que adagrad et l’historique de la mise à jour du poids, et présente l’avantage de ne pas avoir à définir un taux d’apprentissage du tout .

  • Si ce n'est pas le type de valeurs que je devrais choisir et comment devrais-je les choisir?

    • Définir les vitesses d'apprentissage pour la SGD simple dans les réseaux neuronaux consiste généralement à commencer par une valeur raisonnable telle que 0,01, puis à effectuer une validation croisée pour trouver une valeur optimale. Les valeurs typiques varient sur quelques ordres de grandeur de 0,0001 à 1.
  • 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?

    • Habituellement, la valeur qui convient le mieux est proche du taux d’apprentissage stable le plus élevé et le taux d’appauvrissement / annelage (linéaire ou exponentiel) est utilisé au cours de la formation. La raison derrière cela est qu’il ya au début un signal d’apprentissage clair, de sorte que les mises à jour agressives encouragent l’exploration, tandis que plus tard, les vitesses d’apprentissage plus faibles permettent une exploitation plus délicate de la surface d’erreur locale.
indico
la source
1
En pratique, vous utiliserez un taux d’apprentissage avec adadelta. Sur certains problèmes, cela ne fonctionne pas sans.
Bayer
Il convient de noter que l' optimiseur Adam est plus habituel qu'Adagrad ou Adadelta ces jours-ci.
E_net4 est toujours en grève le
22

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".

BrNguyen
la source
9

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.

lmjohns3
la source
6

Copié-collé de ma thèse de maîtrise :

  • Si la perte ne diminue pas à plusieurs époques, le taux d’apprentissage peut être trop faible. Le processus d'optimisation peut également être bloqué dans un minimum local.
  • La perte en tant que NAN pourrait être due à des taux d’apprentissage trop élevés. Une autre raison est la division par zéro ou en prenant le logarithme de zéro.
  • Suivi de la mise à jour du poids: Andrej Karpathy a proposé dans la cinquième leçon de CS231n de suivre les mises à jour du poids afin de vérifier si le taux d’apprentissage est bien choisi. Il suggère que la mise à jour du poids devrait être de l'ordre de 10−3. Si la mise à jour du poids est trop élevée, le taux d'apprentissage doit être diminué. Si la mise à jour du poids est trop faible, le taux d'apprentissage doit être augmenté.
  • Les taux d'apprentissage typiques sont en [0.1, 0.00001]
Martin Thoma
la source
4

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:

  • L'une est liée au " temps " et chaque dimension doit partager la même taille de pas. Vous avez peut-être remarqué quelque chose comme

αt

alors que t montre le nombre d'itérations actuel, alpha est hyper paramètre

  • la suivante est liée au dégradé et chaque dimension a sa propre taille de pas. Vous avez peut-être remarqué quelque chose comme

1αβ+s=1t1gs2αβ+s=1tgs2

alors que alpha et bêta sont hyper-paramètres, g montre le gradient

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

1αβ+s=1t1gs2αβ+s=1tgs2+γt

ou

1αβ+s=1t1gs2αβ+s=1tgs2γt

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

Joe
la source
Avez-vous une référence pour cela?
Jon
Vous pouvez vous référer à la partie taux d'apprentissage de FTRL, nous pouvons la formuler avec TIME et GRADIENT.
Joe
3

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.

Dileep Balineni
la source
3

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.

Tenshi
la source
2

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:

entrez la description de l'image ici

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.103

David Masip
la source