当前位置:   article > 正文

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

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))表示最后一层的网络输出激活值

 

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

ajl=σ(k(wjklakl1+bjl))

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

zjl=k(wjklakl1+bjl)

现在我们再定义一个误差项,用于表示第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})

δjl=δCδzjl=δCδajlδajlzjl=δCδajlσ(zjl)链式法则求导,如此便得到误差的计算公式

(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}}

δjl=δCδbjl=δCδajlδajlδbjl=δCδajlδajlδzjlδzjlδbjl=δjl(wjklakl1+bjl)δbjl=δjl如此得到对于神经网络中偏置项的求导公式

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

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

对于某个训练样本x:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/998996
推荐阅读
相关标签
  

闽ICP备14008679号