it-swarm.com.de

Epoche gegen Iteration beim Training neuronaler Netze

Was ist der Unterschied zwischen Epoche und Iteration beim Training eines mehrschichtigen Perzeptrons?

362
mohammad

In der neuronalen Netzwerkterminologie:

  • eine Epoche = ein Vorwärtsdurchlauf und ein Rückwärtsdurchlauf von alles den Trainingsbeispielen
  • Losgröße = Anzahl der Trainingsbeispiele in einem Vor-/Rücklauf. Je höher die Stapelgröße, desto mehr Speicherplatz wird benötigt.
  • anzahl der Iterationen = Anzahl der Durchläufe, jeder Durchlauf unter Verwendung der [Stapelgröße] Anzahl der Beispiele. Um es klar auszudrücken, ein Durchgang = ein Vorwärtsdurchgang + ein Rückwärtsdurchgang (wir zählen den Vorwärtsdurchgang und den Rückwärtsdurchgang nicht als zwei verschiedene Durchgänge).

Beispiel: Wenn Sie 1000 Trainingsbeispiele haben und Ihre Stapelgröße 500 ist, werden 2 Iterationen benötigt, um 1 Epoche abzuschließen.

Zu Ihrer Information: Kompromiss zwischen Stapelgröße und Anzahl der Iterationen zum Trainieren eines neuronalen Netzwerks


Der Begriff "Stapel" ist mehrdeutig: Einige Leute bezeichnen damit den gesamten Trainingssatz, andere beziehen sich damit auf die Anzahl der Trainingsbeispiele in einem Vorwärts-/Rückwärtsdurchlauf (wie in dieser Antwort). Um diese Unklarheit zu vermeiden und zu verdeutlichen, dass die Charge der Anzahl der Trainingsbeispiele in einem Vorwärts-/Rückwärtsdurchlauf entspricht, kann der Begriff Minibatch verwendet werden.

530

Epoche und Iteration beschreiben verschiedene Dinge.


Epoche

Ein Epoche beschreibt, wie oft der Algorithmus den gesamten Datensatz sieht. Jedes Mal, wenn der Algorithmus alle Samples im Dataset gesehen hat, wurde eine Epoche abgeschlossen.

Wiederholung

Ein Iteration beschreibt die Häufigkeit, mit der Batch Daten den Algorithmus durchlaufen haben. Bei neuronalen Netzen bedeutet dies Vorwärtsdurchlauf und Rückwärtsdurchlauf. Jedes Mal, wenn Sie einen Datenstapel durch den NN übergeben, haben Sie eine Iteration abgeschlossen.


Beispiel

Ein Beispiel könnte es klarer machen.

Angenommen, Sie haben einen Datensatz mit 10 Beispielen (oder Beispielen). Sie haben eine Stapelgröße von 2 und Sie haben angegeben, dass der Algorithmus für 3 Epochen ausgeführt werden soll.

Daher haben Sie in jeder Epoche 5 Chargen (10/2 = 5). Jeder Stapel wird durch den Algorithmus geleitet, daher haben Sie 5 Iterationen pro Epoche. Da Sie 3 Epochen angegeben haben, stehen insgesamt 15 Iterationen (5 * 3 = 15) für das Training zur Verfügung.

127
Khon

Bei vielen Trainingsalgorithmen für neuronale Netze werden mehrere Präsentationen des gesamten Datensatzes für das neuronale Netz durchgeführt. Oft wird eine einzelne Darstellung des gesamten Datensatzes als "Epoche" bezeichnet. Im Gegensatz dazu präsentieren einige Algorithmen dem neuronalen Netzwerk Daten von Fall zu Fall.

"Iteration" ist ein viel allgemeinerer Begriff, aber da Sie zusammen mit "Epoch" danach gefragt haben, gehe ich davon aus, dass sich Ihre Quelle auf die Darstellung eines Einzelfalls in einem neuronalen Netzwerk bezieht.

23
Predictor

Sie haben Trainingsdaten, die Sie mischen und Mini-Chargen daraus auswählen. Wenn Sie Ihre Gewichte und Vorspannungen mit einem Mini-Batch anpassen, haben Sie eine Iteration abgeschlossen. Sobald du keine Minibatches mehr hast, hast du eine Epoche abgeschlossen. Dann mischen Sie Ihre Trainingsdaten erneut, wählen Ihre Mini-Stapel erneut aus und durchlaufen sie alle erneut. Das wäre deine zweite Epoche.

11
Milad P.

In der Regel teilen Sie Ihr Test-Set in kleine Gruppen auf, von denen das Netzwerk lernen kann, und führen das Training Schritt für Schritt durch die Anzahl der Ebenen, wobei Sie den Gradienten bis zum Ende anwenden. Alle diese kleinen Schritte können Iterationen genannt werden.

