绝大多数卷积核的大小尺寸都是奇数,类似最常见的3×3、5×5等,那么为什么不会出现2×2或者4×4大小的卷积核呢?
一
卷积核的最大作用就是将输入的图像数据提取成特征的形式并输出,关键就是提取操作。我们假设输入的图像数据是
n
×
n
n\times n
n×n的,且不是彩色图片,也就是它的通道数为1。设卷积核的大小为
m
×
m
m \times m
m×m,这里我们可以看到,卷积核和输入都是方阵。设卷积核在输入数据上的移动步长
s
s
s,padding操作的大小为
p
p
p,由此我们能得到经过卷积操作后输入的特征大小为
q
q
q,
q
q
q满足:
q
=
f
l
o
o
r
(
n
+
2
p
?
m
s
+
1
)
q = floor(\frac{n+2p-m}{s}+1)
q=floor(sn+2p?m?+1) floor是向下取整函数,使用此公式我们可以计算输出矩阵的大小。
padding的中文意思是填充,这个操作是在卷积前的数据周围填充数据,从而改变卷积后的数据大小。一般情况下,这个操作可以分为三种,他们分别是same convolution、valid convolution、full convolution,他们在中文中分别叫:相同连接、有效连接和全连接,这个是deep learning中给出的。 valid convolution指的是不对卷积前的数据做padding操作,即给什么数据,卷积什么数据。这种操作不能无限卷积,因为每次卷积后的数据大小都会缩小。 same convolution是对卷积前的数据做padding操作,添加一些数据,使得添加后的数据经过卷积操作后大小和卷积前的数据大小相同。这种操作支持无限次数的卷积。 full convolution也是对卷积前的数据做padding操作,但是它添加数据的目的不是为了使得卷积前后数据大小相同,而是让原数据中每个像素点都能在每个方向上都能被访问k次,同时,输出的图像宽度为n+m-1。 通常最优的填充数量在same 和valid之间。
padding操作是在原数据的两端补充0元素,从而使得经过卷积后的数据规模不会变小。一般情况下步长
s
s
s取值都是1,而我们想要的卷积前的数据大小和卷积后的数据大小一样,那么就有:
n
=
n
+
2
p
?
m
+
1
p
=
2
m
?
1
2
n=n+2p-m+1\\ p = \frac{2m-1}{2}
n=n+2p?m+1p=22m?1? 所以,要想在原数据的两端都补充数据,那么必须要让卷积核的大小
m
m
m是一个奇数才行。只有
m
m
m是奇数时,
p
p
p才能是一个整数,这样才能在卷积前数据的两端都补充同样的数据。
二
第二个原因就是卷积核作为一个特殊的结构,当大小为奇数的时候,方便我们确定卷积核的位置,一般情况下,卷积核在源数据上的移动是以卷积核的中心点作为基准的,这个中心点非常重要。 其实这个解释感觉很牵强,因为当卷积核是偶数大小的时候,我们完全可以使用左上角或者右上角的数据作为基准来移动。至于为什么这个解释存在,个人认为应该是从实验中可以找到答案,卷积核大小为奇数的时候的学习效果会比卷积核大小为偶数的时候的学习效果好。
|