Ich entwickle ein neuronales Netzwerkmodell in Python und verwende verschiedene Ressourcen, um alle Teile zusammenzufügen. Alles funktioniert, aber ich habe Fragen zu Mathe. Das Modell hat eine variable Anzahl von versteckten Layern, verwendet Reluktivierung für alle versteckten Layer außer dem letzten, der Sigmoid verwendet.Backpropagation mit python/numpy - Berechnung der Ableitung von Gewichts- und Bias-Matrizen im neuronalen Netzwerk
Die Kostenfunktion ist:
def calc_cost(AL, Y):
m = Y.shape[1]
cost = (-1/m) * np.sum((Y * np.log(AL)) - ((1 - Y) * np.log(1 - AL)))
return cost
wo AL Wahrscheinlichkeits Prädiktion nach der letzten sigmoid Aktivierung angelegt ist.
In Teil meiner Umsetzung Backpropagation, verwende ich die folgenden
def linear_backward_step(dZ, A_prev, W, b):
m = A_prev.shape[1]
dW = (1/m) * np.dot(dZ, A_prev.T)
db = (1/m) * np.sum(dZ, axis=1, keepdims=True)
dA_prev = np.dot(W.T, dZ)
return dA_prev, dW, db
wo (zu irgendeiner gegebenen Schicht, die die Ableitung der Kosten in Bezug auf einen linearen Schritt der Vorwärtsausbreitung) dZ
gegeben, das Derivat der Gewichtsmatrix W
der Schicht, dem Vorspannungsvektor b
und dem Derivat der Aktivierung der vorherigen Schicht dA_prev
werden jeweils berechnet.
Der vordere Teil, die zu diesem Schritt ergänzen ist, ist diese Gleichung: Z = np.dot(W, A_prev) + b
Meine Frage ist: in dW
und db
Berechnung, warum ist es von 1/m
zu multiplizieren notwendig? Ich habe versucht, dies mit Kalkül Regeln zu unterscheiden, aber ich bin mir nicht sicher, wie dieser Begriff passt.
Jede Hilfe ist willkommen!