ニューラルネットワークをゼロから実装して、その背後にある数学を理解しようとしました。私の問題は、バイアスに関する導関数を取るときの逆伝播に完全に関連しており、逆伝播で使用されるすべての方程式を導き出しました。これで、バイアスに関する微分を除いて、すべての方程式がニューラルネットワークのコードと一致しています。
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)
オンラインでコードを検索しましたが、なぜ行列を加算してdb2=np.sum(dz2,axis=0,keepdims=True)
からスカラーが元のバイアスから減算されるのか、行列全体が減算されないのはなぜですか。誰かがその背後にある直感を与えるのを手伝ってくれる?バイアスに関して損失の偏微分をとるz2=h1.dot(theta2)+b2
と、h1とthetaが0になり、b2が1になるため、dz2である上部勾配のみが得られ ます。したがって、上部の項は残ります。
b2+=-alpha*db2