计算机系统应用教程网站

网站首页 > 技术文章 正文

神经网络-ResNet

btikc 2024-09-09 01:41:51 技术文章 16 ℃ 0 评论

在此之前的网络,随着网络结构的加深,很难得到有效的训练。ResNet-残差网络结构的出现使得网络更加容易学到残差部分,从而提高了网络的学习能力和准确性。


Introduction

深度卷积神经网络是一种可以自动识别图像的人工智能技术。过去几年中,这种技术在图像分类方面取得了很多进展。这种技术设计了一个比较深的网络,可以逐层提取图像中的特征,并以端到端的方式进行分类。然而,设计更深的卷积神经网络并不一定会导致更好的分类结果。实际上,当网络变得太深时,性能会饱和并急剧下降。这个问题不是由于模型过拟合导致的,而是由于优化算法的限制和网络压缩带来的挑战引起的。解决这个问题需要更好的网络设计和优化方法。

下图是论文中作者针对上述观点验证的结果,更深的网路层56反而比20层的网络有更高的错误率。

如何通俗的理解上面的问题?

假设你是一名学生,正在学习数学。你有两本教材可供选择,一本是较薄的简化版教材,另一本是较厚的详细版教材。

在训练过程中,你尝试使用这两本教材来学习数学知识。你首先使用简化版教材进行学习,并取得了不错的成绩。接着,你决定尝试一下详细版教材,希望通过更深入的学习能够取得更好的成绩。

然而,令人惊讶的是,当你使用详细版教材时,你的成绩却下降了。这并不是因为详细版教材的内容更难理解,而是因为它的细节和深度多了很多,导致你更容易出错或者迷失方向。

换句话说,虽然详细版教材提供了更多的知识和深入的讲解,理论上应该能帮助你获得更好的成绩,但实际操作中却很难通过当前的学习方法找到比简化版教材更好的学习策略。

这个例子中,简化版教材就相当于较浅的网络架构,而详细版教材则相当于更深的网络架构。"降级"现象即是指在当前的训练过程中,更深的网络架构无法得到与较浅网络架构相当甚至更好的训练成果。这说明我们需要更优秀的优化算法来解决这个问题。


为了解决上面的问题引入了ResNet。该框架的思想是,不直接让每个堆叠的层去拟合最终的底层映射,而是定义一个“残差映射”,让每个层去拟合这个残差部分。具体地,底层映射可以表示为H(x),然后将其与输入x做差得到一个残差F(x) = H(x) - x,同时定义中间的层去学习F(x),而不是直接学习H(x)。最后,将中间层学到的F(x)和输入x相加得到输出,即F(x)+x,从而得到最终的底层映射H(x)。如下图所示:

作者认为,这种做法比在堆叠的非线性层中直接拟合底层映射更容易优化。因为如果原始的映射是一个恒等映射(即输入和输出相等),那么通过学习F(x)将其拟合为0会更加容易,而无需使用多个非线性变换层来拟合恒等映射。当然,实际上底层映射并不总是恒等映射,但残差学习框架使得模型更容易解决退化问题,同时也可以让模型更快地收敛。


简单来说,深度残差网络的重新表述是为了解决一个问题:当我们在神经网络中添加更多的层时,理论上模型的性能应该至少与更浅的模型相当,但实际中却发现性能会下降,这被称为“degradation problem降解问题”。研究者发现,在多个非线性层中逼近恒等映射(即输出与输入完全相同)时,训练变得更加困难

为了克服这个问题,重新表述提出了一种解决方案,即通过学习残差函数来逼近目标函数。所谓残差函数,就是输入与目标输出之间的差异。通过将输入与残差函数相加,得到最终的输出。这种方式使得网络更容易学习残差函数,因为残差函数相对于直接学习目标函数来说,通常具有较小的响应

换句话说,深度残差网络的重新表述改变了神经网络的结构,使其更专注于学习输入与输出之间的差异,而不是直接逼近目标函数。这种方法可以提高网络的训练效果,避免降解问题,并且对于优化求解器来说更容易找到合适的权重参数。


从上图我们可知,一个残差结构,是由残差映射函数(Residual Mapping Function) 和 快捷连接(Shortcut Connection)。

