0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Inception V2/V3/V4的发展历程以及它们的网络结构和亮点

lviY_AI_shequ 来源:未知 作者:李倩 2018-06-21 14:27 次阅读

上一篇文章我们引出了GoogLeNet InceptionV1的网络结构,这篇文章中我们会详细讲到Inception V2/V3/V4的发展历程以及它们的网络结构和亮点。

GoogLeNet Inception V2

GoogLeNet Inception V2在《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》出现,最大亮点是提出了Batch Normalization方法,它起到以下作用:

使用较大的学习率而不用特别关心诸如梯度爆炸或消失等优化问题;

降低了模型效果对初始权重的依赖;

可以加速收敛,一定程度上可以不使用Dropout这种降低收敛速度的方法,但却起到了正则化作用提高了模型泛化性;

即使不使用ReLU也能缓解激活函数饱和问题;

能够学习到从当前层到下一层的分布缩放( scaling (方差),shift (期望))系数。

机器学习中,我们通常会做一种假设:训练样本独立同分布(iid)且训练样本与测试样本分布一致,如果真实数据符合这个假设则模型效果可能会不错,反之亦然,这个在学术上叫Covariate Shift,所以从样本(外部)的角度说,对于神经网络也是一样的道理。从结构(内部)的角度说,由于神经网络由多层组成,样本在层与层之间边提特征边往前传播,如果每层的输入分布不一致,那么势必造成要么模型效果不好,要么学习速度较慢,学术上这个叫InternalCovariate Shift。

假设:y为样本标注,X={x1,x2,x3,......}为样本x

通过神经网络若干层后每层的输入;

理论上:p(x,y)的联合概率分布应该与集合X中任意一层输入的联合概率分布一致,如:p(x,y)=p(x1,y);

但是:p(x,y)=p(y|x)⋅p(x),其中条件概率p(y|x)是一致的,即p(y|x)=p(y|x1)=p(y|x1)=......,但由于神经网络每一层对输入分布的改变,导致边缘概率是不一致的,即p(x)≠p(x1)≠p(x2)......,甚至随着网络深度的加深,前面层微小的变化会导致后面层巨大的变化。

BN整个算法过程如下:

以batch的方式做训练,对m个样本求期望和方差后对训练数据做白化,通过白化操作可以去除特征相关性并把数据缩放在一个球体上,这么做的好处既可以加快优化算法的优化速度也可能提高优化精度,一个直观的解释:

左边是未做白化的原始可行域,右边是做了白化的可行域;

当原始输入对模型学习更有利时能够恢复原始输入(和残差网络有点神似):

这里的参数γ和σ是需要学习的。

卷积神经网络中的BN

卷积网络中采用权重共享策略,每个feature map只有一对γ和σ需要学习。

GoogLeNet Inception V3

GoogLeNet Inception V3在《Rethinking the Inception Architecture for Computer Vision》中提出(注意,在这篇论文中作者把该网络结构叫做v2版,我们以最终的v4版论文的划分为标准),该论文的亮点在于:

提出通用的网络结构设计准则

引入卷积分解提高效率

引入高效的feature map降维

网络结构设计的准则

前面也说过,深度学习网络的探索更多是个实验科学,在实验中人们总结出一些结构设计准则,但说实话我觉得不一定都有实操性:

避免特征表示上的瓶颈,尤其在神经网络的前若干层

神经网络包含一个自动提取特征的过程,例如多层卷积,直观并符合常识的理解:如果在网络初期特征提取的太粗,细节已经丢了,后续即使结构再精细也没法做有效表示了;举个极端的例子:在宇宙中辨别一个星球,正常来说是通过由近及远,从房屋、树木到海洋、大陆板块再到整个星球之后进入整个宇宙,如果我们一开始就直接拉远到宇宙,你会发现所有星球都是球体,没法区分哪个是地球哪个是水星。所以feature map的大小应该是随着层数的加深逐步变小,但为了保证特征能得到有效表示和组合其通道数量会逐渐增加。

下图违反了这个原则,刚开就始直接从35×35×320被抽样降维到了17×17×320,特征细节被大量丢失,即使后面有Inception去做各种特征提取和组合也没用。

对于神经网络的某一层,通过更多的激活输出分支可以产生互相解耦的特征表示,从而产生高阶稀疏特征,从而加速收敛,注意下图的1×3和3×1激活输出:

合理使用维度缩减不会破坏网络特征表示能力反而能加快收敛速度,典型的例如通过两个3×3代替一个5×5的降维策略,不考虑padding,用两个3×3代替一个5×5能节省1-(3×3+3×3)/(5×5)=28%的计算消耗。

以及一个n×n卷积核通过顺序相连的两个1×n和n×1做降维(有点像矩阵分解),如果n=3,计算性能可以提升1-(3+3)/9=33%,但如果考虑高性能计算性能,这种分解可能会造成L1 cache miss率上升。

通过合理平衡网络的宽度和深度优化网络计算消耗(这句话尤其不具有实操性)。

抽样降维,传统抽样方法为pooling+卷积操作,为了防止出现特征表示的瓶颈,往往需要更多的卷积核,例如输入为n个d×d的feature map,共有k个卷积核,pooling时stride=2,为不出现特征表示瓶颈,往往k的取值为2n,通过引入inception module结构,即降低计算复杂度,又不会出现特征表示瓶颈,实现上有如下两种方式:

平滑样本标注

对于多分类的样本标注一般是one-hot的,例如[0,0,0,1],使用类似交叉熵的损失函数会使得模型学习中对ground truth标签分配过于置信的概率,并且由于ground truth标签的logit值与其他标签差距过大导致,出现过拟合,导致降低泛化性。一种解决方法是加正则项,即对样本标签给个概率分布做调节,使得样本标注变成“soft”的,例如[0.1,0.2,0.1,0.6],这种方式在实验中降低了top-1和top-5的错误率0.2%。

