《深度学习》ResNet残差网络、BN批处理层 结构、原理详解
目录
一、关于ResNet
1、什么是ResNet
2、传统卷积神经网络存在的问题
1)梯度消失和梯度爆炸问题
2)训练困难
3)特征表示能力受限
4)模型复杂度和计算负担
3、如何解决
1)解决梯度问题
BN层重要步骤:
2)解决深层网络退化问题
4、残差结构
1)隔层相加优点
2)隔层相加数值增大问题
5、18层结构以外的结构
二、BN层
1、关于BN层
2、主要作用
1)加速网络收敛
2)减少梯度问题
3)增强模型的泛化能力
4)正则化效果
3、过程
一、关于ResNet
1、什么是ResNet
ResNet(Residual Neural Network)是一种深度卷积神经网络结构,由Kaiming He等人在2015年提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。
它通过使用残差块(Residual Block)来克服深度神经网络训练中的梯度消失等问题,使得网络可以更深地进行训练。
2、传统卷积神经网络存在的问题
1)梯度消失和梯度爆炸问题
当网络层数较深时,梯度会逐渐变小或变大,导致训练过程变得困难。这是由于反向传播中的链式法则,使得梯度在每一层传递时逐渐衰减或放大。(可参考传声游戏)
• 梯度消失:指在神经网络的反向传播过程中,梯度逐渐变小并趋近于零的现象。当梯度接近于零时,权重更新的幅度变得非常小,导致网络参数更新缓慢甚至停止更新,从而影响网络的训练效果。通常发生在使用一些特定的激活函数和深层神经网络中。当深层网络的激活函数是Sigmoid或Tanh等饱和函数时,这些函数的导数在输入较大或较小的情况下接近于零,导致梯度逐渐缩小。随着反向传播的进行,梯度会传递到浅层网络,导致浅层网络的参数更新缓慢,最终影响整个网络的训练效果。
• 梯度爆炸:指在神经网络的训练过程中,梯度增长得非常快,导致梯度值变得非常大甚至无限大的现象。当梯度值变得非常大时,权重的更新幅度也会变得非常大,导致网络参数发生剧烈的变化,进而影响网络的稳定性和训练效果。梯度爆炸通常发生在使用一些特定的激活函数和深层神经网络中。当深层网络的激活函数是非线性函数时,特别是使用在深层堆叠的神经网络中时,梯度可能会无限制地增大。这是因为在反向传播过程中,梯度会在每个隐藏层传递并相乘,导致梯度指数级地增长。
上图表示即为当网路是20层和56层时的错误率,可以发现层数越多反而错误率更高
2)训练困难
由于梯度消失和梯度爆炸问题,传统卷积神经网络在训练深层网络时很难收敛。网络的性能往往在一定层数后不再提升或甚至下降。
3)特征表示能力受限
传统卷积神经网络的局部感受野限制了其对全局信息的捕捉能力。简单的卷积操作无法充分利用图像中的上下文信息,导致特征表示能力受限。
4)模型复杂度和计算负担
随着网络层数的增加,传统卷积神经网络的参数量和计算量也会增加。这不仅增加了模型的复杂度,还需要更多的计算资源。
3、如何解决
1)解决梯度问题
使用批归一化(BN层)处理,批归一化通过对每个小批量数据进行归一化,使得每个特征维度的均值接近于0,方差接近于1。这样可以使得输入数据在激活函数前的分布更加稳定,从而缓解了梯度问题。
BN层重要步骤:
• 均值和方差的计算:对于每个小批量数据,计算其在每个特征维度上的均值和方差。
• 归一化和缩放:利用计算得到的均值和方差,对每个特征维度上的数据进行归一化,并进行缩放和平移操作,使得每个特征维度的均值为0,方差为1。
2)解决深层网络退化问题
人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为残差网络 (ResNets)。
此时可看到层数越多错误率越低,实线代表测试数据集错误率,虚线代表训练集错误率
4、残差结构
下图为18层的卷积神经网络,现传入图片,图片格式为3*244*244,首先传入第一层卷积核,卷积核的大小为7*7,一共有64个小卷积核,移动步长为2,将图片四周填充3层0值,将其处理完使图片大小变为112*112,一共有64张,然后将这么多的特征图进行最大池化,池化层大小为3*3,移动步长为2,填充1层,然后得到新的图片格式为64*56*56,将这些特征图再次传入卷积神经网络,不改变其大小,但是此时发生了改变,这64张大小为56*56的特征图不仅传入下列卷积层,同时又复制一份一样的跳过下面的卷积层,然后再将经过两层卷积层处理过的特征图与没有处理的特征图相加得到新的特征图,此时相加的为特征图中每个像素点对应的数值,然后再一次进行剩余同样的操作.........最终对特征图进行全局平均池化,即将每一张图求一个平均值并输出单个值,将这个值当做特征图再次进行全连接,这个全连接有1000个神经元,即输出1000个预测结果。
残差结构使用了一种shortcut的连接方式,也可理解为捷径。让特征矩阵隔层相加,注意F(X)和X形状要相同,所谓相加是特征矩阵相同位置上的数字进行相加。
1)隔层相加优点
通过将特征图的数值隔层相加,可以让信息从一层直接传递到另一层,而不受梯度消失的影响。这样可以使得网络更容易进行优化和训练,减少了优化问题的复杂性。同时,残差结构还能够有效地学习到残差的信息,即网络输出与输入之间的差异,从而更好地捕捉到数据中的细微变化和特征。
通过隔层相加的方式,残差结构实现了"跳跃连接",使得信息可以直接从较浅的层次直达较深的层次,消除了信息的丢失和模糊化。这样可以提高网络的表达能力,更好地捕捉到输入数据的变化特征,提高了网络的性能和准确率。
2)隔层相加数值增大问题
在残差结构中,特征图的数值隔层相加是在两个或多个层的特征图上进行的。这些特征图经过卷积、激活函数等操作后,通常会引入缩放因子(scale factor)或者使用卷积核尺寸为1的卷积层进行调整,以确保两个特征图的通道数相同。
此外,残差结构中也会使用批归一化(Batch Normalization, BN)层来进一步调整和稳定特征图的数值。BN层通过对每个特征图的通道进行归一化,将其数值范围限制在较小的范围内,有助于避免数值的过大或过小。BN层还引入了可学习的参数,可以根据数据的分布调整特征图的均值和方差,从而进一步提升网络的性能和收敛速度。
5、18层结构以外的结构
除了上述的18层残差网络结构以外,还有34层、50层、101层、152层,一共5种残差网络结构,每种结构及其对应的权重参数个数也在上图表示为FLOPs
二、BN层
1、关于BN层
批归一化(Batch Normalization, BN)层在深度学习中被广泛应用,其主要作用是对神经网络的输入进行归一化,以加速网络的训练并提高模型的鲁棒性和泛化能力。
2、主要作用
1)加速网络收敛
标准化输入可以使得各个特征之间的尺度统一,避免不同特征的数值范围差异过大,从而加速网络的收敛。
2)减少梯度问题
通过将输入进行标准化,可以减少梯度的变化范围,从而缓解梯度消失和梯度爆炸问题,有助于网络的训练。
3)增强模型的泛化能力
BN层引入了可学习的参数,可以在训练过程中自适应地调整特征的均值和方差,使得模型具有更好的鲁棒性和泛化能力。
4)正则化效果
BN层在一定程度上具有正则化的效果,可以减少模型的过拟合现象。
3、过程
如上图所示,对每个传入的图片进行归一化后,将其传入卷积神经层进行处理后得到特征图,然后再对这个特征图进行归一化处理,处理完再次进入卷积层处理,输出的特征图再次进行归一化。
归一化的目的是是所有的特征图的值满足均值为0,方差为1的分布规律,来提高模型效率和准确性,同时也防止了模型的过拟合。
相关文章:

