Aggregated Residual Transformations for Deep Neural Networks
最后更新于
最后更新于
tags: ResNeXt, ResNet, Inception
在这篇文章中,作者介绍了ResNeXt。ResNeXt是ResNet和Inception的结合体,不同于Inception v4的是,ResNext不需要人工设计复杂的Inception结构细节,而是每一个分支都采用相同的拓扑结构。ResNeXt的本质是分组卷积(Group Convolution){{"howard2017mobilenets"|cite}},通过变量基数(Cardinality)来控制组的数量。组卷机是普通卷积和深度可分离卷积的一个折中方案,即每个分支产生的Feature Map的通道数为。
给定一个维的输入数据,其输入权值为我,一个没有偏置的线性激活神经元为:
它的结构如图1所示。
图1:全连接的split-transform-merge结构
这是一个最简单的“split-transform-merge”结构,具体的讲图1可以拆分成3步:
Split:将数据split成个特征;
Transform:每个特征经过一个线性变换;
Merge:通过单位加合成最后的输出。
Inception是一个非常明显的“split-transform-merge”结构,作者认为Inception不同分支的不同拓扑结构的特征有非常刻意的人工雕琢的痕迹,而往往调整Inception的内部结构对应着大量的超参数,这些超参数调整起来是非常困难的。
所以作者的思想是每个结构使用相同的拓扑结构,那么这时候的Inception(这里简称简化Inception)表示为
其中是简Inception的基数(Cardinality),是任意的变换,例如一系列的卷积操作等。图2便是一个简化Inception,其是由连续的卷积组成(->->)。
结合强大的残差网络,我们得到的便是完整的ResNeXt,也就是在简化Inception中添加一条short-cut,表示为:
如图3所示:
到这里我们发现ResNeXt和Inception v4是非常像的。不同之处有两点:
ResNeXt的分支的拓扑结构是相同的,Inception V4需要人工设计;
ResNeXt是先进行卷积然后执行单位加,Inception V4是先拼接再执行卷积,如图4所示。
分组卷积的雏形更早要追溯到2012年深度学习鼻祖文章AlexNet 。受限于当时硬件的限制,作者不得不将卷积操作拆分到两台GPU上运行,这两台GPU的参数是不共享的。
分组卷积是介于普通卷积核深度可分离卷积的一种折中方案,不是彻底的将每个channel都要单独赋予一个独立的卷积核也不是整个Feature Map使用同一个卷积核。
除了Inception v4,分组卷积的第三种变形是将开始的卷积也合并到一起,如图6。
ResNeXt提出了一种介于普通卷积核深度可分离卷积的这种策略:分组卷积,他通过控制分组的数量(基数)来达到两种策略的平衡。分组卷积的思想是源自Inception,不同于Inception的需要人工设计每个分支,ResNeXt的每个分支的拓扑结构是相同的。最后再结合残差网络,得到的便是最终的ResNeXt。
从上面的分析中我们可以看书ResNeXt的结构非常简单,但是其在ImageNet上取得了由于相同框架的残差网络,也算是Inception直接助攻了一把吧。
ResNeXt确实比Inception V4的超参数更少,但是他直接废除了Inception的囊括不同感受野的特性仿佛不是很合理,在更多的环境中我们发现Inception V4的效果是优于ResNeXt的。类似结构的ResNeXt的运行速度应该是优于Inception V4的,因为ResNeXt的相同拓扑结构的分支的设计是更符合GPU的硬件设计原则。
图2:简单Inception的split-transform-merge结构
图3:ResNeXt结构
图4:Inception V4拼接在前的结构
图5:AlexNet
图6:分组卷积的第三种形式