残差映射函数(Residual Mapping Function)是指对输入进行变换,将其映射为输出的函数。它的作用是学习输入与输出之间的差异,即残差。通常情况下,残差映射函数是由多个层(如全连接层或卷积层)组成的,用于对输入进行非线性变换,及上图的F(x)

捷径连接(Shortcut Connection)是指将输入向量与输出向量进行直接相加的连接方式。快捷连接的作用是将输入信息直接传递到输出,同时与经过残差映射函数得到的结果相加。这样做的目的是让网络自主地选择保留输入的某些特征,而不完全依赖于残差映射函数的学习能力,及上图的x



网络结构

为了验证ResNet网络效果,设计了普通网络和带有RenNet的网络,普通网络是一种基于VGG网络思想的模型结构,它主要由卷积层和全连接层组成。在卷积层中,使用了3×3大小的滤波器,并且遵循两个简单的设计规则:一是对于相同的输出特征图大小,每一层的滤波器数量是一样的;二是如果特征图大小减半,那么滤波器数量就会加倍,这样可以保持每一层的计算复杂度不变。模型通过具有步长为2的卷积层进行降采样操作。最后,模型通过全局平均池化层和一个包含1000个神经元的全连接层,并应用softmax函数进行分类。

需要注意的是,与VGG网络相比,我们的模型使用的滤波器数量更少,计算复杂度也更低。例如,在图中展示的34层模型中,总的计算量仅为VGG-19模型的18%。这种设计可以在保持模型性能的同时,降低模型的复杂度和计算成本。(下图左侧是VGG-19网络结构,中间是基于VGG的34层网络,右侧是有ResNet的网络)

在普通的网络中,每一层的输入都会直接传递给下一层进行处理。但在残差网络中,我们引入了捷径连接来跨越多个层级。如果当前层的输入和输出维度相同,我们可以直接将输入加到输出上,形成恒等映射。这种情况下,捷径连接可以直接跳过当前层,使信息更快速地流动。

当输入和输出维度不同时,我们有两种选择。一种是仍然使用恒等映射,通过在增加的维度上填充零元素来匹配维度。这样做不会增加额外的参数,但可能会造成信息丢失(对于填充的零元素,它们并不包含有意义的特征信息,仅仅是为了匹配维度而引入的。当这些填充的零元素参与后续层的计算时,可能会干扰到其他有效特征的传递,从而对模型的性能产生一定的负面影响)。另一种选择是使用一个1×1的卷积操作,来改变输入的维度以匹配输出的维度。

此外,当特征图的大小不一致时,我们可以通过进行步长为2的操作来处理捷径连接,以确保输出与目标尺寸相匹配。

总之,残差网络通过引入捷径连接来解决深层神经网络中的梯度问题,使得信息更容易流动,并能够更好地训练和优化网络,提高模型性能。


图中的虚线、实线是什么意思?

虚线和实线是指在残差网络中捷径连接的不同形式。

当输入和输出维度相同时,使用恒等捷径连接来直接将输入加到输出上。这种情况下,捷径连接的线是实线,表示直接跳过当前层。

当输入和输出维度不同时,就需要进行维度匹配。这时可以选择使用零填充或者1×1卷积来进行投影映射。如果选择使用零填充,那么捷径连接的线就是虚线,表示当前层没有直接参与特征提取,只是作为传递信息的一条路径。如果选择使用1×1卷积进行投影处理,那么捷径连接的线依然是实线,表示特征图经过卷积操作后再跨越到下一层。

在实际应用中,根据实际情况选择使用哪种捷径连接方式,以使得网络具有更好的性能。


实验

下图是ResNet网络18/34/50/101/152网络结构的参数展示。


从实验中可以得知,对于普通网络更深的网络34error 反而 高于网络18层;而加入ResNet网络的34层 error < 18层网络。

具体错误率如下:


普通网络为什么更多的层数反而error错误率更高?

作者发现,更深的网络比较浅的网络具有更高的验证错误率,也就是说更难训练。但是,作者认为这种优化困难不太可能是由于梯度消失所引起的,因为他们使用了一种叫做批量标准化(BN)的技术来解决这个问题,并且前向和后向信号都没有消失。作者推测深层网络可能收敛速度指数级下降,这影响了训练误差的减少。未来,作者将会进一步研究这种优化困难的原因。


下图是网络在各组数据中的对比,可以发现ResNet均有较好表现。


  • 两种残差结构

