上周写论文的时候,引用了一下恺明大神的ResNet,发现引用量已经到了32888了。柠檬精附体了……现在来回味经典~
万能近似定理已经说明了深度神经网络的强大之处,只要有一个足够宽足够神的非线性神经网络,可以以任意精度的近似模拟一个可测映射函数。然而,臭名昭著的梯度消失(爆炸)问题,让我们认识到现实:随着深度的增加,网络表示能力增强的同时,训练的难度也在增加。于是,恺明大神为我们带来了ResNet。
ResNet v1
shortcut
ResNet的贡献之一,就是残差结构:
上图中,假设拟合目标函数为,非线性的叠加层为,一般的做法是,使逼近。而残差结构中,使用的方式,逼近。
在反向传播过程中,求解每层参数的梯度,需要通过链式求导法则由深层到浅层,浅层参数的梯度中包含深层梯度的累乘。而在深度较大的神经网络中,连续的累乘极易导致梯度过小或者过大,造成浅层网络的权重难以正常更新。造成深度网络的学习能力退化的现象。
为了解决网络退化,恺明大神提出了残差结构,这种结构有两个好处:
- 前向传播时,浅层的特征可以在深层得到重用
而在时,残差结构退化为。这正是Resnet的一个假设点,对于n层的神经网络 PlainNet,在其结构之上增加新的残差结构区块,得到更深的神经网络结构 ResidualNet,最差的结果是退化为原始的n层结构。PlainNet 是 ResidualNet 的一种特殊子结构,训练后,得到的 ResidualNet 不会弱于 PlainNet。 - 反向传播,深层的梯度可以直接传回浅层
浅层的梯度可以看做两个部分,一部分来源于后置深层梯度的逐层累乘,另一部分沿着shortcut结构中的支路返回,深层的梯度可以通过shortcut直接传回浅层,对浅层进行更新:
这样的梯度计算方式,可以保证在时,浅层的网络仍然可以通过 shortcut 传回的梯度进行更新。
Identity 和 Bottleneck
含有shortcut的残差结构可以解决在深度增加时的网络退化问题。在进行shortcut连接时,需要保证张量与具有相同的尺寸,然而,我们在进行网络结构设计时,倾向于在浅层网络使用较少的通道,在深层网络,采用更大的通道提取更加抽象的特征。为了在网络中使用不同的通道数,恺明大神带来了两种可选的结构:Identity 和 Bottleneck。
-
Identity
Identity 用于输入和输出具有相同通道的情况,用于ResNet-34。
-
Bottleneck
Bottleneck 用于ResNet-50/101/152。
ResNet v2
待定。