卷积核的确定
卷积核尺寸及卷积层数的确定原则是小卷积核多层卷积,即加大卷积深度、缩小视野范围。卷积核就相当于神经元的眼睛,卷积核捕获到的内容就是神经元能够看到的内容,也就是神经元的视野或者叫感受野,多层卷积的结果就是神经元通过多个小视野组合成一个大视野。
大尺寸的卷积核可以带来比较大的视野,但是由于其能够观察到的内容多,所以需要的参数数量也相对巨大。小尺寸的卷积核需要的参数较少而且计算量也很小,即便是加大深度,由于神经元进行了多层的抽象,参数也比大尺寸卷积核要少很多。所以目前卷积核尺寸的流行趋势是选择较小的卷积核并且加大卷积深度。就卷积效果来说,三层\(3 \times 3\)的卷积核的效果与一层的\(7 \times7\)卷积核是一致的,所以目前常见的卷积神经网络都是采用\(3 \times 3\)的卷积核。
卷积核一般都是奇数尺寸,这主要是因为偶数尺寸的卷积核即便是对称的添加padding,也不能保证输入矩阵和输出矩阵的尺寸不变。所以卷积核一般都选择奇数尺寸,并且使用3作为卷积核的大小。
卷积核的数量一般需要结合CPU和GPU的配置,按照16的倍数递增。常见的卷积神经网络会从32个卷积核开始。每一层有多少个卷积核,经过卷积后就会形成多少个特征图。一般网络越深,这个值就会越大,随着网络的加深,特征图的尺寸在缩小,每个特征图所提取的特征就越具有代表性,所以后一层卷积需要增加特征图的数量才能充分提取出前一层的特征。
\(1 \times 1\)卷积核的意义
一般来说,卷积核的大小必须大于1才有提升感受野的作用。但是\(1 \times 1\)的卷积核在许多神经网络,例如NIN、Googlenet中都有广泛的应用。
\(1 \times 1\)卷积核一般认为可以用于以下目的。
- 实现跨通道的交互和信息整合。
- 进行卷积核通道数的升维和降维。
- 减少卷积核参数。
- 对于单通道特征图可以实现多个特征图的线性组合。
- 实现与全连接层等价的效果。
通道数调节
\(1 \times 1\)的卷积核由于不用考虑像素与周边像素的关系,所以可以仅用来调整通道数。对于深度为3的输入矩阵,选择两个\(1 \times 1\)的卷积核,特征图的深度就会从3变成2。如果使用四个\(1 \times 1\)的卷积核,特征图的深度就会从3变成4。
减少参数
将输入矩阵降维,其实也是减少参数,相当于在特征图的通道数上进行卷积,压缩特征图,二次提取特征,使新特征图的表达更优良。
跨通道信息组合
对于通道数的升维和降维的变化,实际上也是通道间信息的线性组合变化。在\(3 \times 3 \times 64\)的卷积核前增加一个\(1 \times 1 \times 28\)的卷积核,就变成了\(3 \times3 \times28\)的卷积核。之前的64个通道就可以跨通道线性组合成28个通道,增加了通道间的信息交互,并且不损失特征图的分辨率。
padding参数选择
对于padding参数的经验处理可按以下列表中给出的值来确定。
- 选择\(3 \times 3\)的卷积核时,padding选择1。
- 选择\(5 \times 5\)的卷积核时,padding选择2。
- 选择\(7 \times 7\)的卷积核时,padding选择3。
Keras中对于padding参数的设置,只允许两个值:valid
和same
。其中valid
表示只进行有效的卷积,对边界数据不处理。same
表示保留边界处的卷积结果,通常会使输出矩阵形状与输入矩阵形状相同。对于valid
模式,输出矩阵的尺寸计算公式为\(height_{out}=width_{out}=\left[\frac{size_{in}-size_{kernel}+1}{stride}\right]\),而same
模式中输出矩阵的尺寸则是\(height_{out}=width_{out}=\left[\frac{size_{in}}{stride}\right]\)。
如果需要自定义padding,Keras提供了ZeroPadding1D
和ZeroPadding2D
的层,直接使用padding
参数定义填充大小即可。