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.
Réponses:
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:
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
la source
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.
la source