ResNet 论文理解含视频

news2025/1/22 8:34:07

ResNet 论文理解

论文理解

ResNet 网络的论文名字是《Deep Residual Learning for Image Recognition》,发表在2016年的 CVPR 上,获得了 最佳论文奖ResNet 中的 Res 也是 Residual 的缩写,它的用意在于基于 残差 学习,让神经网络能够越来越深,准确率越来越高。

深度残差网络deep residual network)是该论文中提出的一种全新的网络结构,其核心模块是 残差块 residual block。正是由于残差块结构的出现使得深度神经网络模型的层数可以不断加深到100层、1000层甚至更深。

自 2012 年 AlexNetILSVRC 一战成名后,卷积神经网络便一发不可收拾,后续的各类竞赛中各种神经网络都大发异彩,除了更高的准确率之外,它们普遍的特征就是,网络的层级越来越深 了。

ILSVRCImageNet Large Scale Visual Recognition Challenge 的缩写,是一个从2010年开始举办的 大规模图像识别竞赛,使用 ImageNet 数据集的一个子集,总共有1000类。
ILSVRC 的目的是评估算法在对象检测和图像分类方面的性能,同时也推动了计算机视觉领域的发展。ILSVRC 每年都有一个相应的研讨会,在其中展示竞赛的方法和结果。
ILSVRC 的获奖网络是指在 图像分类任务中取得最佳成绩的卷积神经网络(CNN)。从2012年开始,ILSVRC 的冠军网络都是基于CNN的深度学习模型,它们在提高图像识别的准确率和效率方面都有重要的贡献。

以下是 ILSVRC 历届冠军网络的简介:

  • 2012年:AlexNet,由 Alex Krizhevsky 等人提出,使用了 8层 CNN 和 ReLU 激活函数,利用GPU加速训练,首次在 ILSVRC 上 大幅度降低了错误率,引发了深度学习的热潮。
  • 2013年:ZFNet,由 Matthew Zeiler 和 Rob Fergus 提出,对AlexNet进行了一些改进,主要是调整了第一层卷积核的大小和步长,以及使用了 可视化 方法来分析网络的特征。
  • 2014年:VGGNet,由牛津大学的 Karen Simonyan 和 Andrew Zisserman 提出,使用了 16层或19层 CNN,统一了卷积核的大小为3x3,展示了 网络深度对性能的影响
  • 2014年:GoogLeNet,由Google的 Christian Szegedy 等人提出,使用了22层CNN,引入了 Inception 模块,可以有效地增加网络宽度和深度,同时减少参数和计算量。
  • 2015年:ResNet,由微软亚洲研究院的何恺明等人提出,使用了 152层CNN,引入了 残差连接(Residual Connection),可以 有效地解决深度网络的退化问题刷新了图像识别的记录
  • 2016年:Inception-v4/Inception-ResNet-v2,由Google的Christian Szegedy等人提出,结合了 Inception 模块和残差连接,进一步提高了网络性能。
  • 2017年:SENet(Squeeze-and-Excitation Network),由牛津大学的Jie Hu等人提出,引入了 SE 模块,可以 自适应地调整特征图的权重,增强了特征表达能力。

Inception 模块是一种图像模型的组成部分,旨在 近似一个最优的局部稀疏结构。简单地说,它 允许我们在一个图像块中使用多种类型的卷积核大小,而不是被限制在一个单一的卷积核大小,然后 将它们拼接起来传递到下一层

  • Inception模块的设计思想是 为了减少计算和参数的开销,同时 增加网络的宽度和深度,提高对不同尺度信息的适应性。
  • Inception 模块有多个版本,如 Inception v1(GoogLeNet),Inception v2,Inception v3,Inception v4和 Inception-ResNet 等,它们都在不同的方面对Inception 模块进行了改进和优化。

Q1.神经网络真的越深越好吗?

深度学习的发展从 LeNet 到 AlexNet,再到 VGGNet 和 GoogLeNet,网络的深度在不断加深,经验表明,网络深度有着至关重要的影响,层数深的网络可以提取出图片的低层、中层和高层特征。