《深度学习》ResNet残差网络、BN批处理层 结构、原理详解
目录 一、关于ResNet 1、什么是ResNet 2、传统卷积神经网络存在的问题 1)梯度消失和梯度爆炸问题 2)训练困难 3)特征表示能力受限 4)模型复杂度和计算负担 3、如何解决 1)解决梯度问题 BN层重要步骤: 2…...
javadoc:jdk 9通过javadoc API读取java源码中的注释信息(comment)
几年前写过一博客:《java:通过javadoc API读取java源码中的注释信息(comment)》,简单介绍了通过javadoc API读取源码注释的流程。 那时还是用JDK 1.8。但是在JDK9环境下JDK 1.8的那一套API就不能用了。JDK 9提供了一套新的javadoc API实现注释代码的读取…...
nordic使用FDS保存数据需要注意的地方
FDS使用常见问题 大家在使用FDS模块时,经常碰到的问题有如下几种: FDS不支持掉电保护,所以在Flash操作过程中出现了掉电,FDS行为将未知OTA的时候,新固件的FDS page数目一定要等于老固件的FDS page数,否则将出现不可知行为fds_record_write或者fds_record_update后,强烈…...
docker-compose集群(单机多节点)环境搭建与使用
此方案已经经过生产环境验证,可放心大胆使用如果喜欢,欢迎点赞👍收藏❤️评论噢~ 略去 Docker 和 Docker Compose 安装部分,如果有需要的同学,可以评论,创建 docker-compose.yml 文件并配置 Nacos 集群和 M…...
从静态多态、动态多态到虚函数表、虚函数指针
多态(Polymorphism)是面向对象编程中的一个重要概念,它允许不同类的对象对同一消息做出不同的响应。多态性使得可以使用统一的接口来操作不同类的对象,从而提高了代码的灵活性和可扩展性。 一、多态的表现形式 1. 静态多态&…...

