ResNet——Deep Residual Learning for Image Recognition(论文阅读)

1.什么是ResNet

ResNet是一种残差网络,咱们可以把它理解为一个子网络,这个子网络经过堆叠可以构成一个很深的网络。下面是ResNet的结构。

2.为什么要引入ResNet 

理论上来说,堆叠神经网络的层数应该可以提升模型的精度。但是现实中真的是这样吗?

我们知道,网络越深,咱们能获取的信息越多,而且特征也越丰富。但是根据实验表明,随着网络的加深,优化效果反而越差,测试数据和训练数据的准确率反而降低了。这是由于网络的加深会造成梯度爆炸和梯度消失的问题。

为了让更深的网络也能训练出好的效果,何凯明大神提出了一个新的网络结构——ResNet。这个网络结构的想法主要源于VLAD(残差的想法来源)和Highway Network(跳跃连接的想法来源)。  

 实验数据证明了一开始随着模型层数的增加,模型的精度会达到饱和。如果再增加网络的层数的话,就会开始退化了。从这个实验数据中,我们可以看到在训练轮次相同的情况下,56层的网络误差,居然比20层的网络还要高。这个现象是由于深层网络训练难度太高导致的。我们给这个现象起名叫做退化。这个现象经常被和过拟合搞混淆,但是过拟合其实是会让训练误差变得越来越小,而测试误差变高。退化则是让训练误差和测试误差都变高。

与此同时,深度神经网络还有一个难题:我们以一个最简单的神经网络为例,在反向传播的过程中我们可以推导出每一层的误差项都依赖它后面一层的误差项,在层数很多的情况下,我们很难保证每一层的权值和梯度的大小。举一个最经典的例子,如果我们用sigmoid函数作为我们的激活函数,它的导数的最大值只有0.25,梯度在传播的过程中越来越趋近于零。误差就没有办法传播到底层的参数了,这就是梯度消失。虽然batch normalization和layer normalization,可以缓解梯度消失的问题,但是我们有没有什么办法,既可以解决退化的问题,又能顺便给梯度开个后门。

3.ResNet详读

先来想一想为什么深层神经网络会出现退化的问题呢?假设我们的神经网络在层数为L的时候达到了最优的效果。这个时候我们把这个网络构建的更深,那么第L层之后的每一层理论上来说应该是一个恒等映射,但是拟合一个恒等映射是很难的,所以我们可不可以考虑换一个思路。如果我们用H(x)来表示我们想让这个神经网络学到的映射。用x来表示我们已经学到的内容,那么现在我们可不可以让我们的神经网络去拟合H(x)和x之间的残差呢?也就是说如果我们选择优化的不是H(x),而是把H(x)拆分为x和H(x)-x两个部分,我们选择去优化H(x)-x,我们给这个残差取名叫F(x),F(x)通常包含着卷积和激活之类的操作。我们把F(x)和x相加之后,仍然能得到我们想要的HX,我们把这样从输入额外连一条线到输出来,表示将输入输出相加的操作叫做skip connection。如果让F(x)趋近于零,那么就相当于我们构造了一个恒等映射,那为什么这种方法可以有效解决退化和梯度消失的问题呢?我们假设第L层的输入是xl,那它这一层的输出就是f(xl)+xl,同时它也是第l+1层的输入xl+1。那我们现在可以根据这个规律去推导一下第l+2层的输入,到了这一步我们是不是就不难发现,我们可以得到任意一个更深的层数L和一个更浅的层数l之间的关系的表达式。

首先是任意一层的输入xL可以写成比它更浅的任意层的输入xl和两层之间所有参差的和,我们这样是不是可以初步推测出和普通的神经网络相比,残差网络在前向传播的时候可以让任意低层的信息更容易传播到高层。根据这个式子,我们也可以推导出损失函数。关于xL的梯度,我们从这里可以发现损失函数关于xL的梯度可以直接传播到任意一个更浅的层,后面的这一堆不可能一直等于-1,也就是说残差网络中不会出现梯度消失的问题。作者何凯明的观点是这样的属性。让残差网络无论是正向传播还是反向传播都可以将信号直接传播到任意一层。