神经网络真的越深越好吗?

情况不是这样的,如果神经网络越来越深,这个神经网络可能会出现 退化(degradation) 的现象。即在深度神经网络中,如果不断增加网络的层数,可能会出现一个问题,就是 网络的训练精度和测试精度都不再提高,甚至开始下降

当更深的网络能够开始收敛时,一个退化问题就暴露出来了:随着网络深度的增加,精度趋于饱和(这可能不足为奇),然后迅速退化。出乎意料的是,这种退化并 不是由过拟合引起 的,在 适当深度的模型上增加更多的层会导致更高的训练误差

在这里插入图片描述在 CIFAR-10 这个小型的数据集上,56 层的神经网络的表现比不过 20 层的神经网络。

Q2. 为什么加深网络会带来退化问题?

  • 即使新增的这些 layer 什么都没学习,保持恒等输出(所有的weight都设为1),那么按理说网络的精度也应该 = 原有未加深时的水平;
  • 如果新增的 layer 学习到了有用特征,那么必然加深过后的模型精度会 > 未加深的原网络。

看起来对于网络的精度加深后都应该 >= 加深前才对啊 ?

实际上,让新增的 layer 保持什么都不学习的恒等状态,恰恰很困难,因为在训练过程中 每一层 layer 都通过线性修正单元 relu 处理,而这样的处理方式会 带来特征的信息损失(不论是有效特征or冗余特征)

所以上述假设的前提是不成立的,简单的堆叠 layer 可能会带来退化问题。

Q3. 如何构建更深层的网络?

到此,何凯明团队创新地提出了 残差块 的构想,通过 shortcut/skip connection 这样的方式(最初出现在 highway network中),绕过这些 普通的堆叠块既然保持 堆叠块 的 identity 恒等性很困难,那就直接绕过它们,通过 shortcut 通路来保持恒等。 如下图:

在这里插入图片描述
我对上面的图的理解是:

在这里插入图片描述
在这里插入图片描述

同样的堆叠块网络,加上恒等映射 x x x 后,mapping 也随之改变。普通网络的 underlying mapping 是 H ( x ) \mathcal H(x) H(x),加上恒等映射 x x x 后,变成了残差 mapping 是 F ( x ) \mathcal F(x) F(x),那么之前的 H ( x ) \mathcal H(x) H(x) 被强制转换为 H ( x ) : = F ( x ) + x \mathcal H(x) := \mathcal F(x) + x H(x):=F(x)+x

反向传播算法会自动找最优参数,当经过这些图左边 普通的堆叠块网络,如果 输出的效果比输入更差(那还不如不学习,想让网络输出仍然是 x x x),

  • 考虑情况,不加图右边的恒等映射 x,就是原来的网络要拟合输入 x,这相当于是 让网络学习恒等映射,这是困难的;
  • 而加上恒等映射 x 后,只需要让网络推向0,这是更容易的。

这就保证了 深层网络起码不会越学习越差

这种训练方式称为残差学习,这种结构块也称为 Residual Block 残差块。正是残差结构的出现,使得残差网络能很好的加深网络层数,同时解决退化问题。

基于残差的深度学习框架

论文中说:

有一个解决方案是:在一个的常规的比较浅的模型上添加新的层,而新的层是基于 identity mapping 恒等映射的

就是在一个浅层的网络模型上进行改造,然后将新的模型与原来的浅层模型相比较,这里有个底线就是,改造后的模型至少不应该比原来的模型表现要差。因为 新加的层可以让它的结果为 0,这样它就等同于原来的模型了。 这个假设是 ResNet 的出发点。

个人觉得,论文中的下图可以这样理解:

  • 这个 比较浅的模型 就是大名鼎鼎的 VGG-19;
  • 然后中间的是在 VGG-19 的模型上 添加新的层后形成的 34-layer 普通网络
  • 为了保证改造后的模型至少不比原来的模型表现差,加上恒等映射,即右边的 34-layer 残差网络

