梯度反向传播算法推导--mark一下

以下参考自:http://neuralnetworksanddeeplearning.com/chap2.html

推导之前先介绍几个变量:

w_{jk}^{l} 表示连接第(l-1)层第k个神经元和第l层的第j个神经元的权重

b_{j}^{l} 表示第l层的第j个神经元的偏置

a_{j}^{l} 表示第l层的第j个神经元的激活函数

w^{l} 表示第l层的权重矩阵

b^{l} 表示第l层的偏置矩阵

a^{l} 表示第l层的激活函数矩阵

z^{l} 表示第l层的输入

z_{j}^{l} 表示第l层的第j个神经元的输入

 

现在我们假设损失函数是多项式函数即为:

C = \frac{1}{2n}\sum_{x}(y - a ^{L}(x)))^{2} 其中的n表示训练样本总数,L表示网络总层数,y表示标签值,a^{L}(x))表示最后一层的网络输出激活值

 

另一个激活函数可以写为:

a_{j}^{l} = \sigma (\sum_{k} (w_{jk}^{l}*a_{k}^{l-1} + b_{j}^{l}))

第l层的第j个神经元的输入可表示为:

z_{j}^{l} = \sum_{k} (w_{jk}^{l}*a_{k}^{l-1} + b_{j}^{l})

现在我们再定义一个误差项,用于表示第l层的第j个神经元的误差:\delta_{j}^{l} = \frac {\delta C}{\delta z_{j}^{l}}

然后我们假设从输入上产生误差开始:

设第l层的第j个神经元所产生的误差项为:\Delta z_{j}^{l},然后该误差项经由前向传播逐层往后面传递,最终由误差函数表示该误差:

\frac {\delta C}{\delta z_{j}^{l}} * \Delta z_{j}^{l}

下面推导四个反向传播的公式:

(1)\delta_{j}^{l} = \frac {\delta C} {\delta a_{j}^{L}} * \sigma ^{'}(z_{j}^{l})

\delta_{j}^{l} = \frac {\delta C}{\delta z_{j}^{l}} = \frac {\delta C}{\delta a_{j}^{l}} * \frac {\delta a_{j}^{l}}{z_{j}^{l}} = \frac {\delta C}{\delta a_{j}^{l}} * \sigma^{'}(z_{j}^{l})链式法则求导,如此便得到误差的计算公式

(2)\delta^{l} = ((w^{l+1}*\delta^{l+1})) * \sigma^{'}(z^{l})

\delta^{l} = \frac {\delta C}{\delta z_{j}^{l}} = \frac {\delta C}{\delta z_{j}^{l+1}} * \frac {z_{j}^{l+1}}{\delta z_{j}^{l}} = \delta^{l+1} * \frac {z_{j}^{l+1}}{z_{j}^{l}} = \delta^{l+1} * \frac {\sum_{j}w_{kj}^{l+1}*a_{j}^{l} + b_{k}^{l+1}}{\delta z_{j}^{l}} = \delta^{l+1} * \frac {\sum_{j}w_{kj}^{l+1}*\sigma _{j}^{l}(z_{j}^{l}) + b_{k}^{l+1}}{\delta z_{j}^{l}} = \delta^{l+1} * w_{kj}^{l+1} * \sigma^{'}(z_{j}^{l})

这样便可以得到误差项逐层之间的迭代公式,有后一层(l+1)层反向求得l层误差

(3)\delta_{j}^{l} = \frac {\delta C}{\delta b_{j}^{l}}

\delta_{j}^{l} = \frac {\delta C}{\delta b_{j}^{l}} = \frac {\delta C}{\delta a_{j}^{l}} * \frac {\delta a_{j}^{l}}{\delta b_{j}^{l}} = \frac {\delta C}{\delta a_{j}^{l}} * \frac {\delta a_{j}^{l}}{\delta z_{j}^{l}}* \frac {\delta z_{j}^{l}}{\delta b_{j}^{l}} = \delta_{j}^{l} * \frac {\sum (w_{jk}^{l}*a_{k}^{l-1} + b_{j}^{l})}{\delta b_{j}^{l}} = \delta_{j}^{l}如此得到对于神经网络中偏置项的求导公式

(4)同理可得:\frac {\delta C}{\delta w_{jk}^{l}} = a_{k}^{l-1} * \delta_{j}^{l}如此便得到关于权重项的求导公式。

整个神经网络的训练过程的算法流程可以描述为:

梯度反向传播算法推导--mark一下_第1张图片

对于某个训练样本x:

梯度反向传播算法推导--mark一下_第2张图片

以上若有偏差,之后更新也欢迎指出。

你可能感兴趣的:(Deep,Learning)