Encontré dos preguntas aquí y aquí sobre este problema, pero todavía no hay una respuesta o explicación obvia. Hago cumplir el mismo problema donde el error de validación es menor que el error de entrenamiento en mi red neuronal de convolución. Qué significa eso?
Respuestas:
Es difícil estar seguro sin conocer su metodología real (por ejemplo, método de validación cruzada, métrica de rendimiento, método de división de datos, etc.).
En términos generales, sin embargo, el error de entrenamiento casi siempre subestimará su error de validación. Sin embargo, es posible que el error de validación sea menor que el entrenamiento. Puedes pensarlo de dos maneras:
Por eso es importante que realmente evalúe su metodología de capacitación modelo. Si no divide sus datos para el entrenamiento adecuadamente, sus resultados conducirán a conclusiones confusas, si no simplemente incorrectas.
Pienso en la evaluación del modelo en cuatro categorías diferentes:
Underfitting - Validación y error de entrenamiento alto
Sobreajuste: el error de validación es alto, el error de entrenamiento es bajo
Buen ajuste: error de validación bajo, ligeramente superior al error de entrenamiento
Ajuste desconocido: error de validación bajo, error de entrenamiento 'alto'
Digo 'desconocido' porque el resultado es contrario a la intuición de cómo funciona el aprendizaje automático. La esencia de ML es predecir lo desconocido. Si eres mejor para predecir lo desconocido que lo que has "aprendido", AFAIK los datos entre el entrenamiento y la validación deben ser diferentes de alguna manera. Esto podría significar que necesita reevaluar su método de división de datos, agregar más datos o posiblemente cambiar su métrica de rendimiento (¿realmente está midiendo el rendimiento que desea?).
EDITAR
Para abordar la referencia del OP a una pregunta anterior sobre lasaña de pitón .
Esto sugiere que tiene datos suficientes para no requerir validación cruzada y simplemente tener sus subconjuntos de datos de capacitación, validación y prueba. Ahora, si observa el tutorial de lasaña , puede ver que se ve el mismo comportamiento en la parte superior de la página. Me resultaría difícil creer que los autores publicarían tales resultados si fuera extraño, pero en lugar de suponer que son correctos, veamos más. La sección de mayor interés para nosotros aquí está en la sección de bucle de entrenamiento , justo arriba de la parte inferior verá cómo se calculan los parámetros de pérdida.
La pérdida de entrenamiento se calcula sobre todo el conjunto de datos de entrenamiento . Del mismo modo, la pérdida de validación se calcula sobre todo el conjunto de datos de validación . El conjunto de entrenamiento suele ser al menos 4 veces más grande que la validación (80-20). Dado que el error se calcula sobre todas las muestras, puede esperar hasta aproximadamente 4 veces la medida de pérdida del conjunto de validación. Sin embargo, notará que la pérdida de capacitación y la pérdida de validación se acercan entre sí a medida que continúa la capacitación. ¡Esto es intencional ya que si su error de entrenamiento comienza a ser más bajo que su error de validación , comenzaría a sobreajustar su modelo!
Espero que esto aclare estos errores.
fuente
Una posibilidad: si está utilizando la capa de regularización de abandono en su red, es razonable que el error de validación sea menor que el error de entrenamiento. Porque generalmente el abandono se activa durante el entrenamiento pero se desactiva al evaluar en el conjunto de validación. Obtiene una función más suave (generalmente significa mejor) en el último caso.
fuente
No tengo suficientes puntos para comentar sobre la respuesta de @ DK, pero ahora esto se responde como una pregunta frecuente en la documentación de Keras:
"¿Por qué la pérdida de entrenamiento es mucho mayor que la pérdida de prueba?
Un modelo de Keras tiene dos modos: entrenamiento y pruebas. Los mecanismos de regularización, como el abandono y la regularización de peso L1 / L2, se desactivan en el momento de la prueba.
Además, la pérdida de entrenamiento es el promedio de las pérdidas sobre cada lote de datos de entrenamiento. Debido a que su modelo cambia con el tiempo, la pérdida en los primeros lotes de una época es generalmente mayor que en los últimos lotes. Por otro lado, la pérdida de prueba para una época se calcula utilizando el modelo como está al final de la época, lo que resulta en una pérdida menor ".
fuente
mis 2 centavos: también tuve el mismo problema incluso sin tener capas de deserción. En mi caso, las capas de la norma de lotes fueron los culpables. Cuando los eliminé, la pérdida de entrenamiento se volvió similar a la pérdida de validación. Probablemente, eso sucedió porque durante el entrenamiento, la norma del lote utiliza la media y la varianza del lote de entrada dado, que puede ser diferente de un lote a otro. Pero durante la evaluación, la norma de lote utiliza la media y la varianza de ejecución, las cuales reflejan propiedades de todo el conjunto de entrenamiento mucho mejor que la media y la varianza de un solo lote durante el entrenamiento. Al menos, así es como se implementa la norma de lotes en pytorch
fuente
Otra posibilidad que combina la respuesta de @cdeterman y @DK de alguna manera es si está utilizando algún mecanismo de aumento de datos. El aumento de datos de hecho generalmente se realiza solo en el conjunto de entrenamiento y no en el conjunto de validación (en cuanto a la regularización de abandono), y esto puede conducir a un conjunto de validación que contiene casos "más fáciles" de predecir que aquellos en el conjunto de entrenamiento.
fuente
Obtuve resultados similares (la pérdida de la prueba fue significativamente menor que la pérdida de entrenamiento). Una vez que eliminé la regularización del abandono, tanto la pérdida se volvió casi igual.
fuente
@cdeterman y @DK tienen una buena explicación. Me gustaría una razón más
data leakage
. Parte de los datos de su tren están "estrechamente relacionados" con los datos de prueba.Ejemplo potencial: imagine que tiene 1000 perros y 1000 gatos con 500 imágenes similares por mascota (a algunos propietarios les encanta tomar fotografías de sus mascotas en posiciones muy similares), digamos en el fondo. Entonces, si realiza una división aleatoria de 70/30, obtendrá una fuga de datos de los datos del tren en los datos de prueba.
fuente
En pocas palabras, si la pérdida de entrenamiento y la pérdida de validación se calculan correctamente, es imposible que la pérdida de entrenamiento sea mayor que la pérdida de validación. Esto se debe a que la propagación hacia atrás reduce DIRECTAMENTE el error calculado en el conjunto de entrenamiento y solo INDIRECTAMENTE (¡ni siquiera está garantizado!) Reduce el error calculado en el conjunto de validación.
Debe haber algunos factores adicionales que son diferentes durante el entrenamiento y durante la validación. La deserción es buena, pero puede haber otras. Asegúrese de verificar la documentación de cualquier biblioteca que esté utilizando. Los modelos y las capas generalmente pueden tener configuraciones predeterminadas a las que comúnmente no prestamos atención.
fuente
Una validación menor que el error de entrenamiento puede ser causada por fluctuaciones asociadas con el abandono o no, pero si persiste a largo plazo, esto puede indicar que los conjuntos de datos de entrenamiento y validación en realidad no se obtuvieron de los mismos conjuntos estadísticos. Esto podría suceder si sus ejemplos provienen de una serie y si no aleatorizó correctamente los conjuntos de datos de capacitación y validación.
fuente
En este momento, los métodos basados en gradientes estocásticos son casi siempre el algoritmo de elección para el aprendizaje profundo. Esto significa que los datos llegan como lotes, los gradientes se calculan y los parámetros se actualizan. Esto significa que también puede calcular la pérdida sobre los datos a medida que se selecciona cada lote. Bajo este marco, hay dos formas en que se calcula la pérdida que puedo pensar que pueden conducir a este fenómeno de que el error de entrenamiento es mayor que el error de validación. A continuación, muestro que Keras, de hecho, parece calcular los errores en la muestra de esta manera.
1.) El error de entrenamiento se promedia en toda la época, más bien de una vez al final de la época, pero el error de validación es solo al final de la época. Tenga en cuenta que el error de validación tiene la ventaja de estar completamente actualizado, mientras que el error de capacitación incluye cálculos de error con menos actualizaciones. Por supuesto, asintóticamente este efecto generalmente debería desaparecer.
2.) El error de entrenamiento se calcula antes de realizar la actualización por lotes. En un método basado en gradiente estocástico, hay algo de ruido en el gradiente. Mientras uno está subiendo una colina, existe una alta probabilidad de que esté disminuyendo la pérdida global calculada en todas las muestras de entrenamiento. Sin embargo, cuando uno se acerca mucho al modo, la dirección de actualización será negativa con respecto a las muestras en su lote. Pero ya que estamos rebotando un modo, esto significa que , en promedio, que deben elegir una dirección que es positivo con respecto a las muestras fuerade lote. Ahora, si estamos a punto de actualizar con respecto a las muestras en un lote dado, eso significa que potencialmente han sido rechazadas por muchas actualizaciones de lotes en las que no se incluyeron, al calcular su pérdida antes de la actualización, esto es cuando el estocástico Los métodos han impulsado los parámetros más a favor de las otras muestras en su conjunto de datos, lo que nos da un pequeño sesgo al alza en la pérdida esperada.
Tenga en cuenta que si bien asintóticamente, el efecto de (1) desaparece, (2) no lo hace. A continuación muestro que Keras parece hacer tanto (1) como (2).
(1) Mostrar que las métricas se promedian sobre cada lote en época, en lugar de todas al mismo tiempo al final. Observe la GRAN diferencia en la precisión en la muestra frente a val_accuracy que favorece val_accuracy en la primera época. Esto se debe a que algunos errores en la muestra se calcularon con muy pocas actualizaciones por lotes.
(2) El error de visualización se calcula antes de la actualización para cada lote. Tenga en cuenta que para la época 1, cuando usamos
batch_size = nRows
(es decir, todos los datos en un lote), el error en la muestra es de aproximadamente 0.5 (adivinación aleatoria) para la época 1, pero el error de validación es 0.82. Por lo tanto, el error en la muestra se calculó antes de la actualización por lotes, mientras que el error de validación se calculó después de la actualización por lotes.fuente