从 34-layer plain 到 34-layer residual 不需要额外的参数。

在这里插入图片描述

So,how to do it ? 作者引入了 deep residual learning framework,也就是 基于残差的深度学习框架,实际上是对常规的神经网络的改造。

目前流行的神经网络都可以看成是 卷积层的堆叠,可以用栈来表示,我们就叫它卷积栈好了。

输入数据经过每个卷积层都会发生变化,产生新的 feature map ,我们可以说 数据在输入与输出间发生了映射,也就是 mapping。神经网络中的权重参数 一个作用就是 去拟合这种输入与输出之间的 mapping

ResNet 准备从这一块动手,假设现在有一个栈的卷积层比如说 2 个卷积层堆叠,将 当前这个栈的输入后面的栈的输入(也就是当前这个栈的输出)之间的 mapping 称为 underlying mapping,现在的工作是企图替换它引入一种新的 mapping 关系,ResNet 称之为 residual mapping 去替换常规的 mapping 关系。

意思是与其让卷积栈直接拟合 underlying mapping,不如让它去拟合 residual mapping。而 residual mapping 和 underlying mapping 其实是有关联的。

  • 将 underlying mapping 标记为 H ( x ) \mathcal H ( x ) H(x)
  • 将经过堆叠的非线性层产生的 mapping 标记为 F ( x ) : = H ( x ) − x \mathcal F ( x ) : = \mathcal H ( x ) − x F(x):=H(x)x
  • 所以,最原始的 mapping 就被强制转换成 F ( x ) + x \mathcal F ( x ) + x F(x)+x

然后,作者假设对 residual mapping 的优化要比常规的 underlying mapping 要简单和容易

F ( x ) + x \mathcal F ( x ) + x F(x)+x实际的编码过程 中,可以被一种叫做 快捷连接 的结构件来实现。

在这里插入图片描述
快捷连接通常会跳过 1 个或者多个层,在 ResNet 中快捷连接直接运用了 identity mapping,意思就是 将一个卷积栈的输入直接与这个卷积栈的输出相加

F ( x ) \mathcal F ( x ) F(x) 表示残差,最理想的情况是 identity mapping 是最优的输出,那么让 F ( x ) \mathcal F ( x ) F(x) 为 0 就好了,现实是 F ( x ) \mathcal F ( x ) F(x) 不可能全为 0,那么这些多出来的东西就可以增强网络的表达能力。

ResNet 的成绩

ResNet 依靠成绩说话,

  • 它是 ILSVRC 2015 年图像分类冠军

而且 ResNet 的 泛化 变现也很卓越,在

  • ImageNet 目标检测
  • ImageNet 目标定位
  • COCO 目标检测
  • COCO 图像分割

等竞赛中 都取得了当年(2015)的冠军

并且,ResNet 是:

  • 当年 ImageNet 参赛模型中层级最深的模型,达到了 152层

这些证据证明了 ResNet 加深网络后,性能比其他的模型更突出。

Residual Learning 的理论依据

我们可以将焦点放在 H ( x ) \mathcal H ( x ) H(x) 上。

理论上有一种假设,多层卷积的参数可以近似地估计很复杂的函数表达公式的值,那么多层卷积也肯定可以近似地估计 H ( x ) − x \mathcal H ( x ) − x H(x)x 这种残差公式。

所以与其让卷积栈去近似的估计 H ( x ) \mathcal H(x) H(x),还不如让它去近似地估计 F ( x ) : = H ( x ) − x \mathcal F(x):=\mathcal H(x)-x F(x):=H(x)x,而 F ( x ) \mathcal F(x) F(x) 就是残差。

作者假设的是,残差比原始的 mapping 更容易学习。

作者在他的另外一篇论文《Identity Mappings in Deep Residual Networks》中给出了详细的讨论。

网络结构

ResNet 的起始是从一个 常规的比较浅的网络上探求加层的过程。这个常规的比较浅的网络是大名鼎鼎的 VGG-19

