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
xli,j=∑m∑nwlm,nol−1i+m,j+n+bli,j
k1k2k1=k2=2x0,0=0.25mn
Rückausbreitung
Angenommen, Sie verwenden den als definierten mittleren quadratischen Fehler (MSE)
E=12∑p(tp−yp)2
wir wollen bestimmen
∂E∂wlm′,n′m′n′w10,0=−0.13HK
(H−k1+1)(W−k2+1)
44w10,0=−0.13x10,0=0.25
∂E∂wlm′,n′=∑H−k1i=0∑W−k2j=0∂E∂xli,j∂xli,j∂wlm′,n′
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,
∂E∂xli,j=δli,j
Der Beitrag der Gewichte
Die Faltung ist definiert als
xli,j=∑m∑nwlm,nol−1i+m,j+n+bli,j
somit,
∂xli,j∂wlm′,n′=∂∂wlm′,n′(∑m∑nwlm,nol−1i+m,j+n+bli,j)
Wenn wir die Summe erweitern, stellen wir fest, dass die Ableitung nur dann ungleich Null ist m=m′n=n′
∂xli,j∂wlm′,n′=ol−1i+m′,j+n′
Dann zurück in unsere Fehlerbedingung
∂E∂wlm′,n′=∑H−k1i=0∑W−k2j=0δli,jol−1i+m′,j+n′
Stochastische Gefälleabfahrt
w(t+1)=w(t)−η∂E∂wlm′,n′
Lassen Sie uns einige davon berechnen
import numpy as np
from scipy import signal
o = np.array([(0.51, 0.9, 0.88, 0.84, 0.05),
(0.4, 0.62, 0.22, 0.59, 0.1),
(0.11, 0.2, 0.74, 0.33, 0.14),
(0.47, 0.01, 0.85, 0.7, 0.09),
(0.76, 0.19, 0.72, 0.17, 0.57)])
d = np.array([(0, 0, 0.0686, 0),
(0, 0.0364, 0, 0),
(0, 0.0467, 0, 0),
(0, 0, 0, -0.0681)])
gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')
Array ([[0.044606, 0.094061], [0.011262, 0.068288]])
∂E∂w
Bitte lassen Sie mich wissen, wenn es Fehler in der Ableitung gibt.
Update: Code korrigiert