【DeepLearning】Deep Residual Learning for Image Recognition恺神大作学习

news2024/11/17 19:51:35

@[TOC] Deep Residual Learning for Image Recognition
论文
在这里插入图片描述

1. 文章主要想解决什么问题,用了什么方法

深度神经网络在训练过程中的3个关键问题:

  1. 梯度消失/爆炸问题:随着网络层数的增加,梯度在反向传播过程中可能会变得非常小(梯度消失)或者非常大(梯度爆炸),这会阻碍网络的收敛。

  2. 退化问题:随着网络深度的增加,网络的准确率在达到一定深度后不再提升,反而可能会下降。这种现象称为退化问题,它表明简单地增加网络层数并不能保证性能的提升。

  3. 优化困难:深层网络可能难以优化,尤其是在网络非常深的情况下。这可能导致训练过程缓慢或者无法找到最优解。

为了解决这些问题,文章提出了以下解决方案:

  • 残差学习:通过将网络层设计为学习输入的残差映射(即输出是输入加上网络层的输出),而不是直接学习映射本身,可以更容易地优化网络。

  • 快捷连接(Shortcut Connections):在网络中引入跳跃连接,这些连接允许输入直接传递到网络的后面部分,从而帮助网络学习残差映射。

  • 瓶颈架构(Bottleneck Architecture):为了提高网络的效率和减少计算复杂度,作者提出了一种瓶颈架构,它在每个残差块中使用1×1、3×3和1×1的卷积层,其中3×3的卷积层是瓶颈部分。

这些方法共同使得网络能够在更深的层次上有效地学习复杂的映射,同时保持较低的计算成本和内存需求。通过这些技术,作者成功地训练了超过1000层的网络,并在多个视觉识别任务上取得了显著的性能提升。

2. 如何解决1种提到的问题

基于残差学习、快捷连接(Shortcut Connections)和瓶颈架构(Bottleneck Architecture)的方法为啥能够有效解决上述问题,主要原理是什么讷

  1. 残差学习

    • 梯度消失/爆炸问题:通过学习残差映射,网络的每一层不再是独立地学习整个映射,而是学习输入到输出的残差部分。这意味着即使在深层网络中,梯度也更容易通过这些残差路径传播,因为它们通常比直接映射要小得多,从而减少了梯度消失或爆炸的风险。
    • 退化问题:残差学习使得网络能够学习到更复杂的功能,因为每一层都在尝试学习输入到输出的“差异”,而不是整个映射。这使得网络可以构建在更浅层网络的基础上,通过添加更多的层来学习更复杂的功能,而不会退化。
  2. 快捷连接
    啥叫快捷连接呢?
    在这里插入图片描述

    • 优化困难:快捷连接允许信息直接跳过某些层,这使得网络更容易学习到恒等映射(identity mapping),因为恒等映射是网络的默认状态。这种直接的路径为网络提供了一个稳定的参考点,有助于网络更快地收敛。
    • 梯度消失/爆炸问题:快捷连接为梯度提供了一个额外的路径,这个路径不受中间层的影响,因此可以更有效地传递梯度,减少梯度消失或爆炸的可能性。

正对这一点具体网络设计如下:
在这里插入图片描述

  1. 瓶颈架构
    • 优化困难:瓶颈架构通过在每个残差块中使用1×1的卷积层来减少输入和输出的维度,然后再通过3×3的卷积层进行特征学习。这种设计减少了每一层的参数数量,从而降低了模型的复杂度,使得网络更容易优化。
      具体表现形式如下
      在这里插入图片描述

    • 计算效率:瓶颈架构通过减少中间层的维度来降低计算成本,同时保持了网络的深度,这使得在有限的计算资源下可以训练更深的网络。

所以核心是这些方法通过提供更稳定的梯度流、简化网络结构、降低计算复杂度,以及允许网络更容易地学习到恒等映射,从而提高了深层网络的训练效率和性能。这些改进使得网络能够在更深的层次上有效地学习复杂的映射,同时保持较低的计算成本和内存需求。

