Antworten:
In der Terminologie des neuronalen Netzwerks:
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 .
Epoche und Iteration beschreiben verschiedene Dinge.
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.
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 .
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.
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.
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 .
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.
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.
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.
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.
Ich glaube, Iteration entspricht einem einzelnen Batch Forward + Backprop in Batch SGD. Epoche durchläuft den gesamten Datensatz einmal (wie bereits erwähnt).
Ich denke im Zusammenhang mit der Terminologie neuronaler Netze:
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:
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!
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.
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.
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:
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/
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).