inception系列:Well-Designed OR Delicate
**本文由xmind直接导出,需要思维导图原版可以留言。**
摘要
2014年GoogleNet(Inception v1)诞生开始,Google差不多保持一年一更的节奏,陆续推出了BN-Inception [2015-2],Inception v2和v3 [2015-7],Inception v4和Inception-ResNet [2016]。由于其优秀的性能,在各个数据集都达到过SOTA的精确度。同时,其系列模型都提出了很多训练技巧、模型设计技巧,大幅促进了深度学习的发展。然而,随着模型设计的过于“精致”,难以用于下游任务,这一系列最终停止了更新。本文试图通过精读、总结Google Brain团队的多篇论文,同时挖掘其引用的AlexNet、ResNet、VGG等论文,总结整个inception系列的知识体系,并最终得到其消亡的原因。
系列总结
思想
-
Inception 网络是 CNN 分类器发展史上一个重要的里程碑。在 Inception 出现之前,大部分流行 CNN 仅仅是把卷积层堆叠得越来越多,使网络越来越深,以此希望能够得到更好的性能。
-
Inception中隐含的shortcut
-
Inception-ResNet在加上identity shortcut后性能并没有明显提升(但训练速度加快了),仿佛Inception本身并不太需要identity short。
-
Inception module中本来就有近似的identity shortcut
- 大家之前对于Inception module的关注点主要集中在包含33和55的branch,忽略了另外两条只包含11的branch。11 branch是对前层feature的融合,然后与其它branch的feature concat到一起作为Inception module的输出。大家有没有想过,11 conv只是在input feature的channel方向上做了简单的融合,所以其输出在很大程度上是携带了原始input feature的信息的。也就是说11 conv其实可以看作是一种近似的identity branch,可以有效地实现低层特征的复用。
-
系列优势
-
优势的解释
-
resnet解释性
-
inception本身解释性
- Inception使用split-transform-merge策略把multi-scale filter生成的不同感受野的特征融合到一起,有利于识别不同尺度的对象。但另一方面,很多state-of-the-art的网络没有使用multi-scale filters,但也取得了非常好的结果,比如VGG和ResNet。
- 自ResNet 横空出世,后续CNN基本上都会使用identity shortcut,包括DenseNet、DPN(dual path net)和ResNeXt等。然而,Inceptiont系列始终坚持不用identity shortcut,但在性能上却能跟用了identity shortcut的网络打得难解难分。更奇怪的是,Inception v4这篇paper中验证了增加identity shortcut对于Inception精度的提升非常有限,仅仅是加速了训练而已。为什么对其它结构可以立竿见影涨点的identity shortcut,对于Inception来说却略显无力?
-
-
严谨、大量的实验,保证了模型在多个图像分类任务中测试,确认了其性能上的优势。
inception 系列劣势
-
过于精巧的设计 ,使得模型难以用于downstream任务。
- The Inception network on the other hand, was complex (heavily engineered). It used a lot of tricks to push performance; both in terms of speed and accuracy.
-
对图像分类任务的过拟合,多次在ILSVRC图像分类任务霸榜,但应用于其他视觉任务的精度却不高。
-
不适用于downstream任务。就像是PVT中谈到VIT难以适用于下流任务,太复杂而不能做backbone。inception也存在这样的问题,后续工作难以对过于复杂的设计进行改进。对比VGG resnet rnn等backbone。
-
推测Google团队大量使用算力进行寻优 才得到的inception结构(NAS)
- 在V1论文中:提到不久就会有non-uniform的模型被自动化地找到,说明当时Google已经在探索相关方向,甚至inception本身也有可能是autoML的产物。
- 在V3论文中:提到初始的模型有很多备选结构,最终通过性能比较确定了v3的改型方案,而没有太多的理论依据。
- 比对同期Google发出的NAS论文:NIPS2016 Learning to learn by gradient descent by gradient descent
- 对比2019的AmeobaNet-A:结构大多并行度很低,结构碎片化严重,复杂的多分支结构部署极其不友好,这些特点导致以上几个CNN的实际部署都效率较低
-
对于inception的工作,自己训练时performance要低几个点。而resnet等著名网络没有这样的BUG。
-
系列命名混乱
- Googlenet和inception两种命名方式混合
- 在google自己的inception-resnet中也搞混了,不应该有4
- inception没有v2只有BN-inception。所提出结构用于了GoogLeNet V2。Inception v2和v3在googlenet第三篇提出。但是google似乎有内部的命名代号。
- 网络上很多教程甚至搞不清楚这些,经常把这些搞混。
v1
cell结构
-
原版Inception Cell
- 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合。
- 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1后,只要分别设定pad=0、1、2,那么卷积后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了。
- 很多地方都表明pooling挺有效,所以Inception也继承了前人工作。
- 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,33和55卷积的比例也要增加。
-
降维版本Inception Cell
-
这样每个branch内部1*1conv的应用,使得Inception module相比single branch结构的FLOPs要低。既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。
-
1×1卷积层
- 有非线性选择能力,提高神经网络的表示能力。
- 降维模块以进行降维,压缩特征图厚度,消除计算瓶颈,在保持计算量的情况下加深网络。
-
-
提出
-
在过去的文章中,提升网络性能传统的办法就是增加网络深度和宽度,这也就意味着巨量的参数、巨量的计算,同时也容易产生过拟合。
文章认为解决上述两个缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接 -
比之前的AlexNet和ZFNet,Inception v1在结构上有两个突出的特点。这两个特点被后续的Inception版本一直沿续,可以看作是Inception系列的标志。后续的版本是对v1上的迭代升级,而非颠覆。
-
Multi-branch结构。每个inception module分为四个branch,输出时对所有branch的输出做concatenation。一方面,Hebbian准则认为CNN内部的连接应该具有一定的稀疏。另一方面,对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络,大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能。这点表明臃肿的稀疏网络可能被不失性能地简化。 虽然数学证明有着严格的条件限制,但在工程上可以应用。
- 说到这个 我好像从来没了解这个和inception有什么关系
- MutiBatch是inception最大的特点,它精巧的设计启发了后续的densenet、resnet等重模型。但同时,过度的设计也为它的难以修改用于downstream任务埋下了伏笔。
- 从信息通路的角度讲,多个选项能保证信息有足够的选择余地,来决定自己哪一部分流向下一级。
-
Heterogeneous branch结构。每个branch的结构都是不一样的,主要表现在branch的depth和kernel size两方面。由于imagenet数据集的特点,同类别的对象在不同图片中的size可能是不同的。所以应该在同一个module内部融合不同size的kernel产生的feature,有利于CNN识别不同size的对象。
-
-
inception网络结构
- 全连接层使用全卷积代替,利用卷积的滑动使得模型对不同大小feature map有鲁棒性。
- 更好地利用网络内部的计算资源,这通过一个精心制作的设计来实现,该设计允许增加网络的深度和宽度,同时保持计算预算不变。
- 辅助损失:中间层监督,加权值预先设定,缓解梯度消失问题
- 结构示意图
意义
-
ILSVRC14的top-1模型
-
一般看CNN网络结构都只关注结构本身,这篇文章还有具体的理论基础和实施策略。
- 赫布理论和稀疏性原则作为指导,利用密集计算来实现稀疏性的神经网络结构。
-
以前的模型只是简单加深层数、加宽模型,企图依靠简单堆叠提升模型性能。由此带来计算量激增、过拟合、梯度消失、梯度爆炸等问题。
- 此模型以alexnet的12分之一的参数量达到了更好的性能。
-
促进1*1卷积的广泛使用,促进网络加深,加速计算机视觉的发展。
Trick
- 在图像输入第一步,使用stride=2的conv快速降低feature map的分辨率,节省内存。
- 最后加一个FC层,便于对模型迁移。切换数据集只需要固定网络参数,重新训练FC。
- 数据增强:尺寸变化8-100%、长宽比限制、光学畸变(乘相机模拟参数)。
- 随机使用差值提升性能。
- 0padding填充拼接特征图的空白。
- softmax概率分布被平均到不同的裁切以及所有的单分类器上以获取最终的预测结果。
- 独立训练了七个版本的相同的GoogLeNet模型(包括一个宽度更大的版本)然后将其联立起来进行预测。
启发
- 不是来自越来越大的深度网络的简单应用,而是来自深度架构与经典计算机视觉的协同作用。
- 网络的中间过程也值得关注,对深层网络可以在中途加入监督,来帮助更快拟合。(本质上就是resnet思想,更宏观)
- 可以参考神经学原理设计模型,将生物神经元和人工神经元结构相类比。
- 文章最后一句:自动化的方式创造更稀疏、更精细的结构。使得小而浅的网络能达到很好的效果。这呼应了后续Google对autoML的工作。
主要参考文献
-
NIN
- 1*1卷积
- 小卷积核(3*3)
-
赫布理论
- 均匀稀疏结构
-
多尺度滤波器Gabor
- 多尺度卷积核
BN-Inception
Batch Normalization结构
-
BN-Inception在Inception v1的基础上引入了Batch Normalization(BN)操作,提高训练效率的同时也大幅提升了Inception的性能。
-
提出
- internal covariate shift:在训练过程中,每层的输入分布因为前层的参数变化而不断变化。深度网络由于internal covariate shift难以训练。
- 由于难以训练深度网络,学习率被调的很低、参数初始化需要精心选择、relu代替sigmoid。这带来了更慢的收敛速度、更难的网络设计等问题。
- 为了探索初始权值这一问题,我建立一个简单BP网络,对比了使用遗传算法优化初始权重和阈值、不优化、使用BN的效果。实验证明,BN能将网络优化至差分进化算法优化后的程度,要知道使用DE进行优化的算力是直接训练的数十倍(这取决与种群数量和迭代次数等超参数)。
- whitened(LeCun et al,1998b),对输入进行白化即输入线性变化为具有0均值和单位方差,并去相关。使用白化来进行标准化(normalization),以此来消除internal covariate shift的不良影响由于whitened需要计算协方差矩阵和它的平方根倒数,而且在每次参数更新后需要对整个训练集进行分析,代价昂贵。因此寻求一种可替代的方案,BN。
-
结构示意图
网络架构
- 基本保持原本V1网络架构
意义
- 大幅度加速网络收敛,不必担心网络优化到局部最优解,使得深度学习发展加快。
- 不必使用L2正则、LRN等技巧,只需少量超参数。
- BN层的设计被广泛使用,后续有了LN、DN等变种,几乎所有现在的网络都有这个结构。
- 在图像分类任务中,准确率首次超过人类,具有里程碑的意义。
- 信号处理中有“白噪声”的说法,一般在做信号的转化前要先去白噪声来减少信息间的重复度。
- 保证计算消耗稳定不变的情况下提升了网络的深度和宽度。
主要参考文献
- whitened(LeCun et al,1998b)数据白化
Trick
- 使用DropOut对网络中的一部分神经元加mask,保证训练出的网络不依赖于某个特定的神经元。
v2
Inception v2和v3是在同一篇文章中提出来的。这篇文章主要是通过大量的实验,来提出一些有助于深度学习模型训练的技巧,本身没有对模型进行大幅度改进。
- 本篇论文认为inceptionV2指的是BN-Incepiton,但是在阅读完整个系列的多篇论文后,我发现这只是Google Brain团队内部的命名问题。从行文风格(比如段落划分、使用语句习惯)和作者排序来看,两篇文章作者完全不同,后续BN-Inception作者又回归团队,重新在另一篇文章中改正了这一命名问题。
结构
-
用堆叠的小kernel size(33)的卷积来替代Inception v1中的大kernel size(55)卷积。
- 将 5×5 的卷积分解为两个 3×3 的卷积运算以提升计算速度。尽管这有点违反直觉,但一个 5×5 的卷积在计算成本上是一个 3×3 卷积的 2.78 倍。所以叠加两个 3×3 卷积实际上在性能上会有所提升。
-
并行结构来优化pooling,减少信息丢失过多。
-
结构示意图
网络架构
- 通过实验对比,得出了辅助损失层的作用主要集中在加速模型在后期达到更高一点的准确率。作者认为辅助分类器的功能是正则化,尤其是它们具备 BatchNorm 或 Dropout 操作时。而对于训练过程没有太大帮助,因此去除了此模型结构。
- 示意图
提出了四条设计准则
- 1.避免representation瓶颈,尤其是网络前面的层。representation就是activations,activations的size应该是逐渐减减小的。
- 2.更高维的representation更容易处理,更容易训练(收敛)。
- 3.低维嵌入空间上的空间聚合(Spatial aggregation)几乎不会影响representation能力。这个的解释是相连神经元之间具有很强的相关性,信息有冗余。
- 4.网络宽度和深度的平衡。两者的平衡能带来更好的性能。
启发
- 大规模实验需要使用交叉验证、消融实验等方式。
- 可以从信息通路的角度来思考模型训练难度,通路流畅的网络一般更容易训练。
- 小卷积核的性能以及得到了从NIN到VGG等相当多模型的验证,因此将迫不得已由于信息获取必须设计的大卷积模块替换为小卷积是非常好的优化思路。
- 降低参数量、附加BN或Dropout的辅助分类器、label-smoothing三大技术可以训练出高质量的网络
主要参考文献
- SMO理论:视觉网络中的相近神经元应该具有相近的输出激活量。
v3
作者注意到辅助分类器直到训练过程快结束时才有较多贡献,那时准确率接近饱和。
网络架构
- 加入了BN辅助
结构
-
引入了空间分离卷积(Factorized Convolution)来进一步降低网络的复杂度。
- 作者将 n*n 的卷积核尺寸分解为 1×n 和 n×1 两个卷积。例如,一个 3×3 的卷积等价于首先执行一个 1×3 的卷积再执行一个 3×1 的卷积。他们还发现这种方法在成本上要比单个 3×3 的卷积降低 33%,这一结构如下图所示:
-
对于本网络来说是Factorized 7x7 卷积
- 将inception中77用71,1*7代替
-
结构图
启发
-
本文在v3结构上探究了低分辨率输入情况下的性能,为了搞明白高分辨率是否有助于性能的提升,能提高多少?
- 使用同一个网络,虽然低分辨率网络的训练时间更长,但在目标检测领域的最终精度的结果却和高分辨率网络相差无几。
- 但是,如果我们根据输入分辨率,简单地减少网络尺寸,那么网络性能将明显下降。
-
启发了后续结构将大尺度卷积分解为小卷积来提升性能。
-
step=2的卷积用于快速降低输入大分辨率特征图的维度,这样的结构几乎在如今的所有CNN网络第一层都能看到。
主要参考文献
Trick
- 辅助分类器使用了 BatchNorm。
- 标签平滑(添加到损失公式的一种正则化项,旨在阻止网络对某一类别过分自信,即阻止过拟合)。消除训练过程中label-dropout的边缘效应。
- RMSProp 优化器,是AdaGrad算法的一种改进。通过动态调整学习率来快速得到最优解。
- 加入了梯度裁剪,裁剪的阈值:2.0,作者发现这十分有利于训练的稳定。
v4
GoogleNet系列第四篇论文,一共提出了Inception v4、Inception-ResNet v1和Inception ResNet v2三个网络。深度分别为76、94、96,都没有能超过Resnet。因此本文在全篇都没提自己的深度,只能由读者计算。
Inception v3继承了太多的历史包袱,看起来过于复杂,所以设计并非最优的。以前模型设计技术上的限制主要是为了模型能在DistBelief进行分布式训练,做了让步,而现在迁移到Tensorflow了,所以去掉不必要的这个模型设计限制,做一个简单一致的网络设计,所以有了Inception v4
https://zhuanlan.zhihu.com/p/32888084
Cell结构
- 模块设计上并没有提出非常有insight的princple,感觉只是把之前的Inception module变得更复杂了,然后对网络的stem进行了一定的修改。
- Inception v4 引入了专用的「缩减块」(reduction block),它被用于改变网格的宽度和高度。早期的版本并没有明确使用缩减块,但也实现了其功能。
- 结构示意图
网络架构
意义
- 2015ILSVRC的 最优模型
启发
- Inception v4 引入了专用的「缩减块」(reduction block),它被用于改变网格的宽度和高度。早期的版本并没有明确使用缩减块,但也实现了其功能。
- 其实不需要残差结构也能到比较深的层数,使用inception也一样。
- 网络设计中,如果想替换模块,要保证替换前后信息通路(既模块的I/O)不改变。
主要参考文献
- AlexNet中的重叠池化。
ResNet
关于identity shortcut为什么能work的解释有很多种,比较主流的解释有:降低了网络在加深时的优化难度;缓解了BP时的梯度消失问题;实现了前馈过程中的低层特征的复用。
不管大家认可哪一种具体的解释,ResNet超高的性能让大家相信identity shortcut应该成为state-of-the-art网络的标配。事实上,后来的DenseNet,ResNeXt,SE-ResNet,SE-ResNeXt都可以看作是ResNet的扩展。
Inception-ResNet V1&V2
Cell结构
- Inception module中引入了residual connection。
- 进一步展示了适当的激活值缩放如何稳定非常宽的残差 Inception 网络的训练过程
- 使模块更加一致。作者还注意到某些模块有不必要的复杂性。这允许我们通过添加更多一致的模块来提高性能。
- 作者重新研究了下residual connection的作用,指出residual connection并不会明显提升模型精度,而是会加快训练收敛
- 另外,引入了residual connection以后,网络太深了不稳定,不太好训练,到后面可能全变为0了,而通过引入scale。Inception框可以用任意其它sub-network替代,输出乘以一个很小的缩放系数,通常0.1左右,再相加再激活。
- 结构示意图如下,由于此次网络设计的过于离谱,各种block有ABCDE很多版本,这里只放了一个骨干模块。
版本
- Inception-ResNet v1 的计算成本和 Inception v3 的接近。
- Inception-ResNetv2 的计算成本和 Inception v4 的接近
- 使用了两个模型,依据参数量来设计,做对比实验更容易。
网络架构
启发
- 模型融合不能直接依靠Boosting工具,更应该对模型本身进行分析。本文就是利用信息通路、信息瓶颈对resnet和老版本inception做了分析,从结构上融合两种模型,达到了非常好的效果。
- Resnet的残差模块确实能把网训练的更深。
- 网络不能设计的太精巧,这样难以在其他任务中应用。从inception系列的应用量皆可以看出,设计过于专一化的网络一般能难得到大家的使用。
- 在模型设计时就考虑了要对比resnet,因此优化的比较好,结果比resnet好看。
主要参考文献
- Resnet:残差结构帮助加深模型。
Xception
引用
https://zhuanlan.zhihu.com/p/63270486
- 引用