在数学上,残差学习和快捷连接可以通过以下公式来描述:

  1. 残差学习
    假设我们有一个深层网络,其目标是学习一个映射函数 ( H ( x ) ) ( H(x) ) (H(x)),其中 ( x ) 是输入,( H(x) ) 是期望的输出。在残差学习中,我们不是直接学习 ( H(x) ),而是学习一个残差映射 ( F(x) ),即 ( H(x) - x )。然后,我们通过将 ( F(x) ) 加到输入 ( x ) 上来重新定义 ( H(x) ),即 ( H(x) = F(x) + x )。

    数学上,这可以表示为:
    [ y = F ( x , W i ) + x ] [ y = F(x, {W_i}) + x ] [y=F(x,Wi)+x]
    其中 ( y ) 是输出,( F(x, {W_i}) ) 是残差映射,( {W_i} ) 是网络中的权重。

  2. 快捷连接
    快捷连接通过在网络中添加直接连接(shortcut connections)来实现。这些连接允许网络中的信息直接从输入传递到输出,绕过中间的某些层。在残差网络中,快捷连接通常用于将输入 ( x ) 添加到残差块的输出上。

    数学上,快捷连接可以表示为:
    [ y = F(x, {W_i}) + x ]
    其中 ( y ) 是输出,( F(x, {W_i}) ) 是残差块的输出,( x ) 是输入。

  3. 瓶颈架构
    瓶颈架构通过在每个残差块中使用1×1的卷积层来减少输入和输出的维度,然后再通过3×3的卷积层进行特征学习。这种设计减少了每一层的参数数量,从而降低了模型的复杂度。

    数学上,瓶颈架构可以表示为:
    [ y = B N ( R e L U ( C o n v ( B N ( C o n v ( x , W 1 ) , W 2 ) ) ) ) ] [ y = {BN}({ReLU}({Conv}({BN}({Conv}(x, {W_1}), {W_2})))) ] [y=BN(ReLU(Conv(BN(Conv(x,W1),W2))))]
    其中 ( y ) 是输出,( \text{BN} ) 是批量归一化层,( \text{ReLU} ) 是修正线性单元激活函数, ( Conv ) ( \text{Conv} ) (Conv) 是卷积层,( {W_1} ) 和 ( {W_2} ) 是卷积层的权重。

这些数学表达式描述了残差网络的基本结构和操作,它们共同作用于提高网络的深度和性能,同时减少训练过程中的优化困难。

3. 为什么这样的设计可以解决1种提到的问题

这样的设计可以解决上述问题,主要是因为它们针对性地改善了深度学习网络在训练过程中遇到的挑战:

  1. 梯度消失/爆炸问题

    • 残差学习:通过学习残差映射 ( F(x) = H(x) - x ),网络的每一层都在尝试学习一个较小的残差,而不是整个映射 ( H(x) )。这意味着即使在深层网络中,梯度也更容易通过这些残差路径传播,因为残差通常比直接映射要小得多。这有助于缓解梯度消失问题,因为较小的梯度值更容易在反向传播中保持非零值。
    • 快捷连接:快捷连接为梯度提供了一个直接的路径,绕过了中间层。这使得梯度可以直接从输出传回输入,减少了中间层对梯度的影响,从而减少了梯度消失或爆炸的风险。
  2. 退化问题

    • 残差学习:残差学习允许网络在更深的层次上学习更复杂的功能,同时保持对浅层网络的依赖。这意味着网络可以通过添加更多的层来逐渐学习更复杂的特征,而不会因为层数的增加而导致性能下降。
    • 快捷连接:快捷连接确保了输入信息可以直接到达网络的深层,这有助于网络学习到更复杂的特征,同时保持了输入信息的完整性,从而避免了信息丢失导致的性能退化。
  3. 优化困难

    • 残差学习:残差学习使得网络更容易学习到恒等映射,因为网络的每一层都在尝试学习输入到输出的微小变化。这使得网络更容易找到一个良好的起点,从而加速了训练过程。
    • 快捷连接:快捷连接提供了一个稳定的参考点,使得网络更容易优化。由于信息可以直接从输入传递到输出,网络可以更容易地找到一个好的解决方案,而不是被卡在局部最优解。
    • 瓶颈架构:瓶颈架构通过减少中间层的维度来降低计算复杂度,这使得网络更容易训练。同时,1×1的卷积层可以看作是一种维度变换,它在不增加计算量的情况下,允许网络学习更复杂的特征映射。

