¿Cuál es la diferencia entre tren, validación y conjunto de prueba en redes neuronales?

155

Estoy usando esta biblioteca para implementar un agente de aprendizaje.

He generado los casos de capacitación, pero no estoy seguro de cuáles son los conjuntos de validación y prueba.
El profesor dice:

El 70% deben ser casos de entrenamiento, el 10% serán casos de prueba y el 20% restante serán casos de validación.

editar

Tengo este código para entrenar, pero no tengo idea de cuándo dejar de entrenar.

  def train(self, train, validation, N=0.3, M=0.1):
    # N: learning rate
    # M: momentum factor
    accuracy = list()
    while(True):
        error = 0.0
        for p in train:
            input, target = p
            self.update(input)
            error = error + self.backPropagate(target, N, M)
        print "validation"
        total = 0
        for p in validation:
            input, target = p
            output = self.update(input)
            total += sum([abs(target - output) for target, output in zip(target, output)]) #calculates sum of absolute diference between target and output

        accuracy.append(total)
        print min(accuracy)
        print sum(accuracy[-5:])/5
        #if i % 100 == 0:
        print 'error %-14f' % error
        if ? < ?:
            break

editar

Puedo obtener un error promedio de 0.2 con los datos de validación, después de quizás 20 iteraciones de entrenamiento, ¿eso debería ser 80%?

error promedio = suma de la diferencia absoluta entre el objetivo de validación y la salida, dada la entrada de datos de validación / tamaño de los datos de validación.

1
        avg error 0.520395 
        validation
        0.246937882684
2
        avg error 0.272367   
        validation
        0.228832420879
3
        avg error 0.249578    
        validation
        0.216253590304
        ...
22
        avg error 0.227753
        validation
        0.200239244714
23
        avg error 0.227905    
        validation
        0.199875013416
Daniel
fuente
1
"... eso debería ser 80%?" No, el error promedio y el porcentaje correcto son dos cosas diferentes. Suponga que su valor objetivo es 5.0 y su neurona devuelve 4.8 (es decir, un error de 0.2). Dependiendo de los datos, un error de 0.2 puede ser aceptable, por lo que si el error es lo suficientemente pequeño, entonces podría considerar que esa instancia se especificó correctamente. Entonces, si tiene 10 objetivos y su error de clasificación para 7 de ellos estaba dentro del rango aceptable, entonces habría clasificado el 70% de los datos correctamente.
Kiril
¿Cuál es el criterio de terminación requerido por su maestro?
Kiril

Respuestas:

292

Los conjuntos de entrenamiento y validación se utilizan durante el entrenamiento.

for each epoch
    for each training data instance
        propagate error through the network
        adjust the weights
        calculate the accuracy over training data
    for each validation data instance
        calculate the accuracy over the validation data
    if the threshold validation accuracy is met
        exit training
    else
        continue training

Una vez que haya terminado el entrenamiento, corre contra su conjunto de pruebas y verifica que la precisión sea suficiente.

Conjunto de entrenamiento : este conjunto de datos se utiliza para ajustar los pesos en la red neuronal.

Conjunto de validación : este conjunto de datos se utiliza para minimizar el sobreajuste. No está ajustando los pesos de la red con este conjunto de datos, solo está verificando que cualquier aumento en la precisión sobre el conjunto de datos de entrenamiento realmente produce un aumento en la precisión sobre un conjunto de datos que no se ha mostrado a la red antes, o al menos la red no se ha entrenado en él (es decir, conjunto de datos de validación). Si la precisión sobre el conjunto de datos de entrenamiento aumenta, pero la precisión sobre el conjunto de datos de validación permanece igual o disminuye, entonces está sobreajustando su red neuronal y debe dejar de entrenar.

Conjunto de prueba : este conjunto de datos se usa solo para probar la solución final para confirmar el poder predictivo real de la red.

