caffe中的backward理解

1. 在本质上backward解决的是导数计算的问题,用的就是BP算法,所谓的BP算法就是使用当前层权重对于当前误差加权然后传递到下层节点的一个流程。下图是caffe的doc中示意的,这里面有两部分,一个部分就是向下传递的对于g的偏导数,这个数值就是反向传播的输出;另外一部分就是在当前层中对于当前权重的求导。


caffe <wbr>study(2) <wbr>关于forward和backward <wbr>- <wbr>backward


2. 下面将通过一个简单的三层网络来说明一下caffe的backward过程所传递的内容的具体形式。


a. 如下图所示,这是一个简单的NN的结构,其输出层就一个节点。其中x代表输入数据,a代表每一层的激活值,对应h。在下面的描述中采用z来对应g。

caffe <wbr>study(2) <wbr>关于forward和backward <wbr>- <wbr>backward


在加入正则项之后,loss形式为

caffe <wbr>study(2) <wbr>关于forward和backward <wbr>- <wbr>backward

b.  对于输入层net的求导

对于第n_{l} 输出层 的每个输出单元i ,我们根据以下公式计算对于z的导数,把z看成一个局部net的话,这个就是对于net进行的求导。

caffe <wbr>study(2) <wbr>关于forward和backward <wbr>- <wbr>backward
其中s_{nt}为当前输出层的神经元的个数,a为第j个神经元的激活值,这个值是通过激活函数f计算得到(如的logistic函数),f的输入就是z。因为当  i != j  的时候,导数为0,因此得到了第三行的求导结果。

c. 对于非输入层net的求导

caffe <wbr>study(2) <wbr>关于forward和backward <wbr>- <wbr>backward
根据基本的链式法则可以推导到倒数第二行,里面的导数部分就变成了当前层的每一个神经元z_{j}对于下一层的z_{i}求导的一个过程,将z_{j}做一个展开,就是z_{i}层激活的一个加权和,如b所示,得到了最终的对于非输入层的导数。其中W_{ji}指的的是输出层和隐藏层之间的权重链接。

这个导数分为两部分,一部分就是括号内的,是上层导数在当前层节点上的加权和,这个定义了误差专递的方式,也就是反向传播的一个核心;第二项就是当前层激活函数对于net的导数。这样就得到了一个反向转播的递推公式。caffe中backward的就是在传递每一个节点的导数的计算值。

d. 在传递完
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值