深度学习之卷积神经网络 ResNet

论文 Identity Mappings in Deep Residual Networks

2015年,ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常突出。目前常用的有Res18、Res50、Res101。

VGG网络试着探寻了一下深度学习网络的深度究竟可以深到什么程度还能持续地提高分类准确率。我们的一般印象当中,深度学习愈是深(复杂,参数多)愈是有着更强的表达能力。凭着这一基本准则CNN分类网络自Alexnet的7层发展到了VGG的16乃至19层,后来更有了Googlenet的22层。可后来发现深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反而会招致网络收敛变得更慢,test dataset的分类准确率也变得更差。排除数据集过小带来的模型过拟合等问题后,我们发现过深的网络仍然还会使分类准确度下降(相对于较浅些的网络而言)。也就是说网络出现了退化。
在这里插入图片描述
ResNets要解决的是深度神经网络的“退化”问题。什么是“退化”?

我们知道,对浅层网络逐渐叠加layers,模型在训练集和测试集上的性能会变好,因为模型复杂度更高了,表达能力更强了,可以对潜在的映射关系拟合得更好。而“退化”指的是,给网络叠加更多的层后,性能却快速下降的情况。

训练集上的性能下降,可以排除过拟合,BN层的引入也基本解决了plain net的梯度消失和梯度爆炸问题。如果不是过拟合以及梯度消失导致的,那原因是什么?

按道理,给网络叠加更多层,浅层网络的解空间是包含在深层网络的解空间中的,深层网络的解空间至少存在不差于浅层网络的解,因为只需将增加的层变成恒等映射,其他层的权重原封不动copy浅层网络,就可以获得与浅层网络同样的性能。更好的解明明存在,为什么找不到?找到的反而是更差的解?

显然,这是个优化问题,反映出结构相似的模型,其优化难度是不一样的,且难度的增长并不是线性的,越深的模型越难以优化。

有两种解决思路,一种是调整求解方法,比如更好的初始化、更好的梯度下降算法等;另一种是调整模型结构,让模型更易于优化——改变模型结构实际上是改变了error surface的形态。

ResNet的作者从后者入手,探求更好的模型结构。将堆叠的几层layer称之为一个block,对于某个block,其可以拟合的函数为 F(x)F(x)F(x),如果期望的潜在映射为H(x)H(x)H(x),与其让F(x)F(x)F(x) 直接学习潜在的映射,不如去学习残差H(x)−xH(x)−xH(x)x,即F(x):=H(x)−xF(x):=H(x)−xF(x):=H(x)x,这样原本的前向路径上就变成了F(x)+xF(x)+xF(x)+x,用F(x)+xF(x)+xF(x)+x来拟合H(x)H(x)H(x)。作者认为这样可能更易于优化,因为相比于让F(x)F(x)F(x)学习成恒等映射,让F(x)F(x)F(x)学习成0要更加容易——后者通过L2正则就可以轻松实现。这样,对于冗余的block,只需F(x)→0F(x)→0F(x)0就可以得到恒等映射,性能不减。

下面的问题就变成了 F(x)+xF(x)+xF(x)+x 该怎么设计了。

Residual Block的设计

F(x)+xF(x)+xF(x)+x 构成的block称之为Residual Block,即残差块,如下图所示,多个相似的Residual Block串联构成ResNet。

一个残差块有2条路径 F(x)F(x)F(x)xxxF(x)F(x)F(x) 路径拟合残差,不妨称之为残差路径,x路径为 identity mapping 恒等映射,称之为 ”shortcut” 。图中的 ⊕ 为 element-wise addition,要求参与运算的F(x)F(x)F(x)xxx的尺寸要相同。所以,随之而来的问题是,

  • 残差路径如何设计?
  • shortcut路径如何设计?
  • Residual Block之间怎么连接?

在原论文中,残差路径可以大致分成2种,一种有 bottleneck 结构,即下图右中的1×1 卷积层,用于先降维再升维,主要出于降低计算复杂度的现实考虑,称之为“bottleneck block”,另一种没有bottleneck结构,如下图左所示,称之为“basic block”。basic block由2个3×3卷积层构成,bottleneck block由1×1

在这里插入图片描述
shortcut 路径大致也可以分成2种,取决于残差路径是否改变了feature map数量和尺寸,一种是将输入x原封不动地输出,另一种则需要经过1×1卷积来升维 or/and 降采样,主要作用是将输出与F(x)路径的输出保持shape一致,对网络性能的提升并不明显,两种结构如下图所示,
在这里插入图片描述
至于Residual Block之间的衔接,在原论文中,F(x)+xF(x)+xF(x)+x 经过ReLU后直接作为下一个block的输入x。对于F(x)路径、shortcut路径以及block之间的衔接,在文中有更进一步的研究。

