前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ResNet那些事~

ResNet那些事~

原创
作者头像
yzh
修改2020-08-10 10:45:56
1.1K0
修改2020-08-10 10:45:56
举报
文章被收录于专栏:YZh学习记录YZh学习记录

resnet 解决的是什么问题?

增加网络的深度可以很好的提高网络的性能,深的网络一般都比浅的的网络效果好,一个比较好的例子就是VGG,该网络就是在AlexNex的基础上通过增加网络深度大幅度提高了网络性能。

但事实真的是这样的吗?不然,通过实验我们发现,当网络层数达到一定的数目以后,网络的性能就会饱和,再增加网络的性能就会开始退化,但是这种退化并不是由过拟合引起的,因为我们发现训练精度和测试精度都在下降,这说明当网络变得很深以后,深度网络就变得难以训练了。?

ResNet的出现其实就是为了解决网络深度变深以后的性能退化问题。?(论文中一直出现的degradation problem)

理论上,若A为浅层网络,B为深层网络,且B的浅层结构完全复制于A,后几层为线性层(identity mapping),那么B网络的效果应该是和A的相同的。但是实验发现,深层网络的训练准确率反而比浅层网络要低,这说明在实际应用时,高层的这种线性关系很难学到,也就是出现了degradation problem(退化)。训练集准确率下降的原因肯定不是过拟合,因为过拟合的话训练集的准确率应该很高。

resnet 为什么这么强?

优化目标转换

退化问题表明多层非线性网络无法逼近恒等映射网络

resnet 中提出的“弯弯的弧线”就是所谓的“shortcut connection”,也是identity mapping(恒等映射),因为这个恒等映射的存在,使得网络随着深度的增加而避免退化现象。

H (x) :desired underlying mapping——期望拟合的特征图

没有shortcut 之前,网络是为了实现恒等映射。H(x) = F(x) F(x) 的目标是拟合H(x)

加入shortcut 之后,网络是学习残差函数。 H(x) = F(x) + x , F(x) = H(x) - x F(x) 的目标是拟合H(x) - x

如果F(x) = 0,则实现恒等映射。

与其让卷积层去近似的估计H(x), 不如去近似的估计 H(x) - x ,F(x) 就是指残差。残差比原始的恒等映射更容易学习。

优化目标转换后,带来什么优势呢?为什么会解决退化问题吗?

深网络在浅网络的基础上只要上面几层做一个等价映射就可以达到浅网络同样的效果,但是为什么不行呢,就是因为我们的算法很难将其训练到那个程度,也就是说没办法将上面几层训练到一个等价映射,以至于深网络最后达到了一个更差的效果。

那么这时,我们把训练目标转变,由原来的H(x)转为H(x)-x,因为这时候就不是把上面几层训练到一个等价映射了,而是将其逼近0,这样训练的难度比训练到一个等价映射应该下降了很多。

也就是说,在一个网络中(假设有5层),如果前面四层已经达到一个最优的函数,那第五层就是没有必要的了,这时我们通过这种跳跃结构,我们的优化目标就从一个等价映射变为逼近0了,逼近其他任何函数都会造成网络退化。通过这种方式就可以解决网络太深难训练的问题。

但是在作者看来,不退化不是目的,而是希望模型有更好的性能。

通过残差学习的重构,如果恒等映射是最优的,求解器可能简单地将多个非线性连接的权重推向零来接近恒等映射。

在实际情况下,恒等映射不太可能是最优的,但是我们的重构可能有助于对问题进行预处理。如果最优函数比零映射更接近于恒等映射,则求解器应该更容易找到关于恒等映射的抖动,而不是将该函数作为新函数来学习。我们通过实验显示学习的残差函数通常有更小的响应,表明恒等映射提供了合理的预处理。

现实情况下F(x)不可能全为 0,那么这些多出来的东西就可以增强网络的表达能力。

随机梯度下降就是用的链式求导法则,我们对H(x)求导,相当于对F(x)+x求导,那么这个梯度值就会在1附近(x的导数是1),相比之前的plain网络,自然收敛更快。

Xl代表浅层输出, XL代表深层输出

Resnet实验结果 1.简单网络的实验

普通网络,深层网络误差大于浅层网络误差。

Resnet,深层网络误差小于浅层网络误差。

作者指出:

这种优化难度不是梯度消失引起的。这些简单网络使用BN训练,这保证了前向传播信号有非零方差。同时还验证了反向传播的梯度,结果显示其符合BN的正常标准。因此既不是前向信号消失也不是反向信号消失

实际上,34层简单网络仍能取得有竞争力的准确率(表3),这表明在某种程度上来说求解器仍工作。我们推测深度简单网络可能有指数级低收敛特性,这影响了训练误差的降低。这种优化困难的原因将来会研究。

resnet 34层 与 resnet 18层相比:

34层有较低的误差,说明退化问题得到解决。

resnet 34层 与 plain 34 层相比:

降低了训练误差。说明残差学习在极深网络中的有效性

resnet 18 层与 plain 18层相比:

