科技小数据|深度学习——卷积神经网络中十大令人拍案叫绝的操作( 二 )



科技小数据|深度学习——卷积神经网络中十大令人拍案叫绝的操作
本文插图

加入1×1卷积核的Inception结构

科技小数据|深度学习——卷积神经网络中十大令人拍案叫绝的操作
本文插图

根据上图 , 我们来做个对比计算 , 假设输入feature map的维度为256维 , 要求输出维度也是256维 。 有以下两种操作:
(1)256维的输入直接经过一个3×3×256的卷积层 , 输出一个256维的feature map , 那么参数量为:256×3×3×256 = 589,824
(2)256维的输入先经过一个1×1×64的卷积层 , 再经过一个3×3×64的卷积层 , 最后经过一个1×1×256的卷积层 , 输出256维 , 参数量为:256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69,632 。 足足把第一种操作的参数量降低到九分之一!
1×1卷积核也被认为是影响深远的操作 , 往后大型的网络为了降低参数量都会应用上1×1卷积核 。
越深的网络就越难训练吗

科技小数据|深度学习——卷积神经网络中十大令人拍案叫绝的操作
本文插图

ResNet skip connection
传统的卷积层层叠网络会遇到一个问题 , 当层数加深时 , 网络的表现越来越差 , 很大程度上的原因是因为当层数加深时 , 梯度消散得越来越严重 , 以至于反向传播很难训练到浅层的网络 。 为了解决这个问题 , 何凯明大神想出了一个“残差网络” , 使得梯度更容易地流动到浅层的网络当中去 , 而且这种“skip connection”能带来更多的好处 , 这里可以参考一个PPT《极深网络(ResNet/DenseNet): Skip Connection为何有效及其它》[1] , 以及我的一篇文章:为什么ResNet和DenseNet可以这么深?一文详解残差块为何能解决梯度弥散问题[2] ,大家可以结合下面的评论进行思考 。
卷积时须同时考虑通道和区域吗

科技小数据|深度学习——卷积神经网络中十大令人拍案叫绝的操作
本文插图

标准的卷积过程可以看上图 , 一个2×2的卷积核在卷积时 , 对应图像区域中的所有通道均被同时考虑 , 问题在于 , 为什么一定要同时考虑图像区域和通道?我们为什么不能把通道和空间区域分开考虑?

科技小数据|深度学习——卷积神经网络中十大令人拍案叫绝的操作
本文插图

Xception网络就是基于以上的问题发明而来 。 我们首先对每一个通道进行各自的卷积操作 , 有多少个通道就有多少个过滤器 。 得到新的通道feature maps之后 , 这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作 。 这种操作被称为 “DepthWise convolution”, 缩写“DW” 。
这种操作是相当有效的 , 在imagenet 1000类分类任务中已经超过了InceptionV3的表现 , 而且也同时减少了大量的参数 , 我们来算一算 , 假设输入通道数为3 , 要求输出通道数为256 , 两种做法:
直接接一个3×3×256的卷积核 , 参数量为:3×3×3×256 = 6,912
DW操作 , 分两步完成 , 参数量为:3×3×3 + 3×1×1×256 = 795 , 又把参数量降低到九分之一!
因此 , 一个depthwise操作比标准的卷积操作降低不少的参数量 , 同时论文中指出这个模型得到了更好的分类效果 。
本文在发出12小时后 , 一位网友私信了我 , 向我介绍了Depthwise和Pointwise的历史工作 , 而Xception和Mobilenet也引用了他们16年的工作 , 就是Min Wang et al 的Factorized Convolutional Neural Networks , 这篇论文的Depthwise中 , 每一通道输出的feature map(称为“基层”)可以不止一个 , 而Xception中的Depthwise separable Convolution ,正是这篇工作中“单一基层”的情况 。 推荐有兴趣的读者关注下他们的工作 , 这里有篇介绍博文:【深度学习】卷积层提速Factorized Convolutional Neural Networks 。 而最早关于separable convolution的介绍 , Xception作者提到 , 应该追溯到Lau- rent Sifre 2014年的工作 Rigid-Motion Scattering For Image Classification 6.2章节 。


推荐阅读