当前位置: 首页 > article >正文

《深度学习》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)梯度消失和梯度爆炸问题

                当网络层数较深时,梯度会逐渐变小变大,导致训练过程变得困难。这是由于反向传播中的链式法则,使得梯度在每一层传递时逐渐衰减或放大。(可参考传声游戏)

                • 梯度消失:指在神经网络的反向传播过程中,梯度逐渐变小并趋近于零的现象。当梯度接近于零时,权重更新的幅度变得非常小,导致网络参数更新缓慢甚至停止更新,从而影响网络的训练效果。通常发生在使用一些特定的激活函数和深层神经网络中。当深层网络的激活函数是SigmoidTanh等饱和函数时,这些函数的导数在输入较大或较小的情况下接近于零,导致梯度逐渐缩小。随着反向传播的进行,梯度会传递到浅层网络,导致浅层网络的参数更新缓慢,最终影响整个网络的训练效果。

                • 梯度爆炸:指在神经网络的训练过程中,梯度增长得非常快,导致梯度值变得非常大甚至无限大的现象。当梯度值变得非常大时,权重的更新幅度也会变得非常大,导致网络参数发生剧烈的变化,进而影响网络的稳定性和训练效果。梯度爆炸通常发生在使用一些特定的激活函数和深层神经网络中。当深层网络的激活函数是非线性函数时,特别是使用在深层堆叠的神经网络中时,梯度可能会无限制地增大。这是因为在反向传播过程中,梯度会在每个隐藏层传递并相乘,导致梯度指数级地增长。

        上图表示即为当网路是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的分布规律,来提高模型效率和准确性,同时也防止了模型的过拟合。


http://www.kler.cn/a/320790.html

相关文章:

  • PCB+SMT线上报价系统+PCB生产ERP系统自动化拼板模块升级
  • 后台管理系统(开箱即用)
  • AI大模型如何重塑软件开发流程:智能化与自动化的新时代
  • Rewar Model的输出(不包含训练)
  • 【操作系统不挂科】<Linux进程概念(4)>选择题(带答案与解析)
  • .netcore + postgis 保存地图围栏数据
  • JavaScript优化性能的几个方法和技巧
  • 人工智能-大语言模型-微调技术-LoRA及背后原理简介
  • HarmonyOS鸿蒙开发实战(5.0)自定义安全键盘场景实践
  • C++面向对象基础
  • 学习CubeIDE——外设中断开发
  • C++中的typeid使用方法
  • Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版
  • c++:set和map
  • 脉冲式投币器与售货机主板RS232连接WF-700B适配器介绍
  • 程序编译的四个阶段
  • python 异步读取文件,速度变快了吗
  • Linux Centos7达梦8数据库安装说明(附安装包,超详细图文!)收藏这一篇就够了!
  • 基于quill2.0的富文本编辑器,Fluent Editor,支持表格,图片,表情等
  • 中间添加一条可以拖拽的分界线,来动态调整两个模块的宽度
  • 如何在调试状态下部署局域网网站
  • Qt C++设计模式->外观模式
  • 牛骨髓油茶,美味不可错过
  • 华为机考练习(golang)
  • 算法.图论-并查集
  • C++:string类写时拷贝|引用计数