Tengo una CNN de cuatro capas para predecir la respuesta al cáncer utilizando datos de resonancia magnética. Utilizo activaciones ReLU para introducir no linealidades. La precisión y la pérdida del tren aumentan y disminuyen monótonamente, respectivamente. Sin embargo, mi precisión en la prueba empieza a fluctuar de forma salvaje. He intentado cambiar la tasa de aprendizaje y reducir el número de capas. Pero, no detiene las fluctuaciones. Incluso leí esta respuesta y traté de seguir las instrucciones en esa respuesta, pero no suerte de nuevo. ¿Alguien podría ayudarme a averiguar en qué me estoy equivocando?
Respuestas
¿Demasiados anuncios?Si he entendido bien la definición de precisión, la precisión (% de puntos de datos clasificados correctamente) es menos acumulativa que, digamos, el MSE (error medio cuadrático). Por eso se ve que su loss
aumenta rápidamente, mientras que la precisión fluctúa.
Intuitivamente, esto significa básicamente que una parte de los ejemplos se clasifica al azar que produce fluctuaciones, ya que el número de conjeturas aleatorias correctas siempre fluctúa (imagínese la precisión cuando la moneda debería devolver siempre "cara"). Básicamente, la sensibilidad al ruido (cuando la clasificación produce un resultado aleatorio) es una definición común de sobreajuste (véase wikipedia):
En estadística y aprendizaje automático, una de las tareas más comunes es de entrenamiento para poder hacer predicciones fiables sobre datos generales no entrenados. predicciones fiables sobre datos generales no entrenados. En el sobreajuste, un modelo estadístico describe el error aleatorio o el ruido en lugar de la relación subyacente
Otra evidencia de sobreajuste es que su pérdida está aumentando, la pérdida se mide con más precisión, es más sensible a la predicción ruidosa si no está aplastada por sigmoides / umbrales (que parece ser su caso para la propia pérdida). Intuitivamente, se puede imaginar una situación en la que la red está demasiado segura de la salida (cuando se equivoca), por lo que da un valor alejado del umbral en caso de clasificación errónea aleatoria.
En cuanto a tu caso, tu modelo no está bien regularizado, posibles razones:
- no hay suficientes puntos de datos, demasiada capacidad
- solicitando
- no hay/está mal el escalado/normalización de características
- ritmo de aprendizaje: $\alpha$ es demasiado grande, por lo que la SGD salta demasiado lejos y se pierde la zona cercana a los mínimos locales. Esto sería un caso extremo de "infraajuste" (insensibilidad a los datos en sí), pero podría generar (una especie de) ruido de "baja frecuencia" en la salida al desordenar los datos de la entrada; en contra de la intuición de sobreajuste, sería como siempre adivinando cara al predecir una moneda. Como señaló @JanKukacka, llegar a la zona "demasiado cerca" de un mínimo podría causar un sobreajuste, por lo que si $\alpha$ es demasiado pequeño se volvería sensible al ruido de "alta frecuencia" en sus datos. $\alpha$ debería estar en algún punto intermedio.
Posibles soluciones:
- obtener más puntos de datos (o ampliar artificialmente el conjunto de los existentes)
- jugar con los hiperparámetros (aumentar/disminuir la capacidad o el término de regularización, por ejemplo)
- regularización : intenta el abandono, la parada anticipada, etc.
Esta pregunta es antigua pero la publico ya que no ha sido señalada todavía:
Posibilidad 1 : Está aplicando algún tipo de preprocesamiento (significado cero, normalización, etc.) a su conjunto de entrenamiento o a su conjunto de validación, pero no el otro .
Posibilidad 2 : Si construyó algunas capas que se comportan de forma diferente durante el entrenamiento y la inferencia desde cero, su modelo podría estar implementado de forma incorrecta (por ejemplo, ¿se están actualizando la media móvil y la desviación estándar móvil para la normalización del lote durante el entrenamiento? Si se utiliza el dropout, ¿se escalan los pesos correctamente durante la inferencia?) Este podría ser el caso si su código implementa estas cosas desde cero y no utiliza las funciones incorporadas de Tensorflow/Pytorch.
Posibilidad 3 : Sobreajuste, como todo el mundo ha señalado. Me parece que las otras dos opciones son más probables en tu situación específica, ya que tu precisión de validación está atascada en el 50% desde la época 3. En general, me preocuparía más por el sobreajuste si esto ocurriera en una etapa posterior (a menos que tengas un problema muy específico).
Añadiendo a la respuesta de @dk14 . Si sigues viendo fluctuaciones después de regularizar adecuadamente su modelo, estas podrían ser las posibles razones:
- Utilizando una muestra aleatoria de su conjunto de validación: Esto significa que su conjunto de validación en cada paso de la evaluación es diferente, por lo que es su validación-pérdida.
- Utilizar una función de pérdida ponderada (que se utiliza en caso de problemas de clase muy desequilibrados). En el paso de entrenamiento, se pondera la función de pérdida basada en los pesos de las clases, mientras que en el paso de validación sólo se calcula la pérdida no ponderada. En este caso, aunque su red está entrando en convergencia, puede ver muchas fluctuaciones en la pérdida de validación después de cada paso de entrenamiento. Pero si espera una imagen más amplia, puede ver que su red está convergiendo realmente a un mínimo con fluctuaciones que se desgastan (vea las imágenes adjuntas para un ejemplo de este tipo).
Su precisión de validación en un problema de clasificación binaria (supongo) está "fluctuando" en torno al 50%, lo que significa que su modelo está dando predicciones completamente aleatorias (a veces adivina correctamente algunas muestras más, a veces algunas muestras menos). En general, su modelo no es mejor que lanzar una moneda al aire.
La razón por la que la pérdida de validación es más estable es que es una función continua: Puede distinguir que la predicción 0,9 para una muestra positiva es más correcta que una predicción 0,51. Para la precisión, se redondean estas predicciones logit continuas a $\{0;1\}$ y simplemente calcular el porcentaje de predicciones correctas. Ahora, como su modelo está adivinando, lo más probable es que prediga valores cercanos a 0,5 para todas las muestras, digamos que una muestra obtiene 0,49 después de una época y 0,51 en la siguiente. Desde la perspectiva de la pérdida, la incorrección de la predicción no cambió mucho, mientras que la precisión es sensible incluso a estas pequeñas diferencias.
De todos modos, como ya han señalado otros, tu modelo está experimentando un severo sobreajuste. Mi opinión es que su problema es demasiado complicado es decir, es muy difícil extraer la información deseada de sus datos, y tal una simple red de convección de 4 capas entrenada de extremo a extremo no tiene ninguna posibilidad de aprenderla .
- Ver respuestas anteriores
- Ver más respuestas