8 votos

¿Cómo utilizar correctamente los conjuntos de validación y prueba para el entrenamiento de redes neuronales?

Llevo mucho tiempo en el negocio del aprendizaje automático, pero aún así, este hecho fundamental me confunde, ya que cada documento, artículo y/o libro describe diferentes tipos de usos para los conjuntos de validación y prueba. Mi objetivo es tranquilizarme para siempre sobre esta cuestión:

Digamos que tengo una red neuronal convolucional relativamente pequeña y quiero entrenarla en el conjunto de datos MNIST. Naturalmente, quiero aprender los mejores hiperparámetros para la CNN dada, como el coeficiente de decaimiento del peso $\lambda$ la tasa de aprendizaje $\alpha$ etc. Naturalmente, MNIST tiene 60K imágenes de entrenamiento y 10K imágenes de prueba. La práctica básica es asignar 10K del conjunto de entrenamiento como conjunto de validación para MNIST.

Supongamos que estamos haciendo una búsqueda en cuadrícula en $\lambda$ y $\alpha$ hiperparámetros y suponemos que hemos fijado un $(\lambda^*,\alpha^*)$ par. A continuación, empezamos a entrenar la CNN con SGD, utilizando el conjunto de entrenamiento de 50K y midiendo el rendimiento en el conjunto de validación de 10K al final de cada época (una pasada completa por el conjunto de entrenamiento de 50K). Normalmente, dejamos de entrenar si se ha agotado un presupuesto fijo de épocas o si empezamos a perder precisión en el conjunto de validación. Y entonces, sólo para un tiempo único en el proceso de entrenamiento de la CNN con el $(\lambda^*,\alpha^*)$ par, medimos el rendimiento real en el conjunto de pruebas. Elegimos el que tenga el mejor rendimiento. Este uso es intuitivo y no hace que la red se sobreajuste injustamente en el conjunto de pruebas. Pero el problema es que nunca utilizamos el conjunto de validación de 10K en el entrenamiento real con SGD.

Así que, ahora, ¿cuál es la forma correcta de utilizar el conjunto de validación aquí? Después de terminar el entrenamiento con el $(\lambda^*,\alpha^*)$ ya sea por agotamiento de las épocas permitidas o por abandono prematuro debido a un exceso de ajuste en el conjunto de validación, ¿debemos fusionar el conjunto de validación y el conjunto de entrenamiento, y entrenar unas cuantas épocas más? En este punto, nuestra tasa de aprendizaje puede ser ya muy pequeña debido a que decae gradualmente. ¿Debemos entrenar todo desde cero utilizando el conjunto de entrenamiento + validación de 60K, estableciendo la tasa de aprendizaje en su valor inicial?

Otra alternativa puede ser entrenar la CNN con cada $(\lambda,\alpha)$ en consideración a nuestra búsqueda en la red, utilizando sólo 50K muestras de entrenamiento en el SGD y 10K muestras de validación para medir la precisión. No se permite ninguna interacción con el conjunto de pruebas. Supongamos que después de entrenar con cada $(\lambda,\alpha)$ se escoge el par que produce la mayor precisión en el conjunto de validación . A continuación, entrenamos la CNN con los hiperparámetros elegidos, desde cero, esta vez utilizando las 60K muestras de entrenamiento + validación directamente en SGD, para una cantidad de épocas fijas. Una vez finalizado el entrenamiento, utilizamos el conjunto de pruebas de una vez por todas para declarar nuestro rendimiento de precisión final.

Este método, en mi opinión, provocaría el siguiente problema: Los hiperparámetros que hemos elegido serían los óptimos para las 50.000 muestras de entrenamiento. Dado que hemos utilizado un subconjunto más pequeño del conjunto de entrenamiento real, lo más probable es que el modelo se sobreajuste más fácilmente, al ver una menor variación de los datos, por lo que nuestra búsqueda de hiperparámetros puede tender a encontrar un $\lambda$ . Y con esto $\lambda$ probablemente veremos una menor precisión en el conjunto de pruebas reales con las 60K muestras de entrenamiento completas, ya que el modelo no podrá compensar la variación de las 10K muestras adicionales, debido a la alta $\lambda$ .