下图中实线的Connection部分(“第一个粉色矩形和第三个粉色矩形”)都是3∗3∗643*3*643364 的特征图,他们的channel个数一致,所以采用计算方式:

y=F(x)+xy=F(x)+xy=F(x)+x

虚线的的Connection部分(”第一个绿色矩形和第三个绿色矩形“)分别是3∗3∗643*3*6433643∗3∗1283*3*12833128的特征图,他们的channel个数不同(64和128),所以采用计算方式:

y=F(x)+Wxy=F(x)+Wxy=F(x)+Wx

其中W是卷积操作,用来调整xxx的channel维度的
在这里插入图片描述
在实际的实验过程中,作者实验了很多中不同的结构,如下图所示,最后发现第一种是最好的。
在这里插入图片描述
简单理解一下,下图中的左图展开之后就是右图,可以看出,残差网络的结果包含了网络中各个节点*w。
在这里插入图片描述

ResNet 网络结构

ResNet 网络参考了 VGG19 网络,在其基础上进行了修改,并通过短路机制加入了残差单元,如下图所示。ResNet 的一个重要设计原则是:当 feature map 大小降低一半时,feature map 的数量增加一倍,这保持了网络层的复杂度。从下图中可以看到,ResNet相比普通网络每两层间增加了短路机制,这就形成了残差学习,其中虚线表示feature map数量发生了改变。下图展示的34-layer的ResNet,还可以构建更深的网络如表1所示。从表中可以看到,对于18-layer和34-layer的ResNet,其进行的两层间的残差学习,当网络更深时,其进行的是三层间的残差学习,三层卷积核分别是1x1,3x3和1x1,一个值得注意的是隐含层的 feature map 数量是比较小的,并且是输出 feature map 数量的1/4。下面直观看一下ResNet-34与34-layer plain net和VGG的对比,以及堆叠不同数量Residual Block得到的不同ResNet。
在这里插入图片描述

在这里插入图片描述
ResNet的设计有如下特点:

  • 与plain net相比,ResNet多了很多“旁路”,即shortcut路径,其首尾圈出的layers构成一个Residual Block;
  • ResNet中,所有的Residual Block都没有pooling层,降采样是通过conv的stride实现的;分别在conv3_1、conv4_1和conv5_1 Residual Block,降采样1倍,同时feature map数量增加1倍,如图中虚线划定的block;
  • 通过Average Pooling得到最终的特征,而不是通过全连接层;
  • 每个卷积层之后都紧接着BatchNorm layer,为了简化,图中并没有标出;

ResNet结构非常容易修改和扩展,通过调整block内的channel数量以及堆叠的block数量,就可以很容易地调整网络的宽度和深度,来得到不同表达能力的网络,而不用过多地担心网络的“退化”问题,只要训练数据足够,逐步加深网络,就可以获得更好的性能表现。下面为网络的性能对比
在这里插入图片描述

作者对比18-layer和34-layer的网络效果,如下图所示。可以看到普通的网络出现退化现象,但是ResNet很好的解决了退化问题。
在这里插入图片描述
最后展示一下ResNet网络与其他网络在ImageNet上的对比结果,如下表所示。可以看到ResNet-152其误差降到了4.49%,当采用集成模型后,误差可以降到3.57%。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建SSM框架之Spring

