Was ist der Unterschied zwischen Zug, Validierung und Testsatz in neuronalen Netzen?

155

Ich verwende diese Bibliothek , um einen Lernagenten zu implementieren.

Ich habe die Trainingsfälle generiert, weiß aber nicht genau, wie die Validierungs- und Testsätze lauten.
Der Lehrer sagt:

70% sollten Zugfälle sein, 10% werden Testfälle sein und der Rest 20% sollten Validierungsfälle sein.

bearbeiten

Ich habe diesen Code für das Training, aber ich habe keine Ahnung, wann ich mit dem Training aufhören soll .

  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

bearbeiten

Ich kann mit Validierungsdaten einen durchschnittlichen Fehler von 0,2 erhalten, nach vielleicht 20 Trainingsiterationen sollte das 80% sein?

durchschnittlicher Fehler = Summe der absoluten Differenz zwischen Validierungsziel und -ausgabe unter Berücksichtigung der Eingabe / Größe der Validierungsdaten.

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
quelle
1
"... das sollten 80% sein?" Nein, durchschnittlicher Fehler und korrekter Prozentsatz sind zwei verschiedene Dinge. Angenommen, Ihr Zielwert ist 5,0 und Ihr Neuron hat 4,8 zurückgegeben (dh einen Fehler von 0,2). Abhängig von den Daten kann ein Fehler von 0,2 akzeptabel sein. Wenn der Fehler also klein genug ist, können Sie diese Instanz als korrekt angegeben betrachten. Wenn Sie also 10 Ziele haben und Ihr Klassifizierungsfehler für 7 davon innerhalb des akzeptablen Bereichs lag, hätten Sie 70% der Daten korrekt klassifiziert.
Kiril
Welche Kündigungskriterien verlangt Ihr Lehrer?
Kiril

Antworten:

292

Die Trainings- und Validierungssätze werden während des Trainings verwendet.

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

Sobald Sie mit dem Training fertig sind, laufen Sie gegen Ihren Testsatz und überprüfen, ob die Genauigkeit ausreichend ist.

Trainingssatz : Dieser Datensatz wird verwendet, um die Gewichte im neuronalen Netzwerk anzupassen.

Validierungssatz : Dieser Datensatz wird verwendet, um eine Überanpassung zu minimieren. Sie passen die Gewichte des Netzwerks mit diesem Datensatz nicht an, sondern überprüfen lediglich, ob eine Erhöhung der Genauigkeit gegenüber dem Trainingsdatensatz tatsächlich zu einer Erhöhung der Genauigkeit gegenüber einem Datensatz führt, der dem Netzwerk zuvor nicht angezeigt wurde. oder zumindest hat das Netzwerk nicht darauf trainiert (dh Validierungsdatensatz). Wenn die Genauigkeit über den Trainingsdatensatz zunimmt, die Genauigkeit über den Validierungsdatensatz jedoch gleich bleibt oder abnimmt, passen Sie Ihr neuronales Netzwerk an und sollten das Training beenden.

Testsatz : Dieser Datensatz wird nur zum Testen der endgültigen Lösung verwendet, um die tatsächliche Vorhersagekraft des Netzwerks zu bestätigen.

Kiril
quelle
seine Python: xi kann nicht ein Stoppkriterium bekommen .. die Werte konvergieren .. aber immer mit etwas Flutuation ..
Daniel
@ Daniel, schwankt die Trainingsgenauigkeit oder die Validierungsgenauigkeit? Es ist möglich, dass Ihre Validierungsgenauigkeit schwankt, aber es ist weniger wahrscheinlich, dass die Trainingsgenauigkeit schwankt. Wenn Sie "input, target = p" sagen, bedeutet dies, dass Sie beide auf p setzen?
Kiril
Ich bin nicht sehr gut mit Python, daher sieht der Code für mich etwas verwirrend aus. Im Allgemeinen möchten Sie das Training beenden, wenn Ihre Validierungsgenauigkeit einen bestimmten Schwellenwert erreicht, z. B. 70% oder 90%, was auch immer für die Domain sinnvoll ist Ihrer Daten.
Kiril
5
Das Validierungsset wird während des Trainings verwendet. Testsatz ist nicht. Mit dem Testsatz können 1) festgestellt werden, ob der Trainingssatz ausreicht, und 2) ob der Validierungssatz die Aufgabe erfüllt hat, eine Überanpassung zu verhindern. Wenn Sie den Testsatz während des Trainings verwenden, handelt es sich nur um einen weiteren Validierungssatz, der nicht anzeigt, was passiert, wenn neue Daten in das Netzwerk eingespeist werden.
Anton Andreev
2
@AntonAndreev Ich verstehe es nicht. Nach Ihrer Antwort werden weder das validation setnoch das test setverwendet, um die Gewichte des neuronalen Netzwerks abzustimmen. Warum können Sie nicht denselben Datensatz verwenden, der nicht zum Trainieren der Gewichte verwendet wird, wie das validation setund test set? Was bringt es, sie getrennt zu halten?
Gili
77