Kiril
fuente
su python: xi simplemente no puede obtener un criterio de detención ... los valores convergen ... pero siempre con algo de flutuación ...
Daniel
@Daniel, ¿fluctúa la precisión del entrenamiento o la precisión de la validación? Es posible que su precisión de validación fluctúe, pero es menos probable que la precisión del entrenamiento fluctúe. Cuando dices "input, target = p", ¿significa que estás configurando ambos en p?
Kiril
No soy muy bueno con Python, por lo que el código me parece un poco confuso ... en general, desea dejar de entrenar cuando su precisión de validación alcanza un cierto umbral, digamos 70% o 90%, lo que tenga sentido para el dominio de sus datos
Kiril
55
El conjunto de validación se utiliza en el proceso de entrenamiento. El conjunto de prueba no lo es. El conjunto de pruebas permite 1) ver si el conjunto de entrenamiento fue suficiente y 2) si el conjunto de validación hizo el trabajo de prevenir el sobreajuste. Si usa el conjunto de pruebas en el proceso de capacitación, será solo otro conjunto de validación y no mostrará lo que sucede cuando se ingresan nuevos datos en la red.
Anton Andreev
2
@AntonAndreev No lo entiendo. Según su respuesta, ni el validation setni el test setse utilizan para ajustar los pesos de la red neuronal. ¿Por qué no puede usar el mismo conjunto de datos, no usado para entrenar los pesos, como el validation sety test set? ¿Qué se gana al mantenerlos separados?
Gili
77

Conjunto de entrenamiento : conjunto de ejemplos utilizados para el aprendizaje, es decir, para ajustar los parámetros [es decir, los pesos] del clasificador.

Conjunto de validación : conjunto de ejemplos utilizados para ajustar los parámetros [es decir, arquitectura, no pesos] de un clasificador, por ejemplo, para elegir el número de unidades ocultas en una red neuronal.

Conjunto de pruebas : conjunto de ejemplos utilizados solo para evaluar el rendimiento [generalización] de un clasificador completamente especificado.

De ftp://ftp.sas.com/pub/neural/FAQ1.txt sección " ¿Cuáles son la población, muestra, conjunto de capacitación, conjunto de diseño, validación "?

La superficie de error será diferente para diferentes conjuntos de datos de su conjunto de datos (aprendizaje por lotes). Por lo tanto, si encuentra un mínimo local muy bueno para los datos de su conjunto de pruebas, puede que ese no sea un punto muy bueno, y puede ser un punto muy malo en la superficie generado por algún otro conjunto de datos para el mismo problema. Por lo tanto, debe calcular un modelo de este tipo que no solo encuentre una buena configuración de peso para el conjunto de entrenamiento, sino que también pueda predecir nuevos datos (que no están en el conjunto de entrenamiento) con un buen error. En otras palabras, la red debería poder generalizar los ejemplos para que aprenda los datos y no simplemente recuerde o cargue el conjunto de entrenamiento al sobreajustar los datos de entrenamiento.

El conjunto de datos de validación es un conjunto de datos para la función que desea aprender, que no está utilizando directamente para entrenar la red. Está entrenando a la red con un conjunto de datos que llama el conjunto de datos de entrenamiento. Si está utilizando un algoritmo basado en gradiente para entrenar la red, entonces la superficie de error y el gradiente en algún punto dependerán completamente del conjunto de datos de entrenamiento, por lo tanto, el conjunto de datos de entrenamiento se está utilizando directamente para ajustar los pesos. Para asegurarse de no sobreajustar la red, debe ingresar el conjunto de datos de validación a la red y verificar si el error está dentro de algún rango. Debido a que el conjunto de validación no se está utilizando directamente para ajustar los pesos de la red, por lo tanto, un buen error para la validación y también el conjunto de prueba indica que la red predice bien para los ejemplos del conjunto de trenes,

Parar temprano es una forma de dejar de entrenar. Hay diferentes variaciones disponibles, el esquema principal es, tanto el tren como los errores del conjunto de validación son monitoreados, el error del tren disminuye en cada iteración (backprop y hermanos) y al principio disminuye el error de validación. El entrenamiento se detiene en el momento en que el error de validación comienza a aumentar. La configuración de peso en este punto indica un modelo, que predice bien los datos de entrenamiento, así como los datos que la red no ve . Pero porque los datos de validación en realidadafecta la configuración de peso indirectamente para seleccionar la configuración de peso. Aquí es donde entra el conjunto de prueba. Este conjunto de datos nunca se utiliza en el proceso de capacitación. Una vez que se selecciona un modelo basado en el conjunto de validación, los datos del conjunto de prueba se aplican al modelo de red y se encuentra el error para este conjunto. Este error es un representante del error que podemos esperar de datos absolutamente nuevos para el mismo problema.

