Ich habe folgende CNN:
- Ich beginne mit einem Eingabebild der Größe 5x5
- Dann wende ich die Faltung mit 2x2 Kernel und stride = 1 an, wodurch eine Feature-Map der Größe 4x4 erzeugt wird.
- Dann wende ich 2x2 Max-Pooling mit Stride = 2 an, wodurch die Feature-Map auf 2x2 verkleinert wird.
- Dann wende ich logistische Sigmoid.
- Dann eine vollständig verbundene Schicht mit 2 Neuronen.
- Und eine Ausgabeebene.
Nehmen wir der Einfachheit halber an, dass ich den Vorwärtsdurchlauf bereits abgeschlossen und δH1 = 0,25 und δH2 = -0,15 berechnet habe
Nach dem vollständigen Vorwärtsdurchlauf und dem teilweise abgeschlossenen Rückwärtsdurchlauf sieht mein Netzwerk folgendermaßen aus:
Dann berechne ich Deltas für die nichtlineare Schicht (logistisches Sigma):
Dann propagiere ich Deltas zur 4x4-Ebene und setze alle Werte, die durch Max-Pooling herausgefiltert wurden, auf 0 und die Verlaufskarte sieht folgendermaßen aus:
Wie aktualisiere ich die Kernel-Gewichte von dort aus? Und wenn mein Netzwerk vor 5x5 eine andere Faltungsschicht hatte, welche Werte sollte ich verwenden, um die Kernelgewichtungen zu aktualisieren? Und ist meine Berechnung insgesamt korrekt?
quelle
Antworten:
Eine Faltung verwendet ein Prinzip der Gewichtsverteilung, das die Mathematik erheblich verkompliziert. Versuchen wir jedoch, durch das Unkraut zu kommen. Ich beziehe den größten Teil meiner Erklärung aus dieser Quelle .
Vorwärtspass
Wie Sie gesehen haben, kann der Vorwärtsdurchgang der Faltungsschicht ausgedrückt werden als
Rückausbreitung
Angenommen, Sie verwenden den als definierten mittleren quadratischen Fehler (MSE)
wir wollen bestimmen
Dies durchläuft den gesamten Ausgaberaum, bestimmt den Fehler, den die Ausgabe verursacht, und bestimmt dann den Beitragsfaktor des Kernelgewichts in Bezug auf diese Ausgabe.
Nennen wir den Fehlerbeitrag aus dem Ausgaberaum-Delta der Einfachheit halber und um den zurückpropagierten Fehler zu verfolgen,
Der Beitrag der Gewichte
Die Faltung ist definiert als
somit,
Wenn wir die Summe erweitern, stellen wir fest, dass die Ableitung nur dann ungleich Null istm=m′ n=n′
Dann zurück in unsere Fehlerbedingung
Stochastische Gefälleabfahrt
Lassen Sie uns einige davon berechnen
Bitte lassen Sie mich wissen, wenn es Fehler in der Ableitung gibt.
Update: Code korrigiert
quelle
gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')