跳到主要内容

BP算法

BP算法理论推导以及梯度消失问题

一、理论推导 #

背景 #

image

一个多层神经网络的正向传播过程如图

image

给定一些符号

image
image

它们之间的计算关系如上图,z表示每个神经单元的输入,a表示经过激活函数计算后的值

image

在训练神经网络的时候,我们一般采用梯度下降的方式,对于网络中的每个参数,其更新的方式是loss function在这个参数的负梯度方向,因此我们需要用loss function对每个参数求梯度。在网络很深且神经单元很多的时,计算量很大。较为高效的方式是通过back propagation来求,它从最后一层开始计算,前面的层会复用后面层已经计算好的值,减少计算量。

backpropagation #

image

BP算法的基础是链式法则

image

当我们求loss func对某一个参数的偏导数时,可以把它拆分成A和B两个部分。先看B部分

B部分 #

image
image
image

B部分的计算比较简单。

A部分 #

image

A部分的计算相对麻烦一点,我们先将符号简化一下,从后往前计算这个偏导,前面的会复用后面已经算好的值

image

最后一层的计算方式如图,具体情况要看激活函数的选择以及loss func的选择

image

可以推导出前面一层的值跟后面一层的值的关系

image

最后可以得到这种形式

image

反过来看,前面一层的偏导等于后面一层的偏导乘以权重的加和再乘以激活函数的偏导,有一种反向传播的意思。

image

层与层之间整理成如图的形式

image

整理起来 #

image

BP算法其实包含了两个过程,在forward的过程中,把需要计算的z和a的值都计算好了;在backword的过程中,从后往前计算偏导。

二、梯度消失\爆炸问题 #

如果参数初始化不当,或者选择的激活函数有问题(如sigmoid),大概率会出现 梯度消失or梯度爆炸的问题

可以参考 https://blog.csdn.net/baidu_29782299/article/details/52742773 https://www.zhihu.com/question/49812013

三、代码 #

to do…

reference [1] https://www.csie.ntu.edu.tw/~yvchen/f106-adl/doc/170925+170928_BackProp.pdf


38db85a4c595ca6