前言
注意:coursera要求不要在互联网公布自己的作业。如果你在学习这个课程,建议你进入课程系统自行完成作业。我觉得代码有参考和保留的意义。
本周的作业包含两个部分。Building your Deep Neural Network, Deep Neural Network - Application v8。总体来说作业很简单,有时都不用审题跟着向导、代码提示做都能写出来。尤其是Deep Neural Network - Application v8部分。但我觉得第一部分感觉更重要些。从代码层面去实现前向传播与反向传播之间的关系。
Building your Deep Neural Network
计算交叉熵cross-entropy cost J J , 如下等式:
交叉熵的导数是反向传播的起点:
Initializing backpropagation:
进行反向传播,我们知道前向传播的输出是 A[L]=σ(Z[L]) A [ L ] = σ ( Z [ L ] ) . 我们必须去计算AL的偏导数,
dAL
=∂L∂A[L] = ∂ L ∂ A [ L ]
.
可以推导获得dAL(偏导)得出如下等式 :
dAL = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL)) # derivative of cost with respect to AL
激活函数的偏导分两种情况,输出层的sigmoid,与隐藏层的relu。作业中sigmoid与relu前向,反向(偏导)的代码都是系统自己实现的,这里根据我自己的理解补充说明一下。
1)A=sigmoid(Z)
sigmoid’(Z)=sigmoid(Z)(1-sigmoid(Z))
2)A=Relu(Z)
if(Z>=0){
Relu’(Z)=1
else{
Relu’(Z)=0 #Z<0时,导数为0.
}
The three outputs (dW[l],db[l],dA[l