ResNet

来源:互联网 发布:java实现icmp 编辑:程序博客网 时间:2024/05/18 20:07

Deep Residual Network 与 梯度消失

1. 什么是DRN,为什么需要DRN

DRN的全称是Deep Residual Network,深度残差网络,是对普通的深度学习网络的一种改进。

我们为什么需要深度残差网络呢?因为普通的深度学习网络存在着这样的问题

在层数比较少的时候,我们增加网络的深度,可以获得更好的表达效果。但是当层数已经足够多,比如说超过了三十层,那这个时候我们增加深度,反而会降低识别率 
 
这是因为,当层数加深的时候,梯度在传播过程中会逐渐消失,导致无法对前面几层的权重进行调整。下面我们就来简单介绍一下梯度消失的问题

2. 梯度消失问题

我们知道,神经网络的优化都是通过梯度下降的方法来优化的。每次我正向计算的时候计算出Loss,然后我需要知道,究竟怎样调整参数矩阵才能使得我的Loss更小,预测和事实更接近,所以我们需要通过back propogation来对传播梯度,但是在传播的过程中,会出现一些我们没有预料到的问题。

2.1 Sigmoid当中的梯度消失

 
这是Sigmoid的函数图像,我们可以看到,Sigmoid函数把[-INF,INF]上的值映射到了[-1,1]之间。这个映射可以增加非线性性,但是有个问题,就是当输入值足够大或者足够小的时候,输出值基本上不变,这个时候函数的梯度值基本上为0。这就达不到梯度下降的功能了

2.2 ReLU代替Sigmoid

为了解决这个问题,引入了新的非线性单元,ReLU。其实表达式也非常简单。我们可以看到,不管输入值多大,梯度值都是存在的,这就在一定程度上解决了梯度消失的问题,因而ReLU也比Sigmoid在性能上要更好

2.3 连乘导致的梯度消失问题

但是因为梯度连乘的问题,梯度消失的问题依然存在。我们通过正常的back propagation进行计算,

但是这个时候,如果网络很深很深,就会出现这样的情况


这个时候再做back propagation求偏导的话,就是


这个偏导就是我们求的gradient,这个值本来就很小,而且再计算的时候还要再乘stepsize,就更小了

所以通过这里可以看到,梯度在反向传播过程中的计算,如果N很大,那么梯度值传播到前几层的时候就会越来越小,也就是梯度消失的问题

3. DRN怎样解决了梯度消失问题?

所以这个时候,DRN就出现了,它在神经网络结构的层面解决了这个问题

它将基本的单元改成了这个样子

其实也很明显,通过求偏导我们就能看到

这样就算深度很深,梯度也不会消失了

4. 效果详细说明

 

 

-----------------------------------分割线--------------------------------------------

 

 

 

Resnet


Resnet采用了另一种方法,也就是不分解原问题,而是把神经网络分解来降低拟合函数的复杂度,而损失函数是拟合函数的函数,所以降低拟合函数的复杂度也等同于降低了损失函数的复杂度。假设我们需要拟合的复杂函数为H(x),现在我们把H(x)分解为两个更简单的函数f(x)和g(x),即令H(x) = f(x) + g(x)。(Resnet不考虑过拟合)此处f(x)函数的结构和H(x)其实是一致的,都是几层卷积池化加上最后的fc层,但是因为有g(x)的加入使得f(x)的复杂度小于H(x).具体如下图所示:

由于我们并不知道什么样的g(x)最好,所以这里g(x)也需要训练,而一个三层的神经网络可以拟合连续闭区间上的任意函数,我们用一个三层的神经网络代替g(x),但是这样又会因为增加了额外的参数造成过拟合的风险,我们看到图中有两个三层的神经网络,我们可以把它们合并起来,所以一个更好的方法如下: 

这样一来由于fc层的输入增加为了维持表达能力,fc层的隐层单元势必要增加,这样还是增加了参数,所以Resnet又做了调整: 

 

ResNet要解决的问题

深度学习网络的深度对最后的分类和识别的效果有着很大的影响,所以正常想法就是能把网络设计的越深越好,但是事实上却不是这样,常规的网络的堆叠(plain network)在网络很深的时候,效果却越来越差了。 
 
这里其中的原因之一即是网络越深,梯度消失的现象就越来越明显,网络的训练效果也不会很好。 
但是现在浅层的网络(shallower network)又无法明显提升网络的识别效果了,所以现在要解决的问题就是怎样在加深网络的情况下又解决梯度消失的问题。

 

ResNet的解决方案

ResNet引入了残差网络结构(residual network),通过残差网络,可以把网络层弄的很深,据说现在达到了1000多层,最终的网络分类的效果也是非常好,残差网络的基本结构如下图所示 
 
通过在输出个输入之间引入一个shortcut connection,而不是简单的堆叠网络,这样可以解决网络由于很深出现梯度消失的问题,从而可可以把网络做的很深,ResNet其中一个网络结构如下图所示 
 
之前一直在探究残差网络提出的由来,作者是基于先前的什么知识才提出残差网络的,咋一看感觉残差网络提出的很精巧,其实就是很精巧,但是现在感觉非要从残差的角度进行解读感觉不太好理解,真正起作用的应该就是shortcut连接了,这才是网络的关键之处。

 

ResNet的解读

基本的残差网络其实可以从另一个角度来理解,这是从另一篇论文里看到的,如下图所示: 
 
残差网络单元其中可以分解成右图的形式,从图中可以看出,残差网络其实是由多种路径组合的一个网络,直白了说,残差网络其实是很多并行子网络的组合,整个残差网络其实相当于一个多人投票系统(Ensembling)。下面来说明为什么可以这样理解

删除网络的一部分

如果把残差网络理解成一个Ensambling系统,那么网络的一部分就相当于少一些投票的人,如果只是删除一个基本的残差单元,对最后的分类结果应该影响很小;而最后的分类错误率应该适合删除的残差单元的个数成正比的,论文里的结论也印证了这个猜测。 
下图是比较VGGResNet分别删除一层网络的分类错误率变化 
 
下图是ResNet分类错误率和删除的基本残差网络单元个数的关系 

 

ResNet的真面目

ResNet的确可以做到很深,但是从上面的介绍可以看出,网络很深的路径其实很少,大部分的网络路径其实都集中在中间的路径长度上,如下图所示: 
 
从这可以看出其实ResNet是由大多数中度网络和一小部分浅度网络和深度网络组成的,说明虽然表面上ResNet网络很深,但是其实起实际作用的网络层数并没有很深,我们能来进一步阐述这个问题,我们知道网络越深,梯度就越小,如下图所示 
 
而通过各个路径长度上包含的网络数乘以每个路径的梯度值,我们可以得到ResNet真正起作用的网络是什么样的,如下图所示 
 
我们可以看出大多数的梯度其实都集中在中间的路径上,论文里称为effective path 
从这可以看出其实ResNet只是表面上看起来很深,事实上网络却很浅。 
所示ResNet真的解决了深度网络的梯度消失的问题了吗?似乎没有,ResNet其实就是一个多人投票系统。

原创粉丝点击