Ein Epoche entspricht dem gesamten Trainingssatz, der einmal das gesamte Netzwerk durchläuft. Es kann nützlich sein, dies einzuschränken, z. Überanpassung zu bekämpfen.

8

Eine Epoche enthält einige Iterationen. Genau das ist diese "Epoche". Definieren wir "Epoche" als die Anzahl der Iterationen über den Datensatz, um das neuronale Netzwerk zu trainieren.

7

Wenn Sie einen NN trainieren müssen, benötigen Sie meines Erachtens einen großen Datensatz, der viele Datenelemente enthält. Wenn NN trainiert wird, gehen die Daten nacheinander in NN ein, was als Iteration bezeichnet wird. Wenn der gesamte Datensatz durchlaufen wird, spricht man von einer Epoche.

7
36Kr

Ich glaube, Iteration entspricht einer einzelnen Charge vorwärts + rückwärts in der Charge SGD. Epoche durchläuft den gesamten Datensatz einmal (wie bereits erwähnt).

6

Um den Unterschied zwischen diesen zu verstehen, müssen Sie den Gradient-Descent-Algorithmus und seine Varianten verstehen.

Bevor ich mit der eigentlichen Antwort beginne, möchte ich etwas Hintergrundwissen aufbauen.

Eine Charge ist der vollständige Datensatz. Seine Größe ist die Gesamtzahl der Trainingsbeispiele im verfügbaren Datensatz.

Die Mini-Batch-Größe ist die Anzahl der Beispiele, die der Lernalgorithmus in einem Durchgang (vorwärts und rückwärts) verarbeitet.

Ein Mini-Batch ist ein kleiner Teil des Datensatzes der angegebenen Mini-Batch-Größe .

Iterationen ist die Anzahl der Datenstapel, die der Algorithmus gesehen hat (oder einfach die Anzahl der Durchgänge, die der Algorithmus für den Datensatz durchgeführt hat).

Epochen ist die Häufigkeit, mit der ein Lernalgorithmus den vollständigen Datensatz sieht. Dies entspricht möglicherweise nicht der Anzahl der Iterationen , da der Datensatz im Wesentlichen auch in Ministapeln verarbeitet werden kann Ein einzelner Durchlauf kann nur einen Teil des Datensatzes verarbeiten. In solchen Fällen ist die Anzahl der Iterationen ist nicht gleich der Anzahl der Epochen .

Im Fall eines Batch-Gefälle-Abstiegs wird bei jedem Trainingsdurchlauf der gesamte Batch verarbeitet. Daher führt der Gradientenabstiegsoptimierer zu einer gleichmäßigeren Konvergenz als der Minibatch-Gradientenabstieg, benötigt jedoch mehr Zeit. Der Batch-Gradientenabstieg wird garantiert, um ein Optimum zu finden, wenn es existiert.

Der stochastische Gradientenabstieg ist ein Sonderfall des Minibatch-Gradientenabstiegs, bei dem die Minibatch-Größe 1 .

Batch gradient descent vs Mini-batch gradient descent

Comparison of batch, stochastic and mini-batch gradient descents.

6
nikhilbalwani

Die Epoche ist eine Iteration einer Teilmenge der zu trainierenden Stichproben, beispielsweise des Gradientenabstiegsalgorithmus im neutralen Netzwerk. Eine gute Referenz ist: http://neuralnetworksanddeeplearning.com/chap1.html

Beachten Sie, dass die Seite einen Code für den Algorithmus für den Gradientenabstieg enthält, der Epoch verwendet

def SGD(self, training_data, epochs, mini_batch_size, eta,
        test_data=None):
    """Train the neural network using mini-batch stochastic
    gradient descent.  The "training_data" is a list of tuples
    "(x, y)" representing the training inputs and the desired
    outputs.  The other non-optional parameters are
    self-explanatory.  If "test_data" is provided then the
    network will be evaluated against the test data after each
    Epoch, and partial progress printed out.  This is useful for
    tracking progress, but slows things down substantially."""
    if test_data: n_test = len(test_data)
    n = len(training_data)
    for j in xrange(epochs):
        random.shuffle(training_data)
        mini_batches = [
            training_data[k:k+mini_batch_size]
            for k in xrange(0, n, mini_batch_size)]
        for mini_batch in mini_batches:
            self.update_mini_batch(mini_batch, eta)
        if test_data:
            print "Epoch {0}: {1} / {2}".format(
                j, self.evaluate(test_data), n_test)
        else:
            print "Epoch {0} complete".format(j)

Schauen Sie sich den Code an. Für jede Epoche generieren wir zufällig eine Teilmenge der Eingaben für den Algorithmus für den Gradientenabstieg. Warum Epoch effektiv ist, erfahren Sie auch auf der Seite. Bitte schau es dir an.

3
SmallChess