Tengo una red neuronal simple (NN) para la clasificación MNIST. Incluye 2 capas ocultas, cada una con 500 neuronas. Por lo tanto, las dimensiones de la NN son: 784-500-500-10. ReLU se usa en todas las neuronas, softmax se usa en la salida y la función de pérdida es la entropía cruzada.
Lo que me desconcierta es por qué el sobreajuste no parece devastar a la NN.
Considere el número de parámetros (pesos) de la NN. Es aproximadamente Sin embargo, en mi experimento, utilicé solo ejemplos (una décima parte del conjunto de entrenamiento MNIST) para entrenar al NN. (Esto es solo para mantener el tiempo de ejecución corto. El error de entrenamiento y prueba disminuiría considerablemente si usara más ejemplos de entrenamiento). Repetí el experimento 10 veces. Se utiliza el descenso de gradiente estocástico simple (sin soporte RMS ni impulso); no se usó regularización / abandono / parada temprana. El error de entrenamiento y el error de prueba reportados fueron:
Tenga en cuenta que en los 10 experimentos (cada uno con una inicialización de parámetros aleatorios independiente), el error de prueba difirió del error de entrenamiento solo en aprox. 4%, aunque utilicé ejemplos de 6K para entrenar parámetros de 647K. La dimensión VC de la red neuronal está en el orden de al menos, dondees el número de aristas (pesos). Entonces, ¿por qué el error de prueba no fue miserablemente mayor (por ejemplo, 30% o 50%) que el error de entrenamiento? Le agradecería mucho si alguien puede señalar dónde me perdí. ¡Muchas gracias!
[EDICIONES 2017/6/30]
Para aclarar los efectos de la detención temprana, volví a hacer los 10 experimentos, cada uno con 20 épocas de entrenamiento. Las tasas de error se muestran en la siguiente figura:
La brecha entre la prueba y el error de entrenamiento aumentó a medida que se utilizaron más épocas en el entrenamiento. Sin embargo, la cola del error de prueba se mantuvo casi plana después de que el error de entrenamiento se llevara a cero. Además, vi tendencias similares para otros tamaños del conjunto de entrenamiento. La tasa de error promedio al final de 20 épocas de entrenamiento se representa en función del tamaño del conjunto de entrenamiento a continuación:
Por lo tanto, se produce un sobreajuste, pero no parece devastar a la NN. Teniendo en cuenta la cantidad de parámetros (647K) que necesitamos para el entrenamiento y la cantidad de ejemplos de entrenamiento que tenemos (<60K), la pregunta sigue siendo: ¿por qué el sobreajuste fácilmente hace que el NN sea inútil? Además, ¿es esto cierto para el ReLU NN para todas las tareas de clasificación con salida softmax y función objetivo de entropía cruzada? ¿Alguien ha visto un contraejemplo?
Respuestas:
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.
fuente
En general, las personas piensan en el sobreajuste en función de la complejidad del modelo. Lo cual es genial, porque la complejidad del modelo es una de las cosas que puedes controlar. En realidad, hay muchos otros factores que están relacionados con el problema del sobreajuste: - número de muestras de entrenamiento - número de iteraciones - la dimensión de la entrada (en su caso, creo que esta es la razón por la que no está sobreajustando) - el dificultad del problema: si tiene un problema simple, linealmente separable, entonces no debe preocuparse demasiado por el sobreajuste.
Hay una demostración visual proporcionada por google tensorflow que le permite cambiar todos estos parámetros. http://playground.tensorflow.org Puede cambiar su problema de entrada, la cantidad de muestras, la dimensión de su entrada, la red, la cantidad de iteraciones.
Me gusta pensar en el sobreajuste como sobreajuste = modelos grandes + características no relacionadas
fuente