机器学习32:对Resnet几个问题的理解

机器学习32:对Resnet几个问题的理解

         Resnet对传统网络的改进:加入Shortcut连接,改善了深层网络的网络退化问题,使网络模型可以训练到很深层等已经是老生常谈了,也训练过Resnet模型有效地分类了Cifar数据集,但是对于Resnet始终存有几个疑问。

         首先第一个问题是为什么F(x)=x较F(x)=0拟合难度大;第二个问题是如果残差模块的训练目标是恒等映射,那么网络性能在不退化的情况下是如何提升的?为什么要加入恒等映射的单元?第三个问题是如何解释残差网络的有效性。

         带着这些问题主要在知乎/博客和慕课上查找了一些资料,对于这些问题不同的答主也有不同的理解方式,这里摘抄整理了一些我觉得有说服力的解释,基本可以解释我对于这些问题的疑问。

1.传统网络和残差网络的比对:

         网络输入:x

         网络输出:F(x)

         网络要拟合的目标H(x)​​​​​​​

         传统网络的训练目标:H(x)​​​​​​​=F(x)​​​​​​​

         残差网络的训练目标:F(x)​​​​​​​=H(x)​​​​​​​-x

         残差网络的输出为:F(x)​​​​​​​=传统输出+x

 

2.模型退化的原因:

     (1)第一个解释:

       当堆叠模型时,理所当然会认为效果是堆叠层数越高越好,然而事实上由于非线性激活函数Relu的存在,每次输入到输出的过程都几乎是不可逆的(信息损失),很难从输出反推回完整的输入。

        “什么都不做”的恒等变换恰好是当前神经网络最难做到的东西之一。因此,可以认为Resnet模块的初衷,其实是让模型的内部结构至少有恒等映射的能力。以保证在堆叠网络的过程中,网络至少不会因为继续堆叠而产生退化。

     (2)第二个解释:

        神经网络越来越深的时候,反传回来的梯度之间的相关性会越来越差,最后接近白噪声。

        因为图像是具备局部相关性的,那其实可以认为梯度也应该具备类似的相关性,这样更新的梯度才有意义,如果梯度接近白噪声,那梯度更新可能根本就是在做随机扰动。

        有了梯度相关性这个指标之后,分析一系列的结构和激活函数可以发现Resnet在保持梯度相关性方面很优秀。

        这一点很好理解,从梯度流来看,有一路梯度是保持原样不动地往回传,这部分的相关性是非常强的。

 

3.为什么残差模块的输出为传统输出+x:

     (1)第一种解释:

         因为多余层的目标是恒等变换,也就是F(x)​​​​​​​+x=x,那么F(x)​​​​​​​的训练目标就是0,比较容易;如果是其他比如F(x)​​​​​​​+x=x/2,那么F(x)​​​​​​​的训练目标就是x/2,是一个非0的值,比0难实现。

     (2)第二种解释:

         残差的作用类似于差分放大器,去掉相同的主体部分,从而突出微小的变化。

         如果F(5)=5.1 ,现在继续训练模型,使得映射函数F(5)=5。(5.1-5)/5.1=2%,也许浅层网路可以把学习率从0.01设置为0.0000001可以处理,深层的话可能就不太好用了。

         如果设计为残差结构,5.1变化为5,也就是F(5)=0.1变化为F(5)=0.这个变化率增加了100%,引入残差后映射对输出变化变的更加敏感了,明显后者输出变化对权重的调整作用更大,所以效果更好。

         这也就是为什么ResNet虽然层数很多但是收敛速度也不会低的原因。

   

4.因为Resnet深层网络的训练目标是恒等变换,也就是H(x)=x,那么也就相当于F(x)​​​​​​​=0,为什么有博客说F(x)=0比F(x)=x的拟合难度低:

     (1)第一种解释:

         把f(x)和x看作向量,要训练的权重也是多个高维向量,假如x是二维(x1,x2),那么权重就是2*2的矩阵。拟合F(x)​​​​​​​=x,w要做的运算为求解下面方程组得到x为单位矩阵:

                         w11x1+w12x2 = x1

                         w21x1+w22x2 = x2

        如果拟合F(x)=0,只需要w=0就可以了。

     (2)第二种解释:​​​​​​​

 

