ResNet简介

news2025/1/12 3:03:40

ResNet (Residual Network)

此网络于2015年,国人何先生提出,用于解决随着深度学习的层数加深造成的网络退化现象梯度消失、梯度爆炸

问题1 退化现象

当深度学习的各项指标能够随着训练轮数收敛的情况下,网络的层数增强未能像理论一样:"抽象出更具有语义的特征,从而比层数少的网络准确率高。"反而准确率是下降的。

在这里插入图片描述
可以看到这并不是因为过拟合引起的测试准确率下降,因为训练时同样效果不佳。

解决方案:采用两种residual网络结构来加强数据原始数据与最终输出特征的关联度,弱化层之间的强联系,允许跳跃链接。

下图中虚线代表采用了residual的深度学习网络,可以看到,良好的解决了网络退化的问题。

在这里插入图片描述

BasicBlock和Bottleneck

在这里插入图片描述
左侧残差结构称为 BasicBlock,右侧残差结构称为 Bottleneck。

从参数量的对比上来看,假设我们都是输入256通道的数据,那么
CNN参数个数 = 卷积核尺寸×卷积核深度 × 卷积核组数 = 卷积核尺寸 × 输入特征矩阵深度 × 输出特征矩阵深度
BasicBlock,参数的个数是:256×256×3×3+256×256×3×3=1179648
Bottleneck,参数的个数是:1×1×256×64+3×3×64×64+1×1×256×64=69632

考虑参数量,通常在深层时会采用三层的resnet结构

Shortcut connection

上图中的“跨层链接”称为短路链接:Shortcut connection。

短路连接 H(x) = F(x) + x 这里需要逐元素加和,如果 F(x) 与 x 的通道数相同,则可以直接相加(对应实线),如果 F(x) 与 x 的通道数不同,则需要进行维度匹配。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
原文的标注中已说明,conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层残差结构都是虚线残差结构。因为这一系列残差结构的第一层都有调整输入特征矩阵shape的使命(将特征矩阵的高和宽缩减为原来的一半,将深度channel调整成下一层残差结构所需要的channel)

原文中的shortcut三种实现方案。
(A)“zero-padding shortcuts are used for increasing dimensions, and all shortcuts are parameterfree”
两者维度(通道数)不同,可对增加的维度使用零填充(使用全0填充缺少的维度, 然后concat低维数据从而升到高维)。

(B)“projection shortcuts are used for increasing dimensions, and other shortcuts are identity”
两者维度(通道数)不同,可采用论文中提到的公式H(x) = F(x) + Wx来匹配维度,其中 W 代表线性投影(使用 1x1 卷积),其他shortcuts则为恒等映射(维度相同时)。

(C)“all shortcuts are projections”
无论维度是否相同,对于所有的shortcuts,都使用 1x1 卷积来匹配维度。

问题2 梯度消失、梯度爆炸

梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大

解决方案:Batch normalization(批(数据)归一化)

Batch Normalization是指批标准化处理,将一批数据的所有的feature map满足均值为0,方差为1的分布规律。它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散(特征分布较散)”的问题。

在BN出现之前,数据归一化一般都在数据输入层,对输入数据进行求均值以及求方差做归一化。

BN的出现使我们可以在网络中任意一层对数据归一化处理。我们现在所用的优化方法大多都是min-batch SGD,所以我们的归一化操作就成为Batch Normalization。

BN中的数据归一化是在正态分布式的归一化的基础上进行的修改,步骤如下:
在这里插入图片描述

1.求每一个训练批次数据的均值
2.求每一个训练批次数据的方差
3.使用均值和方差对该批次的训练数据做归一化,获得(0,1)正态分布。其中ε是为了避免除数为0时所使用的微小正数。

由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。
γ是尺度因子,β是平移因子,在训练时网络学习得到。

4.尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi。

1-3步如下

在这里插入图片描述
左图是没有经过任何处理的输入数据,曲线是sigmoid函数,如果数据在梯度很小的区域,那么学习率就会很慢甚至陷入长时间的停滞。若是使用均值和方差进行归一化,则如右图所示,这会让数据总是在中心一片梯度最大的区域,这是对抗梯度消失的一种有效手段(ReLU),如果对于多层数据做归一化,则可将数据分布忽略提高收敛速度。

BN方法的第四步
在这里插入图片描述
为什么要有第四步尺度变换与偏移?

