ResNet 论文理解含视频

    • ResNet 论文理解
      • 问题导引论文理解
        • Q1.神经网络真的越深越好吗?
        • Q2. 为什么加深网络会带来退化问题?
        • Q3. 如何构建更深层的网络?
      • 基于残差的深度学习框架
        • Residual Learning 的理论依据
      • 网络结构
      • ResNet 的成绩
      • 总结
    • 视频理解
      • 引入
      • 恒等映射

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,就是原来的网络要拟合输入 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 不需要额外的参数。

在这里插入图片描述

作者引入了 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,那么这些多出来的东西就可以增强网络的表达能力。

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 依靠成绩说话,

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

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

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

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

并且,ResNet 是:

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

这些证据证明了 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.rhkb.cn/news/17854.html

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

相关文章

创新工具 | 教你6步用故事板设计用户体验事半功倍

问题 构思方案时团队在细节上难以共识 故事板是什么?故事板就像连环画一样,将用户使用解决方案的关键步骤顺序串联了起来,呈现了方案和用户之间的交互。 故事板以先后顺序展现团队票选出来的最佳解决方案,在过程中对于方案中未…

AI奇点已至,是黎明前的黑暗,还是黑夜前的黄昏

2022年11月,OPEN AI公司推出了ChatGPT 3模型,瞬间引爆全球话题,所有业内人士都在感叹他的强大,比尔盖茨也曾经评价道,ChatGPT将会改变世界 ,是一个相当于PC和互联网的革命性产品。 作为信息行业人&#xff…

汇编之调试环境搭建及调试步骤详解

调试环境搭建 思路 学习一门语言,上手上机调试是非常重要的,它会带来一个感性的认知,所以学习汇编第一件事,推荐把开发环境搞起来。 安装 nasm: 程序中的汇编代码需要转译为处理器指令,在提交给处理器执…

通过gulp+rollup从零到一搭建前端组件库

核心要点 通过 webpack 搭建运行环境通过 gulp 执行编译流程通过 rollup 编译组件代码编写 组件测试 组件打包 编译组件上传 npm 1、通过 webpack 搭建运行环境 这里主要是创建一个可以运行的测试的组件的环境,全局安装vue-cli脚手架,并初始化项目 v…

Nuxt重构的填坑之路

我的个人网站是用vuecli写的,SEO不忍直视。于是用Nuxt重构了代码,过程中踩了无数坑,记录如下 一:body样式不生效 正常的body样式设置不能生效,需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性,该…

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计 0. NoC多核片上网络生成器ProNoCProNoC的功能实现 1. 生成一个叫做Mor1kx SoC的单个Tile(包含NI网络接口)1.1 打开ProNoC用于生成Tile的GUI界面1.2 为Tile添加时钟…

【AI绘图学习笔记】transformer

台大李宏毅21年机器学习课程 self-attention和transformer 文章目录 Seq2seq实现原理EncoderDecoderAutoregressive自回归解码器Non-Autoregressive非自回归解码器Corss-attention 总结TrainingtrickCopy MechanismGuided AttentionBeam Search强化学习(Reinforceme…

MATLAB转C

1、先写好一个 函数调用。点击应用程序----MATLAB coder 打开一个对话框,确定C语言代码的工程名。 2、添加函数文件 3、添加文件后,单击变量,选择变量类型和矩阵大小。注意,如果选择的不是double型的数据类型,MATLAB…

Qt功能优化:Qt语音助手

Qt功能优化:Qt语音助手 文章目录 Qt功能优化:Qt语音助手一、效果图二、使用步骤1. .pro部分2. .h部分3. .cpp部分总结一、效果图 点击界面右上方类似于耳机的按钮,即可召唤出语音助手,来为您讲解我们的项目。如下图所示: 二、使用步骤 1. .pro部分 代码如下: QT …

【Chisel学习】设计n位超前进位加法器生成器(Carry-Lookahead Adder Generator)

Chisel学习——设计n位超前进位加法器生成器(Carry-Lookahead Adder Generator) 文章目录 Chisel学习——设计n位超前进位加法器生成器(Carry-Lookahead Adder Generator)一,项目简介二,理论基础2.1 Chisel2.1 硬件生成器&#xf…

OpenAI GPT-3模型详解

OpenAI GPT-3模型详解 针对文本生成和代码生成这两大类场景,OpenAPI分别提供了GPT-3和Codex模型, 模型描述GPT-3一组能够理解和生成自然语言的模型Codex一组可以理解和生成代码的模型,包括将自然语言转换为代码 本文将为大家详细介绍这两个…

Vue3通透教程【十七】Vite构建TS版本Vue项目

文章目录 🌟 写在前面🌟 创建TS版本的Vue3项目🌟 插件安装🌟 写在最后 🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章&#…

用 ChatGPT 重构工作流程

如果你第一次听说 ChatGPT,那你要反思一下自己的信息获取渠道是不是出了问题,作为 AI 时代最强代表,你一定要亲自去体验一下,而不是道听途说。 公司需要降本增效,个体也一样,在工作中畅快应用 AI 来帮助自己…

Qt:可视化UI设计

1、创建项目&修改组件的对象名字和显示文本内容 创建一个 Widget Application 项目类 QDialog,在创建窗体时选择基类 QDialog,生成的类命名为 QWDialog,并选择生成窗体。 在界面设计时,对需要访问的组件修改其objectName&am…

【Qt设计开发】GUI界面设计开发

文章目录 一、Qt简介和下载安装二、Qt入门2.1 创建第一个项目2.2 快捷键和命名规范2.3 Qt项目和VS2022项目相互转换 三、Qt基础3.1 Qt对象树和窗口坐标系概念3.2 QPushButton3.3 信号和槽(signals and slots)3.3.1 pushbutton关闭窗口3.3.2 自定义信号和槽 3.4 Lambda表达式3.5…

【饭谈】ChatGpt如果让软件ui都消失的话,那ui自动化测试该何去何从?

“未来的软件长什么样?” 一位妹子产品经理问我:“你说说未来的软件ui是什么样的?听到这个问题我先是诧异了一下,随即陷入了沉思。” 我看着眼前的产品经理,她是一位比较年轻干练的女强人类型,1.65的身材…

chatgpt赋能python:Python如何设计UI:最佳实践和关键洞察

Python如何设计UI:最佳实践和关键洞察 作为一种支持多种编程范式和用途的高级语言,Python已经成为了许多技术创造者和创业者的首选工具之一。但是,Python最初并不是为了动态用户界面(Dynamic User Interface,简称UI&a…

基于Qt的ui图形化界面进行的界面设计

qt初学者往往会发现这样的一个问题——无论是我买的相关的书,还是网上博客的内容,基本全都是利用纯代码的形式来进行界面设计的。而初学者对各种控件的代码实现并不熟悉,往往在这里耗费大量时间。故本篇文章介绍了通过ui图形化界面进行设计的…

职场神器:只需三分钟,AI工具让我变成插画师

绘画技能 一般来说,搞技术的,写文章的,在绘画的这棵技能树上的加点往往都是零。 而且绘画和音乐这些技能往往是需要一定天赋的,它不像写代码和开挖机,后两者往往经过培训以后人人都能学会,而前两者没有一…

设计师与 ChatGPT 应该如何共处?

ChatGPT 的火爆,导致众多设计师开始忧心忡忡! ChatGPT那么厉害,是不是设计师要被取代了??? ChatGPT以及很多 AI 生成插画和图片的工具和软件,不仅为我们带来了惊喜,也让我们感受到了不少担忧!…