Epoche gegen Iteration beim Training neuronaler Netze

Antworten:

573

In der Terminologie des neuronalen Netzwerks:

  • eine Epoche = ein Vorwärtsdurchlauf und ein Rückwärtsdurchlauf aller Trainingsbeispiele
  • Chargengröße = Anzahl der Trainingsbeispiele in einem Vorwärts- / Rückwärtsdurchlauf. Je höher die Stapelgröße, desto mehr Speicherplatz benötigen Sie.
  • Anzahl der Iterationen = Anzahl der Durchgänge, wobei jeder Durchgang die Anzahl der Beispiele [Stapelgröße] verwendet. Um klar zu sein, ein Durchgang = ein Vorwärtsdurchlauf + ein Rückwärtsdurchlauf (wir zählen den Vorwärtsdurchlauf und den Rückwärtsdurchlauf nicht als zwei verschiedene Durchgänge).

Beispiel: Wenn Sie 1000 Trainingsbeispiele haben und Ihre Stapelgröße 500 beträgt, sind 2 Iterationen erforderlich, um 1 Epoche abzuschließen.

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


Der Begriff "Batch" ist nicht eindeutig: Einige Leute verwenden ihn, um den gesamten Trainingssatz zu bezeichnen, und andere verwenden ihn, um sich auf die Anzahl der Trainingsbeispiele in einem Vorwärts- / Rückwärtsdurchlauf zu beziehen (wie ich es in dieser Antwort getan habe). Um diese Mehrdeutigkeit zu vermeiden und deutlich zu machen, dass der Stapel der Anzahl der Trainingsbeispiele in einem Vorwärts- / Rückwärtsdurchlauf entspricht, kann der Begriff Mini-Stapel verwendet werden .

Franck Dernoncourt
quelle
37
Ich bin verwirrt. Warum sollten Sie für mehr als eine Epoche trainieren - für alle Daten mehr als einmal? Würde das nicht zu einer Überanpassung führen?
Soubriquet
29
@ Soubriquet Neuronale Netze werden normalerweise mit einer iterativen Optimierungsmethode (meistens Steigungsabstieg) trainiert, bei der häufig mehrere Durchgänge am Trainingssatz durchgeführt werden müssen, um gute Ergebnisse zu erzielen.
Franck Dernoncourt
6
Aber wenn es viele Trainingsmuster gibt, sagen wir 1 Million Dollar, würde nur eine Epoche ausreichen? Was machen Menschen normalerweise, wenn das Trainingsset sehr groß ist? Teilen Sie das Trainingsset einfach in Gruppen auf und führen Sie nur eine Epoche durch?
Pikachuchameleon
5
@pikachuchameleon Dies hängt von der Komplexität der Aufgabe ab: Eine Epoche kann in einigen Fällen tatsächlich ausreichen.
Franck Dernoncourt
9
@MaxPower - Normalerweise wird der Schritt nach jeder Iteration ausgeführt , wie die Antwort von Franck Dernoncourt impliziert. Das machen wir mit den Informationen aus dem Rückwärtspass. Bei einem Mini-Batch-Gradientenabstieg mit m Iterationen pro Epoche aktualisieren wir die Parameter m- mal pro Epoche.
Dan Mackinlay
142

Epoche und Iteration beschreiben verschiedene Dinge.


Epoche

Eine Epoche beschreibt, wie oft der Algorithmus den gesamten Datensatz sieht . Jedes Mal, wenn der Algorithmus alle Stichproben im Datensatz gesehen hat, ist eine Epoche abgeschlossen.

Wiederholung

Ein Iteration beschreibt die Anzahl der Male eine Charge von Daten durch den Algorithmus übergeben. Bei neuronalen Netzen bedeutet dies den Vorwärtsdurchlauf und den Rückwärtsdurchlauf . Jedes Mal, wenn Sie einen Datenstapel durch das NN leiten, 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, haben Sie insgesamt 15 Iterationen (5 * 3 = 15) für das Training.

Khon
quelle
15
Können Sie bitte erklären, ob die Gewichte nach jeder Epoche oder nach jeder Iteration aktualisiert werden?
Inherited Geek
7
@InheritedGeek Die Gewichte werden nach jedem Stapel aktualisiert, nicht nach Epoche oder Iteration.
Thisisbhavin
2
@bhavindhedhi 1 Batch = 1 Iteration, nicht wahr?
Biene
2
@Bee Nein, nehmen Sie zum Beispiel 10000 Trainingsmuster und 1000 Proben pro Charge, dann werden 10 Iterationen benötigt, um 1 Epoche abzuschließen.
Thisisbhavin
4
@bhavindhedhi Ich denke, was Bee gefragt hat, ist, dass Sie in Ihrem Beispiel von 10000 Gesamtproben mit 1000 pro Charge effektiv 10 Gesamtchargen haben, was 10 Iterationen entspricht. Ich denke, das macht Sinn, bin mir aber nicht sicher, ob das eine richtige Art ist, es zu interpretieren.
Michael Du
24