作者对 VGG-19 进行仿制与改造,得到了一个 34 层的 plain network,然后又在这个 34 层的 plain network 中插入快捷连接,最终形成了一个 34 层的 residual network。

F ( x ) \mathcal F(x) F(x) 要与 x x x 相加,那么它们的维度就需要一样。而 ResNet 采用的是 1x1 的卷积核去应对维度的变化,通过 1x1 的卷积核去 对输入进行升维和降维

ResNet 作者做了大量的模型评估工作,网络的层数从 18 到 152 都有试验。

在这里插入图片描述

值得注意的是,50-layer 起,ResNet 采用了一种 bottleneck design 的手段。

在这里插入图片描述

1x1 的卷积核让整个残差单元变得更加细长,这也是 bottleneck 的含义,更重要的是 参数减少 了。

最终在 ImageNet 验证集上的表现也证明了 ResNet 比当时其他网络要强,并且 ResNet 本身层级越多准确率越高。

最后,为了证明 ResNet 的 泛化能力,作者也在 CIFAR-10 数据集上做了测试和分析,ResNet 甚至做到了 1000 层以上。这证明了 基于残差学习可以让网络更深

总结

  • ResNet 在当年大放异彩靠的是它优异的表现。
  • 论文 更多讲述的是经验,这些经验 靠实验结果 表现出了 ResNet 的高效,但 后来的补充材料给出了理论依据,自此它才变得更加 让人信服
  • ResNet 并非横空出世,它是 基于浅层网络的探索性的结果,就如 VGG 是在 AlexNet 的基础上探索得到的
  • ResNet 验证了大量的结构,并且进行了 大量的横向和纵向对比 才得到的 最理想的结果,这份细致和耐心值得我们每个人学习。

参考:
【深度学习】经典神经网络 ResNet 论文解读

视频理解

下面的视频,用图形的方式解释了 ResNet 的原理和优势:https://www.youtube.com/watch?v=GWt6Fu05voI

现在,残差连接无处不在,不仅仅是在图像识别中,它们也出现在变换器(Transformer)中,以及你能想到的任何地方,你很可能会在某个地方找到一些残差连接。

变换器是一种基于自注意力机制(self-attention)的神经网络模型,用于 处理序列数据,如自然语言处理(NLP)和语音识别(ASR)等领域。

  • 变换器的优点是 可以捕捉序列中任意位置之间的依赖关系,而不受距离的限制,同时也可以实现高效的并行计算。
  • 从 Transformer 推出至今,已经成为众多模型的核心模块,比如大家熟悉的 BERT、T5 等都有 Transformer 的身影,就连近段时间爆火的 ChatGPT 也依赖 Transformer

引入

将一张图像输入到卷积层中,首先会保持较大的分辨率,但会增加通道数量,然后随着过滤器数量的增加,你会缩小图像的比例。这样你就会堆叠越来越多的过滤器,同时缩小图像的分辨率。如果你在进行图像分类,比如你想把它分类为乐高塔或其他任何东西,它在哪里并不那么重要。

在较低的层次上,你会想要 解析出像边缘等非常低层的特征,它们所在的地方是重要的。然后你往上走,去到越来越多的抽象特征,随着你往上走,这些神经网络 倾向于学习越来越多的抽象特征。假设是这些抽象特征的精确定位会越来越不重要,所以如果你认识到有一个矩形,那么它在哪里并不重要,重要的是它在那里的某个地方,也许它与另一个矩形有关系。

在这里插入图片描述

所以如果想识别一辆汽车,

  • 下层会识别有边缘的事实
  • 然后 中间层会识别出轮子和这些方的几何形状,但它们到底在哪里并不重要
  • 然后 更高层会学会将各个部分相互组合,这些东西在哪里变得越来越不重要

越来越重要的是你建立更具表现力的特征,这样人们就会 降低分辨率,增加过滤器的数量,这是一个很好的启发式方法。

但这基本上就是这些网络的架构,我们会质疑为什么增加了层数,它会变得更糟。