减均值除方差得到的分布是正态分布,不能认为这样得到的正太分布就是最符合我们训练样本特征的分布的函数曲线。比如数据本身就很不对称,或者激活函数未必是对方差为1的数据最好的效果,比如Sigmoid激活函数,在-1~1之间的梯度变化不大,那么非线性变换的作用就不能很好的体现。也就是说,减均值除方差操作后可能会削弱网络的性能。因此要引入第四步,改变方差大小和均值位置,使得新的分布更切合数据的真实分布,保证模型的非线性表达能力。

BN的本质,第四步操作和均值方差的关系是什么?
而第四步的本质或者说BN的本质是利用优化,改变方差大小和均值位置,使得新的分布更切合数据的真实分布,保证模型的非线性表达能力。BN的极端的情况就是这两个参数等于mini-batch的均值和方差,那么经过batch normalization之后的数据和输入完全一样,当然一般的情况是不同的。

预测时BN所使用的均值和方差来源于那里?
在训练时,我们会对同一批的数据的均值和方差进行求解,进而进行归一化操作。对于预测阶段时所使用的均值和方差,也是来源于训练集。在模型训练时我们记录下每个batch的均值和方差,训练完毕后,求整个训练样本的均值和方差期望值作为进行预测时,进行BN的的均值和方差。

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

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

相关文章

数据治理在大模型时代的实践和创新

数据治理在大模型时代的实践和创新 随着人工智能技术的飞速发展,大模型已经成为了许多领域中取得突破性进展的关键。然而,这些大模型的成功背后往往离不开高质量的数据支持和有效的数据治理。数据治理在大模型时代中变得愈发重要,它不仅仅是…

Go 1.21中值得关注的几个变化

美国时间2023年8月8日,Go团队在Go官博上正式发布了1.21版本[2]! 早在今年4月末,我就撰写了文章《Go 1.21新特性前瞻[3]》,对Go 1.21可能引入的新特性、新优化和新标准库包做了粗略梳理。 在6月初举办的GopherChina 2023大会上[4]&…

机器学习算法的选择和优化技巧

文章目录 机器学习算法的选择1. 问题类型:2. 数据规模:3. 特征空间:4. 数据质量: 机器学习算法的优化技巧1. 特征工程:2. 超参数调优:3. 集成方法:4. 模型调优: 代码示例&#xff1a…

【C语言督学训练营 第二十二天】C语言操作文件

文章目录 前言1.文件操作原理解析2.文件打开及关闭实战3.文件读写实战3.1 fread&fwrite3.2 fgets&fputs 4.文件位置指针偏移实战 前言 其实本篇博客标题应该是第二十三天,因为督学营讲的是二十三天的内容,至于为什么将第二十三天内容调为二十二…

学Pyhton静不下来,看了一堆资料还是很迷茫是为什么

一、前言 最近发现,身边很多的小伙伴学Python都会遇到一个问题,就是资料也看了很多,也花了很多时间去学习但还是很迷茫,时间长了又发现之前学的知识点很多都忘了,都萌生出了想半路放弃的想法。 让我们看看蚂蚁金服的大…

如何构建多域名HTTPS代理服务器转发

在当今互联网时代,安全可靠的网络访问是至关重要的。本文将介绍如何使用SNI Routing技术来构建多域名HTTPS代理服务器转发,轻松实现多域名的安全访问和数据传输。 SNI代表"Server Name Indication",是TLS协议的扩展,用于…

C语言:选择+编程(每日一练Day6)

目录 ​编辑选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:至少是其他数字两倍的最大数 思路一: 思路二: 题二:两个数组的交集…

推荐适用于不同规模企业的会计软件:选择最适合您企业的解决方案

高效的会计软件不仅可以协助企业进行财务管理,做出科学的财务决策,还可以对企业数字化转型提供助力。不同规模的企业需要根据其特定需求选择适合的会计软件。那么有什么适合不同规模企业的会计软件推荐吗? 小型企业的选择 对于小型企业而言&…

【工具使用】Git的使用

dev代表开发版 1. git clone 命令 通过 git add <name> 对文件进行跟踪&#xff0c;把<name>加入到暂存区 git commit -m XXXXXXX 提交修改并补充XXXXX作为注释 “暂存”状态&#xff1a;出现了一些修改&#xff0c;但是还没有提交 对于Java来说&#xff0c;.cl…