注意:如果残差映射(F(x))的结果的维度与跳跃连接(x)的维度不同,那咱们是没有办法对它们两个进行相加操作的,必须对x进行升维操作,让他俩的维度相同时才能计算。
升维的方法有两种:

  • 全0填充;
  • 采用1*1卷积

4.深度残差学习

在堆叠的几层网络上使用残差连接。整个网络的架构如图:

其中,左边是VGG-19的模型,中间是原始网络,右边是残差网络。残差网络的参数比VGG-19要少。

5.实现

在ImageNet上的测试设置如下: 图片使用欠采样放缩到 [256∗480] [256*480],以提供尺寸上的数据增强。对原图作水平翻转,并且使用 [224∗224] [224*224]的随机采样,同时每一个像素作去均值处理。在每一个卷积层之后,激活函数之前使用BN。使用SGD,mini-batch大小为256。学习率的初始值为0.1,当训练误差不再缩小时降低学习率为原先的1/10继续训练。训练过程进行了600000次迭代。

6.实验部分

Table1中给出了不同层数的ResNet架构。

 

ImageNet Classification

Plain Networks

分别使用18层的plain nets和34层的plain nets,结果显示34层的网络有更高的验证误差。下图比较了整个过程的训练和测试误差:

注:细实线代表训练误差,粗实线代表验证误差。左侧为plain nets,右侧为ResNet。 这种优化上的困难不是由于梯度消失造成的,因为在网络中已经使用了BN,保证了前向传播的信号有非零的方差。猜想深层的神经网络的收敛几率随着网络层数的加深,以指数的形式下降,导致训练误差很难降低。

Residual Networks

测试18层和34层的ResNet。注意到34层的训练和测试误差都要比18层的小。这说明网络退化的问题得到了部分解决,通过加深网络深度,可以提高正确率。注意到18层的plain net和18层的ResNet可以达到相近的正确率,但是ResNet收敛更快。这说明网络不够深的时候,SGD还是能够找到很好的解。

Identity vs. Projection Shortcuts

比较了三种选择: (A)zero-padding shortcuts用来增加维度(Residual block的维度小于输出维度时,使用0来进行填充),所有的shortcut无参数。 (B)projection shortcuts用来增加维度(维度不一致时使用),其他的shortcut都是恒等映射(identity)类型。 (C)所有的shortcut都是使用projection shortcuts。 Table3中给出了实验结果:

结果表明,这三种选择都有助于提高正确率。其中,B比A效果好,原因可能是A中zero-padded的维度没有使用残差学习。C比B效果好,原因可能是projection shortcuts中引入的参数。但是ABC中的结果表明,projection shortcuts对于解决网络的退化问题是没有作用的,对于正确率的提升作用也十分有限。所以,从减少模型参数,降低复杂度的角度考虑,使用Identity shortcuts就已经足够了。

Deeper Bottleneck Architectures.

在探究更深层网络性能的时候,处于训练时间的考虑,我们使用bottleneck design的方式来设计building block。对于每一个残差函数 F F,使用一个三层的stack代替以前的两层。这三层分别使用1x1,3x3,1x1的卷积。其中,1 × 1卷积用来降维然后升维,即利用1 × \times1卷积解决维度不同的问题。3 × 3对应一个瓶颈(更少的输入、输出维度)。Fig.5 展示了这种设计。

50、101和152层的ResNet相对于32层网络有更高的准确率。Table3和4中给出了测试结果。

注:使用集成方法的152层网络能达到3.75%的错误率。

CIFAR10 and Analysis

在CIFAR10数据集上的测试表明,ResNet的layer对于输入信号具有更小的响应。

 对于更深的网络,比如超过1000层的情况,虽然能够进行训练,但是测试的正确率并不理想。原因可能是过拟合,因为超过1000层的网络对于这个小数据集来说,容量还是过大。

总结

ResNet和Highway Network的思路比较类似,都是将部分原始输入的信息不经过矩阵乘法和非线性变换,直接传输到下一层。这就如同在深层网络中建立了许多条信息高速公路。ResNet通过改变学习目标,即不再学习完整的输出 F(x) ,而是学习残差 H(x)−x ,解决了传统卷积层或全连接层在进行信息传递时存在的丢失、损耗等问题。通过直接将信息从输入绕道传输到输出,一定程度上保护了信息的完整性。同时,由于学习的目标是残差,简化了学习的难度。根据Schmidhuber教授的观点,ResNet类似于一个没有gates的LSTM网络,即旁路输入 x 一直向之后的层传递,而不需要学习。有论文表示,ResNet的效果类似于对不同层数网络进行集成方法。

