CNN卷积神经网络反向传播推导总结及推导细节

CNN卷积神经网络在当下图像分类领域是很常用的一种神经网络,它的权值共享特性使得它在图像处理中训练的参数要比普通的神经网络训练参数少的多。

这几天自己用java实现了一下CNN的正向计算与误差反向传播,正向计算很好理解,也比较容易实现,但反向传播由于与普通的神经网络不同,实现会稍微复杂一些,看了很多博主的文章,感觉对卷积层的误差后向传递及卷积层自身weight和bias的计算有些细节没有说清楚,这里再总结一下。


定义误差

全连接层与一般的神经网络bp算法相同,此处将与单元n相关的误差项定义为 (注意此处误差的定义中有‘-’号),则更新权值时有

为单元n的输出(

通过sigmoid后的输出,本文中设

从池化层推导上层误差

池化层如果是取max,则把池化层的的值放在之前做前向传播算法得到最大值的位置。例:

假设前层最大值位置分别为左上,右下,右上,左下,则



池化层如果取平均值,则将误差平均即


从卷积层推导上层误差

对下一层来说误差可以用下面的公式推导(注:DownStream表示下层输入中包含单元j的输出的所有下层单元)

目标:已知k单元所在的层(即本层卷积层)的误差项,求前一层j单元的误差项


  • 现在考虑如何计算,用最简单的例子(这里设前向传播时只是简单的和卷积核weight的法而不是卷积):


  • 则有


对于只有的值与其相关联,则

而对于与其关联,则

其他的同理求得。

  • 此时发现这个这些误差项和卷积核weight的乘积可以用卷积来表示:将卷积层误差项补0,和卷积核做卷积

  • 那在程序实现的时候补多少0呢,补0的目标是在卷积回去时与原输入的矩阵大小一致,如:上层矩阵大小为l,卷积核大小为k,步长为1,则卷积层矩阵大小为l-k+1,此时卷积层误差项矩阵大小肯定也为l-k+1,将此矩阵填充到l+k-1大小即可。

从卷积层误差项推导卷积核weight的梯度

这里先说明下:梯度本身是一个向量,表示函数沿这个方向上升最快,所以在更新weight时需用-1乘weight的梯度


这里与上面的推导有些像





对于

其余的同理可以推出

  • 此时发现对于误差项与上一层对本层输入的乘积可以表示为上层输入与本层误差项的


特别说明:如果前向传播为对应的,这里就是操作;如果前向传播为卷积,这里才是卷积。(这点在有些博客中可能没有说清楚,如果混淆了,可以自己按照上面的方法推导一下)

  • 对于偏置bias:大多博客没有给出证明,所以我在这里证明下,在本例中

即将本层的误差项求和


文中数学用语可能不太标准,推导方面的问题欢迎指正交流

参考:

  • Machine Learing        (美)Mitchell,T.M.

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值