OnePlus Open可折叠手机:规格、价格、发布日期等详细信息汇总!

我们知道OnePlus可折叠手机即将问世,无论它是否被命名为OnePlus Open。我们迫不及待地想让它到来,为该公司再添一根弦,为最好的可折叠手机增添一个新的竞争对手。 OnePlus以前没有生产过任何可折叠产品,但它确实拥有合作伙伴公司Oppo的丰富知识,并可以向三星、摩托罗拉和…

【Liunx】冯诺伊曼体系结构

冯诺伊曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺伊曼体系。 到目前为止&#xff0c;我们所认识的计算机&#xff0c;都是由一个个硬件所组成的。 输入单元&#xff1a;键盘&#xff0c;鼠标&am…

开学买哪种电容笔好?平替电容笔和Apple pencil区别

与苹果原装的Pencil相比&#xff0c;普通的电容笔没有任何的重力压感&#xff0c;只能给人一种倾斜的压感。如果你很少用于在绘画上&#xff0c;那就用一支平替电容笔吧&#xff0c;其的价格还算可以接受。这种电容笔&#xff0c;可以用于办公上&#xff0c;也可以用于学习记录…

D盘满到变红色了怎么清理?简单3招,快速释放内存!

“很奇怪哎&#xff0c;我的电脑c盘空间还很多&#xff0c;但是d盘却变红了。因为d盘太多文件了&#xff0c;我不敢随便进行删除&#xff0c;有什么清理d盘的简单方法吗&#xff1f;希望大家帮帮我&#xff01;” 当D盘&#xff08;或任何磁盘分区&#xff09;存储空间接近极限…

【Flutter】2023 Google 开发者大会给 Fluter 带来了什么

文章目录 一、2023年谷歌开发者大会概览二、Flutter 年度进展三、Dart 年度进展四、Material 3 年度进展五、推荐使用Flutter跨平台开发六、参考资料一、2023年谷歌开发者大会概览 你知道吗,今年的谷歌开发者大会真是令人期待。从5月10日的线上Google I/O大会开始,到9月6日至…

C++day2(笔记整理)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.左值引用 #include <iostream> using namespace std;int main() {int a 100;int &ra a; //定义了变量a的引用racout << &a << endl;cout << "&ra" << &…

2023嵌入式大赛应用赛道全国总决赛圆满收官 AidLux系列作品载誉而归

自2月份正式启动以来&#xff0c;第六届&#xff08;2023&#xff09;全国大学生嵌入式芯片与系统设计竞赛共吸引了507所院校&#xff0c;6107支队伍&#xff0c;共计16675人参赛。 经过6个分赛区激烈的初赛、复赛评审角逐后&#xff0c;大赛总决赛于8月15-18日陆续开展并圆满…

创建延时队列、springboot配置多个rabbitmq

创建延时队列 queue.file_delay_destroy x-dead-letter-exchange: exchange.file_delay_destroy x-message-ttl: 259200000 259200000为3天,1000为1秒创建普通队列 queue.file_destroy创建普通交换机 exchange.file_delay_destroytype选择fanout 交换机绑定普通队列 (图中…

加速乐(__jsl_clearance_s)动态cookie生成分析实战

文章目录 一、写在前面二、抓包分析三、逆向分析 一、写在前面 加速乐&#xff08;JSL&#xff09;是阿里推出的一项反爬虫服务&#xff0c;其生成cookie的原理基于浏览器的行为特征 我们知道普通网站生成cookie是在请求时生成&#xff0c;而它先生成cookie&#xff0c;然后向服…

TM4C123库函数学习(3)---串口中断

前言 &#xff08;1&#xff09;学习本文之前&#xff0c;需要先学习前两篇文章。 &#xff08;2&#xff09;学习本文需要准备好TTL转USB模块。 函数介绍 ROM_GPIOPinConfigure&#xff08;&#xff09; 配置GPIO引脚的复用功能。因为引脚不可能只有一个输出输入作用&#xf…

ol-cesium 暴露 Cesium viewer 对象以及二三维切换、viewer 添加点功能示例

ol-cesium 暴露 Cesium viewer 对象以及二三维切换、viewer 添加点功能示例 核心代码完整代码在线示例 二三维一体化的概念一直都比较火热&#xff0c;虽然大多数都是狭义的概念&#xff0c;但是很多需求方也想要这样的功能。 Openlayers 官方出了一个二三维一体化的工具&…