Der Gradientenabstieg funktioniert nicht ganz so, wie Sie es vorgeschlagen haben, aber ein ähnliches Problem kann auftreten.
Wir berechnen nicht den durchschnittlichen Verlust aus der Charge, sondern die durchschnittlichen Gradienten der Verlustfunktion. Die Gradienten sind die Ableitung des Verlusts in Bezug auf das Gewicht, und in einem neuronalen Netzwerk hängt der Gradient für ein Gewicht von den Eingaben dieses spezifischen Beispiels und auch von vielen anderen Gewichten im Modell ab.
Wenn Ihr Modell 5 Gewichte hat und Sie eine Mini-Batch-Größe von 2 haben, erhalten Sie möglicherweise Folgendes:
Beispiel 1. Verlust = 2, Gradienten = ( 1,5 , - 2,0 , 1,1 , 0,4 , - 0,9 )
Beispiel 2. Verlust = 3, Gradienten = ( 1,2 , 2,3 , - 1,1 , - 0,8 , - 0,7 )
Der Durchschnitt der Gradienten in dieser Mini-Charge wird berechnet ( 1,35 , 0,15 , 0 , - 0,2 , - 0,8 )
0
als Antwort auf Kommentare bearbeiten:
kL.ichwj
∂L.∂wj= 1k∑ki = 1∂L.ich∂wj
Der Tutorial-Code, auf den Sie in den Kommentaren verlinkt haben, verwendet Tensorflow, um den durchschnittlichen Verlust zu minimieren.
Tensorflow zielt darauf ab, zu minimieren1k∑ki = 1L.ich
Um dies zu minimieren, werden die Gradienten des durchschnittlichen Verlusts in Bezug auf jedes Gewicht berechnet und die Gewichte mithilfe des Gradientenabfalls aktualisiert:
∂L.∂wj= ∂∂wj1k∑ki = 1L.ich
Die Differenzierung kann in die Summe gebracht werden, so dass sie dem Ausdruck aus dem Ansatz in meinem Beispiel entspricht.
∂∂wj1k∑ki = 1L.ich= 1k∑ki = 1∂L.ich∂wj
code line 170
?Der Grund für die Verwendung von Mini-Batches besteht darin, dass ein gutes Trainingsbeispiel vorhanden ist, sodass das mögliche Rauschen durch Mittelung der Auswirkungen verringert wird. Es handelt sich jedoch auch nicht um einen vollständigen Batch, der für viele Datensätze eine große Menge an Speicherplatz erfordern könnte. Eine wichtige Tatsache ist, dass der Fehler, den Sie auswerten, immer eine Entfernung istzwischen Ihrer vorhergesagten Ausgabe und der tatsächlichen Ausgabe: Das bedeutet, dass es nicht negativ sein kann, sodass Sie, wie Sie sagten, keinen Fehler von 2 und -2 haben können, der sich aufhebt, sondern stattdessen zu einem Fehler von 4 wird Anschließend bewerten Sie den Gradienten des Fehlers in Bezug auf alle Gewichte, sodass Sie berechnen können, welche Änderung der Gewichte ihn am meisten reduzieren würde. Sobald Sie dies tun, machen Sie einen "Schritt" in diese Richtung, basierend auf der Größe Ihrer Lernrate Alpha. (Dies sind die Grundkonzepte. Ich werde nicht näher auf die Backpropagation für Deep NN eingehen.) Nachdem Sie dieses Training für eine bestimmte Anzahl von Epochen in Ihrem Datensatz ausgeführt haben, können Sie erwarten, dass Ihr Netzwerk konvergiert, wenn Ihr Lernschritt nicht zu groß ist lass es auseinander gehen. Sie könnten immer noch in einem lokalen Minimum endenDies kann vermieden werden, indem Sie Ihre Gewichte unterschiedlich initialisieren, verschiedene Optimierer verwenden und versuchen, sie zu regulieren.
quelle