恒等映射

理论上,存在一种解,增加层数应该不会变得更糟:

假如我有一个5层的网络,我想构建更深的9层网络,那么我拿来5层网络作为前5层,后4层网络只需要完成恒等映射的任务,

  • 按理来说,就可以保证更深的9层网络不会比5层的网络效果差,
  • 实验效果 却是9层网络效果更差,这说明后4层网络不太能完成恒等映射。

在这里插入图片描述

所以作者团队后面就 不用网络来拟合恒等映射了,而是直接“曲线救国”,加了一个跨层连接 恒等映射。

在这里插入图片描述
绿色圆圈的网络 F ( x ) F(x) F(x) 只是学习什么东西让输出和输入不同并且学习差异。在权重层趋向于零函数之前,我们对权重层使用权重衰减,或通常我们如何初始化它们,它们会很好地趋向于零函数。

如果 F ( x ) F(x) F(x) 趋向于0函数,那么 H ( x ) H(x) H(x) 成为恒等函数。

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

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

相关文章

真实业务场景使用-门面模式(外观)设计模式

1.前言 最近接到要修改的业务功能,这个业务增删改查很多功能都需要校验时间,比如: 1.失效时间不能超过自己父表的失效时间, 2.失效时间不能是当前时间 3.失效时间不能早于生效时间 类似这样的不同的判断还有很多,…

软考A计划-真题-分类精讲汇总-第十章(程序设计语言)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

【GO 编程语言】切片与Map

切片与Map 文章目录 切片与Map一、切片 Slice1.定义切片2.make 函数创建切片3.切片扩容与遍历4.在已有数组上创建切片5.切片是引用类型7.深拷贝、浅拷贝 二、Map1.Map 初始化2.map 的使用3.map 的遍历4.map 结合 slice 一、切片 Slice 1.定义切片 Go 语言切片是对数组的抽象。…

设置ELK集群账号密码

一、设置ELK集群账号密码 切换到es用户 主节点生成证书 cd /home/es/elasticsearch-7.6.2/bin ./elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass "" 将主节点证书发给其他两个节点 修改配置文件,启用x-pack:cat /…

Linux指令运行原理和权限

Linux指令运行原理和权限 一.命名行解释器二.权限1.用户分类2.什么是权限3.增删权限4.更改权限的拥有者5.三个概念1.权限掩码2.目录权限3.粘滞位 三.权限总结 一.命名行解释器 那么命令行解释器存在的意义:1.进行命令的解释。2.保护os,对于非法的请求&am…

TimesNet:用于一般时间序列分析的时间二维变化模型

摘要 时间序列分析在天气预报、异常检测和动作识别等广泛应用中具有极其重要的意义。本文重点研究时间变量建模,这是广泛分析任务的共同关键问题。以前的方法试图直接从一维时间序列完成此操作,由于错综复杂的时间模式,这极具挑战性。基于对…

使用flask获取树莓派摄像头监控视频

目录 1、安装flask库 2、使用flask打开网页传输视频 2.1 在树莓派终端桌面上,新建一个flask文件夹 2.2 在flask文件夹里面,新建一个template文件夹和app.py文件 2.3 在template文件夹里面,新建一个index.html文件 2.4 使用flask运行代码…

【半小时入门vue】最容易理解的vue入门方式

半小时入门vue 前言(!important)学习vue的前提什么是vue?vue的引入方式实例化一个对象和创建一个对象实例化一个vue对象模板语法1.插值表达式2.v-text和v-html指令3.v-bind指令4.v-on指令5.v-model指令6.v-if和v-show指令7.v-for指…

AD-STM32

AD-STM32 ADC (Analog-Digital Converter) 模拟-数字转换器A DC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC,1us转换时间 输入电压范围: 0-3.3V,转换结果范围: 0~409518个输…

MySQL内幕揭秘:探索MySQL调优指南,解锁MySQL的强大功能

