简单明了的理解神经网络BP传播算法

最近在用numpy实现Lenet5的时候发现网络结构的正向传播理解没问题,但是在对误差逆传播的理解却很是困惑,在查了一些资料却发现对对神经网络的BP传播理解也不是很透彻,看来学习这件事来不得半点虚的。现实总是会在我不经意间将我打回原型,并且按在泥里面来回摩擦。那我只能停止幻想,继续奋斗了。。。

今天就详细的记录一下BP传播算法的推导过程(借鉴了zhihu大神的图片和公式)。

为了简单起见这里定义三层网络,输入层(第0层),隐藏层(第1层),输出层(第二层)。并且每个结点没有偏置(有偏置原理完全一样)激活函数选为sigmod函数(不同的激活函数,求导不同),符号说明如下:

简单明了的理解神经网络BP传播算法_第1张图片

对应网络结构如下图:

简单明了的理解神经网络BP传播算法_第2张图片

其中对应的矩阵表示如下:

 

简单明了的理解神经网络BP传播算法_第3张图片

正向传播的时候公式与相对应的数据对应如下:

简单明了的理解神经网络BP传播算法_第4张图片

则通过激活函数后如下:

简单明了的理解神经网络BP传播算法_第5张图片

同理可以得到:

 

简单明了的理解神经网络BP传播算法_第6张图片

则最终的损失为:

 

我们的理想是希望这个损失值越小越好,这也是我们为什么要进行训练,调节参数,使得最终的损失最小。这就用到了我们的反向传播算法,实际上反向传播就是梯度下降法中链式法则的使用。

 

下面我们看看如何实现反向传播

根据公式我们可以得到:

这时候我们需要求出C对w的偏导数,根据连式法则会有如下表达式:

简单明了的理解神经网络BP传播算法_第7张图片

其中需要强调一下

 

 需要特别注意如果要再进一步推导为什么f(x)的导数表示为如下形式:

(这里面有用到复合函数求导以及分数求导)

简单明了的理解神经网络BP传播算法_第8张图片

同样的有:

简单明了的理解神经网络BP传播算法_第9张图片

到这里我们已经算出这个网络的最后一层的偏导数了,我们继续往前面链式推导:

我们现在还需要求

下面给出其中的一个推到,其它完全类似

简单明了的理解神经网络BP传播算法_第10张图片

同理可得到其它几个式子:

则最终的结果为:

简单明了的理解神经网络BP传播算法_第11张图片

再按照当前这个权重参数进行一遍正向传播得出来的Error为0.165,而这个值比原来的0.18要小,则继续迭代,误差继续逆向传播,不断修正权值,使得代价函数越来越小,预测值不断逼近0.5,迭代了100次的结果预测值逼近0.5,Error为5.92944818e-07,这个error已经很小了,最后权值为:

简单明了的理解神经网络BP传播算法_第12张图片

整个BP网络传播原理就是如上面的介绍,相信已经算是很清楚了,如果有问题欢迎留言或骚扰QQ:1539431060

 

你可能感兴趣的:(CNN,算法,人工智能,神经网络,深度学习)