Por lo tanto, no estoy seguro de cuál es la forma correcta de utilizar los conjuntos de validación-prueba. ¿Cuál sería el enfoque válido y lógico en este caso?

12voto

Jan Kukacka Puntos 1027

La conclusión es:

En cuanto se utiliza una parte de los datos para elegir qué modelo funciona mejor, ya se está sesgando el modelo hacia esos datos. 1

Aprendizaje automático en general

En los escenarios generales de aprendizaje automático, se utilizaría la validación cruzada para encontrar la combinación óptima de los hiperparámetros, luego se fijaría y se entrenaría en todo el conjunto de entrenamiento. Al final, se evaluaría en el conjunto de pruebas sólo para tener una idea realista de su rendimiento con datos nuevos y no vistos .

Si a continuación se entrena un modelo diferente y se selecciona el que mejor se comporta en el conjunto de pruebas, ya está utilizar el conjunto de pruebas como parte de su bucle de selección de modelos Por lo tanto, se necesitaría un conjunto de pruebas nuevo e independiente para evaluar el rendimiento de la prueba.

Redes neuronales

Las redes neuronales son un poco específicas en el sentido de que su entrenamiento suele ser muy largo, por lo que la validación cruzada no se utiliza muy a menudo (si el entrenamiento dura 1 día, hacer una validación cruzada de 10 veces ya lleva más de una semana en una sola máquina). Además, uno de los hiperparámetros importantes es el número de épocas de entrenamiento. La duración óptima del entrenamiento varía con diferentes inicializaciones y diferentes conjuntos de entrenamiento, por lo que fijar el número de épocas en un número y luego entrenar en todos los datos de entrenamiento (entrenamiento+validación) para este número fijo no es un enfoque muy fiable.

En su lugar, como ha mencionado, alguna forma de parada anticipada se utiliza: Potencialmente, el modelo se entrena durante mucho tiempo, guardando "instantáneas" periódicamente, y finalmente se elige la "instantánea" con el mejor rendimiento en algún conjunto de validación. Para permitir esto, hay que mantener siempre una parte de los datos de validación aparte 2 . Por lo tanto, nunca se entrenará la red neuronal en todas las muestras.

Por último, hay muchos otros hiperparámetros, como la tasa de aprendizaje, el decaimiento de los pesos, los ratios de abandono, pero también la propia arquitectura de la red (profundidad, número de unidades, tamaño de los núcleos de conv., etc.). Se puede potencialmente utilizar el mismo conjunto de validación que se utiliza para la parada temprana para afinar estos, pero, de nuevo, se está sobreajustando a este conjunto al utilizarlo para la parada temprana, por lo que le da una estimación sesgada. Lo ideal sería, sin embargo, utilizar otro conjunto de validación separado. Una vez que haya fijado todos los hiperparámetros restantes, podría combinar este segundo conjunto de validación en su conjunto de entrenamiento final.


Para terminar:

  1. Divida todos sus datos en training + validation 1 + validation 2 + testing
  2. Red de trenes en training Utilizar validation 1 para la parada anticipada
  3. Evaluar en validation 2 , cambiar los hiperparámetros, repetir 2.
  4. Seleccionar la mejor combinación de hiperparámetros de 3., entrenar la red en training + validation 2 Utilizar validation 1 para la parada anticipada
  5. Evaluar en testing . Este es su rendimiento final (real) del modelo.

1 Esta es exactamente la razón por la que los desafíos de Kaggle tienen dos conjuntos de pruebas: uno público y otro privado. Puedes utilizar el conjunto de pruebas público para comprobar el rendimiento de tu modelo, pero al final lo que importa es el rendimiento en el conjunto de pruebas privado, y si te ajustas demasiado al conjunto de pruebas público, pierdes.

2 Amari et al. (1997) en su artículo Teoría estadística asintótica del sobreentrenamiento y la validación cruzada recomiendan fijar la proporción de muestras utilizadas para la parada temprana en $1/\sqrt{2N}$ , donde $N$ es el tamaño del conjunto de entrenamiento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X