Numpy 反向传播直觉
下面是神经网络反向传播的正向传递和部分实现的反向传递:Numpy 反向传播直觉,numpy,machine-learning,neural-network,logistic-regression,backpropagation,Numpy,Machine Learning,Neural Network,Logistic Regression,Backpropagation,下面是神经网络反向传播的正向传递和部分实现的反向传递: 将numpy导入为np def乙状结肠(z): 返回1/(1+np.exp(-z)) X_train=np.asarray([[1,1],[0,0]]).T Y_train=np.asarray([1],[0]]).T 隐藏大小=2 输出大小=1 学习率=0.1 正向传播 w1=np.随机.随机数N(隐藏大小,2)*0.1 b1=np.零((隐藏大小,1)) w2=np.random.randn(输出大小、隐藏大小)*0.1 b2=np.零
将numpy导入为np
def乙状结肠(z):
返回1/(1+np.exp(-z))
X_train=np.asarray([[1,1],[0,0]]).T
Y_train=np.asarray([1],[0]]).T
隐藏大小=2
输出大小=1
学习率=0.1
正向传播
w1=np.随机.随机数N(隐藏大小,2)*0.1
b1=np.零((隐藏大小,1))
w2=np.random.randn(输出大小、隐藏大小)*0.1
b2=np.零((输出大小,1))
Z1=np.dot(w1,X_列)+b1
A1=乙状结肠(Z1)
Z2=np.dot(w2,A1)+b2
A2=乙状结肠(Z2)
导数A2=A2*(1-A2)
导数A1=A1*(1-A1)
反向传播的第一步
错误=(A2-Y_列)
dA2=错误/衍生性EA2
dZ2=np.乘法(dA2,导数EA2)
背后的直觉是什么:
error = (A2 - Y_train)
dA2 = error / derivativeA2
dZ2 = np.multiply(dA2, derivativeA2)
我理解错误是当前预测值A2
和实际值Y\u列
之间的差异
但是为什么要将这个错误除以
A2
的导数,然后将error/derivativeA2
的结果乘以derivativeA2
?这背后的直觉是什么?这些表达确实令人困惑:
derivativeA2 = A2 * (1 - A2)
error = (A2 - Y_train)
dA2 = error / derivativeA2
。。。因为error
本身没有意义。此时,目标是计算交叉熵损失的导数,其公式如下:
dA2 = (A2 - Y_train) / (A2 * (1 - A2))
有关推导,请参见(公式6)。恰好前面的操作是sigmoid
,它的导数是A2*(1-A2)
。这就是为什么再次使用此表达式来计算dZ2
(公式7)
但是如果你有一个不同的损耗函数(比如L2)或者一个不同的挤压层,那么A2*(1-A2)
就不会被重用。这些是计算图中的不同节点