[机器学习]神经网络反向传播的推导

神经网络反向传播的推导

对于神经网络的训练过程而言,其反向传播算法是训练过程的核心,神经网络根据预测值 y ^ 与实际值 y 的偏差从后向前来计算损失函数对于各个参数的梯度,从而利用梯度下降的方法来优化训练神经网络的各个参数。

神经网络的计算流程图如下:
这里写图片描述
从该流程图可以看到,如果我们要计算神经网络的参数 W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ] ,首先需要计算 L a [ 2 ] a [ 2 ] z [ 2 ] ,然后根据链式法则得到 L z [ 2 ] = L a [ 2 ] a [ 2 ] z [ 2 ]

之后再计算 z [ 2 ] W [ 2 ] z [ 2 ] b [ 2 ] ,同样根据链式法则可以得到 L W [ 2 ] = L z [ 2 ] z [ 2 ] W [ 2 ] 以及得到 L b [ 2 ] = L z [ 2 ] z [ 2 ] b [ 2 ] 。这样便得到了 d W [ 2 ] d b [ 2 ]

另外对于 d W [ 1 ] d b [ 1 ] 的计算,需要先计算 z [ 1 ] W [ 1 ] a [ 1 ] z [ 1 ] z [ 2 ] a [ 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 ] 。这样也得到了 d W [ 1 ] d b [ 1 ]

在使用随机梯度下降(SGD)优化算法以及交叉熵(Cross Entropy)损失函数的时候,我们令 a [ 2 ] = y ^ ,即损失函数:

L ( y ^ , y ) = ( y l o g y ^ + ( 1 y ) l o g ( 1 y ^ ) )

使用sigmoid激活函数,即

a [ 1 ] = σ ( z [ 1 ] ) = 1 1 + e z [ 1 ] a [ 2 ] = σ ( z [ 2 ] ) = 1 1 + e z [ 2 ]

将该激活函数和损失函数代入上面的计算过程,可以得到:

d z [ 2 ] = a [ 2 ] y d W [ 2 ] = d z [ 2 ] a [ 1 ] T d b [ 2 ] = d z [ 2 ] d z [ 1 ] = W [ 2 ] T d z [ 2 ] σ ( z [ 1 ] ) d W [ 1 ] = d z [ 1 ] x T d b [ 1 ] = d z [ 1 ]

在进行随机梯度下降的过程中,随机选取样本中的一个错误分类点,根据该点计算当前的 d W [ 1 ] , d b [ 1 ] , d W [ 2 ] , d b [ 2 ] ,然后利用以下公式来更新 W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 2 ]
W [ 2 ] := W [ 2 ] α d W [ 2 ] b [ 2 ] := b [ 2 ] α d b [ 2 ] W [ 1 ] := W [ 1 ] α d W [ 1 ] b [ 1 ] := b [ 1 ] α d b [ 1 ]

直到收敛为止。

对于神经网络的训练,还有批量梯度下降(Batch Gradient Descent)和小批量梯度下降(Mini-Batch Gradient Descent),带动量的随机梯度下降(Momentum),RMSProp,Adam等方法,后面再做详解。

To be continue…

猜你喜欢

转载自blog.csdn.net/Frankkk_/article/details/80536164