用 Pygame 实现一个乒乓球游戏
用 Pygame 实现一个乒乓球游戏 伸手需要一瞬间,牵手却要很多年,无论你遇见谁,他都是你生命该出现的人,绝非偶然。若无相欠,怎会相见。 引言 在这篇文章中,我将带领大家使用 Pygame 库开发一个简单的乒乓球…...

基于大数据可视化的化妆品推荐及数据分析系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...

Java项目实战II基于Java+Spring Boot+MySQL的汽车销售网站(文档+源码+数据库)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在数字化时…...
数学基础 -- 微积分最优化之一个最简单的例子
微积分中的一个最简单的最优化例子 问题描述 假设你有一条长度为 10 米的栅栏,你需要围成一个矩形的鸡舍,使得围成的面积最大。求这个矩形的长和宽应是多少,以使得面积最大。 步骤 设定变量: 设矩形的长为 x x x 米࿰…...

kubernetes K8S 结合 Istio 实现流量治理
目录 1.Istio介绍? 1.1 Istio是什么? 1.2 Istio流量管理 1.2.1 熔断 1.2.2 超时 1.2.3 重试 2.Istio架构 3.istio组件详解 3.1 Pilot 3.2 Envoy 3.3 Citadel 3.4 Galley 3.5 Ingressgateway 3.5 egressgateway 扩展、k8s1.23及1.23以下版…...

Selenium with Python学习笔记整理(网课+网站持续更新)
本篇是根据学习网站和网课结合自己做的学习笔记,后续会一边学习一边补齐和整理笔记 非常推荐白月黑羽的学习网站: 白月黑羽 (byhy.net) https://selenium-python.readthedocs.io/getting-started.html#simple-usage WEB UI自动化环境配置 (推荐靠谱…...

1.随机事件与概率
第一章 随机时间与概率 1. 随机事件及其运算 1.1 随机现象 确定性现象:只有一个结果的现象 确定性现象:结果不止一个,且哪一个结果出现,人们事先并不知道 1.2 样本空间 样本空间:随机现象的一切可能基本…...
Redis结合Caffeine实现二级缓存:提高应用程序性能
本文将详细介绍如何使用CacheFrontend和Caffeine来实现二级缓存。 1. 简介 CacheFrontend: 是一种用于缓存的前端组件或服务。通俗的讲:该接口可以实现本地缓存与redis自动同步,如果本地缓存(JVM级)有数据,则直接从本…...
【LLM】Ollama:本地大模型 WebAPI 调用
Ollama 快速部署 安装 Docker:从 Docker 官网 下载并安装。 部署 Ollama: 使用以下命令进行部署: docker run -d -p 11434:11434 --name ollama --restart always ollama/ollama:latest进入容器并下载 qwen2.5:0.5b 模型: 进入 O…...
SpringBoot集成阿里easyexcel(二)Excel监听以及常用工具类
EasyExcel中非常重要的AnalysisEventListener类使用,继承该类并重写invoke、doAfterAllAnalysed,必要时重写onException方法。 Listener 中方法的执行顺序 首先先执行 invokeHeadMap() 读取表头,每一行都读完后,执行 invoke()方法…...
使用ELK Stack进行日志管理和分析:从入门到精通
在现代IT运维中,日志管理和分析是确保系统稳定性和性能的关键环节。ELK Stack(Elasticsearch, Logstash, Kibana)是一个强大的开源工具集,广泛用于日志收集、存储、分析和可视化。本文将详细介绍如何使用ELK Stack进行日志管理和分…...

前端框架对比与选择
🤖 作者简介:水煮白菜王 ,一位资深前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧✍。 感谢支持💕💕💕 目…...

Springboot jPA+thymeleaf实现增删改查
项目结构 pom文件 配置相关依赖: 2.thymeleaf有点类似于jstlel th:href"{url}表示这是一个链接 th:each"user : ${users}"相当于foreach,对user进行循环遍历 th:if进行if条件判断 {变量} 与 ${变量}的区别: 4.配置好application.ym…...

【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7396959.html?templateId1718516 问题现象 yashandb执行带oracle dblink表的sql性能差: 同样的语句,同样的数据,oracle通过dblink访问远端oracle执行…...

效率工具推荐 | 高效管理客服中心知识库
人工智能AI的广泛应用,令AI知识库管理已成为优化客服中心运营的核心策略之一。一个高效、易用且持续更新的知识库不仅能显著提升客服代表的工作效率,还能极大提升客户的服务体验。而高效效率工具如HelpLook,能够轻松搭建AI客服帮助中心&#…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...