GoogLeNet
GoogLeNet网络
GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,ImageNet-2014竞赛第一。在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失、梯度爆炸等。inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。
进化顺序: InceptionV1 -> InceptionV2 -> InceptionV3 -> InceptionV4
为了提升网络的性能,深度网络的发展一般都是通过减少参数,降低计算,增加宽度、深度来提高网络的性能。GoogLeNet网络的深度、宽度也在增加,从V1到V4Inception网络在不断的完善。
- 宽度:增加了多种核1×1,3×3,5×5和max pooling,增加网络的厚度,也就是宽度,但是考虑到简单的拼接到一起的话参数太多,计算量的问题,在,3×3,5×5和max pooling前加入了1×1的卷积核,以起到降低输入特征网络的厚度,通过降维这样就可以起到降低计算量的作用。
-> InceptionV1
核心组件Inception Architecture(稀疏连接结构)
① 提供多尺度特征:输出通道多尺度化(感受野)
- 首个Split-Merge思想
- 串接合并所有分支输出
② Bottleneck Layer 的 1×1 卷积解决多尺度带来的高额参数及计算问题
V1结构
通过设计一个稀疏网络结构,但是能够产生稠密的数据,既能增加神经网络表现,又能保证计算资源的使用效率。谷歌作者提出了最原始Inception的基本结构:
结构说明:
1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合。
2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了。
3 . 文章说很多地方都表明Pooling挺有效,所以Inception里面也嵌入了,同时Pooling池化也起到减少空间大小,降低过度拟合的作用。
4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。
但是在上面的结构中使用 5×5 的网络结构仍然会带来很大的计算量,因此Inception借鉴了其他的网络结构,在3×3,5×5卷积层前,Pooling池化层后加入了 1×1 卷积降维。于是有了新的网络结构:
在这里简单的讨论下1x1的卷积核有什么用呢?
1x1卷积的主要目的是为了减少维度,还用于修正线性**(ReLU)。比如,上一层的输出为100x100x128,经过具有256个通道的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256,其中,卷积层的参数为128x5x5x256= 819200。而假如上一层输出先经过具有32个通道的1x1卷积层,再经过具有256个输出的5x5卷积层,那么输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 204800,大约减少了4倍。
GoogLeNet的整体结构如下图:
更加清晰地结构如下:
对上图做如下说明:
1 . 显然GoogLeNet采用了模块化的结构,方便增添和修改;
2 . 网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune;
3 . 虽然移除了全连接,但是网络中依然使用了Dropout ;
4 . 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。此外,实际测试的时候,这两个额外的softmax会被去掉。
-> InceptionV2
核心组件
① Batch Normalization 批归一化(在Batch范围内,对每个特征通道分别进行归一化)
- 解决 Internal Covariate Shift 问题(内部neuron的数据分布发生变化)
- 白化:使每一层的出现都规范化到
- 允许较高学习率
- 取代部分Dropout
Batch Normalization 位置: 卷积 -> BN -> Relu ;另外配对使用Scale & Shift,添加一组逆算子scale乘子和bias偏置,这组参数需要学习
② 5×5 卷积核 -> 2个 3×3 卷积核
-> InceptionV3
核心组件
① 非对称卷积:N×N 分解成 1×N -> N×1
② 降低参数数量和计算量
但是GoogLeNet团队发现在网络的前期使用这种分解效果并不好,在中度大小的特征图(feature map)上使用效果才会更好(特征图大小建议在12到20之间)。
为了避免这种高效的降尺寸所带来的表达瓶颈的问题,在降尺寸前增加了特征通道。
使用卷积分支+池化分支,串接分支结果。网络机构图如下:
-> InceptionV4
V4的发展主要是,研究了Inception模块与残差连接的结合。ResNet结构大大地加深了网络深度,还极大地提升了训练速度,同时性能也有提升。
基本单元
GoogLeNet内容详细了解的话还是要查看论文综述,这里只是简单介绍下。。。