Eu estava tentando implementar uma rede neural do zero para entender a matemática por trás dela. Meu problema está completamente relacionado à retropropagação quando adotamos derivada em relação ao viés) e deduzi todas as equações usadas na retropropagação. Agora, toda equação está de acordo com o código da rede neural, exceto a derivada em relação aos vieses.
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)
Procurei on-line o código e quero saber por que adicionamos a matriz e, em seguida, o escalar db2=np.sum(dz2,axis=0,keepdims=True)
é subtraído do viés original, por que não a matriz como um todo é subtraída. Alguém pode me ajudar a dar alguma intuição por trás disso. Se eu der uma derivada parcial da perda em relação ao viés, isso me dará um gradiente superior apenas que é dz2 porque z2=h1.dot(theta2)+b2
h1 e teta serão 0 e b2 será 1. Portanto, o termo superior será deixado.
b2+=-alpha*db2