在深度残差网络中,通过引入捷径连接可以提高网络的训练效果。这里介绍了两种类型的捷径连接:恒等映射(Identity)和投影映射(Projection)

恒等映射是指捷径连接将输入直接传递到输出,不对输入进行任何修改。它的作用是解决梯度消失或梯度爆炸的问题,使得信息可以更快地传播到后续层。

投影映射是指通过使用卷积操作来改变输入的维度或形状。它的作用是在输入和输出之间建立一个映射,使它们具有相同的维度,以便可以更好地进行残差学习。

研究发现,在增加维度时,使用零填充的恒等捷径或者投影捷径都能比普通的网络表现更好。其中,使用投影捷径稍微优于使用零填充的恒等捷径。但是,由于投影捷径引入了额外的参数,所以在实际应用中会增加一些内存、时间复杂性和模型大小的开销。因此,为了减少这些开销,恒等捷径在我们的研究中被认为是非常重要的,并且不再使用全部都是投影捷径的方式。

简而言之,恒等捷径和投影捷径都可以帮助网络更好地进行训练,但恒等捷径在保持模型简洁性和高效性方面更为重要。


针对ResNet,作者设计了两种结构,第一种如下左面ResNet34所示,使用的是两层的3*3 conv;右侧是ResNet50/101/152 变成了三层分别是1×1、3×3和1×1的卷积层,其中1×1的层负责降低和增加(恢复)维度,使得3×3的层具有较小的输入/输出维度,两种设计具有相似的时间复杂度,但第二种计算量要明显少于第一种。


  • 更多实验验证

网络层增加,error不会增加验证

作者随后在CIFAR-10数据集中,尝试了多种深层网络结构,证明层数增加一定之后,error反而会增高,并不是偶发现象;之后用ResNet在相同多种层次结构下,error不会出现这种现象,结果图如下。


残差函数的响应强度较小验证

这个分析主要是对神经网络中每一层的输出进行了研究。图中的标准差显示了每个层输出的变化程度。这些输出是在经过批量归一化(BN)处理后,应用非线性函数(ReLU/加法)之前的结果。对于ResNet来说,这个分析揭示了残差函数的响应强度。图中显示,相比于普通的神经网络,ResNet的响应通常较小。这个结果支持了我们设想的基本原理,即在ResNet中,残差函数的值可能更接近于零,而非残差函数的值则不一定如此。同时我们也注意到,随着ResNet层数的增加,响应的幅度会变小。这可以从图中ResNet-20、56和110的比较中看出。当网络层数增加时,ResNet的每个单独层会对信号进行更少的改变。

残差函数的响应强度较小就是好么?

在研究中,残差函数的响应强度较小是指其输出的变化较小。这里的"较小"是相对于普通网络来说的。较小的响应强度可以表示残差函数更接近于零,即残差块的主要功能是将信号通过恒等映射直接传递给下一层,而不进行大幅度的变换。较小的响应强度可以带来以下几个好处:

减少梯度消失问题:较小的响应强度使得传播到较深层的梯度能够更容易地保持稳定,减少了梯度消失现象。

方便网络优化:较小的响应强度使得网络更易于优化,因为残差函数的作用相对简单,更容易找到合适的参数进行训练。

提高泛化性能:较小的响应强度可以减少过拟合的风险,使得网络更具有泛化能力。

当然,并不是说较小的响应强度总是好的,有时候较大的响应强度也可以带来一些好处。但在ResNet中,较小的响应强度是为了实现残差学习的主要目标之一。


作者更深网络探索

探索超过1000层的网络。我们尝试构建一个非常深层的模型,超过1000层。并按照上述描述进行训练。作者的方法在优化过程中没有遇到困难,它的测试误差仍然相当不错(7.93%,表6)。

然而,对于这种非常深层的模型仍存在一些问题。尽管训练误差相似,但这个包含1202层的网络的测试结果比作者的110层网络要差。我们认为这是由于过拟合造成的。对于这个小数据集来说,1202层的网络可能过于庞大(19.4M)。为了获得最佳结果,在该数据集上应用了强大的正则化方法,如maxout 或dropout 。在本文中,作者没有使用maxout/dropout,只是通过设计中的深且狭窄的结构施加了简单的正则化,而不会分散对优化困难的关注。但是,结合更强的正则化方法可能会改善结果,这是作者将来要研究的内容。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表