5.如果残差学习的是恒等变换,那如何通过残差模块进行网络性能上的提升:

     (1)第一个解释:【知乎李其刚的回答】

         跳连接相加可以实现不同分辨率特征的组合,浅层容易有高分辨率但是低级语义的特征,而深层的特征有高级语义,但分辨率比较低。

        事物本身的特征就是不同层次的,比如区分男女相对容易,不需要复杂的计算或者那么深层的网络模型,但是要区分两个女孩就需要更复杂的计算更深层的网络,我们把网络看作一个映射或者函数,在没有残差模块的短路连接的网络中,无论简单还是复杂的特征都要用一个很复杂的网络来处理或转换,这有一些不合常理,Resnet引入了捷径,不同层次提取到的特征可以通过捷径影响预测结果。在Resnet中,我们要区分三个人的思路是:先提出男女特征,这个特征通过捷径直接影响结果,更细致的脸型皮肤等网络区分两个女孩。

        Resnet的短路连接至可以跨越一种分辨率,Densenet跳接组合了更多分辨率的特征。

     (2)第二个解释:

        引入跳接让模型自身有了更加灵活的结构,也就是在训练过程中,模型可以选择在每一个部分是“更多进行卷积与非线性变换”还是更多倾向于“什么也不做”,或者二者结合,模型在训练时自适应本身的结构。

     (3)第三个解释:

        “在初始化和BN已经解决了梯度消失/爆炸”这个客观事实下,假设把浅层模型权重100%拷贝到深层,模型效果应该和浅层网络一样,不应该变差。在这个前提下,如果在浅层网络上堆叠一些新层,这些层“哪怕有一点梯度传过来,那都算是正向收益”。

          100%拷贝权重可以用X=H(x)​​​​​​​表示,X是浅层输出,H(x)​​​​​​​是)拷贝完后的深层,这也就是作者说的理想情况下的恒等映射。假如我们在X和H(x)​​​​​​​之间加一些层“扰动或者delta”,也就是H(x)​​​​​​​=X+F(x)​​​​​​​,只要模型能学到这个delta网络层的权重,那么就是整个深层模型有效的。

     (4)第四个解释:【知乎SuperMHP】
          残差模块并不是就是恒等,可以理解为,当网络需要这个模块恒等时它比较容易变成恒等,而传统的卷积模块很难通过学习变成恒等,因为信号与系统中Filter的冲击响应要为一个冲击函数,3神经网络本质是学习概率分布,因此局部一层不容易变成恒等,而Resnet模块的引入给了神经网络学习恒等映射的能力。

         所以Resnet除了减弱梯度消失外,这也是一种自适应深度,也就是网络可以自己调节层数的深浅,不需要太深的网络时中间恒等映射就多,需要深层网络时中间的恒等映射就少。

         当然实际上的神经网络的训练结果基本是一个整体,并不会有这么强的局部特性,也不一定会出现某些模块严格恒等的情况。

     (5)第五个解释:

         当F(x)​​​​​​​=0时,那么H(x)=x,也就是说学习到的是恒等变换,输入为x,输出也为x,这是一种非常极端的情况,在这个极端的情况下至少可以保证层数增加时网络的性能不会下降,并且F(x)​​​​​​​=0很容易学习(只需要将对应的W和b均置0即可)。        

          既然是恒等变换,那为什么还要加这一层呢,不加这层直接输出不就好了吗?是因为实际上学习到的残差不一定为0,这也会使得堆积层在输入特征基础上学习到新的特征,从而拥有更好的性能。

 

6.Resnet有效性的三种解释:

     (1)第一个解释【何凯明论文中指出的动机】:

         使网络更容易在某些层学到的恒等变换,在某些层执行恒等变换是一种构造性解,使更深的模型的性能至少不低于较浅的模型。

         [1512.03385] Deep Residual Learning for Image Recognition

     (2)第二个解释:

         残差网络是很多浅层网络的集成,主要的实验证据是:把Resnet中的某些层直接删掉,模型的性能几乎不下降。

         [1605.06431] Residual Networks Behave Like Ensembles of Relatively Shallow Networks

     (3)第三个解释:

        残差网络使信息更容易在各层之间流动,包括在前向传播时提供特征重用,在反向传播时缓解梯度信号消失。

         [1603.05027] Identity Mappings in Deep Residual Networks

 

7.参考资料:

        (1) https://blog.csdn.net/qq_34823656/article/details/96010327

        (2)https://www.zhihu.com/question/64494691

        (3)https://www.zhihu.com/question/53224378

        (4)https://www.cnblogs.com/aoru45/p/10798027.html

        (5)https://cloud.tencent.com/developer/news/221146

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章