在训练CNN的时候,各层back propagation的递推公式

由于下学期毕设要做CNN的东西,最近开始接触CNN。看了一些资料,发现这些资料里面讲的BP+SGD的训练策略都是针对conv layer 的,而像caffe这种ConvNet库,里面包含了很多非卷积层,那么这些层里面的back propagation是怎么运作的呢?鄙人搜索能力太弱了,在网上找了半天都没有找到,,,,找不到就自己开始推到吧,sigh~


首先,先考虑经典的 conv layer back propagation formula。(参考 http://neuralnetworksanddeeplearning.com/chap2.html)

下面都假设大家已经看了这个链接,并知道BP1~BP4里面各个变量的含义了。


这四个公式只适用于 全部是 conv layer 构建起来的网络,没有其他类型的layer。虽然 conv layer alone 可以表现相当好的学习能力,但是最近两三年CNN在视觉领域那么受欢迎,不仅仅是因为conv layer,还要归功于其他类型的layer。


常见的其他类型 layer 有 pooling layer,lrn layer (local response normalization),dropout layer 等。如果按照caffe的定义,那么连每层上的activation function都可以看做是一个layer,不妨叫做neuron layer, 那么由于activation function可以有很多取法,那么neuron layer 的种类也由很多,如sigmoid, relu, tanh, cross entropy。。。neuron layer 在back propagate 的时候,操作很简单,你只需要计算activation function 的微分,替换公式BP1中的。那么对应pooling layer 和 lrn layer 呢?往后看。。。。


下面我们假设第L个卷积层和第L+1个卷积层之间不是直接相连的,而是这样的结构   conv_L --> relu --> pooling --> lrn --> conv_L+1

相比于推导出BP1~BP4的原网络,这个网络每个conv layer之间多了pooling 和 lrn,现在的问题就是怎么修改BP公式,让误差能够顺利反向传播。我的想法是这样的:除了 BP2,其他公式是不用修改的,因为真正引入差别的是在添加了pooling 层和 lrn 层之后,两个卷积层没有能够直接相连了,导致zL不是 conv_L+1 的输入,而是 aL=lrn{ pooling [ relu (zL) ] } 。

下面我们把中间变量用字母表示一下,  zL --> yL --> xL  -->  aL,即 yL=relu (zL), xL=pooling(yL),aL=lrn(xL)。为了方便,我们省略下标L 。

原来的 σ 是activation function,即 relu。仔细想一想就可以发现,加了pooling 和 lrn 之后,无非就是把 σ 看做是上面几个“函数”的复合,即 σ(.) = lrn{ pooling [ relu (.) ] },

所以我们只需要求BP2 中 的等价表达式。


下面是推导过程:

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值