Ich habe versucht, ein neuronales Netzwerk von Grund auf neu zu implementieren, um die Mathematik dahinter zu verstehen. Mein Problem hängt vollständig mit der Rückausbreitung zusammen, wenn wir eine Ableitung in Bezug auf die Verzerrung vornehmen, und ich habe alle Gleichungen abgeleitet, die bei der Rückausbreitung verwendet werden. Jetzt stimmt jede Gleichung mit dem Code für das neuronale Netzwerk überein, mit Ausnahme der Ableitung in Bezug auf Verzerrungen.
z1=x.dot(theta1)+b1
h1=1/(1+np.exp(-z1))
z2=h1.dot(theta2)+b2
h2=1/(1+np.exp(-z2))
dh2=h2-y
#back prop
dz2=dh2*(1-dh2)
H1=np.transpose(h1)
dw2=np.dot(H1,dz2)
db2=np.sum(dz2,axis=0,keepdims=True)
Ich habe online nach dem Code gesucht und möchte wissen, warum wir die Matrix addieren und dann der Skalar db2=np.sum(dz2,axis=0,keepdims=True)
von der ursprünglichen Verzerrung subtrahiert wird, warum nicht die Matrix als Ganzes subtrahiert wird. Kann mir jemand helfen, etwas Intuition dahinter zu geben. Wenn ich eine partielle Ableitung des Verlusts in Bezug auf die Vorspannung nehme, gibt es mir nur einen oberen Gradienten, der dz2 ist, weil z2=h1.dot(theta2)+b2
h1 und Theta 0 und b2 1 sind. Der obere Term bleibt also übrig.
b2+=-alpha*db2