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.