Viele Trainingsalgorithmen für neuronale Netze umfassen die mehrfache Darstellung des gesamten Datensatzes für das neuronale Netz. Oft wird eine einzelne Darstellung des gesamten Datensatzes als "Epoche" bezeichnet. Im Gegensatz dazu präsentieren einige Algorithmen dem neuronalen Netzwerk jeweils einen Fall.

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

Anzeichen
quelle
3
Großartig, können Sie sich auf eine Veröffentlichung beziehen, in der dies detailliert beschrieben wird?
Alex
17

Um den Unterschied zwischen diesen zu verstehen, müssen Sie den Gradientenabstiegsalgorithmus und seine Varianten verstehen .

Bevor ich mit der eigentlichen Antwort beginne, möchte ich einige Hintergrundinformationen erstellen.

Ein Stapel 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 einzigen Durchgang (vorwärts und rückwärts) verarbeitet.

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

Iterationen sind 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 gibt an, wie oft ein Lernalgorithmus den gesamten Datensatz sieht. Dies entspricht möglicherweise nicht der Anzahl der Iterationen , da der Datensatz auch in Minibatches verarbeitet werden kann. Im Wesentlichen kann ein einzelner Durchgang nur einen Teil des Datensatzes verarbeiten. In solchen Fällen entspricht die Anzahl der Iterationen nicht der Anzahl der Epochen .

Bei einem Batch-Gradientenabstieg wird der gesamte Batch bei jedem Trainingsdurchgang verarbeitet. Daher führt der Gradientenabstiegsoptimierer zu einer gleichmäßigeren Konvergenz als der Mini-Batch-Gradientenabstieg, benötigt jedoch mehr Zeit. Es wird garantiert, dass der Batch-Gradientenabstieg ein Optimum findet, wenn es existiert.

Der stochastische Gradientenabstieg ist ein Sonderfall des Mini-Batch-Gradientenabfalls, bei dem die Mini-Batch-Größe 1 beträgt .

Batch-Gradientenabstieg vs. Mini-Batch-Gradientenabstieg

Vergleich von Batch-, stochastischen und Mini-Batch-Gradientenabfahrten.

nikhilbalwani
quelle
12

Sie haben Trainingsdaten, die Sie mischen und Mini-Batches daraus auswählen. Wenn Sie Ihre Gewichte und Vorspannungen mit einem Mini-Batch anpassen, haben Sie eine Iteration abgeschlossen. Sobald Sie Ihre Mini-Batches aufgebraucht haben, haben Sie eine Epoche abgeschlossen. Dann mischen Sie Ihre Trainingsdaten erneut, wählen Ihre Mini-Batches erneut aus und durchlaufen sie erneut. Das wäre deine zweite Epoche.

Milad P.
quelle
Könnte es mit einer Kreuzvalidierung verbunden sein?
Sk
8

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

Eine Epoche entspricht dem gesamten Trainingssatz, der einmal durch das gesamte Netzwerk läuft. Es kann nützlich sein, dies zu begrenzen, z. B. um Überanpassungen zu bekämpfen.

Nikana Reklawyks
quelle
7

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.

Elijah Saounkine
quelle
4
Epoche ist keine Zahl ... das könnte mit Umformulierung zu tun haben, denke ich.
Nikana Reklawyks
Heruntergestuft, weil dies falsch ist: Eine Epoche ist die Anzahl der Episoden oder Stapel, sodass das Modell alle Trainingsdaten einmal gesehen hat.
JohnAllen
7

Nach meinem Verständnis benötigen Sie zum Trainieren eines NN einen großen Datensatz mit vielen Datenelementen. Wenn NN trainiert wird, gehen Datenelemente nacheinander in NN ein, was als Iteration bezeichnet wird. Wenn der gesamte Datensatz durchlaufen wird, spricht man von einer Epoche.

36Kr
quelle
6

Ich glaube, Iteration entspricht einem einzelnen Batch Forward + Backprop in Batch SGD. Epoche durchläuft den gesamten Datensatz einmal (wie bereits erwähnt).

Andrei Pokrovsky
quelle
5

