最近研究 GoogLeNet 和 VGG 神经网络结构的时候,都看见了它们在某些层有采取 1x1 作为卷积核,起初的时候,对这个做法很是迷惑,这是因为之前接触过的教材的例子中最小的卷积核是 3x3 ,那么,1x1 的卷积核有什么意义呢?
最初应用 1x1 卷积核的神经网络是 Network In Network,然后 GoogLeNet 和 VGG 也不约而同的更正了。
他们在论文中解释,大概有下面 2 个意义。
1、增加网络的深度
这个就比较好理解了,1x1 的卷积核虽小,但也是卷积核,加 1 层卷积,网络深度自然会增加。
其实问题往下挖掘,应该是增加网络深度有什么好处?为什么非要用 1x1 来增加深度呢?其它的不可以吗?
其实,这涉及到感受野的问题,我们知道卷积核越大,它生成的 featuremap 上单个节点的感受野就越大,随着网络深度的增加,越靠后的 featuremap 上的节点感受野也越大。因此特征也越来越抽象。
但有的时候,我们想在不增加感受野的情况下,让网络加深,为的就是引入更多的非线性。
而 1x1 卷积核,恰巧可以办到。
我们知道,卷积后生成图片的尺寸受卷积核的大小和跨度影响,但如果卷积核是 1x1 ,跨度也是 1,那么生成后的图像大小就并没有变化。
但通常一个卷积过程包括一个激活函数,比如 Sigmoid 和 Relu。
所以,在输入不发生尺寸的变化下,却引入了更多的非线性,这将增强神经网络的表达能力。
2、升维或者是降维
大家可以看下面这张图:
我们可以直观地感受到卷积过程中:卷积后的的 featuremap 通道数是与卷积核的个数相同的
所以,如果输入图片通道是 3,卷积核的数量是 6 ,那么生成的 feature map 通道就是 6,这就是升维,如果卷积核的数量是 1,那么生成的 feature map 只有 1 个通道,这就是降维度。
值得注意的是,所有尺寸的卷积核都可以达到这样的目的。
那为什么要用 1x1 呢
原因就是数据量的大小,我们知道在训练的时候,卷积核里面的值就是要训练的权重,3x3 的尺寸是 1x1 所需要内存的 9 倍,其它的类似。所以,有时根据实际情况只想单纯的去提升或者降低 feature map 的通道,1x1 无疑是一个值得考虑的选项。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【深度学习】CNN 中 1×1 卷积核的作用 - Python技术站