Ho replicato i tuoi risultati usando Keras e ho ottenuto numeri molto simili, quindi non credo che tu stia facendo qualcosa di sbagliato.
Per interesse, ho corso per molte altre epoche per vedere cosa sarebbe successo. L'accuratezza dei risultati dei test e dei treni è rimasta piuttosto stabile. Tuttavia, i valori di perdita si sono allontanati ulteriormente nel tempo. Dopo circa 10 anni, ottenevo un'accuratezza del treno del 100%, un'accuratezza del test del 94,3%, con valori di perdita rispettivamente intorno a 0,01 e 0,22. Dopo 20.000 epoche, le precisioni erano appena cambiate, ma avevo una perdita di addestramento di 0,000005 e una perdita di prova di 0,36. Anche le perdite stavano ancora divergendo, anche se molto lentamente. A mio avviso, la rete è chiaramente troppo adatta.
Quindi la domanda potrebbe essere riformulata: perché, nonostante l'eccessivo adattamento, una rete neurale addestrata al set di dati MNIST si generalizza ancora apparentemente ragionevolmente bene in termini di precisione?
Vale la pena confrontare questa precisione del 94,3% con ciò che è possibile utilizzare approcci più ingenui.
Ad esempio, una semplice regressione lineare del softmax (essenzialmente la stessa rete neurale senza gli strati nascosti), fornisce una precisione stabile e rapida del 95,1% di treni e del 90,7% di test. Ciò dimostra che molti dati si separano linearmente: è possibile disegnare iperpiani nelle dimensioni di 784 e il 90% delle immagini delle cifre si troveranno all'interno della "scatola" corretta senza che sia necessario un ulteriore perfezionamento. Da questo, ci si potrebbe aspettare che una soluzione non lineare di overfit ottenga un risultato peggiore del 90%, ma forse non peggiore dell'80% perché forma in modo intuitivo un confine troppo complesso attorno ad esempio un "5" trovato all'interno della scatola per "3" assegnerà in modo errato solo una piccola quantità di questa ingenua 3 varietà. Ma siamo migliori di questa stima dell'80% inferiore rispetto al modello lineare.
Un altro possibile modello ingenuo è la corrispondenza dei modelli, o il più vicino. Questa è una ragionevole analogia con ciò che sta facendo l'eccessivo adattamento: crea un'area locale vicino a ciascun esempio di addestramento in cui prevede la stessa classe. Problemi di sovra-adattamento si verificano nello spazio tra i valori di attivazione che seguiranno qualunque sia la rete "naturalmente". Nota il caso peggiore, e ciò che vedi spesso nei diagrammi esplicativi, sarebbe una superficie quasi caotica e altamente curva che viaggia attraverso altre classificazioni. Ma in realtà potrebbe essere più naturale per la rete neurale interpolare più uniformemente tra i punti: ciò che effettivamente fa dipende dalla natura delle curve di ordine superiore che la rete combina in approssimazioni e da quanto bene si adattano già ai dati.
Ho preso in prestito il codice per una soluzione KNN da questo blog su MNIST con K Neighbours più vicini . L'uso di k = 1 - ovvero la scelta dell'etichetta del più vicino tra i 6000 esempi di allenamento semplicemente abbinando i valori dei pixel, fornisce una precisione del 91%. Il 3% in più che la rete neurale troppo allenata ottiene non sembra così impressionante data la semplicità del conteggio dei pixel match che KNN con k = 1 sta facendo.
Ho provato alcune varianti dell'architettura di rete, diverse funzioni di attivazione, diversi numeri e dimensioni di livelli - nessuno usando la regolarizzazione. Tuttavia, con 6000 esempi di allenamento, non sono riuscito a convincere nessuno di loro a adattarsi in un modo in cui la precisione del test è diminuita drasticamente. Anche la riduzione a soli 600 esempi di allenamento ha appena abbassato l'altopiano, con una precisione dell'86% circa.
La mia conclusione di base è che gli esempi MNIST hanno transizioni relativamente fluide tra le classi nello spazio delle caratteristiche e che le reti neurali possono adattarsi a queste e interpolare tra le classi in modo "naturale", dato i blocchi NN per l'approssimazione delle funzioni - senza aggiungere componenti ad alta frequenza a l'approssimazione che potrebbe causare problemi in uno scenario di overfit.
Potrebbe essere un esperimento interessante provare con un set di "MNIST rumoroso" in cui una quantità di rumore casuale o distorsione viene aggiunta sia agli esempi di allenamento che di test. Ci si aspetterebbe che i modelli regolarizzati funzionino bene su questo set di dati, ma forse in quello scenario l'eccessivo adattamento causerebbe problemi più evidenti con precisione.
Questo è da prima dell'aggiornamento con ulteriori test da parte di OP.
Dai tuoi commenti, dici che i risultati dei tuoi test sono tutti presi dopo aver eseguito una sola epoca. In sostanza, hai utilizzato l'interruzione anticipata, nonostante tu abbia scritto di no, perché hai interrotto l'allenamento il prima possibile in base ai dati di allenamento.
Suggerirei di correre per molte altre epoche se vuoi vedere come la rete sta davvero convergendo. Inizia con 10 epoche, considera di salire a 100. Un'epoca non è molte per questo problema, specialmente su 6000 campioni.
Sebbene non sia garantito un numero crescente di iterazioni per peggiorare la tua rete di quanto non abbia già fatto, non hai davvero dato molte possibilità e i tuoi risultati sperimentali finora non sono conclusivi.
In effetti, mi sarei quasi aspettato che i risultati dei dati dei tuoi test migliorassero dopo una seconda, terza epoca, prima di iniziare a staccarmi dalle metriche di allenamento con l'aumentare del numero di epoche. Mi aspetto anche che il tuo errore di formazione si avvicini allo 0% mentre la rete si avvicina alla convergenza.