resnet 18的收敛速度更快。说明当网络“不过度深”时(18层),目前的SGD求解器仍能在简单网络中找到好的解。在这种情况下,ResNet通过在早期提供更快的收敛简便了优化。

2. 残差块设计

引入1 x 1 卷积层,升维,降维,降低参数量,增加非线性。

3. 网络深度探究

对于1202 层的问题比较开放。认为是过拟合的问题

思考1. 残差网络结构中的虚线,实线问题

实线连接:通道个数一致

虚线连接:通道个数不一致,需要升维。

思考2. 梯度消失与梯度爆炸问题

对于该问题的解决方法是正则化初始化中间的正则化层(Batch Normalization),这样的话可以训练几十层的网络。

思考3. 残差连接

F是求和前网络映射,H是从输入到求和后的网络映射。

比如把5映射到5.1,那么引入残差前是F'(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。

这里的F'和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感

比如s输出从5.1变到5.2,映射F'的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。

明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化。

思考4:启发来源

这一想法也是源于图像处理中的残差向量编码,通过一个reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。

思考5:shortcut 的输入为何是x,而不是x/2或其他?

不要多想,还是原配好。这里涉及到梯度问题,如果都大于1,可能会梯度爆炸,如果都小于1,可能会梯度消失。

思考6:为什么H(x) -x 比 H(x)更容易优化?

1. relu

2. |Wx-0| < |1- Wx|

究竟网络深度对深度学习模型性能有什么影响呢?

1. 随着模型加深,带来哪些好处?

现在的深度学习网络结构的主要模块是卷积,池化,激活,这是一个标准的非线性变换模块。更深的模型,意味着更好的非线性表达能力,可以学习更加复杂的变换,从而可以拟合更加复杂的特征输入。

网络更深,每一层要做的事情也更加简单了。

每一个网络层各司其职,第一层学习到了边缘,第二层学习到了简单的形状,第三层开始学习到了目标的形状,更深的网络层能学习到更加复杂的表达。如果只有一层,那就意味着要学习的变换非常的复杂,这很难做到。

总结两点:

1. 因为CNN能够提取low/mid/high-level的特征,网络的层数越多,意味着能够提取到不同level的特征越丰富。

2. 越深的网络提取的特征越抽象,越具有语义信息,意味着更强的表达能力。

总结为:网络加深带来更强大的表达能力和逐层的特征学习。

一般来说,定量评价模型与深度的关系,可通过直接发和间接法。

直接法就是网络加深,类似与更多的线性区间,线性空间越多,拟合能力越强

间接法就是看实验结果,评价指标,准确率等。

2. 随着模型加深,带来哪些困扰?

ResNet为什么这么成功,就是因为它使得深层神经网络的训练成为可行。

虽然好的初始化,BN层等技术也有助于更深层网络的训练,但是很少能突破30层。经典网络中超过30层基本是和ResNet有关系。

深层网络带来的网络退化的问题始终都是存在的,可以缓解,没法消除。这就有可能出现网络加深,性能反而开始下降。

网络加深带来的学习能力饱和问题。

模型加深还可能出现的一些问题是导致某些浅层的学习能力下降,限制了深层网络的学习(ResNet论文中有提到),这也是跳层连接等结构能够发挥作用的很重要的因素。

参考网址:

https://blog.csdn.net/wspba/article/details/60750007

https://blog.csdn.net/iModel/article/details/80688394

resnet 实验方案

研究背景:

更深的网络难以收敛。

对于更深的网络,使用残差学习框架能够更容易训练。将层看作学习输入层的的残差函数,而不是学习与层无关的函数。证据表明残差网络容易优化,增加深度也能显著的提高准确率。在imageNet 数据集,使用深度比VGGnet深8倍,依然有着较低的复杂度。

网络深度的加深提高模型的性能,但是随着网络的加深,带来一系列问题。

网络加深,学习性能是否会更好?

随着网络加深,模型的收敛越来越难,原因被归结为梯度消失/梯度爆炸。

标准初始化等策略,使得SGD算法在10层作用能够收敛。

当网络更深时,暴漏一个问题:

随着网络加深,准确率达到饱和,然后迅速下降。这种下降不是过拟合引起的。

更深的网络有更高的训练误差和测试误差。收敛越慢。

理论上,网络加深,应该会有更好的学习性能,训练集上loss值应该要低,但是事与愿违。

原理解读:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • resnet 解决的是什么问题?
  • resnet 为什么这么强?
    • 优化目标转换
      • Resnet实验结果 1.简单网络的实验
        • 2. 残差块设计
          • 3. 网络深度探究
            • 思考1. 残差网络结构中的虚线,实线问题
              • 思考2. 梯度消失与梯度爆炸问题
                • 思考3. 残差连接
                  • 思考4:启发来源
                    • 思考5:shortcut 的输入为何是x,而不是x/2或其他?
                      • 思考6:为什么H(x) -x 比 H(x)更容易优化?
                      • 究竟网络深度对深度学习模型性能有什么影响呢?
                        • 1. 随着模型加深,带来哪些好处?
                          • 2. 随着模型加深,带来哪些困扰?
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                          http://www.vxiaotou.com