Pourquoi le taux d'apprentissage fait-il monter en flèche les poids de mon réseau de neurones?

9

J'utilise tensorflow pour écrire des réseaux neuronaux simples pour un peu de recherche et j'ai eu beaucoup de problèmes avec les poids «nan» pendant l'entraînement. J'ai essayé de nombreuses solutions différentes comme changer l'optimiseur, changer la perte, la taille des données, etc. mais en vain. Enfin, j'ai remarqué qu'un changement dans le taux d'apprentissage a fait une différence incroyable dans mes poids.

En utilisant un taux d'apprentissage de 0,001 (que je pensais être assez conservateur), la fonction de minimisation augmenterait de façon exponentielle la perte. Après une époque, la perte pouvait passer d'un nombre de milliers à un billion puis à l'infini («nan»). Lorsque j'ai abaissé le taux d'apprentissage à .0001, tout a bien fonctionné.

1) Pourquoi un seul ordre de grandeur a-t-il un tel effet?

2) Pourquoi la fonction minimiser remplit-elle littéralement l'opposé de sa fonction et maximise-t-elle la perte? Il me semble que cela ne devrait pas se produire, quel que soit le taux d'apprentissage.

abeoliver
la source
Pouvez-vous dire comment avez-vous initialisé vos poids?
Himanshu Rai
Je suggère d'essayer le solveur Adam. Il semble être mieux comporté et une meilleure valeur par défaut, et vous pourriez être en mesure d'utiliser les taux d'apprentissage par défaut pour cela.
DW

Réponses:

9

Le chapitre 8 du Deep Learning vous sera peut-être utile. Dans ce document, les auteurs discutent de la formation de modèles de réseaux de neurones. C'est très complexe, donc je ne suis pas surpris que vous rencontriez des difficultés.

Une possibilité (outre l'erreur utilisateur) est que votre problème est très mal conditionné. Les méthodes de descente de gradient n'utilisent que les premières informations dérivées (gradient) lors du calcul d'une mise à jour. Cela peut poser des problèmes lorsque la dérivée seconde (la Hesse) est mal conditionnée.

Citant les auteurs:

H

On pense généralement que le problème de mauvais conditionnement est présent dans les problèmes d'entraînement du réseau neuronal. Un mauvais conditionnement peut se manifester en provoquant le blocage de SGD dans le sens où même de très petites étapes augmentent la fonction de coût. [je souligne]

Les auteurs fournissent une dérivation simple pour montrer que cela peut être le cas. En utilisant la descente de gradient, la fonction de coût devrait changer (au second ordre) en

ε22gTHg-εgTg

gHεεε

vbox
la source
2
Il me semble que cette réponse quora offre une explication assez intuitive au mauvais conditionnement de la Hesse.
Oren Milman
3

1) Pourquoi un seul ordre de grandeur a-t-il un tel effet?

2) Pourquoi la fonction minimiser remplit-elle littéralement l'opposé de sa fonction et maximise-t-elle la perte? Il me semble que cela ne devrait pas se produire, quel que soit le taux d'apprentissage.

Il y a deux principales raisons. Premièrement, vous n'utilisez pas les mêmes données à la première étape qu'à la seconde. Si, dans la première étape, le modèle apprend ces valeurs et tombe dans un minimum local, il est très probable qu'il produira une perte plus importante pour les nouvelles valeurs.

La deuxième raison est la forme de la fonction de coût. Vous essayez de minimiser la valeur par petits pas, la longueur de ces pas est donnée par deux facteurs: le gradient et le taux d'apprentissage. Imaginez que votre fonction ressemble à x ^ 2. Si vos valeurs sont proches de 0, le gradient va être plus petit que si c'était plus loin, mais si votre taux d'apprentissage est grand alors, au lieu de vous rapprocher de 0, vous augmentez réellement l'erreur parce que votre nouveau point basé sur la notation et la le taux d'apprentissage est supérieur à 0 à l'étape précédente. Et cela peut arriver plusieurs fois.

Jetez un œil à ce lien: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html

Si vous voyez les chiffres avec alpha 0,01 et alpha 0,12, vous verrez comment dans le premier chiffre le taux d'apprentissage est petit et donc le gradient se rapproche du minimum mais dans le second cas le taux d'apprentissage est si grand que le gradient se déplace à chaque étape.

jorgemf
la source
1
En ce qui concerne la deuxième raison - cette réponse démontre (en utilisant des fonctions simples) quand la descente du gradient peut diverger. Cette réponse contient également du code Python afin que vous puissiez expérimenter et voir comment la descente en gradient se comporte dans différents scénarios ..
Oren Milman