卷积带来的问题

应用卷积后,我们发现带来两个问题。

数据损失

应用卷积后,我们会发现输出的矩阵总是小于输入的矩阵。

比如上图我们原始输入矩阵是6乘6的,Filter是3乘3的,输出矩阵是4乘4的。
更一般的,我们发现输入矩阵,Filter矩阵,和输出矩阵的大小有如下的关系:
假设输入矩阵是n乘n,Filter矩阵是f乘f,输出矩阵的大小就为n-f+1乘n-f+1。对应我们上边的例子,就是6-3+1乘6-3+1,就是4乘4的矩阵。

可以看到没经过一次卷积,我们的数据就被压缩一次。如果应用多层卷积,数据就会越来越少。从而无法加大网络层数。

边缘数据的利用

你可能发现在原始数据6成6的矩阵里,处于4个角的元素只有1次机会被计算进入下层网络。但是处于图像中心位置的点就有9次机会被计算,从而影响下一层。这种机会不均等也需要处理。如果图片很大,而filter矩阵较小,这种情况会缓解。

利用padding来解决卷积带来的问题

padding就是给原来的图片包上一层边。里边都填充上0。

这样原来的6乘6矩阵就变成8乘8矩阵,经过3乘3矩阵的Filter卷积后,得到8-3+1乘8-3+1的矩阵,也就是6乘6的矩阵。这样经过这次卷积后,数据并没有减少。同是我们看原图左上角的那个元素,在padding前,它只有1次机会参加计算,现在它有4次机会。大大缓解了边角元素的信息丢失问题。可见通过Padding,我们同时解决了卷积带来的跨层数据衰减和边角信息丢失的问题。
上图的示例中,我们给输入矩阵包了一层边,Padding值为1,我们用p来表示,如果加入padding后,下一层的矩阵大小公式怎么计算呢?
假设矩阵行列相等:
输入矩阵 n乘n
Filter矩阵 f乘f
Padding 值为 p
则经过卷积后输出矩阵行列数为:(n+2p-f+1)乘(n+2p-f+1)
有了这个公式后,我们希望输出矩阵大小和输入矩阵一样,则要求:
n+2p-f+1=n
经过推导后有:
p=\frac{f-1}{2}
通过上边公式,我们可以看到为了让P为一个整数,则f必须为奇数。也就是说Filter的行列数必须为奇数。

Valid & Same convolution

Valid convolution指的就是不应用padding的卷积。
Same convolution指的是应用padding,并且输出和输入矩阵维度保持不变的卷积。

步幅卷积 Strided Convolution

在上边的例子里,我们每次只滑动一个像素,当图片较大,并且我们filter矩阵选择较大时。这样就显得没有必要。就像你需要探测一个省的地下矿藏,你的探测器一次可以探测一个足球场,当足球场1/2面积里都含有矿藏你的探测器就会报警。但是你每次探测只移动一毫米,就显得过于谨慎,而且速度太慢。
这时我们就引入了步幅卷积,它可以每次跨越多个元素,元素数目我们用s表示。
加入步幅后,我们的下一层网络的维数也会跟着发生变化。当步幅越大,意味着探测次数越少,下层输出就越少。
具体的公式如下:
n^{L+1}=\frac{n^L+2p-f}{s}+1
上边公式中的n^{L+1}有可能不是一个整数。这时只要探测返回超出输入元素就不再探测。对应到公式就是向下取整操作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: