神经网络反向传播的推导
对于神经网络的训练过程而言,其反向传播算法是训练过程的核心,神经网络根据预测值 y^ y ^ 与实际值 y y 的偏差从后向前来计算损失函数对于各个参数的梯度,从而利用梯度下降的方法来优化训练神经网络的各个参数。
神经网络的计算流程图如下:
从该流程图可以看到,如果我们要计算神经网络的参数,首先需要计算
∂L∂a[2]
∂
L
∂
a
[
2
]
和
∂a[2]∂z[2]
∂
a
[
2
]
∂
z
[
2
]
,然后根据链式法则得到
∂L∂z[2]=∂L∂a[2]∂a[2]∂z[2]
∂
L
∂
z
[
2
]
=
∂
L
∂
a
[
2
]
∂
a
[
2
]
∂
z
[
2
]
。
之后再计算 ∂z[2]∂W[2] ∂ z [ 2 ] ∂ W [ 2 ] 和 ∂z[2]∂b[2] ∂ z [ 2 ] ∂ b [ 2 ] ,同样根据链式法则可以得到 ∂L∂W[2]=∂L∂z[2]∂z[2]∂W[2] ∂ L ∂ W [ 2 ] = ∂ L ∂ z [ 2 ] ∂ z [ 2 ] ∂ W [ 2 ] 以及得到 ∂L∂b[2]=∂L∂z[2]∂z[2]∂b[2] ∂ L ∂ b [ 2 ] = ∂ L ∂ z [ 2 ] ∂ z [ 2 ] ∂ b [ 2 ] 。这样便得到了 dW[2] d W [ 2 ] 和 db[2] d b [ 2 ] 。
另外对于 dW[1] d W [ 1 ] 和 db[1] d b [ 1 ] 的计算,需要先计算 ∂z[1]∂W[1] ∂ z [ 1 ] ∂ W [ 1 ] , ∂a[1]∂z[1] ∂ a [ 1 ] ∂ z [ 1 ] 和 ∂z[2]∂a[1] ∂ z [ 2 ] ∂ a [ 1 ] ,同样根据链式法则可以得到 ∂L∂W[1]=∂L∂z[2]∂z[2]∂a[1]∂a[1]∂z[1]∂z[1]∂W[1] ∂ L ∂ W [ 1 ] = ∂ L ∂ z [ 2 ] ∂ z [ 2 ] ∂ a [ 1 ] ∂ a [ 1 ] ∂ z [ 1 ] ∂ z [ 1 ] ∂ W [ 1 ] ,以及 ∂L∂b[1]=∂L∂z[2]∂z[2]∂a[1]∂a[1]∂z[1]∂z[1]∂b[1] ∂ L ∂ b [ 1 ] = ∂ L ∂ z [ 2 ] ∂ z [ 2 ] ∂ a [ 1 ] ∂ a [ 1 ] ∂ z [ 1 ] ∂ z [ 1 ] ∂ b [ 1 ] 。这样也得到了 dW[1] d W [ 1 ] 和 db[1] d b [ 1 ] 。
在使用随机梯度下降(SGD)优化算法以及交叉熵(Cross Entropy)损失函数的时候,我们令
a[2]=y^
a
[
2
]
=
y
^
,即损失函数:
使用sigmoid激活函数,即
将该激活函数和损失函数代入上面的计算过程,可以得到:
在进行随机梯度下降的过程中,随机选取样本中的一个错误分类点,根据该点计算当前的 dW[1],db[1],dW[2],db[2] d W [ 1 ] , d b [ 1 ] , d W [ 2 ] , d b [ 2 ] ,然后利用以下公式来更新 W[1],b[1],W[2],b[2] W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] :
直到收敛为止。
对于神经网络的训练,还有批量梯度下降(Batch Gradient Descent)和小批量梯度下降(Mini-Batch Gradient Descent),带动量的随机梯度下降(Momentum),RMSProp,Adam等方法,后面再做详解。
To be continue…