【CNN】ResNet——开启的深度学习从1到无限可能的新时代

news2024/11/25 4:40:52

前言

深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,ResNet在2015年发表当年取得了图像分类,检测等等5项大赛第一,并又一次刷新了CNN模型在ImageNet上的历史记录。直到今天,各种最先进的模型中依然处处可见残差连接的身影,其paper引用量是CV领域第一名。ResNet的作者何恺明也因此摘得CVPR2016最佳论文奖。

ResNet论文下载链接:
https://arxiv.org/pdf/1512.03385
ResNeXt论文下载链接:
http://openaccess.thecvf.com/content_cvpr_2017/papers/Xie_Aggregated_Residual_Transformations_CVPR_2017_paper.pdf
ResNeSt论文下载链接:
https://hangzhang.org/files/resnest.pdf

一、深度学习网络退化问题

从经验来看,网络的深度对模型的性能至关重要,当增加网络层数后,网络可以进行更加复杂的特征提取,所以当模型更深时理论上可以取得更好的结果,从VGG网络可以看出网络越深而效果越好。但是更深的网络其性能一定会更好吗?

实验发现深度网络出现了退化问题(Degradation problem):网络深度增加时,网络准确度出现饱和,甚至出现下降。下图节选自ResNet原论文,不管是训练阶段还是验证阶段,56层的网络比20层网络错误率还高,效果还要差。究竟是什么原因导致的这一问题?
在这里插入图片描述
首先印入脑海的就是神经网络的常见问题:过拟合问题
但是,过拟合的一般表现为训练阶段效果很好,测试阶段效果差。这与上图情况是不相符的。

除此之外,最受人认可的原因就是梯度爆炸/梯度弥散了。为了理解梯度的不稳定性原因,首先回顾一下反向传播的知识。

反向传播结果的数值大小不止取决于求导的式子,很大程度上也取决于输入的模值。因为神经网络的计算本质其实是矩阵的连乘,当计算图每次输入的模值都大于1,那么经过很多层回传,梯度将不可避免地呈几何倍数增长,直到Nan。这就是梯度爆炸现象。当然反过来,如果我们每个阶段输入的模恒小于1,那么梯度也将不可避免地呈几何倍数下降,直到0。这就是梯度消失现象。由于至今神经网络都以反向传播为参数更新的基础,所以梯度不稳定性原因听起来很有道理。

然而,事实也并非如此,至少不止如此。我们现在无论用Pytorch还是Tensorflow,都会自然而然地加上Bacth Normalization(简称BN,在GoogLeNetV2中被提出),而BN的作用本质上也是控制每层输入的模值,因此梯度的爆炸/消失现象理应在很早就被解决了(至少解决了大半)。

不是过拟合,也不是梯度不稳定原因引起的,这就很尴尬了……CNN没有遇到我们熟知的两个老大难问题,却还是随着模型的加深而导致效果退化。无需任何数学论证,我们都会觉得这不符合常理。

为什么说模型退化不符合常理?按理说,当我们堆叠一个模型时,理所当然的会认为效果会越堆越好。因为,假设一个比较浅的网络已经可以达到不错的效果,那么即使之后堆上去的网络什么也不做,模型的效果也不会变差。然而事实上,这却是问题所在。什么都不做”恰好是当前神经网络最难做到的东西之一。MobileNet V2的论文也提到过类似的现象,由于非线性激活函数Relu的存在,每次输入到输出的过程都几乎是不可逆的(信息损失)。我们很难从输出反推回完整的输入。

也许赋予神经网络无限可能性的“非线性”让神经网络模型走得太远,使得特征随着层层前向传播得到完整保留(什么也不做)的可能性都微乎其微。用学术点的话说,这种“不忘初心”的品质在神经网络领域被叫做恒等映射(identity mapping)。因此,可以认为Residual Learning的初衷,其实是让模型的内部结构至少有恒等映射的能力。以保证在堆叠网络的过程中,网络至少不会因为继续堆叠而产生退化!
在这里插入图片描述
前面分析得出,如果深层网络后面的层都是是恒等映射,那么模型就可以等价转化为一个浅层网络。那现在的问题就是如何得到恒等映射了。事实上,已有的神经网络很难拟合潜在的恒等映射函数H(x) = x。但如果把网络设计为H(x) = F(x) + x,即直接把恒等映射作为网络要学习并输出的一部分。就可以把问题转化为学习一个残差函数F(x) = H(x) - x.

所谓残差连接指的就是将浅层的输出和深层的输出求和作为下一阶段的输入,这样做的结果就是本来这一层权重需要学习的是一个对 x 到 H(x) 的映射,那使用残差链接以后,权重需要学习的映射变成了从x -> H(x) - x 。这样在反向传播的过程中,小损失的梯度更容易抵达浅层的神经元。其实这个和循环神经网络LSTM中控制门的原理也是一样的。