Trainingssatz : Ein Satz von Beispielen, die zum Lernen verwendet werden, dh um den Parametern [dh Gewichten] des Klassifikators zu entsprechen.

Validierungssatz : Ein Satz von Beispielen, mit denen die Parameter [dh Architektur, nicht Gewichte] eines Klassifikators abgestimmt werden, um beispielsweise die Anzahl der versteckten Einheiten in einem neuronalen Netzwerk auszuwählen.

Testset : Ein Satz von Beispielen, die nur zur Bewertung der Leistung [Verallgemeinerung] eines vollständig spezifizierten Klassifikators verwendet werden.

Aus dem Abschnitt ftp://ftp.sas.com/pub/neural/FAQ1.txt " Was sind Population, Stichprobe, Trainingssatz, Entwurfssatz, Validierung? "

Die Fehleroberfläche unterscheidet sich für verschiedene Datensätze von Ihrem Datensatz (Batch-Lernen). Wenn Sie daher sehr gute lokale Minima für Ihre Testsatzdaten finden, ist dies möglicherweise kein sehr guter Punkt und möglicherweise ein sehr schlechter Punkt in der Oberfläche, der von einem anderen Datensatz für dasselbe Problem generiert wird. Daher müssen Sie ein solches Modell berechnen, das nicht nur eine gute Gewichtskonfiguration für den Trainingssatz findet, sondern auch in der Lage sein sollte, neue Daten (die nicht im Trainingssatz enthalten sind) mit guten Fehlern vorherzusagen. Mit anderen Worten, das Netzwerk sollte in der Lage sein, die Beispiele so zu verallgemeinern , dass es die Daten lernt und sich nicht einfach an den Trainingssatz erinnert oder diesen lädt, indem es die Trainingsdaten überpasst.

Der Validierungsdatensatz ist ein Datensatz für die Funktion, die Sie lernen möchten und die Sie nicht direkt zum Trainieren des Netzwerks verwenden. Sie trainieren das Netzwerk mit einem Datensatz, den Sie als Trainingsdatensatz bezeichnen. Wenn Sie zum Trainieren des Netzwerks einen gradientenbasierten Algorithmus verwenden, hängen die Fehleroberfläche und der Gradient zu einem bestimmten Zeitpunkt vollständig vom Trainingsdatensatz ab, sodass der Trainingsdatensatz direkt zum Anpassen der Gewichte verwendet wird. Um sicherzustellen, dass Sie das Netzwerk nicht überladen, müssen Sie den Validierungsdatensatz in das Netzwerk eingeben und prüfen, ob der Fehler in einem bestimmten Bereich liegt. Da der Validierungssatz nicht direkt zum Anpassen der Gewichte des Netzwerks verwendet wird, zeigt ein guter Fehler für die Validierung und auch den Testsatz an, dass das Netzwerk für die Zugsatzbeispiele gute Vorhersagen macht.

Frühes Anhalten ist eine Möglichkeit, das Training abzubrechen. Es stehen verschiedene Variationen zur Verfügung. Der Hauptgrund ist, dass sowohl der Zug- als auch der Validierungssatzfehler überwacht werden, der Zugfehler bei jeder Iteration abnimmt (Backprop und Brüder) und zunächst der Validierungsfehler abnimmt. Das Training wird abgebrochen, sobald der Validierungsfehler zu steigen beginnt. Die Gewichtskonfiguration an diesem Punkt zeigt ein Modell an, das die Trainingsdaten sowie die Daten gut vorhersagt die vom Netzwerk nicht gesehen werden . Sondern weil die Validierungsdaten tatsächlichwirkt sich indirekt auf die Gewichtskonfiguration aus, um die Gewichtskonfiguration auszuwählen. Hier kommt der Testsatz ins Spiel. Dieser Datensatz wird im Trainingsprozess nie verwendet. Sobald ein Modell basierend auf dem Validierungssatz ausgewählt wurde, werden die Testsatzdaten auf das Netzwerkmodell angewendet und der Fehler für diesen Satz gefunden. Dieser Fehler ist ein Vertreter des Fehlers, den wir von absolut neuen Daten für dasselbe Problem erwarten können.

BEARBEITEN:

Falls Sie nicht genügend Daten für einen Validierungssatz haben, können Sie die Kreuzvalidierung verwenden , um die Parameter zu optimieren und den Testfehler abzuschätzen.

