热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Resnet学习和理解

一直以来,经常在各种复杂的结构中使用或者听说过Resnet的名字,但是一直也没有学习过这篇文章,现在趁着有时间,学习一下Re

一直以来,经常在各种复杂的结构中使用或者听说过Resnet的名字,但是一直也没有学习过这篇文章,现在趁着有时间,学习一下Resnet——何凯明等人于2015年年底发表的《Deep Residual Learning for Image Recognition》。


一、Resnet的背景

深度神经网络(DCNN)结构是很难训练的,这里我们提出一种叫做“residual learning”的框架,使得神经网络可以更deep,更好训练。

我们显式地将层(layer)重新组织(reformulate)为学习残差函数,而不是学习未引用的函数(unreferenced functions)。

通过提供全面的经验证据(Comprehensive empirical evidence),表明此方法是容易优化且准确性随着深度的增加而增加(showing that these residual networks are easier to optimize, and can gain accuracy from considerably increased depth)。

在ImageNet比赛中,我们采用了比VGG大8倍的网络结构(152层),但是复杂度还是低于VGG的,测试集的错误率达到3.57%,赢得了ILSVRC 2015分类任务的第一名。

对于很多的visual recognition任务,the depth of representation(或者说网络的深度)是最重要的(增加描述能力)。

二、Resnet的解决的问题

根据之前的研究成果( K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. In ICLR, 2015. ,C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich.Going deeper with convolutions. In CVPR, 2015.),学术界普遍认为CNN结构的层数越多,表述能力越强(对特征的描述能力也就越强),效果也就越好。
这里写图片描述
但是实际上,由于层数的增加,常规的网络(plain network)在网络很深的时候,效果反而不如之前的浅层网络了(shallower network)。这种现象称之为退化现象(degradation problem) ,跟预想相反的是,这种退化行为(上图1中层数深的网络比层数低的网络train loss和test loss都要大。)不是由于overfitting造成的。这表明不是所有的系统(神经网络结构)都是容易收敛和优化的。;除此之外,由于层数很深,也不可避免的出现梯度消失/爆炸的问题(vanishing/exploding gradient)。

因此,Resnet解决的问题就是提出一种新型的方法,来解决随着网络层数加深而导致的退化问题(degradation problem)和相应的梯度消失问题。

三、Resnet的解决思路

提到Resnet,就离不开两方面的内容:① Residual Representation ② Shortcut Connections。下面我们结合实际的过程引入这两块内容,避免直接叙述带来的困扰和不解。

这里写图片描述

① Residual Representation

上面是Plain Net和Residual Net的结构,这里我们将H(x)H(x)视为一部分堆叠的网络的输出结果,xx为这一小部分结构的输入。我们希望通过2层权重能够拟合残差函数F(x)=H(x)−x" role="presentation" >F(x)=H(x)x(这里假设H(x)H(x)xx的维度一致)——用论文的原话说是:“如果假设多重非线性层可以渐近地逼近复杂的函数,那么就相当于假设它们可以渐近地近似残差函数(residual function)”

引用参考资料2里面的一段分析:

如果深层网络的后面那些层是恒等映射(identity mapping),那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。 但是直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。

但是,如果把网络设计为H(x) = F(x) + x,如下图。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易。

这里写图片描述

映射H" role="presentation" >H的计算复杂,而FF的计算相对简单,所以加深网络层数是可行的。这里:F" role="presentation" >F是求和前网络映射,HH是从输入到求和后的网络映射。

下面引用自知乎

比如把5映射到5.1,那么引入残差前是F’(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化,看到残差网络我第一反应就是差分放大器

② Shortcut Connections

如上图结构,我们对每几层的堆叠结构(stacked layers)都采用残差学习,其构造过程就是一个building block的过程:

y=F(x,Wi)+x" role="presentation" >y=F(x,Wi)+x

这里xxyy为上面layers的输入和输出向量。函数F(x,Wi)F(x,Wi)表示要学习的残差,以上图为例,二层结构有F=W2σ(W1x)F=W2σ(W1x),这里σσ表示激活函数ReLu(为简化描述,省略bias unit)。F+xF+x的操作是通过shortcut connection和element-wise的加法来执行的。

值得注意的是,这里的shortcut connection机制既没有增加额外的参数,也没有使得计算复杂度增加。这一点是非常重要的,因为我们可以同时比较plain net和residual net(拥有同样的参数个数、网络深度和计算代价)。

这里又涉及到一个难点:如何保证输入输出的维度相同?

  • 1)快捷连接(shortcut connection)仍然使用自身映射(identity mapping),对于维度的增加用零来填补空缺(padding),此策略不会引入额外的参数。

  • 2)可以在shortcut connection时对x做一个线性变换方阵WsWs,相当于加入了1x1卷积层,即

    y=F(x,Wi)+Wsxy=F(x,Wi)+Wsx