图中右侧的曲线叫做残差链接(residual connection),通过跳接在激活函数前,将上一层(或几层)之前的输出与本层计算的输出相加,将求和的结果输入到激活函数中做为本层的输出

这里一个Block中必须至少含有两个层,否则几乎没用。

三、ResNet的网络结构

ResNet网络是参考了VGG19网络,在其基础上进行了修改,并通过短路机制加入了上图所示的残差链接。除此之外,变化主要体现在ResNet直接使用stride=2的卷积做下采样(取代了VGG中的池化),并且用global average pool层替换了全连接层(这样可以接收不同尺寸的输入图像),另外模型层次明显变深。相似之处是两者都是通过堆叠3X3的卷积进行特征提取。

ResNet的一个重要设计原则是:当feature map大小降低一半时,feature map的数量增加一倍,这一定程度上减轻了因减少特征图尺寸而带来的信息损失(换句话说,将输入信息的特征从空间维度提取到通道维度上)

从下图中可以看到,ResNet相比普通卷积网络每两层间增加了残差链接,其中虚线表示feature map数量发生了改变
在这里插入图片描述
在ResNet原论文中,作者给出了五个不同层次的模型结构,分别是18层,34层,50层,101层,152层。上图所示的是34层的模型结构。下图给出所有模型的结构参数:
在这里插入图片描述
值得注意的是: 50层,101层和152层使用的残差模块与之前介绍的不同。主要原因是深层次的网络中参数量太大,为了减少参数,在3X3卷积前先通过1X1卷积对channel维度进行降维,其灵感大概来自于GoogLeNetV3中提出了网络设计准则。
在这里插入图片描述
如上图所示:左图是浅层模型用的残差结构;右图是深层模型用的残差结构。

注意:对于残差,只有当输入和输出维度一致时,才可以直接将输入加到输出上。但是当维度不一致时,不能直接相加。这时可以采用新的映射(projection shortcut),比如一般采用1x1的卷积对残差传递的信息做维度调整

四、残差的调参

其实残差链接有多种调整方式,比如激活函数的位置?BN的位置?连接跨越的卷积数量?等等都是可以调整的地方。因此有文献对这些变体残差做了研究并实验。最后根据实验结果提出了一个效果最好的残差方式如下图:改进前后一个明显的变化是采用pre-activation,BN和ReLU都提前了。
在这里插入图片描述
这篇文献中的ResNet深度都是上千层的模型。之后,研究者们觉得ResNets以及足够深了, 便开始在对模块进行加宽。

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

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

相关文章

《看漫画学Python》1、2版分享,python最佳入门教程,中学生用业余时间都能学会,北大教授看完都这样定义它

前言 学习Python的小伙伴大部分应该都知道《看漫画学Python:有趣、有料、好玩、好用(全彩版)》这本书! 但是刚开始接触Python的朋友都会有一个共同的烦恼,自学好无聊,好枯燥,不想坚持了……所…

Ajax使用

简介: 全称:Asynchronous JavaScript And XML 中文名:异步js与XML 作用:网页使用JavaScript脚本实现前端与服务器的异步交互技术,可以在不刷新网页的前 提下实现和服务器的数据交互 注意:ajax不是一种编程语言,而是使用JS的一种技术。 使用步骤 步骤&am…

最佳镜像搬运工 Skopeo 指南

最佳镜像搬运工 Skopeo 指南 文章目录最佳镜像搬运工 Skopeo 指南1. 概述2. Skopeo 是如何工作的?3. 为什么要用 Skopeo?3.1 灵活性3.2 安全性和可访问性3.3 功能多样性4. 安装4.1 Fedora4.2 RHEL / CentOS Stream ≥ 84.3 RHEL/CentOS ≤ 7.x4.4 Ubuntu…

GPU显存占满但利用率却很低

来帕多瓦联培已经一个多月了,最近调代码跑实验又发现了这个问题。这里提供另外一个解决思路。一个原因还是 cpu没跟上gpu节奏。 通常我们都会用尽可能大的 batch 来占满显存。但是如果cpu的读取和传输跟不上的话就会导致gpu利用率时上时下,而且训练时间…

2022.3IDEA配置grep console

首先安装Grep Console (这个大家都会吧) 安装之后 打开File 选项的Setting→Other Settings→Grep Console 3. 打开之后默认的样式是下图(我做了一下标识) whole line:是否一整行都是这个样式。用于区分一个关键字和一行字case insensitive: 不勾选就行…

spring cache (ehcache方式)

目录前置pom: jar配置文件:ehcache.xmlapplication.ymlMyEhCacheCacheConfiguration.java效果图禁用 MyEhCacheCacheConfiguration.java启用 MyEhCacheCacheConfiguration.java前置 会演示springcache的使用方式 项目地址: https://gitee.com/xmaxm/test-code/blob/master/cha…

