【DeepLearning】GoogLeNet Incepetion V1 V2 V3创新点比较总结汇总

一、GoogLeNet Incepetion V1 总结创新点:
为解决巨大的参数量带来的 过拟合 和 大大增加的计算成本 问题,提出了Inception结构:
  • 对于inception结构而言:
1.密集成分 来近似 最优的局部稀疏结构2.
2.使用NIN,采用1*1卷积进行降维,降低参数量
  • 对于整体结构而言:
1 . 显然GoogLeNet采用了模块化的结构,方便增添和修改;
2 . 网络最后采用了average pooling来代替全连接层,想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune;
3 . 虽然移除了全连接,但是网络中依然使用了Dropout ;
4 . 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。文章中说这两个辅助的分类器的loss应该加一个衰减系数,但看caffe中的model也没有加任何衰减。此外,实际 测试 的时候,这两个额外的softmax会被去掉。
二、GoogLeNet Incepetion V2 总结创新点:
  • 加入了Batch Normalization ,简称BN。
  • BN加快学习,减小计算量
首先,图像数据是高度相关的,假设其分布如下 图a 所示(简化为2维)。
由于初始化的时候,我们的参数一般都是0均值的,因此开始的拟合y=Wx+b,基本过原点附近,如 图b 红色虚线。因此,网络需要经过多次学习才能逐步达到如紫色实线的拟合,即收敛的比较慢。
如果我们对输入数据先作减均值操作,如 图c ,显然可以加快学习。
进一步,我们对数据再进行去相关操作,使得数据更加容易区分,会加快训练,如 图d
但是考虑到,在进行方差归一化时,要对每一层的所有数据计算协方差矩阵和求逆等操作,所以计算量太大,所以,基于 MINI-Batch 来对数据处理,减小计算量
其次,如果直接进行方差归一化之后,会把数据先知道均值为0的局部范围,在使用激活函数之后, 相当于仅使用了激活函数的线性部分 ,显然会降低模型的表达能力。所有,对归一化的输出又增加了两个参数 ( r & b):
即: y = r * x^ + b
【DeepLearning】GoogLeNet Incepetion V1 V2 V3创新点比较总结汇总_第1张图片
  • 解决梯度消失和梯度爆炸问题

三、GoogLeNet Incepetion V3 总结创新点:
之前版本表现很好,但是想要简单方法Inception结构来构建更大的网络,则会立即提高计算成本。
(1)给出了一些已经被证明有效的用于放大网络的通用准则和优化方法。这些准则和方法适用但不局限于Inception结构。主要有以下准则:
1 . 避免表达瓶颈,特别是在网络靠前的地方。 信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。比如你上来就来个kernel = 7, stride = 5 ,这样显然不合适。
另外输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)
这种情况一般发生在pooling层,字面意思是,pooling后特征图变小了,但有用信息不能丢,不能因为网络的漏斗形结构而产生表达瓶颈,解决办法是作者提出了一种特征图缩小方法,更复杂的池化。
2 . 高维特征更易处理。 高维特征更易区分,会加快训练。
3. 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。 比如在进行3x3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。
4 . 平衡网络的宽度与深度。
(2)优化INcepton结构
【DeepLearning】GoogLeNet Incepetion V1 V2 V3创新点比较总结汇总_第2张图片

(1) 图4是GoogLeNet V1中使用的Inception结构;
(2) 图5是用3x3卷积序列来代替大卷积核;
(3) 图6是用nx1卷积来代替大卷积核,这里设定n=7来应对17x17大小的feature map。该结构被正式用在GoogLeNet V2中。即非对称个卷积核,其实类似于卷积运算中,二维分解为1维计算,提高了计算速度。
(3)优化辅助分类器
作者发现,V1中的辅助分类器有点问题:auxiliary classifiers在训练初期的时候并不能加速收敛,只有当训练快结束的时候它才会略微提高网络精度。
然后Szegedy就把第一个auxiliary classifiers去掉了!还说,auxiliary classifiers能够起到regularizer的作用
(4)优化池化
按照传统的做法,在pooling之前,为了防止信息丢失,应当加入了expand层,如下图右半部分。
【DeepLearning】GoogLeNet Incepetion V1 V2 V3创新点比较总结汇总_第3张图片

Unefficient grid size reduction
这么做有个问题,会增加运算量,于是Szegedy就想出了下面这种pooling层。
【DeepLearning】GoogLeNet Incepetion V1 V2 V3创新点比较总结汇总_第4张图片

Efficient grid size reduction
上图可以这么理解,Szegedy利用了两个并行的结构完成grid size reduction,分别是conv和pool,就是上图的右半部分。左半部分是右半部分的内部结构。
(5)优化标签
Labels的脉冲性质会引发两个不良后果:一是over-fitting,另外一个是降低了网络的适应性。
Szegedy在阐述完上面两个缺点后,补充了一句话,说不良后果的产生就是因为网络太依赖它所预测的结果。
Intuitively, this happens because the model becomes too confident about its predictions.
好了,先不管这么多,这个label smooth具体是怎么实现的?就是下式:

label smooth
为了方便理解,转换成python代码,就是这样的:
new_labels = (1.0 - label_smoothing) * one_hot_labels + label_smoothing / num_classes
Szegedy在网络实现的时候,令 label_smoothing = 0.1,num_classes = 1000。Label smooth提高了网络精度0.2%。
我对Label smooth理解是这样的,它把原来很突兀的one_hot_labels稍微的平滑了一点,枪打了出头鸟,削了立于鸡群那只鹤的脑袋,分了点身高给鸡们,避免了网络过度学习labels而产生的弊端。












你可能感兴趣的:(DeepLearning)