Phoxis
quelle
11
Ich weiß, dass ich keine bedeutungslosen Kommentare wie diese posten soll, aber ich wollte Ihnen sagen, dass ich diese Antwort sehr schätze :)
Llamageddon
6

Der Kreuzvalidierungssatz wird für die Modellauswahl verwendet. Wählen Sie beispielsweise das Polynommodell mit der geringsten Fehleranzahl für einen bestimmten Parametersatz aus. Der Testsatz wird dann verwendet, um den Generalisierungsfehler für das ausgewählte Modell zu melden. Von hier aus: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

user2410953
quelle
1
Ich nehme auch an Andrew Ngs Kursen teil und stimme Ihnen zu. Das Validierungsset sollte Teil des Trainings sein. Es sollte nur zum Drehen von Hyperparametern verwendet werden.
Jack Peng
4

Wir erstellen einen Validierungssatz für

  • Messen Sie, wie gut sich ein Modell während des Trainings verallgemeinert
  • Sagen Sie uns, wann Sie mit dem Training eines Modells aufhören sollen, wann der Validierungsverlust nicht mehr abnimmt (und insbesondere, wenn der Validierungsverlust zunimmt und der Trainingsverlust immer noch abnimmt).

Warum wurde ein Validierungssatz verwendet :

Warum Validierungssatz verwendet

Nil Akash
quelle
2

Angenommen, Sie trainieren ein Modell an einem Trainingssatz und messen dann seine Leistung an einem Testsatz. Sie denken, dass noch Verbesserungspotenzial besteht, und Sie versuchen, die Hyperparameter zu optimieren (Wenn das Modell ein neuronales Netzwerk ist - Hyperparameter sind die Anzahl der Ebenen oder Knoten in den Ebenen). Jetzt erhalten Sie eine etwas bessere Leistung. Wenn das Modell jedoch anderen Daten ausgesetzt wird (nicht im Test- und Trainingssatz enthalten), erhalten Sie möglicherweise nicht die gleiche Genauigkeit. Dies liegt daran, dass Sie beim Optimieren der Hyperparameter eine gewisse Verzerrung eingeführt haben, um eine bessere Genauigkeit des Testsatzes zu erzielen. Sie haben das Modell und die Hyperparameter grundsätzlich angepasst, um das beste Modell für diesen bestimmten Trainingssatz zu erstellen.

Eine übliche Lösung besteht darin, den Trainingssatz weiter aufzuteilen, um einen Validierungssatz zu erstellen . Jetzt hast du

  • Trainingsset
  • Testset
  • Validierungssatz

Sie gehen wie zuvor vor, verwenden jedoch diesmal den Validierungssatz, um die Leistung zu testen und die Hyperparameter zu optimieren. Insbesondere trainieren Sie mehrere Modelle mit verschiedenen Hyperparametern für den reduzierten Trainingssatz (dh den vollständigen Trainingssatz abzüglich des Validierungssatzes) und wählen das Modell aus, das für den Validierungssatz am besten geeignet ist.

Sobald Sie das Modell mit der besten Leistung im Validierungssatz ausgewählt haben, trainieren Sie das Modell mit der besten Leistung im gesamten Trainingssatz (einschließlich des Validierungssatzes). Auf diese Weise erhalten Sie das endgültige Modell.

Zuletzt bewerten Sie dieses endgültige Modell im Testsatz, um eine Schätzung des Generalisierungsfehlers zu erhalten.

Aditya
quelle
0

Trainingsdatensatz : Die Stichprobe von Daten, die zur Anpassung an das Modell verwendet wurden.

Validierungsdatensatz : Die Stichprobe von Daten, die verwendet wird, um eine unvoreingenommene Bewertung eines Modells zu erhalten, das in den Trainingsdatensatz passt, während Modellhyperparameter optimiert werden. Die Bewertung wird voreingenommener, wenn die Fähigkeiten des Validierungsdatensatzes in die Modellkonfiguration einbezogen werden.

Testdatensatz : Die Stichprobe von Daten, die verwendet werden, um eine unvoreingenommene Bewertung einer endgültigen Modellanpassung für den Trainingsdatensatz bereitzustellen.

Farzana Khan
quelle
-15

In einfachen Worten definieren Sie Trainingssatz, Testsatz, Validierungssatz

Trainingsset: Wird verwendet, um die nächsten Nachbarn zu finden. Validierungssatz: Dient zum Finden eines anderen k, das für den Zugsatz gilt. Testsatz: Wird verwendet, um in Zukunft die maximale Genauigkeit und unsichtbare Daten zu ermitteln.

Gaurav Pal
quelle