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?