深度神经网络是主要机器学习算法的动力源。这些神经网络是堆叠层的集合(每一层都有一些神经元),它们组合起来执行给定的任务。因此,随着我们将更多层堆叠在一起,即更深或增加模型的深度,我们期待提高性能。但是,这些深度神经网络受到退化问题的困扰。那么神经网络中的退化究竟是什么?如何解决这个问题?这些是残差块破译的一些问题。
在这篇文章中,我们将学习以下一组基本概念(按顺序),这些概念增强了数据科学领域的创新能力。
- 深度神经网络简介
- 深度神经网络中的退化问题
- 残差块(解决问题的方法)
- 身份功能
- 不同类型神经网络中的残差块
- 结论
在开始之前,如果您希望对卷积有更深入的了解(残差块是在考虑卷积神经网络的情况下开发的)。
深度神经网络简介
图 1:用于二元分类的深度神经网络
上图表示由堆叠的 CNN 组成的深度神经网络,用于对输入图像进行二进制分类(是或否)。
因此,让我们将输入视为‘x’,并将输出视为“H(x)”。CNN 操作本质上是线性的,激活函数(比如说 relu)用于学习抽象特征(非线性)。这个网络的全部目的是找到最优化的映射(拟合),即函数
F(x) -> H(x)
现在,如果我们想提高模型性能,堆叠更多层有用吗?理想情况下,它应该提高性能,因为有更多的神经元可用于学习抽象特征。但这并非每次都有效。该网络面临多个问题,第一个是梯度消失/爆炸问题。这个问题可以通过归一化初始化和中间归一化层、权重裁剪等来有效解决。它使模型能够通过反向传播开始收敛于随机梯度下降(或任何其他优化器)。
一旦更深的模型开始收敛(在考虑消失/爆炸梯度之后),我们可能会遇到另一个问题。这是退化。
深度神经网络中的退化问题
那么究竟什么是退化呢?
随着我们增加网络的深度,准确度会达到饱和。也许这些层已经充分了解了我们数据的所有复杂性。但是,我们对准确性并不满意,我们又堆叠了几层。现在,模型开始退化。这是出乎意料的,但这种退化并不是因为过拟合(训练误差增加)。额外的层会导致更高的训练误差。
图 2:训练错误(左)和测试错误(右)。红色是一个更深的网络,具有更高的训练和测试误差。
退化,间接暗示并非所有系统都相似或易于优化。如果浅层网络正在学习特征并且假设获得 90% 的准确度,那么同一模型的深层变体甚至可能获得低于 90% 的准确度。这是因为随着网络深度的增加,优化变得非常困难。
那么,如何解决这个问题呢?
残块(去除退化的方法)
让我们考虑两个网络,网络“A”:浅层网络和网络“B”:网络 A 的更深层对应物。现在,如果不是更好,至少我们希望达到与网络 B 相同的性能。所以,给定网络A,我们将添加恒等映射作为额外的层来构造 B。这种设置应该确保更深的模型 B 不会产生比浅层模型更高的训练误差。但实验表明,这种设置无法找到相对更好或性能相同的解决方案。
这证明模型在优化过程中很难学习恒等映射。
为了解决降级问题,我们有一个称为skip-connections的设置。或者称为快捷连接,它跳过架构中的一些层并将前一层的输出馈送到当前位置,从而有助于优化。
图 3:带有跳跃连接的残差块
在上图中,skip-connection 跳过了两层,直接将输入“x”作为输出。这称为快捷/跳过连接,因为它不涉及任何其他参数,因为我们只是将先前的信息传递给层。
一种称为深度残差学习的框架用于解决退化问题。
在前面的部分中,我们了解了网络学习正确的映射,即 F(x) -> H(x),其中 x 是输入,H(x) 是要拟合的底层映射(预期输出),我们尝试拟合网络并获得类似于 H(x) 的 F(x)。
现在,如果我们在相同的设置中添加一个跳跃连接(它作为一个恒等函数工作),我们有以下等式:
图 4:带有残差块的更新网络方程(作者提供图片)
从上图中,我们有了一个新的 F(x),即一个残差(期望输出和输入之间的差异)。堆叠层尝试学习残差和 ta-da 的映射!这就是为什么它被称为残差块。
原始映射 F(x) -> H(x) 现在是 H(x)-x(残差)。堆叠的非线性层试图拟合残差。
图 5:带有残差块的前向传播(作者提供的图片)
图 5 证明了跳过连接简单地执行了恒等映射。它们的输出被添加到堆叠层的输出中,并且由于某种原因,如果 F(x) 趋于零,由于恒等映射,我们的模型仍然具有非零权重。这消除了退化。
考虑一个神经网络,其中一些堆叠的层正在添加值,而有些则只是零。但是由于残差块,我们能够保留权重并不断优化并获得更好的准确性。在这种极端情况下,将残差 F(x) 推至零比通过一堆非线性层拟合恒等映射更容易。跳过连接是消除更深层神经网络退化的福音。
残差块的整个思想来源于这样一个假设,即如果多个非线性层可以逼近复杂的函数,那么就等价于假设它们也可以逼近残差函数,即H(x)-x。
现在,如果 x 和 F(x) 的维度不同怎么办?
身份映射
快捷连接(恒等映射)既没有引入额外的参数,也没有引入计算复杂度。
y = F(x, {Wi}) + x,其中 x 是恒等映射
但是,如果恒等映射和堆叠层的维度不同,那么我们根本无法添加它们。为了解决这个问题,我们在恒等函数中执行线性投影(使用 CNN)或额外的零条目(称为填充)以匹配维度。我们有以下等式:
y = F(x, {Wi}) + W*x,其中 W 是线性投影
图 6:带有跳跃连接的残差块(左)和带有线性变换跳跃连接的残差块(右)以匹配维度(作者提供图片)
一般来说,残差函数有两层或三层堆叠,也可以有更多层,但会降低残差块的影响。但是,如果 F(x) 只有一个层,它与线性层非常相似,因此:
y = W1*x + x
此设置无助于解决降级问题。所以我们可以假设一个残差块通常有 2-3 个带有跳跃连接的堆叠层。我们可以使用堆叠的残差块来创建更深的神经网络。
最后!!我们已经学习了使更深层次的神经网络能够优化并继续学习的残差块。
不同NN中的残差块
所以,我们只是在一个简单的神经网络上探索了残差块。但是我们如何应用相同的模块来解决计算机视觉任务,准确地说是卷积神经网络或解决使用顺序网络的任务。
Residual Block 无需任何修改即可与卷积神经网络一起使用。在 CNN 中,堆叠层的输出会发生变化,但方法完全相同。
对于顺序网络,我们有一个称为高速公路网络的网络。高速公路网络是与附加门的快捷连接。这些门是数据相关的并且有一些参数,而残差网络中的快捷连接没有任何参数。这些门决定是否传递信息。它充当调制跳过连接来调节信息流。这些网络受到LSTM 类型网络的启发,我们有多个门来忘记、更新和输出信息。
图 7:使用循环跳跃层的 LSTNet 架构,功能类似于带有跳跃连接的残差块
或者,对于顺序网络,让我们以时间序列数据为例。就像残差块一样,我们可以创建一个 skip-RNN 连接来跳过输入中的几个时间步(通过以有序方式跳过一些时间步)。LSTNet 是一种最先进的模型,它为时间序列数据实现了 skip-RNN 连接。可以看一下以加深对 skip-RNN 的理解。
结论
Residual Block 是 ResNet 的基础单元,ResNet 是用于从图像中提取特征的 SOTA 模型。它继续用于解决深度神经网络的退化问题。在当今世界,超过 90% 的架构使用基于跳跃连接的网络来开发特征嵌入。从 ResNet 到 Transformer 再到 BERT,残差块的重要性已被证明非常重要,这将继续成为未来许多创新的一部分。
阅读整篇文章后,您应该能够回答以下问题:
- 什么是神经网络的退化?
- 退化与过度拟合有何不同?
- 如何解决深度网络中的退化问题?
- 什么是跳过连接?
- 什么是残差块?
- 为什么残差块称为残差块?
- 什么是高速公路网?
- 跳过连接和高速公路网络如何相关?
- 我们可以在顺序网络中使用残差块吗?
10.残差块中的身份(函数)是什么?
11.堆叠层的身份和输出的维度总是相同的吗?如果没有,如何处理这种情况?
这些是这篇文章回答的几个问题。
建议的其他学习资料:
- 计算机视觉:卷积基础
- 神经网络中的辍学
- 联邦学习基础
- 非独立同分布/真实世界数据集
- CIFAR10 上的加权平均联邦学习
参考
[1] 何凯明,用于图像识别的深度残差学习https://arxiv.org/pdf/1512.03385.pdf
[2] Prem Oommem,ResNets — 残差块和深度残差学习
[3] Sabyasachi,Residual blocks — ResNet 的构建块
[4] 赖国坤,用深度神经网络建模长短期时间模式,https://arxiv.org/abs/1703.07015