作为一枚大四准备毕业的学生,最重要的事便是毕业设计,前些日子刚刚拿到毕设题目:“3D网络图:面向网络结构数据的可视化软件设计”,(⊙o⊙)…,怎么说哪,看到题目就是一头雾水(前几届不…

单列表_使用Excel中的quot;记录单quot;功能快速录入数据

在Excel中进行数据录入的时候,平常都是一行一行地录入数据,但是有时候在单元格之间,行与行,列与列之间频繁地切换去录入数据,费事费力还容易出错。今天给你推荐一个既好用又有效率的Excel中的隐藏功能——“记录单”。…

CentOS 6.9下的Setup工具(用于管理服务/防火墙/网络配置/验证服务)

说明:Setup工具套件好像是CentOS下特有的用于管理服务/防火墙/网络配置等,其实就是基于命令行模式界面的GUI工具。唯一特点就是方便。 安装: #安装Setup命令工具 yum -y install setuptool #安装Setup工具配套的系统服务组件 yum -y insta…

深度学习之非极大值抑制(Non-maximum suppression,NMS)

非极大值抑制(Non-maximum suppression,NMS)是一种去除非极大值的算法,常用于计算机视觉中的边缘检测、物体识别等。 算法流程 给出一张图片和上面许多物体检测的候选框(即每个框可能都代表某种物体)&…

vue项目token放在哪里_关于vue动态菜单的那点事

vue-element-admin4.0国内节点访问地址:https://panjiachen.gitee.io/vue-element-admin-site/zh/本此使用的是https://github.com/PanJiaChen/vue-element-admin/tree/i18n 国际化分支的版本。说是除了国际化其他都一样。本文主要介绍前台动态的使用资源权限。后台…

深度学习之 ROI Pooling

什么是ROI? ROI是 Region of interest 的简写,指的是 Faster R-CNN 结构中,经过 RPN 层后,产生的 proposal 对应的 box 框。 ROI Pooling 顾名思义,是 pooling 层的一种,而且是针对 ROIs 的 pooling。整个…

KD树小结

很久之前我就想过怎么快速在二维平面上查找一个区域的信息,思考许久无果,只能想到几种优秀一点的暴力。 KD树就是干上面那件事的。 别的不多说,赶紧把自己的理解写下来,免得凉了。 KD树的组成 以维护k维空间(x,y,……)内的KD树为例…

深度学习之 RPN(RegionProposal Network)- 区域候选网络

anchor boxes基本概念与作用: feature map 上的一个点可以映射回输入图片上的一个点,以特征图上这个点为中心,预先人为设定 k 个 boxes,这些 boxes 就称为在这个点上生成的 k 个 anchor boxes(所有anchor boxes的中心点坐标是一样…

workbench拓扑优化教程_优化技术在水泵水力设计的应用(上篇)

文章来源:安世亚太官方订阅号(搜索:Peraglobal)CFD技术在泵的内流数值模拟、研究泵内部流动规律和结构方面已广泛应用,取得了很多成果。但是初步设计的产品如果通过CFD仿真得到的性能曲线不能满足使用要求,…

深度学习之 TensorRT

1 简介 TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxne…

进制转换中dbho是什么意思_什么是网段?二进制十进制如何互相转换?看完这篇,你就全明白了...

之前的文章讲了ip,子网掩码,网关的关系,今天着重讲一下网段。我们用傻瓜交换机通讯时,一个网段的设备才能互相通讯,怎么能判断两个ip是同一个网段呢?今天就简单的说一下。(这篇文章用语音听可以起到催眠作用…

软件需求与问题解决

(一) 小满当上项目经理后不久,参与了一个大项目。当时市场签下来的时候,公司里面是欢天喜地的。项目做了一年多。到了交付的时候,用户却很不满意,当初说好的东西,好多都变了卦。用户是上帝&…

flex 换主轴后子元素占满_Chrome72 嵌套 flex 布局修改,你的网站可能会发生布局错乱...

起源2019 年 1 月 29 日,Chrome72 正式版(72.0.3626.81)发布,本次发布带来了一个改变,且没有在更新日志中提及,该改变导致某些网站发生了布局错乱。该改变主要针对的是嵌套的flex布局,下面我们一起看下是怎么回事。问题…

路由到另外一个页面_Nextjs使用解读一(项目搭建与路由系统)

文章说明:1. 之前想搭建个人博客,由于学习的是react技术栈,所以就到处搜罗资料学了nextjs,配合koa就把博客搭起来了。该系列文章基于我的学习笔记,重新整理了一遍,如果有错误之处,还请指正。2. …

微信获取token -1000

最终翻看微信开发api找到需要去配置IP白名单。只需要配置访问来源IP即可。 转载于:https://www.cnblogs.com/yangjinqiang/p/8184663.html

产品技术和管理

为啥纯粹为消费者传递体验的活动可以价格不菲,几为暴利?——谈客户体验作为客户价值提升之源 不论产品还是服务,如果能够为消费者传递有益的体验,其价值就可以在一般的产品服务之上得以体现;附加了体验的产品&#xff…

jquery ztree 设置勾选_047 JAVA-jQuery

jQuery操作元素属性的值表单:<body><input type"button" name"" id"but1" value"测试获得属性值" /><hr />账号&#xff1a;<input type"text" name"sxtzh" id"zhanghao" value&q…

Opencv undefined reference to `cv::imread() Ubuntu编译

Ubuntu下编译一个C文件&#xff0c;C源程序中使用了opencv&#xff0c;opencv的安装没有问题&#xff0c;但是在编译的过程中出现如下错误&#xff1a; undefined reference to cv::imread(std::string const&, int)undefined reference to cv::noArray()undefined referen…

深度学习目标检测之 YOLO v1

这是继 RCNN&#xff0c;fast-RCNN 和 faster-RCNN 之后&#xff0c;rbg&#xff08;RossGirshick&#xff09;针对DL目标检测速度问题提出的另外一种框架。YOLO V1 增强版本GPU中能跑45fps&#xff0c;简化版本155fps。 论文名&#xff1a; 《You Only Look Once&#xff1a;…

编程珠玑番外篇

1.Plan 9 的八卦 在 Windows 下喜欢用 FTP 的同学抱怨 Linux 下面没有如 LeapFTP 那样的方便的工具. 在苹果下面用惯了 Cyberduck 的同学可能也会抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻烦的事情. 其实一点都不麻烦, 因为在 LINUX 系统上压根就不需要用 FTP. 为什么呢? 因…