私は、さまざまなリソースを使ってすべての部分をまとめて、Pythonでニューラルネットワークモデルを開発しています。すべてが機能していますが、数学のいくつかについて質問があります。モデルにはさまざまな隠れ層があり、最後に隠されたレイヤーを除くすべての隠しレイヤーに対してreluを使用します。これはシグモイドを使用します。pythonを使ったバックプロパゲーション/ numpy - ニューラルネットワークの重みとバイアス行列の導関数を計算する
コスト関数は:ALが最後シグモイド活性化後確率予測をある
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
が適用されます。バックプロパゲーションの私の実装の一部で
、Iは、(任意の層で前方伝播の線形ステップに対するコストの誘導体)dZ
を与え、
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
を以下の使用、誘導体層の重み行列W
、バイアスベクトルb
、および前の層の活性化の導関数dA_prev
のそれぞれが計算される。
このステップに補完している前方部分は、この方程式である:Z = np.dot(W, A_prev) + b
私の質問は:dW
とdb
を計算するには、なぜそれが1/m
で乗算する必要があるのでしょうか?私は微積分のルールを使ってこれを差別化しようとしましたが、この用語がどのように適合するかは不明です。
助けてください!