我试图从头开始实现神经网络以了解其背后的数学原理。当我们对偏差求导时,我的问题与反向传播完全相关)并且我导出了反向传播中使用的所有方程。现在每个方程都与神经网络的代码匹配,除了关于偏差的导数。
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)
从原始偏差中减去标量,为什么不减去整个矩阵。谁能帮我给出一些直觉。如果我对偏差进行损失的偏导,它将只给我上梯度,即 dz2,因为 z2=h1.dot(theta2)+b2
h1 和 theta 将为 0,b2 将为 1。所以上项将被保留。
b2+=-alpha*db2