¿Por qué mi CNN proporciona una buena precisión en los datos de entrenamiento y prueba (división 80-20 del total de datos de entrenamiento) pero falla miserablemente en los datos de validación (no vistos)?

Este parece ser un caso clásico de sobreajuste. El sobreajuste a menudo se observa en los modelos de aprendizaje profundo. Puede considerar probar una de varias formas de abordar el problema. Sin embargo, con el tiempo, podrá tomar intuitivamente una decisión sobre lo que salió mal.

  1. Teniendo en cuenta la cantidad de datos que tiene, su modelo puede ser demasiado complicado para poder generalizar bien las salidas. Sugeriría simplificar el modelo . La reducción de la cantidad de parámetros necesarios para optimizar o ajustar durante el entrenamiento aumentará significativamente la precisión del tiempo de prueba debido a la reducción del sobreajuste.
  2. Los datos disponibles para el modelo que está utilizando (alrededor de 2k parece ser menor para el entrenamiento). Intentando obtener más datos si es posible. Puede generar sintéticamente nuevos datos utilizando diversas técnicas de aumento de datos , que incluyen rotación, escalado, traducción, desenfoque, etc.
  3. Utiliza la regularización. Modifique la función objetivo que minimizamos (la función de pérdida / costo) agregando términos adicionales que penalizan los pesos grandes. Cambiamos la función objetivo para que se convierta en Error + λf (θ) , donde f (θ) crece a medida que los componentes de θ crecen y λ es la fuerza de regularización (un hiperparámetro para el algoritmo de aprendizaje). El valor que elegimos para λ determina cuánto queremos proteger contra el sobreajuste. A λ = 0 implica que no tomamos ninguna medida contra la posibilidad de sobreajuste. Si λ es demasiado grande, entonces nuestro modelo priorizará mantener θ lo más pequeño posible en lugar de tratar de encontrar los valores de los parámetros que funcionan bien en nuestro conjunto de entrenamiento. Un tipo común de regularización es la regularización L2. La regularización es un enfoque genérico que se puede adaptar a muchos modelos, incluidos los enfoques convencionales de aprendizaje automático y no solo Deep Networks.
  4. Abandono Esta es una solución bastante buena, particularmente para modelos profundos. Se puede agregar una capa de abandono a su arquitectura. Se implementa manteniendo activa una neurona con alguna probabilidad p, o estableciéndola 0 de lo contrario. Intuitivamente, evita que la red modelo sea demasiado dependiente de cualquiera de las neuronas. Más matemáticamente, evita el sobreajuste al proporcionar una forma de combinar aproximadamente exponencialmente muchas arquitecturas de redes neuronales diferentes de manera eficiente.
    El documento fuente. Producido por el gran Geoffery Hinton.
    Abandono: una manera simple de evitar que las redes neuronales se sobreajusten , por Nitish Srivastava, Geoffrey E. Hinton, Alex Krizhevsky, Ilya Sutskever, Ruslan R. Salakhutdinov Journal of Machine Learning Research, 2014
  5. Para su tarea particular de clasificación de imágenes, imitar el número de capas de agrupación en su modelo también podría funcionar en algunos casos. Además, teniendo en cuenta las estadísticas de datos que mencionó, también puede considerar reducir una o dos capas completamente conectadas en caso de que su modelo sea demasiado denso.

    Espero eso ayude. La mejor de las suertes 🙂

Hola Chandra, gracias por A a A.

Estoy de acuerdo con el compañero escritor Anant en el primer punto, sin embargo, no creo que haya ningún cambio en la población en este caso (para los datos de imagen de entrada).

Por lo tanto, la razón más obvia para un modelo con buena precisión en un dato visto previamente que no se ajusta a un dato no visto es el sobreajuste (alta variación)

Una regla básica para probar un modelo es:
Divide tus datos en 3 partes (60, 20, 20).
Estos son sus datos de tren (60%), datos de prueba (20%) y datos de validación cruzada (20%).
Realiza su entrenamiento y prueba en el modelo con Entrenamiento y datos de prueba y cuando cree que su modelo tiene una buena precisión ahora, prueba el modelo con datos de validación cruzada (Invisible). Esto te ayuda a generalizar un modelo.

¿Está utilizando Regularización en su función de costos para CNN? Intenta aumentar Lambda.

¿Estás utilizando una gran cantidad de funciones? grado de polinomio? Pruebe un conjunto de características más pequeño, un polinomio de menor grado.

¿Ha implementado Gradient Descent (un algoritmo de optimización) con verificación de gradiente junto con su CNN?

Estas son la solución a su problema. Espero que esto ayude.

Con mi experiencia limitada: puede haber dos escenarios para esta incidencia

  1. Ajuste excesivo de la CNN: la característica que ha utilizado en la creación de CNN podría ser una representación perfecta de su variable de resultado.
  2. Cambio en la población: esta podría ser una razón que lleva a que CNN falle en datos fuera de tiempo.

Mi sugerencia es calcular las estadísticas básicas de distribución de la población.

Espero que sea de ayuda.

Sobreajuste