总而言之 这些设计通过提供更稳定的梯度流、简化网络结构、降低计算复杂度,以及允许网络更容易地学习到恒等映射,从而提高了深层网络的训练效率和性能。这些改进使得网络能够在更深的层次上有效地学习复杂的映射,同时保持较低的计算成本和内存需求。

4. 经典网络对比

4.1 普通网络设计(参考VGG)
对于相同的尺寸的输出特征图谱,每层必须含有相同数量的过滤器。
如果特征图谱的尺寸减半,则过滤器的数量必须翻倍,以保持每层的时间复杂度。
卷积层(stride=2)进行下采样,网络末端以全局的均值池化层结束,1000的全连接层(Softmax激活)。共34层。
这样构建出的34层网络计算量远小于VGG-19
4.2 残差网络设计
基于普通网络,其中插入快捷连接(shortcut)来实现残差学习。快捷连接不引入额外的参数和复杂度。不仅在实践中很有吸引力,而且方便比较普通网络和残差网络,具有相同数量的参数、深度、宽度和计算成本。
详细见 【Pytorch】学习记录分享5——PyTorch卷积神经网络 中第2章节第4部分 4. 经典网络架构

5. 实验部分 当年刷爆各个数据库

基于ImageNet,图片被根据短边等比缩放,按照[256,480]区间的尺寸随机采样进行尺度增强。裁切224x224随机抽样的图像或其水平翻转,并将裁剪结果减去它的平均像素值,标准颜色的增强。批量正则化用在了每个卷积层和激活层之间,初始化权重为0。

使用SGD算法,mini-batch=256,
,(当到达迭代要求时把学习速率除以10),权重衰减,衰减率=0.0001,动量=0.9,无dropout。

1000个类的ImageNet 2012分类数据集。训练集:128万。测试集:50k。

一个字牛!
同时网络泛化能力也得到充分验证,凯神走向圣坛

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

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

相关文章

浅谈政企风险防控体系

政企风控体系是集团客户部在生产运营过程中对政企产品可能面临的风险进行监测,针对监测发现的风险,制定相应的管控措施,并跟进落实,以最大限度地减少或消除风险对组织的影响的管控体系。 本文之所以称为“浅谈”是因为文中主要围绕…

一条查询SQL是如何执行的?更新、新增、删除呢?

你好,我是田哥 本文共14629字,读完预计需要37分钟,建议先收藏。 大部分朋友估计都只知道写sql然后执行,但是并不知道MySQL背后到底是怎么实现的。 八股文中也有这么一道题:在MySQL中,一条SQL到底是如何执行…

【大数据存储与处理】开卷考试总复习笔记

文章目录 实验部分一、 HBase 的基本操作1. HBase Shell入门2. HBase创建数据库表3. HBase数据操作4. HBase删除数据库表5. HBase Python基本编程 before二、 HBase 过滤器操作1.创建表和插入数据2.行键过滤器3.列族与列过滤器4.值过滤器5.其他过滤器6.python hbase 过滤器编程…

通过 conda 安装 的 detectron2

从 detectron2官网 发现预编译的版本最高支持 pytorch1.10、cuda11.3。(2023-12-26) 1、安装 conda 环境。 conda create --name detectron2 python3.8 2、安装 pytorch1.10 和 cuda11.3。 pip3 install torch1.10.0cu113 torchvision0.11.1cu113 torc…

Hadoop之HDFS 详细教程

1、HDFS概述 Hadoop 分布式系统框架中,首要的基础功能就是文件系统,在 Hadoop 中使用FileSystem 这个抽象类来表示我们的文件系统,这个抽象类下面有很多子实现类,究竟使用哪一种,需要看我们具体的实现类,在…

CTFshow-pwn入门-栈溢出pwn41-pwn42