网络结构

GoogLeNet Inception V4

GoogLeNet Inception V4/和ResNet V1/V2这三种结构在《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》一文中提出,论文的亮点是:提出了效果更好的GoogLeNet Inception v4网络结构;与残差网络融合,提出效果不逊于v4但训练速度更快的结构。

GoogLeNet Inception V4网络结构

GoogLeNet Inception ResNet网络结构

代码实践

Tensorflow的代码在slim模块下有完整的实现,paddlepaddle的可以参考上篇文章中写的inception v1的代码来写。

总结

这篇文章比较偏理论,主要讲了GoogLeNet的inception模块的发展,包括在v2中提出的batch normalization,v3中提出的卷积分级与更通用的网络结构准则,v4中的与残差网络结合等,在实际应用过程中可以可以对同一份数据用不同的网络结构跑一跑,看看结果如何,实际体验一下不同网络结构的loss下降速率,对准确率的提升等。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4565

    浏览量

    98652
  • 机器学习
    +关注

    关注

    66

    文章

    8096

    浏览量

    130522

原文标题:【深度学习系列】用PaddlePaddle和Tensorflow实现GoogLeNet InceptionV2/V3/V4

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LT8228从V1到V2是BUCK模式,从V2V1是BOOST模式,请问这个模式是固定的吗?

    看LT8228的示例,从V1到V2是BUCK模式,从V2V1是BOOST模式,请问,这个模式是固定的吗? 假如我输入V1是48
    发表于 01-05 07:10

    变形的半桥式变换器电路图

    变形的半桥式变换器电路图对于高压输入,大功率输出的情况下,一般采用如图所示的电路方式。在电路中,开关器件V1、V2为一组,V3V4为一组,双双串联,可减少单管耐压值。在实际应用电路中
    发表于 10-24 09:32

    请教下大神下面这个电路中V1,V2,V3之间的关系,最好有计算过程

    请教下大神下面这个电路中V1,V2,V3之间的关系,最好有计算过程,谢不胜感激!
    发表于 06-25 21:32

    XDS100仿真器V1、V2V3三个版本有什么区别?

    XDS100仿真器V1、V2V3在硬件上和软件上存在怎样的区别?能看一下这几个版本的硬件原理图吗?在线等。。。
    发表于 08-20 06:31

    光耦驱动的IGBT电路图R1、R2、R3、R4四个电阻应该选用多大?

    下面是一个光耦驱动的IGBT电路,没太看明白为什么是V1导通,V2截止后,是V3导通,V4截止。而V1截止,
    发表于 02-21 05:21

    v3板子上1号管脚没有接线

    v3板子上1号管脚没有接线,是没有用到?还是画错了?视频中是按v2板子讲的,v2板子上1号管脚是有连线的。
    发表于 04-09 00:06

    请问怎么从V2.25迁移到V3

    嗨,我正在将配置从V2.25迁移到V3。我对Math Accelerator模块,PID模式有问题,计算的值不正确:Screens.:Correct值,由V2.25:K1=84157K2
    发表于 09-02 10:37

    介绍yolo v4版的安装与测试

    You only look once (YOLO)是一款非常著名的物体识别深度学习网络,可实现快速检测的同时还达到较高的准确率。问介绍yolo v4版的安装与测试。为了提高检测速率,硬件部分选择了
    发表于 02-17 07:06

    构建一台mutantc V4设备

    描述突变体C v4 - 显示PCBmutantc V4 - 为您的专业作品DIY手持设备mutantC 是一个树莓派 UMPC。一个开放的平台设备,可以使用任何严肃的专业工作并创建您的自动化
    发表于 07-25 07:56

    NodeMCU V2 Amica&V3 Lolin的盾牌

    描述Shield NodeMCU V2 Amica & V3 Lolin注意:电容器处于休眠状态
    发表于 08-05 06:58

    如何将st-link固件从V2更改为v2-1?

    大家好我有 St-link v2,但在 stm32mp157-ev1 中调试 Cortex M 时遇到问题。我认为是因为keil文档中的HW Vesion和FW的差异以及我的结果。在附件图片
    发表于 02-07 08:30

    正点原子STM32战舰V4开发板

    正点原子STM32战舰V4开发板在战舰V3的基础上进行了全面的升级,包括硬件、例程和视频等。硬件进行了多方面的改进,更加合理。常用的外设扩展多个功能试验(TIMADCDAC低功耗等),例程个数达72个,工程结构更加合理、编程风格
    发表于 03-22 14:00

    ESP devkitc v3v4和CAN网络之间有什么不同?

    我在 Arduino IDE 上使用内部 CAN 控制器开发了一个软件。具有任何更改的相同代码在 ESP32 devkitc v3 而不是 v4 上完美工作.....我成功地在 v3 而不是
    发表于 04-12 06:33

    【正点原子STM32战舰V4开发板体验】开箱贴

    STM32F103 开发板迭代到V4。在战舰 V3 的基础上进行改进而来下面我们开始介绍战舰 V4。越来越精炼实用,是单片机开发者枕头宝。 盒子大气,保存百年也没事。哈哈哈。 开发板开箱,只有核心板
    发表于 05-04 17:10

    【正点原子STM32战舰V4开发板免费试用】开箱体验、点灯

    期待了很久的正点原子战舰V4板终于到了手中 开箱 正面照片: 感觉新款的战舰V4和战舰V3的区别不大,SD卡槽换成了小的,移到了开发板的前面,网络芯片换成了沁恒家的CH935。
    发表于 05-06 19:34