Ich denke im Zusammenhang mit der Terminologie neuronaler Netze:

  • Epoche: Wenn Ihr Netzwerk den gesamten Trainingssatz durchläuft (dh einmal für jede Trainingsinstanz), wird eine Epoche abgeschlossen .

Um definieren Iteration (aka Schritte ), müssen Sie zuerst wissen über Losgröße :

  • Stapelgröße: Sie möchten wahrscheinlich nicht die gesamten Trainingsinstanzen auf einmal verarbeiten, da dies ineffizient ist und viel Speicher benötigt. In der Regel werden Trainingsinstanzen in Teilmengen (dh Stapel) aufgeteilt, ein Durchlauf über die ausgewählte Teilmenge (dh Stapel) durchgeführt und anschließend das Netzwerk durch Backpropagation optimiert. Die Anzahl der Trainingsinstanzen innerhalb einer Teilmenge (dh Batch) wird als batch_size bezeichnet .

  • Iteration: (auch als Trainingsschritte bezeichnet) Sie wissen, dass Ihr Netzwerk alle Trainingsinstanzen in einem Durchgang durchlaufen muss, um eine Epoche abzuschließen. Aber warte! Wenn Sie Ihre Trainingsinstanzen in Stapel aufteilen, bedeutet dies, dass Sie nur einen Stapel (eine Teilmenge von Trainingsinstanzen) in einem Vorwärtsdurchlauf verarbeiten können. Was ist also mit den anderen Stapeln? Hier kommt der Begriff Iteration ins Spiel:

    • Definition: Die Anzahl der Vorwärtsdurchläufe (die Anzahl der von Ihnen erstellten Stapel), die Ihr Netzwerk ausführen muss, um eine Epoche abzuschließen (dh alle Trainingsinstanzen zu durchlaufen), wird als Iteration bezeichnet .

Zum Beispiel, wenn Sie 1000 Trainingsinstanzen haben und Batching mit einer Größe von 10 durchführen möchten ; Sie müssen 10000/10 = 1000 Iterationen durchführen , um eine Epoche abzuschließen.

Hoffe das könnte deine Frage beantworten!

inverted_index
quelle
3

Die Epoche ist eine Iteration einer Teilmenge der Stichproben für das Training, beispielsweise des Gradientenabstiegsalgorithmus in einem neutralen Netzwerk. Eine gute Referenz ist: http://neuralnetworksanddeeplearning.com/chap1.html

Beachten Sie, dass die Seite einen Code für den Gradientenabstiegsalgorithmus enthält, der die Epoche 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 Gradientenabstiegsalgorithmus. Warum Epoche effektiv ist, wird auch auf der Seite erklärt. Bitte werfen Sie einen Blick darauf.

Hallo Welt
quelle
1

Epoche

Ein vollständiger Trainingsdurchlauf über den gesamten Datensatz, sodass jedes Beispiel einmal gesehen wurde. Somit stellt eine Epoche N / Losgröße Ausbildung Iterationen , wobei N die Gesamtzahl der Beispiele ist.

Wiederholung

Eine einzelne Aktualisierung der Gewichte eines Modells während des Trainings. Eine Iteration besteht in Bezug auf den Verlust auf einem einzigen die Gradienten der Parameter des Berechnens batch von Daten.

als Bonus:

Stapel

Die Reihe von Beispielen, die in einer Iteration ( dh einer Gradientenaktualisierung ) des Modelltrainings verwendet werden .

Siehe auch Chargengröße .

Quelle: https://developers.google.com/machine-learning/glossary/

Mathieu Gemard
quelle
0

1. Epoch ist ein vollständiger Zyklus, in dem das neuronale Netz alle Daten gesehen hat.
2. Man könnte sagen, 100.000 Bilder, um das Modell zu trainieren, aber der Speicherplatz reicht möglicherweise nicht aus, um alle Bilder gleichzeitig zu verarbeiten. Daher teilen wir das Training auf kleinere Datenblöcke auf, die als Stapel bezeichnet werden. Beispiel: Die Stapelgröße beträgt 100.
3. Wir müssen alle Bilder mit mehreren Stapeln abdecken. Wir benötigen also 1000 Iterationen, um alle 100.000 Bilder abzudecken. (100 Stapelgröße * 1000 Iterationen)
4. Sobald das neuronale Netzwerk die gesamten Daten betrachtet hat, wird es als 1 Epoche (Punkt 1) bezeichnet. Möglicherweise sind mehrere Epochen erforderlich, um das Modell zu trainieren. (Sagen wir 10 Epochen).

Rishi Jain
quelle