这里写图片描述

但通过实验证明,恒等映射对于解决退化问题已经足够了,因此只有在匹配维度时才需要使用WsWs

残差函数FF的形式是灵活的。本文的实验涉及到的函数F" role="presentation" >F,它有两个或三个层,当然更多的层也是可以的。但是,如果FF只有一个层,那么y=F(x,Wi)+x" role="presentation" >y=F(x,Wi)+x就变成了y=W1x+xy=W1x+x,就失去了非线性的表述能力了,我们认为这是不可取的。

③ Network Architectures

我们测试了各种各样的普通/残差网网络,并观察到一致的现象。为了提供讨论的实例,我们将讨论在ImageNet使用的两个模型。

这里写图片描述

  • 普通网络(Plain Network)

普通网络的基准模型(上图中间)主要受VGG网络(上图左)的启发。卷积层主要有3×3的过滤器,并遵循两个简单的设计规则:①对输出特征图的尺寸相同的各层,都有相同数量的过滤器; ②如果特征图的大小减半,那么过滤器的数量就增加一倍,以保证每一层的时间复杂度相同。

值得注意的是,我们的模型比VGG网络(上图左)更少的过滤器和更低的复杂性。我们的具有34层的baseline有36亿 FLOPs,只是VGG-19(19.6亿FLOPs)的18%。

  • 残差网络(Residual Network)

基于上面的普通网络,我们插入了快捷连接(shortcut connection),将网络转换为对应的残差版本(上图右)。

当输入和输出是相同的维度时,恒等shortcut(identity mapping)可以直接使用。当维度增加(上图右虚线),我们提供两个选择:


    • 1)快捷连接(shortcut connection)仍然使用自身映射(identity mapping),对于维度的增加用零来填补空缺(padding),此策略不会引入额外的参数。

    • 2)可以在shortcut connection时对xx做一个线性变换方阵Ws" role="presentation" >Ws,相当于加入了1x1卷积层,即

      y=F(x,Wi)+Wsxy=F(x,Wi)+Wsx

对于这两个选项,当shortcut融合大小不同的特征图时,它们的执行时的步长取2。

这里我们对这两种不同的building block的方式做一个梳理:

下图摘自参考资料3

这里写图片描述

在Resnet中,有两种Building block的方式: 第一类Building block(BB1)如上图中实线部分的building block所示,特点为输入输出的维度一致,特征图个数也一致;
这里写图片描述

第二类Building block(BB2)如上图虚线部分的building block所示,特点为输出是输入维度的1/2,输出特征图个数是输入特征图个数的2倍(即执行了/2操作)。

对于BB2,作者提供了两种选择:(A)如BB1的处理一样,padding技术,只是要填充好多0啊,这也是为什么得到实验4.1中的ResidualNetworks部分的“B is slightly better than A. We argue that this is because the zero-padded dimensions in A indeed have no residual learning.”的结论。(B)采用projection shortcut,让WsWs与输入做步长为2的1×1的卷积操作,这样,输入和输出就具有相同的维数,接下来在进行相加操作就OK啦!过程如下图所示:
这里写图片描述

ps:关于实验的情况这里不贴了,有意者请查看论文

四、总结

① 网络设计:

  • 全部采用3×3的卷积核(或者大部分采用)
  • Spatial size /2 -> filter×2 (保证时间复杂度一致)
  • 没有Dropout层

② 实验结果表明,ResNet能够在没有任何困难的情况下得到训练,并且实现更深的网络结构使其达到更低的训练误差和测试误差。

③ 作者分析了深度学习模型存在的问题和本文提出的对策:

  • 表征能力:ResNet在表征能力上不存在明显优势(只是重复的参数化),但是,能够使加深模型变得切实可行;
  • 优化容易:能够使前向/反向传播算法更加平稳(加入BN),极大程度简化/减轻(DBA)优化深度模型;
  • 泛化(Generalization)能力:ResNet未直接考虑泛化,但是更深+更薄是一种很好的一般化手段。

以上对ResNet做了简要总结,了解到ResNet在加深网络模型,提高学习任务准确率等方面都有很大的优势。

下图取自参考资料4,蒋竺波同学在知乎的文章

这里写图片描述
其实也就是说,可以通过将论文里面展示的layer为2的building block换为3,4等自己想要的数(必须要大于1,原因前面说了),从而保留想要的长程信息。



参考资料

1.Deep Residual Learning for Image Recognition
2. 残差网络Resnet——AlanMa
3. ResNet学习——Xxy_Fighting
4.CNN入门讲解:什么是残差网络Resnet(视频)——
蒋竺波


推荐阅读
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
author-avatar
欧毅儒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有