pwn41 我们首先将pwn文件下载下来,拖入到虚拟机查看一下文件的保护信息。 chmod x pwn checksec pwn该文件只开启了栈不可执行,并且文件是32位的。 我们把文件托到ida32中查看一下反编译代码。 int __cdecl main(int argc, const char **argv, const c…

大数据开发之Sqoop详细介绍

测试环境 CDH 6.3.1 Sqoop 1.4.7 一.Sqoop概述 Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS与Hadoop之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中&…

呼叫中心知识库管理

呼叫中心向客户提供所需服务与支持的过程中,会遇到形形色色的客户和各式各样的问题,需要客服人员做出回答。客户对于客服人员的答复是否满意直接关系着呼叫中心的业绩,甚至企业的兴衰。而OKCC的知识库管理正是基于呼叫中心的这一需求而存在&a…

Python range函数新手指南:详细解析内部机制

更多资料获取 📚 个人网站:ipengtao.com range函数是Python中常用的内置函数之一,用于生成一系列连续的整数。本文将深入探讨range函数的内部实现,以揭示其工作原理和效率。 range函数的基本用法 range函数的基本用法。它通常使…

async和await的使用

async和await是promise的一种语法糖,也就是更简单易懂的写法。 在很多项目中,你会经常看到async和await的配合使用,看到原始的promise写法反而不多,就是因为async-await这种写法是用同步的语法去实现异步的逻辑。 基础使用 原生promise写法 let value nulllet proFn new P…

最新腾讯云2核2G轻量服务器性价比首选62元一年!

继昨天阿里云2核2G3M带宽轻量应用服务器降价到63元后,腾讯云迅速做出响应,腾讯云轻量2核2G3M服务器降价到62元一年,1元之差,你选择阿里云还是腾讯云?值得一提的是,阿里云不限制月流量,但是腾讯云…

【廖雪峰Java】Java基础知识

学习课程:廖雪峰的官方网站:https://www.liaoxuefeng.com/ 1、简介 1.1、Java之父 詹姆斯高斯林(James Gosling) 1.2、Java三个不同版本 Java SE:Standard EditionJava EE:Enterprise EditionJava ME&a…

openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作

文章目录 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作174.1 事务隔离说明174.2 写入和读写操作174.3 并发写入事务的潜在死锁情况 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作 174.1 事务隔离说…

生存分析序章2——生存分析之Python篇:lifelines库入门

目录 写在开头1. 介绍 lifelines 库1.1 lifelines库简介1.2 安装与环境配置 2. 数据准备2.1 数据格式与结构2.2 处理缺失数据2.3 对异常值的处理 3. Kaplan-Meier 曲线3.1 使用 lifelines 绘制生存曲线3.2 曲线解读3.3 额外补充 4. Cox 比例风险模型4.1 lifelines 中的 Cox 模型…

Echarts中饼图-实现放大显示数据

示例 代码演示 option {tooltip: {trigger: item},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,radius: [40%, 70%],avoidLabelOverlap: false,label: {show: false,position: center},emphasis: {scale: true,//是否开启高亮后扇区的放大效果。s…

跟着LearnOpenGL学习12--光照贴图

文章目录 一、前言二、漫反射贴图三、镜面光贴图3.1、采样镜面光贴图 一、前言 在跟着LearnOpenGL学习11–材质中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观&#xf…

若依common模块解读,Java小白入门(四)

● 若依springboot版本后端,有两个核心模块,一个是ruoyi-common,一个是ruoyi-framewok,今天我们来看第一个模块ruoyi-common, 一些基类,工具等框架底座,分别来看其包含哪些基本内容: 1. annotation 注解,…

Pikachu靶场 “Http Header”SQL注入

1. 先在 pikachu 打开 Http Header 注入模块,点击提示 查看登录 账号 和 密码,登陆后去 Burp 中找到登陆的 GET请求 2. 设置payload1 :在 User-Agent最后 输入 查看 数据库名 or updatexml(1,concat(0x7e,database()),0) or 查看 用户名…

windows搭建MySQL 8.25主从配置

1.本次搭建的版本 mysql-8.0.25-win-x64 2.在解压完成后的文件内并没有对应的my.ini的配置文件这个my.ini是需要的主配置文件需要自行创建。 注:安装路径及数据存放路径需根据实际安装情况进行修改(其它配置信息可结合实际情况进行修改) 3.在…

什么是迁移学习(Transfer Learning)?定义,优势,方法

迄今为止,大多数人工智能(AI)项目都是通过监督学习技术构建的。监督学习是一种从无到有构建机器学习(ML)模型的方法,它对推动AI发展起到了关键作用。然而,由于需要大量的数据集和强大的计算能力…