He replicado sus resultados usando Keras, y obtuve números muy similares, así que no creo que esté haciendo nada mal.
Por interés, corrí por muchas más épocas para ver qué pasaría. La precisión de la prueba y los resultados del tren se mantuvo bastante estable. Sin embargo, los valores de pérdida se separaron aún más con el tiempo. Después de 10 épocas más o menos, estaba obteniendo un 100% de precisión del tren, un 94,3% de precisión de prueba, con valores de pérdida de alrededor de 0,01 y 0,22 respectivamente. Después de 20,000 épocas, las precisiones apenas habían cambiado, pero tuve una pérdida de entrenamiento de 0.000005 y una pérdida de prueba de 0.36. Las pérdidas también seguían divergiendo, aunque muy lentamente. En mi opinión, la red es claramente demasiado adecuada.
Entonces, la pregunta podría reformularse: ¿Por qué, a pesar de un ajuste excesivo, una red neuronal capacitada para el conjunto de datos MNIST todavía se generaliza aparentemente razonablemente bien en términos de precisión?
Vale la pena comparar este 94.3% de precisión con lo que es posible usando enfoques más ingenuos.
Por ejemplo, una simple regresión lineal de softmax (esencialmente la misma red neuronal sin las capas ocultas), proporciona una precisión estable rápida de 95.1% de tren y 90.7% de prueba. Esto muestra que muchos de los datos se separan linealmente: puede dibujar hiperplanos en las dimensiones 784 y el 90% de las imágenes de dígitos se ubicarán dentro del "cuadro" correcto sin necesidad de refinamiento adicional. A partir de esto, puede esperar que una solución no lineal sobreajustada obtenga un resultado peor que el 90%, pero tal vez no peor que el 80% porque forma intuitivamente un límite demasiado complejo alrededor, por ejemplo, un "5" que se encuentra dentro de la caja para "3" solo asignará incorrectamente una pequeña cantidad de este ingenuo múltiple 3. Pero somos mejores que esta estimación aproximada del 80% del modelo lineal.
Otro posible modelo ingenuo es la coincidencia de plantillas, o el vecino más cercano. Esta es una analogía razonable de lo que está haciendo el sobreajuste: crea un área local cerca de cada ejemplo de entrenamiento donde predecirá la misma clase. Los problemas de sobreajuste ocurren en el espacio intermedio donde los valores de activación seguirán lo que haga la red "naturalmente". Tenga en cuenta que el peor de los casos, y lo que a menudo se ve en los diagramas explicativos, sería una superficie casi caótica muy curva que viaja a través de otras clasificaciones. Pero en realidad puede ser más natural que la red neuronal se interpole de manera más fluida entre los puntos; lo que realmente hace depende de la naturaleza de las curvas de orden superior que la red combina en aproximaciones, y qué tan bien se ajustan a los datos.
Tomé prestado el código para una solución KNN de este blog en MNIST con K vecinos más cercanos . El uso de k = 1, es decir, elegir la etiqueta más cercana de los 6000 ejemplos de entrenamiento simplemente haciendo coincidir los valores de píxeles, proporciona una precisión del 91%. El 3% extra que logra la red neuronal sobreentrenada no parece tan impresionante dada la simplicidad del recuento de coincidencias de píxeles que está haciendo KNN con k = 1.
Probé algunas variaciones de la arquitectura de red, diferentes funciones de activación, diferentes números y tamaños de capas, ninguna con regularización. Sin embargo, con 6000 ejemplos de entrenamiento, no pude lograr que ninguno de ellos se sobreajustara de una manera en que la precisión de la prueba disminuyó drásticamente. Incluso reducir a solo 600 ejemplos de entrenamiento solo hizo que la meseta fuera más baja, con una precisión de ~ 86%.
Mi conclusión básica es que los ejemplos de MNIST tienen transiciones relativamente suaves entre clases en el espacio de características, y que las redes neuronales pueden ajustarse a estas e interpolarse entre las clases de una manera "natural" dados los bloques de construcción NN para la aproximación de funciones, sin agregar componentes de alta frecuencia a la aproximación que podría causar problemas en un escenario de sobreajuste.
Podría ser un experimento interesante probar con un conjunto "MNIST ruidoso" donde se agrega una cantidad de ruido aleatorio o distorsión a los ejemplos de entrenamiento y prueba. Se esperaría que los modelos regularizados funcionen bien en este conjunto de datos, pero tal vez en ese escenario el ajuste excesivo causaría problemas más obvios con la precisión.
Esto es anterior a la actualización con más pruebas por parte de OP.
A partir de sus comentarios, usted dice que todos los resultados de su prueba se toman después de ejecutar una sola época. Esencialmente, ha utilizado la detención temprana, a pesar de haber escrito que no lo ha hecho, porque ha detenido el entrenamiento lo antes posible dados sus datos de entrenamiento.
Sugeriría que se ejecute durante muchas más épocas si desea ver cómo la red realmente está convergiendo. Comience con 10 épocas, considere subir a 100. Una época no es mucha para este problema, especialmente en 6000 muestras.
Aunque no se garantiza que un número creciente de iteraciones empeore su sobreajuste de red de lo que ya lo ha hecho, realmente no le ha dado muchas oportunidades, y sus resultados experimentales hasta ahora no son concluyentes.
De hecho, casi esperaría que los resultados de sus datos de prueba mejoren después de una segunda, tercera época, antes de comenzar a alejarse de las métricas de entrenamiento a medida que aumentan los números de la época. También esperaría que su error de entrenamiento se acerque al 0% a medida que la red se acerca a la convergencia.