深度学习之经典神经网络框架详解(六):ResNet-v2残差神经网络

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Superstar02/article/details/101729233

论文 Deep Residual Learning for Image Recognition

简述:

本文分析了残差块后面的传播形式,表明当使用恒等映射作为skip connections(跳跃连接)和after-addition activation(可以理解为相加在激活之后)时,正向和反向信号可以直接从一个块传播到任何其他块。并提出了一种新的残差单元,使网络训练更加简单且具有很强的泛化能力。

注: 本文经过一些列的讨论,得出性能最好的残差块,个人认为不能只记结论,作者分析的思路也是很有必要学习的,所以写的相对详细。

ResNet回顾or相关工作:

在ResNet-V1的论文中,残差块可由下面公式表示:
在这里插入图片描述
其中xl和xl+1分别是第l层的输入和输出,h(xl)=xl是恒等映射,F是残差函数,f是ReLU激活函数。作者推导证明:如果h(xl)和f(xl)都是恒等映射的话,无论前向传播or反向传播,信号能直接从一个残差块传递到任意一个残差块。
在这里插入图片描述
作者将将激活函数(ReLU和BN)视为权重层的预激活(上图b),而不是传统(ResNet-V1)中后激活(上图a)。通过左图可以发现,现在提出的结构无论TestError(实线)or Training Loss(虚线)都表现出了更好地性能。传播速度快且也能够防止梯度消失。

ResNet分析:

对于上面的公式(1)(2),h(xl)=xl是恒等映射,假设激活函数f也是恒等映射,那么将(2)代入(1)可得:
在这里插入图片描述
递归可得:
在这里插入图片描述
由(4)可以看出:a).任何深层的残差单元L,都可以由“浅层的l到L中间的残差和”表示。b).任意的深层L,都是前面残差项之和。而在ResNet-v1中,可看成是矩阵相乘。
对损失函数(ε)求导:
在这里插入图片描述
可知:∂ε/(∂x_L )不涉及任何权重层,确保信息能被直接的传播回任何较浅的单位l层,(1+∂/(∂x_l ) ∑_(i=l)^(L-1)▒〖F(x_i,W_i)〗)通过权重传播,后面作和不会始终为-1,即无论权重任意小,梯度也不会消失。
随后作者假设h(x)不是恒等映射,在恒等变换的基础上成了一个λ,则XL:
在这里插入图片描述
求导得:
在这里插入图片描述
可以看出,加法项引入了∏_(i=l)^(L-1)▒λ_i ,当λ>1,会出现梯度爆炸,当λ<1可能出现梯度消失。这使得系统很难优化。

Shortcut的几种结构&实验:

在这里插入图片描述
在这里插入图片描述
由上面结果可以看出,对于error(%),原残差结构(恒等映射)表现最好,其他残差网络结构效果较差,甚至不收敛。在使用Exclusive gating,偏见bg的初始化对网络的性能影响很大,在bg=-6的时候错误率最低8.7。但是对于Shortcut-only gating和1×1 convolutional shortcut,其残差块结构的网络应该是包含了原始网络(original)的解空间的,即两者的表示能力要比original网络强,但结果精度却不高,更说明了其模型难以优化。在看看作者提供的训练曲线,如下:
在这里插入图片描述
曲线实线是test error,虚线是training loss,可以看出,上面四种网络的训练误差都比原始的要高,图(a)说明在缩小捷径信号时(Constant scaling),优化存在困难。其余三个网络的误差率较高,原因也是由于较高的training loss导致的。

激活函数使用对网络的影响:

几个残差块示意图(相同组件,顺序不同):
在这里插入图片描述
上图中(a)为原始的网络结构,接下来分析让激活函数成为一个恒等映射,这需要重新排列激活函数(ReLU和/或BN)。作者同时给出了各结构的实验结果:
在这里插入图片描述

  1. BN after addition:图(b),效果比基准差,其改变了通过捷径的信号,阻碍了信息的传播。并且看下图可知,模型的收敛速度更慢。
    在这里插入图片描述

  2. ReLU before addition:图(c),ReLU的值域为[0,+∞],将导致转换F的非负输出,而我们希望残差函数输出为[-∞,+∞],即该模型表达能力受抑制。上表实验结果也比基准差。

  3. ReLU-only pre-activation or full pre-activation:图(d)or图(e),将激活函数放在最终的输出之前,即在获取输入后先对输入进行激活,然后再将激活值归一化,再与权重层相乘,最后输出。可以看出d和e区别在于BN层的位置,有上表(Table 2)可知,只将ReLU放在权重层之前的结构与原始的网络表现类似;而将BN也放在权重层之前的结构的性能则得到了大幅提高。

先激活的模型性能更好的原因:

  1. 先激活的网络中f是恒等变换,信号可以直接在任意两个单元之间传播。,这使得模型优化更加容易(Ease of optimization)。在这里插入图片描述
    可以看出来,原设计,在训练开始时,训练误差降低得很慢;先激活网络非常快地降低了训练损失它达到了最小的损失,优化是成功的。
  2. BN作为预激活增强了模型的正则化,且先激活输入网络,能够减少网络过拟合(Reducing overfitting)。
    预激活算法收敛时训练损失略高,但测试误差较小。在原始残差单元中(图(a)),BN虽然对信号进行了归一化,但这很快被添加到快捷方式中,因此合并后的信号没有归一化。然后使用这个未归一化的信号作为下一个权值层的输入。相反,在预激活版本中,所有权重层的输入都已标准化。

总结:

本文研究了深剩余网络连接机制背后的传播公式。恒等映射和其背后加激活是使信息传播顺畅的必要条件,且1000层的深层网络,可以很容易地训练和提高精度。

猜你喜欢

转载自blog.csdn.net/Superstar02/article/details/101729233