释疑:为什么要用1×1的卷积核?

编者按:之前小编曾在某篇介绍GoogleNet架构和Network In Network的文章里提到过1×1的卷积核,时间太久,虽然现在具体细节已经记不清了,但这并不妨碍我们把Aaditya Prakash的这篇文章介绍给大家,篇幅不长,求职面试可能会考到哦!

左:3×3卷积核;右:1×1卷积核

刚开始接触CNN时,我曾向某人提问:这个1×1的卷积核的卷积核是用来干嘛的?它不是多余的吗?而那人只丢给我两个字:

降维!

就头也不回地走了。我留在原地恍然大悟:对啊!如果原先这是一个200×200×50的图像,那我们用20个1×1卷积核过滤特征后,它的大小就只有200×200×20了!虽然没有改变宽和高,但卷积核确实减少了图像的维数(通道数)。

但这又引出了第二个问题,使用这么多1×1卷积核真的是CNN里最好的降维方式吗?它的效率和效能究竟如何?

让我们围绕上述几个问题,一起分析其中的深层次原因。更复杂的答案

特征转换

虽然我们把1×1卷积核看做“特征池化”的一种工具,但它做的不仅仅是对特定层的各种通道/特征映射进行特征汇总。它在filter空间中起到了类似坐标依赖变换的作用。理论上来说,这种变换是线性的,但在大多数应用中,它却在ReLU等非线性激活层中表现出色。因为这种转换是通过(随机)梯度下降来学习的。

这也并不是说1×1卷积核就相当于SGD,它们的区别很大,其中最主要的是由于核很小,1×1卷积核几乎不会受过拟合影响。

更深的网络

我们第一次接触1×1卷积核这个概念是在Network In Network这篇论文里。在文章中,作者希望能在不堆叠额外卷积层的前提下构建一个更深的神经网络,于是他把一些filter改成了小型感知器,也就是我们熟悉的1×1卷积核和3×3卷积核。

确切地说,他这样做其实是把神经网络变得更广了,而不是更深了,但这确实增加了纵向厚度。而且在机器学习术语中,“变广”更多时候意味着增加训练数据,容易让人误解。从数学角度看,使用多个1×1卷积核就相当于使用多层感知器。

在GoogLeNet架构中,1×1卷积核的作用主要有以下几点:通过添加inception模块加深网络;降低inception模块内部维度;通过在每个1×1卷积核后计算ReLU,增加更多非线性。

GoogLeNet中的1x1卷积核

从右侧的图像可以看出,1×1卷积核(黄色)作用于3×3和5×5卷积核前,第一时间对图像进行降维。理论上来说,当两个卷积核串联时,它们可以合起来计算,但这在GoogLeNet中是不允许的,因为每个卷积核后都跟了一个激活函数做非线性化,箭头输出的不再是线性运算符,也就不能再组合计算了。

而且如果要设计这样一个网络,我们必须确保第一个卷积层的大小要大于1×1,以便它有足够大的感受野去捕捉空间信息。正如Network In Network这篇论文中所说的:“这种跨通道的参数池化结构有利于跨通道信息的复杂、可学习交互”,1×1卷积核也可以被看做是跨通道参数池化层。

“跨通道信息学习”——这个词听起来有点晦涩,读起来也很拗口,但理解起来其实不难。它其实是受生物启发的一种思路,当观察目标的方位发生变化后,人的视觉皮层可以通过自动调谐感受野来获得信息,如下图所示:

更多用途1×1卷积核可以和最大池化层结合

用1×1卷积核池化使用更大步长的1×1卷积核可以通过降低分辨率缩小图像,同时尽可能地保留空间信息

更大步长的1×1卷积核用1×1卷积核代替全连接层Yann LeCun:在CNN中,没有“全连接层”这种东西,有的只是包含1×1卷积核的卷积层和一个完整的连接表。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();