Py学习  »  机器学习算法

详解深度学习中的神器:残差神经网络(ResNet)

新机器视觉 • 6 月前 • 170 次点击  


ResNet网络是在2015年由微软实验室中的何凯明等几位大神在《Deep Residual Learning for Image Recognition》中提出;ResNet是一种深度卷积神经网络结构,在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)中取得了冠军(分类、目标检测、图像分割)。

它利用 shortcut 短路连接,解决了深度网络中模型退化的问题。相比普通网络每两层/三层之间增加了短路机制,通过残差学习使深层的网络发挥出作用。

网络中的亮点:

  1. 超深的网络结构(超过1000层)。
  2. 提出residual(残差结构)模块。
  3. 使用Batch Normalization加速训练(丢弃dropout)


为什么采用residual?

在ResNet提出之前,所有的神经网络都是通过卷积层和池化层的叠加组成的。人们认为卷积层和池化层的层数越多,获取到的图片特征信息越全,学习效果也就越好。但是在实际的试验中发现,随着卷积层和池化层的叠加,不但没有出现学习效果越来越好的情况,反而出现两个问题:

1.梯度消失和梯度爆炸

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

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

2.退化问题

随着层数的增加,预测效果反而越来越差。如下图所示

图片

解决方法:

为了解决梯度消失或梯度爆炸问题,ResNet论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。

为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为**残差网络 (ResNets)**。

ResNet论文提出了 residual结构(残差结构)来减轻退化问题,下图是使用residual结构的卷积网络,可以看到随着网络的不断加深,效果并没有变差,而是变的更好了。(虚线是train error,实线是test error)

图片

ResNet模型结构:

所以ResNet要解决的是深度神经网络的”退化(degradation)”问题,即使用浅层直接堆叠成深层网络,不仅难以利用深层网络强大的特征提取能力,而且准确率会下降,这个退化不是由于过拟合引起的。

图片残差块由多个级联的卷积层和一个shortcut connections组成,将二者的输出值累加后,通过ReLU激活层得到残差块的输出。多个残差块可以串联起来,从而实现更深的网络。

残差块有两种设计方式,如下所示:

左图针对较浅的网络,如ResNet-18/34;

右图针对较深的网络,又称为”bottleneck” building block,

如ResNet-50/101/152,使用此方式的目的就是为了降低参数数目。

图片

论文中给出了5种不同层数的ResNet,如下所示:

ResNet-18/34是进行两层卷积的残差

ResNet-50/101/152是进行三层卷积的残差,分别对应于上图中的残差块的两种设计方式。

ResNet-18/34对应的每个残差块的卷积kernel大小依次是33、33

ResNet-50/101/152对应的每个残差块的卷积kernel大小依次是11、33、1*1。

图片

18、34层等数字是如何计算出来的?

以34层为例,1个卷积(conv1)+3残差块2个卷积(conv2_x)+4个残差块2个卷积(conv3_x)+6个残差块2个卷积(conv4_x)+3个残差块2个卷积(conv5_x)+最后的1个全连接层=34。这里的层仅指卷积层和全连接层,其它类型的层并没有计算在内。

在何恺明等的论文中,给出了ResNet-34的架构图:论文中给出了层数为34的ResNet网络结构,如下所示:左侧为VGG-19网络结构;中间为34层的普通网络结构;在此基础上,在层与层之间加入shortcut connections,就将普通网络转换为对应的ResNet网络,即右侧网络结构。与上表中ResNet-34一致。

图片

ResNet优缺点

1.优点:

(1)解决梯度消失和模型退化问题: ResNet通过引入残差学习和跳跃连接的概念,有效地解决了深层神经网络中的梯度消失和模型退化问题。这使得ResNet可以构建非常深的网络,具有更好的性能和学习能力。

(2)更容易训练:由于梯度可以通过跳跃连接直接传播,ResNet模型更容易训练。它允许使用更大的学习率,加快了收敛速度,并降低了过拟合的风险。

(3)强大的特征表示能力:ResNet的残差块允许网络学习残差变化,从而能够更好地捕捉和表示输入和输出之间的关系。这使得ResNet在图像分类、目标检测、语义分割等任务中具有强大的特征提取和表示能力。

(4)网络参数共享:ResNet中的跳跃连接使得前一层的特征可以直接传递给后续层,这种参数共享的机制使得网络更加高效。ResNet相对于其他深层网络模型来说,具有相对较少的参数量,可以更容易地部署在计算资源有限的设备上。

(5)可扩展性:ResNet的模型结构非常灵活和可扩展,可以通过增加残差块的深度和宽度来构建更深、更复杂的网络。这种可扩展性使得ResNet适用于各种计算机视觉任务,并且可以根据实际需求进行调整和扩展。

2.缺点:(1)模型复杂性:由于ResNet模型的深度和复杂性较高,需要较多的计算资源和存储空间。尤其是较深的ResNet模型可能需要更长的训练时间和更高的显存需求,这对于一些资源受限的环境可能不太适用。

(2)训练数据要求:由于ResNet模型的深度,它对大量的训练数据的需求较高。当训练数据集较小或标注有限时,ResNet模型可能容易过拟合,导致性能下降。

(3)参数量较大:相对于一些轻量级的模型,ResNet模型的参数量较大。这导致了在资源受限的环境中,如移动设备或嵌入式系统中的部署变得困难。

(4)特征失真问题:由于ResNet模型中的跳跃连接,残差块中的输入会直接与输出相加。这种操作可能会导致特征的失真,特别是当输入和输出的尺寸不匹配时。为了解决这个问题,需要使用额外的卷积层或池化操作来调整特征的尺寸,增加了网络的复杂性。

(5)对于小规模数据集的泛化能力:ResNet模型在大规模数据集上表现出色,但在小规模数据集上的泛化能力可能会有所下降。这是因为ResNet的深度和复杂性使得模型对训练数据的依赖性增加,从而在小规模数据集上容易过拟合。

来源:网络 
 文章仅做学术分享,如有侵权请联系删除,非常感谢!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/182087