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?
machine-learning
python
deep-learning
Raghuram
fuente
fuente
Respuestas:
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
loss
está 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):
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:
Soluciones posibles:
fuente
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).
fuente
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:
fuente
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.
fuente
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.
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 .
fuente
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
fuente
¿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.
fuente