Ich leite zunächst der Einfachheit halber den Fehler für eine Faltungsschicht unten für ein eindimensionales Array (Eingabe) ab, das dann leicht auf ein mehrdimensionales Array übertragen werden kann:
Wir nehmen hier an, dass die der Länge N die Eingaben der l - 1- ten Konv. Sind. Schicht, m ist die Kerngröße der Gewichte w, die jedes Gewicht mit w i bezeichnen, und die Ausgabe ist x l .
Daher können wir schreiben (beachten Sie die Summation von Null): x l i = m - 1 ∑ a = 0 w a y l - 1 a + i
wobei y l iyl - 1N.l - 1mwwichxl
xlich= ∑a = 0m - 1weinyl - 1a + i
und
f die Aktivierungsfunktion (zB sigmoidal). Damit können wir nun einige Fehlerfunktionen
E und die Fehlerfunktion auf der Faltungsschicht (die Ihrer vorherigen Schicht) betrachten, die durch
∂ E / ∂ y l i gegeben ist . Wir wollen nun die Abhängigkeit des Fehlers in einer der Gewichte der vorherigen Schicht (en) herausfinden:
∂ E.ylich= f( xlich)fE.∂E./ ∂ylich
wobei wir die Summe über alle Ausdrücke haben, in denen
wavorkommt, die
N-m sind. Beachten Sie auch, dass wir wissen, dass der letzte Term aus der Tatsache
resultiert, dass
∂x l i∂E.∂wein= ∑a = 0N.- m∂E.∂xlich∂xlich∂wein= ∑a = 0N.- m∂E.∂weinyl - 1i + a
weinN.- m was Sie aus der ersten Gleichung sehen können.
Um den Gradienten zu berechnen, müssen wir den ersten Term kennen, der berechnet werden kann durch:
∂E.∂xlich∂wein= yl - 1i + a
wobei der erste Term wiederum der Fehler in der vorherigen Schicht und
fdie nichtlineare Aktivierungsfunktion ist.
∂E.∂xlich= ∂E.∂ylich∂ylich∂xlich= ∂E.∂ylich∂∂xlichf( xlich)
f
Mit allen notwendigen Entitäten können wir nun den Fehler berechnen und effizient zurück auf die wertvolle Schicht übertragen:
δl - 1ein= ∂E.∂yl - 1ich= ∑a = 0m - 1∂E.∂xli - a∂xli - a∂yl - 1ich= ∑a = 0m - 1∂E.∂xli - awfl i p p e dein
xlichyl - 1ichfl i p p e dT.
Daher können Sie den Fehler in der nächsten Ebene einfach berechnen durch (jetzt in Vektornotation):
δl= ( wl)T.δl + 1f'( xl)
welches für eine Faltungs- und Unterabtastschicht wird:
δl= u p s a m p l e ( ( wl)T.δl + 1) f'( xl)
bei dem die
u p s a m p l e Operation überträgt den Fehler durch die maximale Pooling-Schicht.
Bitte zögern Sie nicht, mich hinzuzufügen oder zu korrigieren!
Referenzen siehe:
http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/
http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
und für eine C ++ - Implementierung (ohne Installation):
https://github.com/nyanp/tiny-cnn#supported-networks