第五章 神经网络(上)

5.1 神经元模型 神经网络目前使用的最广泛的定义为“神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。神经网络中最基本的成分是神经元模型,即上述定义的简单单元。 在生物神经…

离线安装Redis集群(redis-6.2.4)

记录:326 场景:在CentOS 7.9操作系统上,使用redis-6.2.4版本,在三台机器上,离线安装Redis集群。 版本: 操作系统:CentOS 7.9 Redis版本:redis-6.2.4 1.主机规划 目标&#xff…

物联网僵尸网络再次发起大规模攻击事件回顾

执行摘要 随着物联网的不断发展,物联网安全也被越来越多的人所关注。我们于 2016 年发布《物联网安全 白皮书》,进行物联网安全的科普介绍;于 2017 年发布《2017 物联网安全年报》,关注物联网资产 在互联网上的暴露情况、物联网设…

预训练模型相对位置编码和绝对位置编码的通俗理解

1 transformer最经典的理解: http://jalammar.github.io/illustrated-transformer/ 2 位置编码 相对位置编码(relative position representation):https://zhuanlan.zhihu.com/p/397269153 Transformer中的相对位置编码(Relative Position Embedding)…

基于物联网的花卉养殖监控设计系统与研究

目 录 1、绪论 1 1.1课题背景 1 1.2 本课题研究意义 2 2、 系统总体方案设计 3 2.1、传感器部分 3 2.2、主控制部分 4 3、系统硬件设计 6 3.1 STC89C52RC单片机主控模块设计 6 3.2单片机最小系统 9 3.2.1时钟电路 9 3.2.2复位电路 10 3.2.3 STC89C52RC中断技术概述 10 3.3 温度…

基于最小误差阈值法的特定医学图像分割算法研究-含Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、阈值分割原理✳️ 三、最小误差阈值法✳️ 四、基于最小误差阈值法图像分割的实验分析✳️ 4.1 图像分割结果✳️ 4.2 边缘曲线提取结果✳️ 五、参考文献✳️ 六、Matlab代码获取✳️ 一、引言 图像是人们所熟悉的,但是图像…

服务器稳定性测试-LTP压力测试方法及工具下载

简介 LTP(LinuxTest Project)是SGI、IBM、OSDL和Bull合作的项目,目的是为开源社区提供一个测试套件,用来验证Linux系统可靠性、健壮性和稳定性。LTP测试套件是测试Linux内核和内核相关特性的工具的集合。 该工具的目的是通过把测…

【HMS Core】构建SplitBill应用集成多个HMS Core服务,助力您更好的了解华为生态组成

一、介绍 Duration: 3:00 总览 通过构建本次的SplitBill应用,您可以更好地了解华为生态的组成部分,包括认证服务、云存储和云数据库等Serverless服务。此外您还可以了解如何使用近距离数据通信服务的Nearby Connection功能分享文件。无需使用现金&…

重回synchronized(源码解读与实战解析篇)

读前必知 文中锁,也称为对象锁,而锁对象就是指的承载这个锁的对象,如下面,用法中所指的Object o,在print3中就是锁对象。 以下源码分析仅适用于jdk8,版本未知,因为源码提供者的源码版本访问地址…

金仓数据库KingbaseES GIN 索引

目录 一、索引的逻辑结构 二、索引的物理结构 三、GIN索引使用例子 1、前后模糊查询 2、全文检索 四、gin 索引可用于超长的字段 GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值&#xff0c…

【uniapp】利用Vuex实现购物车功能

实战项目名称:实现购物车功能 文章目录一、实战步骤1. 先编辑store.js文件2. 定义方法和基本的结构3. 编写SETSHPPING二、在项目中调用1. 触发相应的mutations2. 利用computed计算数量和总价的方法提示:本实战内容大部分为具体实现的思路,界面…

C语言 2 —— 常量

常量是什么? 常量就是在程序运行过程中,值不会发生改变,而且一眼可以辨识出值的量。 如: 20,‘a’ , 3.1415926 , "helloworld" 常量的分类: 整形,浮点型,字符型&#…

成电860考研专业课考前划重点-学长课程音频转文字-用科大讯飞花钱买的-三万五千字

成电860考研专业课考前划重点-学长课程音频转文字。 这个是我2021年把视频的音频扒下来后用科大讯飞音频转文字网站上花了几十块钱买的。 说话人1 03:04 对有回放,我这边开回放了,大家可以让大家下载,然后我怕这边回放有问题,大家…

Airtest poco 入门小结

目录 一、poco介绍 1、poco能做什么 2、三种定位方式 1)基本选择器 2)相对选择器 3)空间顺序选择器 4)正则表达式方式 3、poco支持平台 二、Airtest介绍 1、Airtest能做什么 2、Airtest不能做什么 3、Airtest的图像识别…