Inplimentation

这里简单分析一下ResNet152在PyTorch上的实现。 源代码:https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py

 

 

 

 

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

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

相关文章

智慧守护 畅游无忧——北斗应急呼叫柱,为景区安全加码

在大自然的怀抱中,中型及大型公园、景区以其壮丽风光吸引着成千上万的游客前来探索,成为了人们休闲娱乐的好去处。然而,广袤的区域、复杂的地形和分散的人流也给安全保障带来了前所未有的挑战。传统的巡逻方式难以覆盖每一个角落,…

【第六篇】SpringSecurity的权限管理

一、权限管理的实现 服务端的各种资源要被SpringSecurity的权限管理控制可以通过注解和标签两种方式来处理。 放开了相关的注解后在Controller中就可以使用相关的注解来控制了 JSR250注解 /*** JSR250*/ @Controller @RequestMapping("/user") public class UserC…

物理隔离后数据怎么导入和导出?安全U盘一键解决

政府单位、军工和科研所、航空航天企业、金融机构、医疗单位、电力企业、生物制药实验室等企业及单位,因研发和生产过程、或日常经营中涉及大量敏感信息和技术,需要通过物理隔离来确保网络的安全性。因此,多采用物理隔离的方式进行网络建设。…

前端 CSS 经典:在 Vue3 中使用渐进式图片

1. 什么是渐进式图片 当我们网站会加载很多图片的时候,有些图片尺寸很大,加载就会很慢,会导致页面长时间陷入白屏状态,用户体验很不好。所以可以使用渐进式图片,先给用户展示模糊图,这些图尺寸小&#xff…

django学习入门系列之第二点《浏览器能识别的标签3》

文章目录 列表表格往期回顾 列表 无序列表 <!-- <ul </ul> 无序列表 --> <ul><li> 内容1 </li><li> 内容2 </li><li> 内容3 </li><li> 内容4 </li> </ul>有序列表 <!-- <ol> &…

WordPress、Typecho 站点如何让 CloudFlare 缓存加速

众所周知 WordPress、Typecho 都是著名动态博客站点(一个最简单的判断依据就是都要依赖结合数据库),这类站点在 CDN 缓存上都有一个致命的缓存弊端就是动静态请求的区分,理论上要让 CDN 绕过所有的动态请求,缓存所有的静态请求,否则就会造成前端登录和非登录状态的混乱,…

小程序制作成本是多少?揭秘隐藏费用!

在日常生活中&#xff0c;有很多小程序&#xff0c;其中我们最熟悉的是微信小程序&#xff0c;所以小程序对我们每个人来说并不陌生。那么&#xff0c;你知道制作一个小程序要花多少钱吗&#xff1f;制作小程序的成本是多少&#xff1f;今天&#xff0c;本文将带领您揭示小程序…

禁渔期水域监管:EasyCVR视频智能监控方案

一、背景与需求分析 根据农业部印发的《中国渔政亮剑2024系列专项执法行动方案》&#xff0c;我国将持续推进长江十年禁渔、海洋伏季休渔、黄河等内陆重点水域禁渔等专项行动。根据四川省相关规定&#xff0c;每年3月1日至6月30日为禁渔期&#xff0c;在此期间&#xff0c;四川…

颠覆与创新:探寻Facebook未来的发展路径

Facebook&#xff0c;这个曾经引领社交网络革命的巨头&#xff0c;在如今竞争激烈的科技市场中&#xff0c;正面临着前所未有的挑战和机遇。如何在不断变化的数字世界中保持竞争力&#xff0c;成为业界领先者&#xff0c;这是摆在Facebook面前的重要课题。本文将探寻Facebook未…

单位经常要你加班却不发加班费,你想到这一招没有?

