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

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

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

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

对应网络结构如下图:

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

 

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

则通过激活函数后如下:

同理可以得到:

 

则最终的损失为:

 

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

 

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

根据公式我们可以得到:

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

其中需要强调一下

 

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

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

同样的有:

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

我们现在还需要求

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

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

则最终的结果为:

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值