EDITAR:

Además, en el caso de que no tenga suficientes datos para un conjunto de validación, puede usar la validación cruzada para ajustar los parámetros y estimar el error de prueba.

foxis
fuente
11
Sé que se supone que no debo publicar comentarios sin sentido como este, pero quería decirte que aprecio mucho esta respuesta :)
Llamageddon 05 de
6

El conjunto de validación cruzada se utiliza para la selección del modelo, por ejemplo, seleccione el modelo polinómico con la menor cantidad de errores para un conjunto de parámetros dado. El conjunto de prueba se utiliza para informar el error de generalización en el modelo seleccionado. Desde aquí: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

usuario2410953
fuente
1
También estoy tomando las clases de Andrew Ng y estoy de acuerdo contigo. El conjunto de validación debe ser parte de la capacitación. Solo debe usarse para activar hiperparámetros.
Jack Peng
4

Creamos un conjunto de validación para

  • Mida qué tan bien generaliza un modelo, durante el entrenamiento
  • Indíquenos cuándo dejar de entrenar un modelo; cuando la pérdida de validación deja de disminuir (y especialmente cuando la pérdida de validación comienza a aumentar y la pérdida de entrenamiento sigue disminuyendo)

Por qué se utiliza el conjunto de validación :

Por qué se usa el conjunto de validación

Nil Akash
fuente
3

Supongamos que entrena un modelo en un conjunto de entrenamiento y luego mide su rendimiento en un conjunto de prueba. Cree que todavía hay margen de mejora e intenta ajustar los hiperparámetros (si el modelo es una red neuronal, los hiperparámetros son el número de capas o nodos en las capas). Ahora obtienes un rendimiento ligeramente mejor. Sin embargo, cuando el modelo está sujeto a otros datos (no en el conjunto de pruebas y entrenamiento), es posible que no obtenga el mismo nivel de precisión. Esto se debe a que introdujo algunos sesgos al ajustar los hiperparámetros para obtener una mayor precisión en el conjunto de pruebas. Básicamente, ha adaptado el modelo y los hiperparámetros para producir el mejor modelo para ese conjunto de entrenamiento en particular.

Una solución común es dividir aún más el conjunto de entrenamiento para crear un conjunto de validación . Ahora tu tienes

  • conjunto de entrenamiento
  • conjunto de prueba
  • conjunto de validación

Continúa como antes, pero esta vez usa el conjunto de validación para probar el rendimiento y ajustar los hiperparámetros. Más específicamente, entrena múltiples modelos con varios hiperparámetros en el conjunto de entrenamiento reducido (es decir, el conjunto de entrenamiento completo menos el conjunto de validación), y selecciona el modelo que funciona mejor en el conjunto de validación.

Una vez que haya seleccionado el modelo con mejor rendimiento en el conjunto de validación, entrena el mejor modelo en el conjunto de entrenamiento completo (incluido el conjunto de validación), y esto le da el modelo final.

Por último, evalúa este modelo final en el conjunto de pruebas para obtener una estimación del error de generalización.

Aditya
fuente
0

Conjunto de datos de entrenamiento : la muestra de datos utilizada para ajustarse al modelo.

Conjunto de datos de validación : la muestra de datos utilizada para proporcionar una evaluación imparcial de un modelo ajustado en el conjunto de datos de entrenamiento mientras se ajustan los hiperparámetros del modelo. La evaluación se vuelve más sesgada a medida que la habilidad en el conjunto de datos de validación se incorpora a la configuración del modelo.

Conjunto de datos de prueba : la muestra de datos utilizada para proporcionar una evaluación imparcial de un ajuste final del modelo en el conjunto de datos de entrenamiento.

Farzana Khan
fuente
-15

En palabras simples, defina Conjunto de entrenamiento, Conjunto de prueba, Conjunto de validación

Conjunto de entrenamiento: se utiliza para encontrar vecinos más cercanos. Conjunto de validación: es para encontrar diferentes k que se aplican al conjunto de trenes. Conjunto de prueba: se utiliza para encontrar la máxima precisión y datos invisibles en el futuro.

Gaurav Pal
fuente