¿Por qué la precisión de validación fluctúa?

31

Tengo un CNN de cuatro capas para predecir la respuesta al cáncer utilizando datos de resonancia magnética. Uso activaciones ReLU para introducir no linealidades. La precisión y la pérdida del tren aumentan y disminuyen monotónicamente, respectivamente. Pero, la precisión de mi prueba comienza a fluctuar salvajemente. He intentado cambiar la tasa de aprendizaje, reducir el número de capas. Pero, no detiene las fluctuaciones. Incluso leí esta respuesta e intenté seguir las instrucciones en esa respuesta, pero no tuve suerte nuevamente. ¿Alguien podría ayudarme a descubrir dónde me estoy equivocando?

Captura de pantalla

Raghuram
fuente
Sí, leí esa respuesta. Mezclar los datos de validación no ayudó
Raghuram
44
Debido a que no ha compartido su fragmento de código, por lo tanto, no puedo decir mucho sobre lo que está mal en su arquitectura. Pero en su captura de pantalla, al ver su entrenamiento y precisión de validación, está claro que su red está sobreajustada. Sería mejor si compartes tu fragmento de código aquí.
Nain
cuantas muestras tienes tal vez la fluctuación no sea realmente significativa. Además, la precisión es una medida horrible
rep_ho
¿Puede alguien ayudarme a verificar si usar un enfoque de conjunto es bueno cuando la precisión de la validación fluctúa? porque pude gestionar mi validation_accuracy fluctuante por conjunto a un buen valor.
Sri2110

Respuestas:

27

Si entiendo la definición de precisión correctamente, la precisión (% de puntos de datos clasificados correctamente) es menos acumulativa que digamos MSE (error cuadrático medio). Es por eso que ves que tu lossestá aumentando rápidamente, mientras que la precisión fluctúa.

Intuitivamente, esto básicamente significa que una parte de los ejemplos se clasifica aleatoriamente , lo que produce fluctuaciones, ya que el número de conjeturas aleatorias correctas siempre fluctúa (imagine la precisión cuando la moneda siempre debe devolver "caras"). Básicamente, la sensibilidad al ruido (cuando la clasificación produce un resultado aleatorio) es una definición común de sobreajuste (ver wikipedia):

En estadística y aprendizaje automático, una de las tareas más comunes es ajustar un "modelo" a un conjunto de datos de entrenamiento, para poder hacer predicciones confiables sobre datos generales no entrenados. En el sobreajuste, un modelo estadístico describe error aleatorio o 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 mayor 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 pérdida en sí). Intuitivamente, puede imaginar una situación en la que la red está demasiado segura de la salida (cuando está mal), por lo que proporciona un valor muy alejado del umbral en caso de clasificación errónea aleatoria.

En cuanto a su caso, su modelo no está correctamente regularizado, posibles razones:

  • no hay suficientes puntos de datos, demasiada capacidad
  • ordenar
  • no / escalado / normalización de características incorrectas
  • ααα

Soluciones posibles:

  • obtener más puntos de datos (o ampliar artificialmente el conjunto de los existentes)
  • jugar con hiperparámetros (aumentar / disminuir capacidad o término de regularización, por ejemplo)
  • regularización : intente abandonar, detener temprano, etc.
dk14
fuente
En cuanto a: "La pérdida se mide con mayor precisión, es más sensible a la predicción ruidosa porque no está aplastada por sigmoides / umbrales", estoy de acuerdo con que no hay umbral, pero si está utilizando, por ejemplo, la entropía cruzada binaria como su función de pérdida, el sigmoide todavía juega un rol.
Zhubarb
1
Con respecto a la tasa de aprendizaje y al SGD que faltan los mínimos: alcanzar el mínimo probablemente significaría un sobreajuste (porque es el mínimo en el conjunto de entrenamiento)
Jan Kukacka
@Berkmeister cierto, he reformulado un poco (ver edición). Pensé que había una pérdida aumentada es una señal de que se está utilizando una función no aplastada.
dk14
@ JanKukacka te refieres a mínimos mundiales? Implicaba los mínimos locales (en realidad, cerca de los mínimos locales), en el sentido de que si está demasiado lejos de cualquier mínimo, entonces sería poco adecuado. Probablemente, debería describirlo con más cuidado (ver edición), gracias.
dk14
@ dk14 Supongo que en la práctica no se puede alcanzar el mínimo global, por lo que me refiero a mínimos locales. Si está demasiado lejos, es posible que no esté bien ajustado, pero si está demasiado cerca, lo más probable es que esté sobreajustado. Hay un trabajo interesante de Moritz Hardt "Entrena más rápido, generaliza mejor: estabilidad del descenso de gradiente estocástico" ( arxiv.org/abs/1509.01240 ) poniendo límites a la relación entre el entrenamiento y el error de prueba cuando se entrena con SGD.
Jan Kukacka
6

Esta pregunta es antigua pero publica esto ya que aún no se ha señalado:

