一、直接卷积运算的缺点

如果图像是 n × n n\times n n×n,过滤器是 f × f f \times f f×f,那么卷积运算的结果是 ( n − f + 1 ) × ( n − f + 1 ) (n-f+1)\times (n-f+1) (nf+1)×(nf+1)

  • 随着一次次卷积运算的进行,图像会越来越小,如果神经网络深度很大,图像可能变得特别特别小。
  • 覆盖边缘和角落像素点的过滤器远远比中间像素点少,导致丢失图像边缘位置的信息。

二、Padding

在这里插入图片描述

在原图像的四周填充一层像素点(习惯填充0),使得 n × n → ( n + 2 ) × ( n + 2 ) n\times n\to (n+2)\times (n+2) n×n(n+2)×(n+2),通过 3 × 3 3\times 3 3×3过滤器的卷积后得到 n × n n\times n n×n结果,故图像尺寸没有改变。
一般地,设填充数量为 p p p,在上面这个例子中,周围填充一层,所以 p = 1. p=1. p=1.
最终卷积结果为: ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) (n+2p-f+1)\times(n+2p-f+1) (n+2pf+1)×(n+2pf+1)

三、两种卷积方式

  • Valid 卷积不填充
    ( n × n ) ∗ ( f × f ) → ( n − f + 1 ) ∗ ( n − f + 1 ) (n\times n) * (f\times f)\to (n-f+1) * (n-f+1) (n×n)(f×f)(nf+1)(nf+1)
    p = 0 p=0 p=0
  • Same 卷积后保存大小不变
    [ ( n + 2 p ) × ( n + 2 p ) ] ∗ ( f × f ) → ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) [(n+2p)\times(n+2p)]*(f\times f)\to (n+2p-f+1)\times (n+2p-f+1) [(n+2p)×(n+2p)](f×f)(n+2pf+1)×(n+2pf+1)
    n + 2 p − f + 1 = n ⇒ p = ( f − 1 ) / 2 n+2p-f+1=n\Rightarrow p=(f-1)/2 n+2pf+1=np=(f1)/2

在这里插入图片描述
卷积神经网络中,过滤器的 f f f通常是奇数(odd)大小的,例如 3 × 3 , 5 × 5 3\times 3,5\times5 3×3,5×5。为什么会有这样一个结论呢?主要的原因如下:

  • 如果 f f f是偶数,计算 p = ( f − 1 ) / 2 p=(f-1)/2 p=(f1)/2不会是整数,所以需要非对称填充
  • 如果 f f f是奇数,过滤器存在一个中心像素点,便于指出过滤器的位置。

四、卷积步长Stride

在这里插入图片描述
在前面的基础上,设步长stride为 s s s,在上图的例子中 s = 2 s=2 s=2
一般地,
[ ( n + 2 p ) × ( n + 2 p ) ] ∗ ( f × f ) → ( n + 2 p − f s + 1 ) × ( n + 2 p − f s + 1 ) [(n+2p)\times(n+2p)]*(f\times f)\to (\frac{n+2p-f}{s}+1)\times (\frac{n+2p-f}{s}+1) [(n+2p)×(n+2p)](f×f)(sn+2pf+1)×(sn+2pf+1)

如果除以步长 s s s那里不能取整怎么办?通常做法是【向下取整】,即:
⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \lfloor {\frac{n+2p-f}{s}+1} \rfloor \times \lfloor {\frac{n+2p-f}{s}+1} \rfloor sn+2pf+1×sn+2pf+1

向下取整的意义很简单,如果过滤器移动时超出了图像范围,那就不要做这一步卷积操作。

五、互相关(cross-correlation)和卷积(convolution)的技术说明

说这个问题之前,先说明什么是卷积:

  • 官方定义:通过两个函数f和g生成第三个函数的一种数学算子,表征函数f与g经过翻转和平移的重叠部分函数值乘积对重叠长度的积分
  • 卷:翻转
  • 积:积分(离散则求和)
  • 数学中,卷积的过程归纳为:翻转、移位、相乘、相加
  • CNN中,卷积的过程归纳为:移位、相乘、相加

在数学教材中,卷积的定义有一些不同之处,过滤器需要先中心对称(翻转180°),再进行卷积运算。
前面学习的卷积操作实际上是互相关而不是卷积,有同学评论得很形象呀:“没有卷,只有积。”
但是!在深度学习的文献中,我们不需要翻转过滤器,图像和过滤器逐个元素相乘求和的过程称作卷积操作,不需要多纠结这个问题。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