inception v2

  • 深度网络为什么难训练?

  因为internal covariate shift

  • internal covariate shift:在训练过程中,每层的输入分布因为前层的参数变化而不断变化
  • 从不同的角度说明问题internal covariate shift

  1.SGD训练多层网络

          总损失是,当,损失转换为

           梯度更新是

           当x的分布固定时候,训练是容易收敛的。而当x的分布不断变化时候,需要不断调整去修正x分布的变化带来的影响

        2.易进入饱和状态

            什么是饱和状态?以sigmoid为例,,当|x|增加,趋向于0,称为饱和状态。(梯度消失,模型将缓慢训练)。这里x受W、b和前面层参数的影响,训练期间前面层参数的变化可能会将x的许多维度移动到非线性的饱和状态并收敛减慢。且这个前层的影响随着网络深度的增加而放大。

  • BN之前的做法 :1.较低的学习率,但减慢了收敛速度。2.谨慎的参数初始化。3.ReLU代替sigmoid 
  • 如何解决internal covariate shift,BN的思考起源:

         whitened(LeCun et al,1998b),对输入进行白化即输入线性变化为具有0均值和单位方差,并去相关。使用白化来进行标准化(normalization),以此来消除internal covariate shift的不良影响由于whitened需要计算协方差矩阵和它的平方根倒数,而且在每次参数更新后需要对整个训练集进行分析,代价昂贵。因此寻求一种可替代的方案,BN。

  •  Batch Normalization

          在白化的基础上做简化:

          简化1,单独标准化每个标量特征(每个通道)

         简单标准化可能改变该层的表达能力,以sigmoid层为例会把输入约束到线性状态。因此我们需要添加新的恒等变换去抵消这个(scale操作)。

          简化2,mini-batch方式进行normalization。计算过程如图:

  为了数值稳定,  是一个加到方差上的常量。

  •  Batch Normalization的求导

 

  • BN的训练和预测

         训练时取决于当前batch的输入。

         预测需要用总体统计来进行标准化。训练完成后得到均值参数和方差参数

 

  •  网络中加入BN

            仿射(线性)变换和非线性变换组成用下式表示:

            其中g是非线性如sigmoid。当normalization非线性输出时,它的分布形状可能会改变无法消除internal covariate shift。

             而线性更加具有对称性,非稀疏分布  ,即更高斯。对其进行normalization更能产生稳定分布的激活。   

            因此BN的对象是线性变换的输出。

             这时中偏置可以忽略。

            偏置b的作用可以被BN的中心化取消,且后面scale部分会有shift。最终的公式如下:

  • 添加BN后可以采用更大学习

          通过bn整个网络的激活值,在数据通过深度网络传播时,它可以防止层参数的微小变化被放大。(梯度消失) 

bn使参数缩放更有弹性。通常,大的学习率可能增加参数的缩放,这在BP时会放大梯度并导致梯度爆炸。通过BN,bp不受其参数缩放的影响。

  •  实验1:minist训练

    a图是性能和迭代次数。b,c是某一层的激活值分布。添加bn训练收敛更快且性能更优,且分布更加稳定。

  • 实验2:Imagenet  Classfication

          训练tricks:1.提高学习率。大学习率依然能收敛。2.去掉dropout。删除后获得更高的验证准确率。推测bn能提供类似dropout的正则化收益。(这里只测试了验证集,感觉不够严密)。3.更彻底的shuffle。防止同一类一起出现在同一个minibatch。验证集提高了1%。4.减小L2正则权重。减小5倍后验证集性能提高。(相当于caffe里deacy)。5.加速学习率衰减。训练时间更短。6.去掉RPN。7.减少photometric distortions(光照扭曲)。

          单模型实验:

         Inception 

  BN-Baseline:在Inception 基础上加bn
  BN-x5: 在BN-Baseline 基础上增大5倍学习率到0.0075
  BN-x30:在BN-Baseline 基础上增大30倍学习率到0.045
  BN-x5-Sigmoid:使用sigmoid替代ReLU

 

         多模型实验结果:

         (BN-inception就是我们说的V2)

 

  • 附录BN-inception的结构

  V1到BN的改动:1.2个3*3代替5*5。2.28*28 modules从2个增加到3个。3.在modules中,pooling有时average ,有时maximum 。4.

没有across board pooling layers在任意两个inception modules。只在3c,4e里会有stride-2的卷积和pooling。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们。基于深度学习的计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法层出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习的计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习之计算机视觉方向的算法工程师和研发人员。本课程系统全面地讲述基于深度学习的计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割(语义分割、实例分割、全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。通过本课程的学习,学员可把握基于深度学习的计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习之计算机视觉方向的知识结构及学习建议请参见本人CSDN博客。本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值