Wie werden Gewichte in der Batch-Lernmethode in neuronalen Netzen aktualisiert?

13

Kann mir bitte jemand sagen, wie ich ein neuronales Netzwerk mit der Batch-Methode aufbauen soll?

Ich habe gelesen, dass wir im Batch-Modus für alle Stichproben im Trainingssatz den Fehler, das Delta und damit die Delta-Gewichte für jedes Neuron im Netzwerk berechnen und diese dann akkumulieren, anstatt sie sofort zu aktualisieren, und bevor wir beginnen In der nächsten Epoche aktualisieren wir die Gewichte.

Ich habe auch irgendwo gelesen, dass die Batch-Methode der Online-Methode ähnelt, mit dem Unterschied, dass man nur die Fehler für alle Stichproben im Trainingssatz summieren und dann den Durchschnitt daraus bilden und diese dann zum Aktualisieren der Gewichte wie folgt verwenden muss man macht in der Online-Methode (der Unterschied ist nur der Durchschnitt) wie folgt:

for epoch=1 to numberOfEpochs

   for all i samples in training set

         calculate the errors in output layer
         SumOfErrors += (d[i] - y[i])
   end

   errorAvg = SumOfErrors / number of Samples in training set

   now update the output layer with this error
   update all other previous layers

   go to the next epoch

end
  • Welche davon sind wirklich die richtige Form der Batch-Methode?
  • Wenn Sie beim ersten Beispiel nicht alle Delta-Gewichte addieren, erhalten Sie eine große Anzahl?
Rika
quelle
1
Die "richtige" Methode hängt vom Kontext ab. In vielen Fällen konvergiert die Aktualisierung der Gewichte nur einmal pro Epoche viel langsamer als die stochastische Aktualisierung (Aktualisierung der Gewichte nach jedem Beispiel). Ich werde hinzufügen, dass es einen Konsens gibt, dass Sie im Allgemeinen eine Form der Stapelaktualisierung verwenden möchten, aber viel häufiger als 1x pro Epoche.
Tahlor

Antworten:

8

Die Verwendung von Durchschnitt oder Summe ist äquivalent in dem Sinne, dass es Paare von Lernraten gibt, für die sie dasselbe Update erzeugen.

Um dies zu bestätigen, rufen Sie zunächst die Aktualisierungsregel auf:

Δwichj=-αEwichj

μEnnμEnw

Δwichj=-α(nμ)wichj=-αnμwichj

ΔwΔw

Sean Easter
quelle
1
Sind Mini-Batch-Gradientenabfahrten die gleichen Batch-Gradientenabfahrten? Ich bin hier verloren! wenn nicht, was ist der Unterschied zwischen diesen? Korrigieren Sie mich, wenn ich falsch liege. Im Stapelmodus muss der gesamte Datensatz in Stapeln gelesen, Gradienten berechnet und wenn alle gelesen wurden, gemittelt und die Parameter aktualisiert werden Batch wird gelesen, Gradienten werden berechnet und Parameter werden aktualisiert, und dann wird der nächste Mini-Batch gelesen, bis die eine Epoche vorbei ist.
Rika
1
Das ist die allgemein vorgegebene Definition: Aktualisieren Sie die Parameter mit jeweils einer Teilmenge der Trainingsdaten. (Es gibt einige Methoden, bei denen Mini-Batches bis zur Konvergenz nach dem Zufallsprinzip abgetastet werden. Das heißt, der Batch wird in einer Epoche nicht durchlaufen.) Überprüfen Sie, ob dies hilfreich ist.
Sean Easter
0

Die beiden Antworten sind gleichwertig. Ich persönlich würde es als durchschnittlichen Fehler anstelle der Summe betrachten. Denken Sie jedoch daran, dass der Gradientenabstieg einen Parameter hat, der als Lernrate bezeichnet wird, und dass nur ein Teil des Gradienten des Fehlers subtrahiert wird. Ob der Fehler als Gesamtdurchschnitt definiert ist, kann durch Ändern der Lernrate kompensiert werden.

jlimahaverford
quelle
danke, aber wenn sie wirklich gleich sind, warum sollte man so viel Speicher verschwenden, um die akkumulierten Aktualisierungen für jedes Muster beizubehalten, wenn wir nur die Fehler summieren können, die nur eine einfache Variable wären?
Rika