残差神经网络 - ResNet50

上周写论文的时候,引用了一下恺明大神的ResNet,发现引用量已经到了32888了。柠檬精附体了……现在来回味经典~

万能近似定理已经说明了深度神经网络的强大之处,只要有一个足够宽足够神的非线性神经网络,可以以任意精度的近似模拟一个可测映射函数。然而,臭名昭著的梯度消失(爆炸)问题,让我们认识到现实:随着深度的增加,网络表示能力增强的同时,训练的难度也在增加。于是,恺明大神为我们带来了ResNet。

ResNet v1

paper在这里

shortcut

ResNet的贡献之一,就是残差结构:

Res block.png

上图中,假设拟合目标函数为,非线性的叠加层为,一般的做法是,使逼近。而残差结构中,使用的方式,逼近。

在反向传播过程中,求解每层参数的梯度,需要通过链式求导法则由深层到浅层,浅层参数的梯度中包含深层梯度的累乘。而在深度较大的神经网络中,连续的累乘极易导致梯度过小或者过大,造成浅层网络的权重难以正常更新。造成深度网络的学习能力退化的现象。
为了解决网络退化,恺明大神提出了残差结构,这种结构有两个好处:

  • 前向传播时,浅层的特征可以在深层得到重用
    part.png

    而在时,残差结构退化为。这正是Resnet的一个假设点,对于n层的神经网络 PlainNet,在其结构之上增加新的残差结构区块,得到更深的神经网络结构 ResidualNet,最差的结果是退化为原始的n层结构。PlainNet 是 ResidualNet 的一种特殊子结构,训练后,得到的 ResidualNet 不会弱于 PlainNet。
  • 反向传播,深层的梯度可以直接传回浅层
    res-grad.png

    浅层的梯度可以看做两个部分,一部分来源于后置深层梯度的逐层累乘,另一部分沿着shortcut结构中的支路返回,深层的梯度可以通过shortcut直接传回浅层,对浅层进行更新:

    这样的梯度计算方式,可以保证在时,浅层的网络仍然可以通过 shortcut 传回的梯度进行更新。

Identity 和 Bottleneck

含有shortcut的残差结构可以解决在深度增加时的网络退化问题。在进行shortcut连接时,需要保证张量与具有相同的尺寸,然而,我们在进行网络结构设计时,倾向于在浅层网络使用较少的通道,在深层网络,采用更大的通道提取更加抽象的特征。为了在网络中使用不同的通道数,恺明大神带来了两种可选的结构:Identity 和 Bottleneck。

  • Identity


    identity.png

    Identity 用于输入和输出具有相同通道的情况,用于ResNet-34。

  • Bottleneck


    bottleneck.png

    Bottleneck 用于ResNet-50/101/152。

ResNet v2

待定。

你可能感兴趣的:(残差神经网络 - ResNet50)