关于不同卷积核大小的思考

未经同意,不得转载

一、1x1卷积核的作用

(1)实现跨通道的交互和信息整合

使用1x1卷积核,其实就是对不同channel间的信息做线性组合的一个变换过程。比如输入为3x3x3的feature map,后面添加一个1x1x3,64 channels的卷积核,就变成了3x3x64的feature map,原来的3个channels就可以理解为跨通道线性组合变成了64 channels,这就是通道间的信息交互。过程如下图所示:

1x1卷积计算

(2)增加非线性特性

1x1卷积核,利用后接的非线性激活函数可以在保持feature map尺度不变的前提下大幅增加非线性特性,把网络做的很深。

(3)减少模型参数,降低计算量

假设输入feature map的维度为256维,要求输出维度也是256维。有以下两种操作:

  • 256维的输入直接经过一个3×3×256的卷积层,输出一个256维的feature map,那么参数量为:
256×3×3×256 = 589824
  • 256维的输入先经过一个1×1×64的卷积层,再经过一个3×3×64的卷积层,最后经过一个1×1×256的卷积层,输出256维,参数量为:
(256×1×1×64)+(64×3×3×64)+(64×1×1×256)= 69632

可以看到,参数量减少了大约8.5倍。

二、为什么2个3x3可以代替1个5x5的卷积核

在卷积神经网络中,一般情况下,卷积核越大,感受野(receptive field)越大,看到的图片信息越多,所获得的全局特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。

于是在VGG、Inception网络中,利用两个3×3卷积核的组合替换一个5×5卷积核,这样的好处是:
(1)在具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果;
(2)降低了参数量(从5×5×1 x channels 到 3×3×2 x channels)。

那么为什么可以这样来替换呢?
从卷积的定义可以知道,一张图像经过卷积后的尺寸大小计算方式为:

(W - F + 2P)/ S + 1
其中,W是输入尺寸,F是卷积核大小,P是填充尺寸,S是步长

那么,假设输入是28x28:

  • 使用5x5的卷积核对其卷积,步长(stride)为1,填充(padding)为0,得到的结果是:
(28-5 + 0x2) / 1 + 1=24
  • 使用2层3x3的卷积核,同样步长(stride)为1,填充(padding)为0
第一层3x3:得到的结果是(28-3 + 0x2)/ 1 + 1=26
第二层3x3:得到的结果是(26-3 + 0x2)/ 1 + 1=24

所以最终结果是2层3x3和1个5x5的卷积核得到的feature map大小是一样的。
同理也能得出三个3x3的卷积核可以替换一个7x7的卷积核。

你可能感兴趣的:(关于不同卷积核大小的思考)