wake-up-neo.com

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

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% Testfälle und der Rest 20% sollten Validierungsfälle sein.

edit

Ich habe diesen Code für das Training, aber ich habe keine Ahnung, wann ich aufhören soll trainieren 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

edit

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

durchschnittlicher Fehler = Summe der absoluten Differenz zwischen Validierungsziel und -ausgabe bei Eingabe der Validierungsdaten/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
132
Daniel

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, stoßen Sie auf Ihr Testgerät und stellen sicher, dass die Genauigkeit ausreichend ist.

Trainingssatz: Mit diesem Datensatz werden die Gewichte im neuronalen Netz angepasst.

Validation Set: Dieser Datensatz wird verwendet, um eine Überanpassung zu minimieren. Sie passen die Gewichte des Netzwerks nicht mit diesem Datensatz an, sondern stellen nur sicher, dass 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 dem Trainingsdatensatz zunimmt, die Genauigkeit über dem Validierungsdatensatz jedoch gleich bleibt oder abnimmt, passen Sie Ihr neuronales Netzwerk übermäßig an und sollten das Training beenden.

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

252
Kiril

Trainingssatz : Ein Satz von Beispielen, die zum Lernen verwendet werden, dh zum Anpassen der Parameter [d. H. Der Gewichte] des Klassifikators.

Validierungssatz : Ein Satz von Beispielen, mit denen die Parameter [dh die Architektur, nicht die Gewichte] eines Klassifikators optimiert werden, um beispielsweise die Anzahl der ausgeblendeten Elemente zu bestimmen Einheiten in einem neuronalen Netz.

Testmenge : Eine Reihe von Beispielen, die nur zur Bewertung der Leistung [Verallgemeinerung] eines vollständig spezifizierten Klassifikators verwendet werden.

From ftp://ftp.sas.com/pub/neural/FAQ1.txt section " Wie lautet die Grundgesamtheit, Stichprobe, Trainingssatz, Designsatz, Validierung "

Die Fehleroberfläche unterscheidet sich für verschiedene Datensätze von Ihrem Datensatz (Batch-Lernen). Wenn Sie daher ein sehr gutes lokales Minimum für Ihre Testsatzdaten finden, ist dies möglicherweise kein sehr guter Punkt und 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 gutem Fehler vorherzusagen. Mit anderen Worten, das Netzwerk sollte in der Lage sein, die Beispiele zu verallgemeinern , so dass es die Daten lernt und sich die Daten nicht einfach merkt oder lädt Trainingsset durch Überanpassung der Trainingsdaten.

Der Validierungsdatensatz ist ein Datensatz für die Funktion, die Sie lernen möchten und den Sie nicht direkt zum Trainieren des Netzwerks verwenden. Sie trainieren das Netzwerk mit einem Datensatz, den Sie Trainingsdatensatz nennen. Wenn Sie einen gradientenbasierten Algorithmus zum Trainieren des Netzwerks verwenden, hängen die Fehleroberfläche und der Gradient an einem bestimmten Punkt vollständig vom Trainingsdatensatz ab, sodass der Trainingsdatensatz direkt zum Anpassen der Gewichte verwendet wird. Um sicherzustellen, dass das Netzwerk nicht überlastet wird, 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, deutet ein guter Fehler für die Validierung und auch für den Testsatz darauf hin, dass das Netzwerk für die Beispiele der Zuggarnituren eine gute Vorhersage trifft, und es wird auch erwartet, dass es im Neuzustand eine gute Leistung erbringt Beispiele werden dem Netzwerk vorgestellt, das im Trainingsprozess nicht verwendet wurde.

Frühes Anhalten ist eine Möglichkeit, das Training zu beenden. Es stehen verschiedene Varianten zur Verfügung, die Hauptübersicht ist, dass sowohl der Zug- als auch der Validierungssatzfehler überwacht werden, der Zugfehler bei jeder Iteration abnimmt (Backprop und Brothers) und zunächst der Validierungsfehler abnimmt. Das Training wird abgebrochen, sobald der Validierungsfehler zu steigen beginnt. Die Gewichtskonfiguration an dieser Stelle gibt ein Modell an, das die Trainingsdaten sowie die Daten gut vorhersagt, die vom Netzwerk nicht gesehen werden . Da jedoch die Validierungsdaten tatsächlich die Gewichtskonfiguration indirekt beeinflussen, wird die Gewichtskonfiguration ausgewählt. Hier kommt der Testsatz ins Spiel. Dieser Datensatz wird im Trainingsprozess niemals 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 wird gefunden. Dieser Fehler ist ein Repräsentant des Fehlers, den wir von absolut neuen Daten für dasselbe Problem erwarten können.

EDIT:

Falls Sie nicht über genügend Daten für einen Validierungssatz verfügen, können Sie crossvalidation verwenden, um die Parameter abzustimmen und den Testfehler abzuschätzen.

69
phoxis

Der Kreuzvalidierungssatz wird für die Modellauswahl verwendet. Wählen Sie beispielsweise das Polynommodell mit der geringsten Fehlerquote 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

6
user2410953

Angenommen, Sie trainieren ein Modell an einem Trainingssatz und messen dann seine Leistung an einem Testsatz. Sie glauben, dass noch Verbesserungspotenzial besteht, und versuchen, die Hyperparameter zu optimieren (Wenn das Modell ein neuronales Netzwerk ist - Hyperparameter sind die Anzahl der Ebenen oder Knoten in den Ebenen). Jetzt bekommen 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 Ändern der Hyperparameter eine gewisse Verzerrung eingeführt haben, um eine bessere Genauigkeit des Testsets zu erzielen. Grundsätzlich haben Sie das Modell und die Hyperparameter 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
  • prüfset
  • validierungssatz

Sie verfahren wie zuvor, verwenden jedoch dieses Mal das Validierungsset, um die Leistung zu testen und die Hyperparameter zu optimieren. Insbesondere trainieren Sie mehrere Modelle mit verschiedenen Hyperparametern für den reduzierten Trainingssatz (d. H. Den vollständigen Trainingssatz abzüglich des Validierungssatzes) und wählen das Modell aus, das für den Validierungssatz die beste Leistung erbringt.

Sobald Sie das leistungsstärkste Modell im Validierungssatz ausgewählt haben, trainieren Sie das beste Modell im vollständigen Trainingssatz (einschließlich des Validierungssatzes). Auf diese Weise erhalten Sie das endgültige Modell.

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

1
Aditya