卷积操作正向反向传播

  讲完了全连接网络接下来讲卷积,本篇博客,主要讲解卷积神经网络中,卷积操作正向和反向传播过程,不会有特别难的公式,特别是反向传播中,推导比较麻烦。

正向传播

如下图(图片来源):
在这里插入图片描述
  图中image矩阵也就是绿色的部分(当然包括黄色的部分)就是输入的数据,也就是神经网络上游传过来的数据。黄色的部分为卷积核(卷积核的内容是黄色部分 × \times ×后面的数字就是它的内容)。
  根据上面的动图知道,卷积操作过程中,它们的内容都是不会变的。然后得到了最终的convolved feautre,那么具体的值是如何得到的呢?
如下图:
在这里插入图片描述
  其中的-3就是对应数据中的值 × \times ×卷积核,再相加得到最终的-3。(图片来源)
  在第一张动图中,convolved feautre左上角的值4也是怎么得来的: 4 = 1 ∗ 1 + 1 ∗ 0 + 1 ∗ 1 + 0 ∗ 1 + 1 ∗ 1 + 1 ∗ 0 + 0 ∗ 1 + 0 ∗ 0 + 1 ∗ 1 4=1*1+1*0+1*1+0*1+1*1+1*0+0*1+0*0+1*1 4=11+10+11+01+11+10+01+00+11
  同时我们还要提出两个概念,一个是步长(stride),一个是填充(padding)
  步长就是卷积核移动的格子数(上下左右差距),如动图中,它的步长就是1。
  填充就是对数据周围填充 p p p圈数值,一般是0。那么上图image本身是 5 ∗ 5 5*5 55矩阵,填充 p p p圈后便是 ( 5 + p ) ∗ ( 5 + p ) (5+p)*(5+p) (5+p)(5+p)矩阵,因为上面并没有填充,所以依然 5 ∗ 5 5*5 55
  那么我们已知image的长(H)宽(W) 以及 卷积核(kernel)长(h)宽(w),如何求得特征图(feature map)的长(o_h)宽(o_w)
  设已知image的 H , W H,W H,W,卷积核的 h , w h,w h,w,步长 s t r i d e stride stride,填充 p a d d i n g padding padding
就可以得以下公式:
o _ w = W + 2 ∗ p a d d i n g − w s t r i d e + 1 o\_w=\frac{W+2*padding-w}{stride}+1 o_w=strideW+2paddingw+1
o _ h = H + 2 ∗ p a d d i n g − h s t r i d e + 1 o\_h=\frac{H+2*padding-h}{stride}+1 o_h=strideH+2paddingh+1
  这个公式还是比较重要的。

反向传播

有张图其实概括的很好了:
图来源
在这里插入图片描述
在这里插入图片描述
已知卷积层 d A [ l ] dA^{[l]} dA[l],求取上一层 d A [ l − 1 ] dA^{[l-1]} dA[l1]。注意以下 ∗ * 为卷积运算
d Z [ l ] = d A [ l ] ∗ g [ l ] ′ ( Z [ l ] ) dZ^{[l]}=dA^{[l]}*g^{[l]'}(Z^{[l]}) dZ[l]=dA[l]g[l](Z[l])
d A [ l − 1 ] = d Z [ l ] ∗ ∂ Z [ l ] ∂ A [ l − 1 ] dA^{[l-1]}=dZ^{[l]}*\frac{\partial Z^{[l]}}{\partial A^{[l-1]}} dA[l1]=dZ[l]A[l1]Z[l]
因此
d A [ l − 1 ] = d Z [ l ] ∗ ∂ Z [ l ] ∂ A [ l − 1 ] = d Z [ l ] ∗ r o t 180 ( W [ l ] ) dA^{[l-1]}=dZ^{[l]}*\frac{\partial Z^{[l]}}{\partial A^{[l-1]}}=dZ^{[l]}*rot180(W^{[l]}) dA[l1]=dZ[l]A[l1]Z[l]=dZ[l]rot180(W[l])
同时给出下 W , b W,b W,b的误差:
d W [ l ] = d Z [ l ] ∗ ∂ Z [ l ] ∂ W [ l ] = d Z [ l ] ∗ A [ l − 1 ] dW^{[l]}=dZ^{[l]}*\frac{\partial Z^{[l]}}{\partial W^{[l]}}=dZ^{[l]}*A^{[l-1]} dW[l]=dZ[l]W[l]Z[l]=dZ[l]A[l1]
这里就不需要旋转180度.

  而对于b,则稍微有些特殊,因为 δ l δ^l δl是高维张量,而b只是一个向量,不能像DNN那样直接和 δ l δ^l δl相等。通常的做法是将 δ l δ^l δl的各个子矩阵的项分别求和,得到一个误差向量,即为 b b b的梯度:
d b l = ∑ u , v ( δ l ) u , v db^{l} = \sum\limits_{u,v}(\delta^l)_{u,v} dbl=u,v(δl)u,v

参考文献:
https://zhuanlan.zhihu.com/p/33876102

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值