Posibilidad 1 : está aplicando algún tipo de preprocesamiento (significado cero, normalización, etc.) a su conjunto de entrenamiento o conjunto de validación, pero no al otro .

Posibilidad 2 : si construyó algunas capas que funcionan de manera diferente durante el entrenamiento y la inferencia desde cero, su modelo podría implementarse incorrectamente (por ejemplo, ¿la media móvil y la desviación estándar móvil para la normalización del lote se actualizan durante el entrenamiento? ¿inferencia?). Este podría ser el caso si su código implementa estas cosas desde cero y no utiliza las funciones integradas de Tensorflow / Pytorch.

Posibilidad 3: Sobreajuste, como todos han señalado. Creo que las otras dos opciones son más probables en su situación específica ya que su precisión de validación está atascada al 50% desde la época 3. En general, estaría más preocupado por sobreajustar si esto sucediera en una etapa posterior (a menos que tenga un problema muy específico a mano).

Soroush
fuente
Tengo un problema similar, pero no completamente, más detalles aquí: stackoverflow.com/questions/55348052/... En mi caso, en realidad tengo una alta precisión constante con los datos de prueba y durante el entrenamiento, la "precisión de la validación "(no pérdida) es mayor que la precisión del entrenamiento. Pero el hecho de que nunca converge y oscila me hace pensar en un sobreajuste, mientras que algunos sugieren que ese no es el caso, por lo que me pregunto si es así y cuál es la justificación si no es así.
Dusa
1
Esta es, con mucho, la explicación más plausible de las respuestas dadas. Tenga en cuenta que el alto impulso de normalización por lotes (por ejemplo, 0.999, o incluso el valor predeterminado de Keras 0.99) en combinación con una alta tasa de aprendizaje también puede producir un comportamiento muy diferente en el entrenamiento y la evaluación, ya que las estadísticas de capa se quedan muy atrás. En ese caso, reducir el impulso a algo como 0.9 debería ser suficiente. He tenido un problema similar a OP y esto funcionó.
kristjan
5

Agregando a la respuesta por @ dk14. Si aún observa fluctuaciones después de regularizar adecuadamente su modelo, estas podrían ser las posibles razones:

  • Usar una muestra aleatoria de su conjunto de validación: significa que su conjunto de validación en cada paso de evaluación es diferente, al igual que su pérdida de validación.
  • Usar una función de pérdida ponderada (que se usa en caso de problemas de clase altamente desequilibrados). En el paso del tren, usted pesa su función de pérdida en función de los pesos de clase, mientras que en el paso de desarrollo solo calcula la pérdida no ponderada. En tal caso, aunque su red está entrando en la convergencia, es posible que vea muchas fluctuaciones en la pérdida de validación después de cada paso del tren. Pero si espera una imagen más grande, puede ver que su red en realidad está convergiendo a un mínimo con fluctuaciones que se desgastan (vea las imágenes adjuntas para un ejemplo de este tipo).ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí
Bitspersecond
fuente
2

Definitivamente demasiado ajustado. La brecha entre la precisión en los datos de entrenamiento y los datos de prueba muestra que se ha ajustado demasiado en el entrenamiento. Quizás la regularización pueda ayudar.

keramat
fuente
1

Su precisión de validación en un problema de clasificación binaria (supongo) está "fluctuando" alrededor del 50%, lo que significa que su modelo está dando predicciones completamente aleatorias (a veces adivina correctamente pocas muestras más, a veces unas pocas muestras menos). En general, su modelo no es mejor que lanzar una moneda.

{0;1}

De todos modos, como otros ya han señalado, su modelo está experimentando un sobreajuste severo. Supongo que su problema es demasiado complicado , es decir, es muy difícil extraer la información deseada de sus datos, y una red de comunicación de 4 capas simple y entrenada no tiene posibilidades de aprenderla .

Jan Kukacka
fuente
0

Hay pocas formas de intentarlo en su situación. En primer lugar, intente aumentar el tamaño del lote, lo que ayuda a que el SGD del mini lote sea menos errante. En segundo lugar, ajustando la tasa de aprendizaje, probablemente la ajuste más pequeña. En tercer lugar, pruebe con un optimizador diferente, por ejemplo Adam o RMSProp, que pueden adaptar las tasas de aprendizaje para las funciones de wrt. Si es posible, intente aumentar sus datos. Por último, pruebe las redes neuronales bayesianas a través de la aproximación de abandono, un trabajo muy interesante de Yarin Gal https://arxiv.org/abs/1506.02158

pateheo
fuente
0

¿Has probado una red más pequeña? Teniendo en cuenta que la precisión de su entrenamiento puede alcanzar> .99, su red parece tener suficientes conexiones para modelar completamente sus datos, pero puede tener conexiones extrañas que están aprendiendo al azar (es decir, sobreajuste).

En mi experiencia, obtuve la precisión de validación de reserva para estabilizar con una red más pequeña probando varias redes como ResNet, VGG e incluso redes más simples.

teter123f
fuente