单位经常要你加班却不发加班费&#xff0c;你想到这一招没有&#xff1f; 你也许经常在忙碌的工作和繁重的加班中度过&#xff0c;然而&#xff0c;却从未得到过应有的加班费。但你又不想离开这个单位&#xff0c;或许单位的工作环境人性化&#xff0c;同事之间的关系融洽&…

【新手必看】修复Windows11蓝牙连接问题的7个方法!

在Windows11电脑操作中&#xff0c;用户经常会到蓝牙功能&#xff0c;如果蓝牙连接出现问题了&#xff0c;就会导致用户无法成功使用蓝牙。但是&#xff0c;许多新手用户不清楚要怎么操作才能解决蓝牙连接问题&#xff1f;会有不同的因素导致蓝牙连接出现问题&#xff0c;接下来…

3d交互式场景在线编辑平台的好处

在数字化教学的新时代&#xff0c;我们为您带来了革命性的产品——VR全景展示搭建编辑器。它将传统的教学方式升级为三维模式&#xff0c;让课程训练更加真实生动&#xff0c;为您带来前所未有的学习体验。 VR全景展示搭建编辑器不仅支持视频录播、PDF、图文等多种内容承载方式…

20240613每日前端-------vue3实现聊天室(二)

看效果图&#xff1a; 今天具体讲下&#xff0c;聊天消息框的布局&#xff1a; 消息框大致分为两块&#xff1a; 别人发来的消息自己发出的消息 元素如下&#xff1a; 头像消息发送人发送时间 html代码设计如下&#xff1a; 整体先用一个div作为外边框&#xff0c;观察上面…

大模型:分本分割模型

目录 一、文本分割 二、BERT文本分割模型 三、部署模型 3.1 下载模型 3.2 安装依赖 3.3 部署模型 3.4 运行服务 四、测试模型 一、文本分割 文本分割是自然语言处理中的一项基础任务&#xff0c;目标是将连续的文本切分成有意义的片段&#xff0c;这些片段可以是句子、…

关于dwarf 中 DW_AT_data_member_location 的理解

1、用python elftool解析结构体的成员计算偏移的时候&#xff0c;会用到如下结构体&#xff1b; 2、data member location 是可变长的&#xff08;uleb128编码&#xff09;&#xff1b;DW_OP_plus_uconst是操作码&#xff1b; uleb128编码&#xff0c;正如其名&#xff0c;是小…

160. 相交链表 (Swift版本)

题目描述 最简单直接的解法 遍历 headA 的所有节点, 看 headB 中是否有相交的节点 /*** Definition for singly-linked list.* public class ListNode {* public var val: Int* public var next: ListNode?* public init(_ val: Int) {* self.val val*…

《C++程序设计》银行管理系统

莫思身外无穷事 且尽生前有限杯 我们先来看一下项目需求&#xff1a; 【场景】 在日常生活中&#xff0c;我们普遍接触到窗口服务系统&#xff0c;如到银行柜台办理业务、景区现场购买门票等。当需要办理业务的顾客数超过窗口数量时&#xff0c;我们需遵循排队等待原则。 【需…

同三维T80005EH4 H.265 4路高清HDMI编码器

同三维T80005EH4 H.265 4路高清HDMI编码器 4路HDMI输入2路3.5音频输入&#xff0c;第1路和第2路HDMI可支持4K30&#xff0c;其它支持高清1080P60 产品简介&#xff1a; 同三维T80005EH4 4路HDMI高清H.265编码器采用最新高效H.265高清数字视频压缩技术&#xff0c;具备稳定…

使用uniapp设置tabbar的角标和移除tabbar的角标

使用场景描述 在一进入到小程序的时候就要将用户在购物车中添加的商品总数&#xff0c;要以角标的形式显示在tababr中。 代码实现 //index.vue<script setup> import { onLoad } from dcloudio/uni-apponLoad(()>{uni.setTabBarBadge({index: 1,text: 5 //为了实现…

计算机网络 —— 运输层(UDP和TCP)

计算机网络 —— 运输层&#xff08;UDP和TCP&#xff09; UDPTCPUDP和TCP的异同点相同点不同点 我们今天来看运输层的两个重要的协议——UDP和TCP UDP UDP&#xff0c;全称为用户数据报协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;是互联网中一种核心的…