1、MySQL大事记 1994年:Michael Widenius和David Axmark创建了MySQL AB。 1995年:MySQL从最初的beta版本发布,成为一款开源软件。 1997年:MySQL发行版本3.21,并成为了第一个支持多个存储引擎的数据库管理系统。 2000年…

uniapp 地图组件(map)的使用总结

总结一下本次在uniapp中使用map遇到的一些问题 文章分别是基础 定位图标 获取自身经纬度 通过经纬度获取当时城市信息 首先先看成品 首先引入map组件 <template><view class"content"><map style"width: 100%; height: 90vh;" :layer-…

通过云函数搭建内地可用的OpenAI代理(腾讯云centos系统)

需求&#xff1a; 大陆内地云服务器无须搭梯子&#xff0c;无须NGINX反向代理访问openAI。 背景&#xff1a; 平时工作环境是局域网&#xff0c;不方便分享给朋友用&#xff0c;即使不是局域网也不可能一直开着自己的电脑啦&#xff0c;于是想着给弄到云服务器上。 一般来说&…

diff命令和vimdiff命令

文章目录 diff命令基本用法选项示例 vimdiff命令命令格式选项说明常用操作 diff命令 diff命令是一个文本比较工具&#xff0c;用于比较两个文件的内容&#xff0c;它会逐行比较两个文件的内容并输出它们之间的差异。下面是diff命令的常用选项和用法&#xff1a; 基本用法 比…

数据信息汇总的7种基本技术总结

数据汇总是一个将原始数据简化为其主要成分或特征的过程&#xff0c;使其更容易理解、可视化和分析。本文介绍总结数据的七种重要方法&#xff0c;有助于理解数据实质的内容。 1、集中趋势:平均值&#xff0c;中位数&#xff0c;众数 集中趋势是一种统计测量&#xff0c;目的…

RFID系统简介:优点、应用与发展前景

一、介绍RFID系统 RFID系统全称是Radio Frequency Identification&#xff0c;是一种通过电磁场自动识别标记&#xff08;Tag或RFID标签&#xff09;并读取相关数据的技术。与条形码技术相比&#xff0c;RFID系统最大的特点就是可以自动识别、无须接触扫描&#xff0c;并且可以…

MySQL报错:Got an error reading communication packets

error reading 关闭连接 通常一旦连接建立&#xff0c;MySQLD端的线程会堵塞在poll上&#xff0c;而poll的就是连接socket的fd&#xff0c;等待读取命令&#xff0c;也就是读取MySQL net packet的header。同时如果是poll timeout超时则设置为SOCKET_ETIMEDOUT 这就是我们平时说…

ResNet 原论文及原作者讲解

ResNet 论文摘要1. 引入2. 相关工作残差表示快捷连接 3. 深度残差学习3.1. 残差学习3.2. 快捷恒等映射3.3. 网络体系结构普通网络 plain network残差网络 residual network 3.4. 实施 4. 实验4.1. ImageNet分类普通的网络 plain network残差网络 residual network恒等vs.快捷连…

ribbon的使用

什么是ribbon Ribbon是Netflix公司提供的一个基于HTTP和TCP的客户端负载均衡工具。 Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具&#xff0c;Ribbon客户端组件提供一系列的完善的配置&#xff0c;如超时&#xff0c;重试等。通过Load Balancer获取…

随笔:mysql的主主同步

背景&#xff1a; nginx负载均衡和双击热备下&#xff0c;要求支持mysql的test库的主主同步&#xff0c;同时需要豁免特定的三张配置表。 实现步骤&#xff1a; 1. 查看防火墙是否是关闭状态。systemctl status firewalld 2. 修改配置&#xff0c;增加以下内容。vi /etc/my.cnf…

利用Github Action备份Docker容器中的数据库

利用Github Action备份Docker容器中的数据库 本文方案仅供技术参考与娱乐&#xff01; 前言 数据很重要&#xff0c;所以我们要经常备份。 那么怎么备份呢&#xff1f;假如我们使用云厂商的数据库&#xff0c;里面已经自带了快照和备份功能了&#xff0c;只要你愿意花钱&…