深度学习与神经网络的挑战及ResNet的解决方案

深度学习领域在过去十年中取得了显著的进步,尤其是在图像识别技术方面。研究人员不断开发新的模型以提高现有系统的准确性。然而,在构建神经网络时,面临一些重大挑战,其中包括如何构建更深层的网络。理论上,构建更深层的网络听起来很酷,但实际上,它会遇到一个称为退化的问题,即随着更深层的构建,训练误差增加,这严重影响了准确性。另一个问题是梯度消失,这发生在反向传播步骤中,正如所知,在神经网络中,需要在计算损失函数后调整权重。

在反向传播过程中,遵循链式法则,每一层的导数都会沿着网络向下乘以。当使用很多深层,并且有像sigmoid这样的隐藏层时,可能有导数被缩放到每层低于0.25。因此,当n层导数相乘时,梯度会随着传播到初始层而呈指数级下降。正如前面提到的,当深入网络时,得到的块学到了很多东西,当添加更深层的块时,它往往只是早期块的恒等映射,也就是说,它与早期块完全相同。退化结果表明,学习这种恒等映射存在困难。为了解决这些问题,遇到了ResNet论文。这些是堆叠在一起的残差网络,允许构建深层网络而不会发生退化或梯度消失。

现在让了解一下ResNet的工作原理。在这里,有所谓的残差块。许多残差块堆叠在一起形成ResNet。有“跳过连接”,这是ResNet的主要部分。下面的图像由原始论文的提供,表示残差网络的工作原理。这个想法是将一层的输入直接连接到跳过几个连接后的一层的输出。可以看到,x是层的输入,直接将其连接到跳过恒等连接后的层,如果认为恒等连接的输出是F(x)。然后可以说输出将是F(x) + x。

可能会出现一个关于维度的问题。有时x和F(x)的维度可能会有所不同,这需要解决。在这种情况下,可以采取两种方法。一种涉及用权重填充输入x,使其现在等于输出的值。第二种方法包括使用从x到F(x)的附加卷积层。通过这种方式,可以将权重降低到输出的相同维度。当按照第一种方法进行时,方程变为F(x) + w1.x。这里w1是添加的额外参数,以便可以将维度提高到激活函数的输出。ResNet中的跳过连接通过允许梯度通过这个替代的快捷路径流动来解决深层神经网络中的梯度消失问题。

它还通过允许模型学习恒等函数来帮助连接,这确保了更高层至少和更低层一样好,而不是更糟。完整的理念是使F(x) = 0。这样,最终得到Y = X作为结果。这意味着从恒等块的激活函数输出的值与跳过连接的输入值相同。

现在让比较一下ResNet和普通网络。根据深度学习课程,Andrew NG告诉,ResNet的一个主要好处是它们在训练误差方面的表现。如果看普通网络,随着层数的增加,训练误差会减少,但经过几层后,误差又开始增加。这就是为什么部署像早停这样的方法。但在ResNet中,随着层数的增加,误差只会减少,不会增加。ResNet论文的还为提供了18层和34层普通网络和ResNet的工作比较,可以看到ResNet给误差比普通网络要小。

现在,让了解一下ResNet模型的架构。在这里比较了34层普通和ResNet模型。正如所看到的,最初,图像通过一个7 * 7的滤波器,步长为2,有64个通道。可以想象,如果有一张300 * 300 * 64的图像,那么在第一次操作后,它将被改变为150 * 150 * 64,应用公式后,输入:n X n,填充:p,滤波器大小:f X f,输出:((n+2p-f)/s+1) X ((n+2p-f)/s+1)。接下来,执行一个3 * 3的最大池化,步长为2,最终得到75 * 75 * 64作为输出池化层。然后可以看到有一个3 * 3的滤波器,有64个通道,作为卷积操作被执行两次,但这两个层是跳过连接,因为它们是一个残差块。同样的情况再次发生两次,使用跳过连接来形成残差块。现在,可以看到有128而不是64,不能直接将输入传递到128层的激活函数输出,因为维度不匹配。在这种情况下,正如之前讨论的,应用卷积操作或填充权重以使维度相等。在其他情况下,有一个恒等块,连接直接从输入到输出。这是按照架构进行的,最后,有一个平均池化操作,特征被提取出来。如果想在CIFAR-10数据集上执行此操作,必须移除最后一层,应用dropout,然后添加一个线性层以获得10个特征的概率。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485