J'ai un réseau neuronal simple (NN) pour la classification MNIST. Il comprend 2 couches cachées, chacune avec 500 neurones. Les dimensions du NN sont donc: 784-500-500-10. ReLU est utilisé dans tous les neurones, softmax est utilisé en sortie et l'entropie croisée est la fonction de perte.
Ce qui m'intrigue, c'est pourquoi le sur-ajustement ne semble pas dévaster le NN?
Considérez le nombre de paramètres (poids) du NN. C'est approximativement
Notez que dans les 10 expériences (chacune avec une initialisation aléatoire indépendante des paramètres), l'erreur de test ne différait de l'erreur d'apprentissage que d'env. 4%, même si j'ai utilisé des exemples 6K pour entraîner les paramètres 647K. La dimension VC du réseau neuronal est de l'ordre deau moins, oùest le nombre d'arêtes (poids). Alors pourquoi l'erreur de test n'était-elle pas misérablement plus élevée (par exemple 30% ou 50%) que l'erreur de formation? J'apprécierais grandement que quelqu'un puisse indiquer où j'ai raté. Merci beaucoup!
[EDITS 2017/6/30]
Pour clarifier les effets d'un arrêt précoce, j'ai refait les 10 expériences, chacune maintenant avec 20 époques d'entraînement. Les taux d'erreur sont indiqués dans la figure ci-dessous:
L'écart entre le test et l'erreur de formation a augmenté à mesure que davantage d'époques sont utilisées dans la formation. Cependant, la queue de l'erreur de test est restée presque plate après que l'erreur d'apprentissage a été ramenée à zéro. De plus, j'ai vu des tendances similaires pour d'autres tailles de l'ensemble d'entraînement. Le taux d'erreur moyen à la fin de 20 époques de formation est comparé à la taille de la formation définie ci-dessous:
Donc, le sur-ajustement se produit, mais cela ne semble pas dévaster le NN. Compte tenu du nombre de paramètres (647K) dont nous avons besoin pour le train et du nombre d'exemples de formation que nous avons (<60K), la question demeure: pourquoi le sur-ajustement ne rend-il pas facilement le NN inutile? De plus, est-ce vrai pour le ReLU NN pour toutes les tâches de classification avec sortie softmax et fonction objectif à entropie croisée? Quelqu'un a-t-il vu un contre-exemple?
Réponses:
J'ai reproduit vos résultats en utilisant Keras, et j'ai obtenu des chiffres très similaires, donc je ne pense pas que vous faites quelque chose de mal.
Par intérêt, j'ai couru pour bien d'autres époques pour voir ce qui allait se passer. La précision des résultats des tests et des trains est restée assez stable. Cependant, les valeurs de perte se sont éloignées au fil du temps. Après environ 10 époques, j'obtenais une précision de train de 100%, une précision de test de 94,3% - avec des valeurs de perte d'environ 0,01 et 0,22 respectivement. Après 20 000 époques, les précisions avaient à peine changé, mais j'avais une perte d'entraînement de 0,000005 et une perte de test de 0,36. Les pertes étaient également toujours divergentes, bien que très lentement. À mon avis, le réseau est clairement trop adapté.
Donc, la question pourrait être reformulée: pourquoi, malgré un ajustement excessif, un réseau de neurones formé à l'ensemble de données du MNIST se généralise-t-il encore raisonnablement bien en termes de précision?
Il vaut la peine de comparer cette précision de 94,3% avec ce qui est possible en utilisant des approches plus naïves.
Par exemple, une régression linéaire simple softmax (essentiellement le même réseau de neurones sans les couches cachées), donne une précision stable rapide de 95,1% de train et 90,7% de test. Cela montre que beaucoup de données se séparent linéairement - vous pouvez dessiner des hyperplans dans les dimensions 784 et 90% des images numériques se trouveront à l'intérieur de la "boîte" correcte sans aucun raffinement supplémentaire requis. De cela, vous pourriez vous attendre à ce qu'une solution non linéaire surajustée obtienne un résultat pire que 90%, mais peut-être pas pire que 80%, car formant intuitivement une frontière trop complexe autour, par exemple, d'un "5" trouvé à l'intérieur de la boîte pour "3" n'affectera qu'à tort une petite quantité de ce collecteur naïf 3. Mais nous sommes meilleurs que cette estimation inférieure de 80% du modèle linéaire.
Un autre modèle naïf possible est la correspondance de modèles ou le plus proche voisin. C'est une analogie raisonnable avec ce que fait le sur-ajustement - cela crée une zone locale proche de chaque exemple de formation où il prédira la même classe. Des problèmes de sur-ajustement se produisent dans l'espace intermédiaire où les valeurs d'activation suivront quoi que le réseau fasse "naturellement". Notez que le pire des cas, et ce que vous voyez souvent dans les diagrammes explicatifs, serait une surface presque chaotique très incurvée qui parcourt d'autres classifications. Mais en fait, il peut être plus naturel pour le réseau de neurones d'interpoler plus facilement entre les points - ce qu'il fait dépend en fait de la nature des courbes d'ordre supérieur que le réseau combine en approximations et de la façon dont celles-ci correspondent déjà aux données.
J'ai emprunté le code d'une solution KNN à ce blog sur MNIST avec K Nearest Neighbors . L'utilisation de k = 1 - c'est-à-dire le choix de l'étiquette la plus proche parmi les 6000 exemples d'apprentissage juste en faisant correspondre les valeurs des pixels, donne une précision de 91%. Les 3% supplémentaires que le réseau neuronal surentraîné réalise ne semblent pas tout à fait aussi impressionnants étant donné la simplicité du comptage de correspondance de pixels que fait KNN avec k = 1.
J'ai essayé quelques variantes de l'architecture réseau, différentes fonctions d'activation, différents nombres et tailles de couches - aucune n'utilisant la régularisation. Cependant, avec 6000 exemples d'entraînement, je n'ai pu obtenir aucun d'eux pour s'adapter à une manière où la précision du test a chuté de façon spectaculaire. Même réduire à seulement 600 exemples d'entraînement vient de réduire le plateau, avec une précision d'environ 86%.
Ma conclusion de base est que les exemples MNIST ont des transitions relativement douces entre les classes dans l'espace des caractéristiques, et que les réseaux de neurones peuvent s'adapter à ces derniers et interpoler entre les classes de manière "naturelle" compte tenu des blocs de construction NN pour l'approximation des fonctions - sans ajouter de composants haute fréquence à l'approximation qui pourrait provoquer des problèmes dans un scénario de sur-ajustement.
Ce pourrait être une expérience intéressante d'essayer avec un ensemble "MNIST bruyant" où une quantité de bruit aléatoire ou de distorsion est ajoutée à la fois aux exemples de formation et de test. On s'attendrait à ce que les modèles régularisés fonctionnent correctement sur cet ensemble de données, mais peut-être que dans ce scénario, le sur-ajustement causerait des problèmes de précision plus évidents.
C'est d'avant la mise à jour avec d'autres tests par OP.
D'après vos commentaires, vous dites que vos résultats de test sont tous pris après avoir exécuté une seule époque. Vous avez essentiellement utilisé un arrêt précoce, bien que vous n'ayez pas écrit, car vous avez arrêté la formation le plus tôt possible compte tenu de vos données de formation.
Je suggérerais de courir pour beaucoup plus d'époques si vous voulez voir comment le réseau converge vraiment. Commencez avec 10 époques, envisagez de monter à 100. Une époque n'est pas beaucoup pour ce problème, en particulier sur 6000 échantillons.
Bien que l'augmentation du nombre d'itérations ne soit pas garantie d'aggraver votre réseau comme il ne l'a déjà fait, vous ne lui avez pas vraiment donné beaucoup de chance, et vos résultats expérimentaux jusqu'à présent ne sont pas concluants.
En fait, je m'attendrais à moitié à ce que les résultats de vos données de test s'améliorent à la suite d'une 2e, 3e époque, avant de commencer à s'éloigner des mesures d'entraînement à mesure que le nombre d'époques augmente. Je m'attendrais également à ce que votre erreur de formation approche de 0% à mesure que le réseau approchait de la convergence.
la source
En général, les gens pensent au surajustement en fonction de la complexité du modèle. Ce qui est génial, car la complexité du modèle est l'une des choses que vous pouvez contrôler. En réalité, il existe de nombreux autres facteurs liés au problème de surapprentissage: - nombre d'échantillons de formation - nombre d'itérations - la dimension de l'entrée (dans votre cas, je crois que c'est la raison pour laquelle vous n'êtes pas en surapprentissage) - le difficulté du problème: si vous avez un problème simple, séparable linéairement, alors ne vous inquiétez pas trop du sur-ajustement.
Il existe une démo visuelle fournie par google tensorflow qui vous permet de modifier tous ces paramètres. http://playground.tensorflow.org Vous pouvez changer votre problème d'entrée, le nombre d'échantillons, la dimension de votre entrée, le réseau, le nombre d'itérations.
J'aime penser au sur-ajustement comme sur-ajustement = grands modèles + fonctionnalités indépendantes
la source