J'en suis arrivé à une situation où les poids de mon réseau neuronal ne convergent pas même après 500 itérations. Mon réseau de neurones contient 1 couche d'entrée, 1 couche cachée et 1 couche de sortie. Ils sont environ 230 nœuds dans la couche d'entrée, 9 nœuds dans la couche cachée et 1 nœud de sortie dans la couche de sortie. Je voulais savoir si j'arrêtais tôt (disons arrêter mon entraînement de réseau neuronal après 100 itérations). Quel effet cela aura-t-il sur le modèle?
Je voulais également savoir quelle est la norme de travail de l'industrie si les poids dans le réseau neuronal ne convergent pas?
machine-learning
neural-networks
Apprenant
la source
la source
Réponses:
Il y a un certain nombre de questions à poser:
Que pouvez-vous donner à la manière des éphémérides? Pouvez-vous nous dire quelque chose sur la nature des données?
Vous pouvez créer un arbre de réseaux de neurones boosté par gradient.
Vous avez demandé ce qui se passe si vous arrêtez tôt.
Vous pouvez vous essayer. Exécutez 300x où vous commencez avec des poids initialisés aléatoires, puis arrêtez-vous à un nombre spécifié d'itérations, disons 100. À ce stade, calculez votre erreur d'ensemble, votre erreur de sous-ensemble de formation et votre erreur d'ensemble de tests. Répéter. Une fois que vous avez 300 valeurs pour vous dire quelle est l'erreur, vous pouvez avoir une idée de votre distribution d'erreurs à partir de 100 itérations d'apprentissage. Si vous le souhaitez, vous pouvez ensuite échantillonner cette distribution à plusieurs autres valeurs d'apprentissage. Je suggère 200, 500 et 1000 itérations. Cela vous donnera une idée de l'évolution de votre SNR au fil du temps. Un tracé du SNR par rapport au nombre d'itérations peut vous donner une idée des "falaises" ou "assez bien". Parfois, il y a des falaises où l'erreur s'effondre. Parfois, l'erreur est acceptable à ce stade.
Il faut des données "relativement simples" ou une chance "plutôt bonne" pour que votre système converge constamment en moins de 100 itérations. Les deux ne concernent pas la répétabilité et ne sont pas généralisables.
Pourquoi pensez-vous en termes de poids convergents et non d'erreur étant en dessous d'un seuil particulier. Avez-vous déjà entendu parler d'un paradoxe de vote? ( lien ) Lorsque vous avez des interactions cycliques dans votre système (comme la rétroaction dans les réseaux de neurones), vous pouvez avoir des paradoxes de vote - des changements couplés. Je ne sais pas si les poids seuls sont un indicateur suffisant pour la convergence du réseau.
Vous pouvez considérer les poids comme un espace. Il a plus de 3 dimensions, mais c'est toujours un espace. Dans le "centroïde" de cet espace se trouve votre région "la mieux adaptée". Loin du centroïde est un ajustement moins bon. Vous pouvez considérer le réglage actuel de vos poids comme un point unique dans cet espace.
Maintenant, vous ne savez pas où se trouve réellement le "bien". Ce que vous avez, c'est une "pente" locale. Vous pouvez effectuer une descente de gradient vers le «mieux» local compte tenu de l'endroit où se trouve votre point en ce moment. Cela ne vous dit pas mieux "l'universel", mais le local vaut mieux que rien.
Alors vous commencez à itérer, en descendant vers cette vallée de paresse. Vous répétez jusqu'à ce que vous pensiez avoir terminé. Peut-être que la valeur de vos poids est importante. Peut-être qu'ils rebondissent partout. Peut-être que le calcul "prend trop de temps". Tu veux avoir fini.
Alors, comment savez-vous si votre situation est "assez bonne"?
Voici un test rapide que vous pourriez faire:
Prendre 30 sous-ensembles aléatoires uniformes des données (comme quelques pour cent des données chacun) et recycler le réseau sur eux. Cela devrait être beaucoup plus rapide. Observez le temps qu'il leur faut pour converger et comparez-le avec l'historique de convergence du grand ensemble. Testez l'erreur du réseau pour l'ensemble des données sur ces sous-ensembles et voyez comment cette répartition des erreurs se compare à votre grosse erreur. Maintenant, augmentez les tailles de sous-ensemble jusqu'à peut-être 5% de vos données et répétez. Voyez ce que cela vous apprend.
Il s'agit d'une variation sur l'optimisation des essaims de particules (voir référence) modelée sur la façon dont les abeilles prennent les décisions basées sur le dépistage.
Vous avez demandé ce qui se passe si les poids ne convergent pas.
Les réseaux de neurones sont un outil. Ils ne sont pas le seul outil. Il y en a d'autres. J'envisagerais d'en utiliser un.
Je travaille en termes de critères d'information, donc je regarde à la fois les poids (nombre de paramètres) et l'erreur. Vous pourriez en essayer un.
Il existe certains types de prétraitement qui peuvent être utiles. Centre et échelle. Rotation à l'aide des principaux composants. Si vous regardez les valeurs propres dans vos composants principaux, vous pouvez utiliser des règles de tracé skree pour estimer la dimension de vos données. Réduire la dimension peut améliorer la convergence. Si vous savez quelque chose sur la «physique sous-jacente», vous pouvez lisser ou filtrer les données pour éliminer le bruit. Parfois, la convergence concerne le bruit dans le système.
Je trouve intéressante l'idée de la détection compressée . Il peut permettre un sous-échantillonnage radical de certains systèmes sans perte de généralisation. J'examinerais certaines statistiques et distributions de vos données rééchantillonnées par bootstrap pour déterminer si et à quel niveau de sous-échantillonnage l'ensemble de formation devient représentatif. Cela vous donne une certaine mesure de la «santé» de vos données.
Parfois, c'est une bonne chose qu'ils ne convergent pas
Avez-vous déjà entendu parler d'un paradoxe de vote? Vous pourriez le considérer comme un cousin plus élevé dans une impasse à double sens. C'est une boucle. Dans un paradoxe de vote à 2, la première personne veut le candidat "A" tandis que la seconde veut le candidat "B" (ou non-A ou autre). La partie importante est que vous pouvez la considérer comme une boucle.
Les boucles sont importantes dans les réseaux de neurones. Retour d'information. Récursivité. Cela a permis au perceptron de résoudre les problèmes de type XOR. Cela fait des boucles, et parfois les boucles peuvent agir comme le paradoxe du vote, où elles continueront de changer de poids si vous avez des itérations infinies. Ils ne sont pas destinés à converger car ce n'est pas le poids individuel qui importe mais l'interaction des poids dans la boucle.
Remarque:
L'utilisation de seulement 500 itérations peut être un problème. J'ai eu des NN où 10 000 itérations étaient à peine suffisantes. Le nombre d'itérations pour être "suffisant" dépend, comme je l'ai déjà indiqué, des données, de la topologie NN, des fonctions de transfert de nœuds, de la fonction d'apprentissage / formation et même du matériel informatique. Vous devez avoir une bonne compréhension de la façon dont ils interagissent tous avec votre nombre d'itérations avant de dire qu'il y a eu «suffisamment» ou «trop» d'itérations. D'autres considérations telles que le temps, le budget et ce que vous voulez faire avec le NN lorsque vous avez terminé la formation doivent également être prises en compte.
Chen, RB, Chang, SP, Wang, W. et Wong, WK (2011, septembre). Optimal Experimental Designs via Particle Swarm Optimization Methods (preprint), consulté le 25 mars 2012 sur http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf
la source
Pour moi, il est difficile de dire quel pourrait être votre problème. Un point à considérer est l'implémentation concrète que vous utilisez. Concrètement, quel algorithme d'optimisation. Si votre réseau met beaucoup de temps à converger et que vous utilisez une forme ou une autre de descente de gradient stochastique (ou mini-lot), il se peut que votre réseau se trouve dans un plateau (une région où la fonction énergie / erreur est très plate). de sorte que les gradients sont très faibles et donc la convergence).
Si c'est le cas, veuillez vérifier l'amplitude des gradients pour voir si c'est le cas. Il existe un certain nombre de techniques différentes pour résoudre ce problème, comme l'ajout d'un élan au gradient.
Pour un aperçu détaillé des techniques et astuces du métier, jetez un œil à cet article (à lire absolument) de Yann LeCun .
la source
Assurez-vous que vos dégradés ne dépassent pas les limites ou il est également possible que les dégradés deviennent nuls. Ceci est populairement connu sous le nom d'explosion des gradients et de disparition des problèmes de gradients.
Une solution possible consiste à utiliser un optimiseur adaptatif tel que AdaGrad ou Adam.
J'avais rencontré un problème similaire lors de la formation d'un simple réseau de neurones lorsque je commençais avec les réseaux de neurones.
Quelques références: https://en.wikipedia.org/wiki/Vanishing_gradient_problem https://www.youtube.com/watch?v=VuamhbEWEWA
la source
J'ai eu de nombreux ensembles de données qui ont convergé lentement - probablement parce que les entrées étaient fortement corrélées.
J'ai écrit mon propre analyseur C ++ NN, et avec lui, je peux faire varier le taux d'apprentissage pour chaque poids. Pour chaque poids à chaque bord, je fais deux choses qui aident certains.
Tout d'abord, je multiplie chaque taux d'apprentissage par un nombre aléatoire uniformément réparti à partir de [0,1]. Je suppose que cela aide à résoudre le problème de corrélation.
L'autre astuce est que je compare le gradient actuel avec le gradient précédent à chaque bord. Si le gradient à peine abaissé en pourcentage, je multiplie par 5 le taux d'apprentissage pour ce bord.
Je n'ai aucune justification particulière pour aucun de ces trucs, mais ils semblent fonctionner assez bien.
J'espère que cela t'aides.
la source