探索:
VGGNet试着探寻了一下深度神经网络的深度究竟可以深多少以能持续地提高分类准确率。在我们的一般印象当中,深度学习愈是深(复杂,参数多)愈是有着更强的表达能力。凭着这一基本准则CNN分类网络自Alexnet的7层发展到了VGG的16乃至19层,后来更有了GoogleNet的22层。可后来我们发现深度CNN网络达到一定深度后再一味地增加层数并不能带来进一步地分类性能提高,反而会使网络收敛变得更慢,分类准确率也变得更差。常规CNN网络后期层数增加带来的分类准确率的降低。正是受制于此不清不楚的问题,VGGNet达到19层后再增加层数就开始导致分类性能的下降。
ResNet想要解决的两个问题:
(1)深度神经网络的梯度消失和梯度爆炸
(2)degradation问题(退化问题):在不断增加卷积神经网络的深度时,当网络深度达到一定程度后准确度会达到饱和,如果继续增加网络深度,则会导致准确率反而下降(训练集合测试集都会下降)
思路:
ResNet作者想到了常规计算机视觉领域常用的residual representation的概念,并进一步将它应用在了CNN模型的构建当中,于是就有了基本的Residual Learning的block,它通过使用多个有参层来学习输入输出之间的残差表示,而非像一般CNN网络那样使用有参层来直接尝试学习输入、输出之间的映射。
效果:
实验结果:ResNet训练收敛速度快,准确度更高。
原因分析:
(1)训练速度快:有参层来直接学习残差比直接学习输入到输出间映射要容易得多。
(2)准确度高:网络加深,其抽象能力更强;Residual Unit在信息传递过程中减少了信息的丢失和损耗。
当下ResNet已经代替VGGNet成为一般计算机视觉领域问题中的基础特征提取网络。
分析:
传统的卷积层或全连接层在传递信息时,都会或多或少的存在信息丢失,损耗的问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护了信息的完整性,整个网络只需要学习输入与输出之间的残差,简化学习目标和难度。
ResNet改变了神经网络的学习目标,让它学习输入和输出之间的残差表示,而不是输入与输出之间的映射。ResNet的主要思想是在网络中增加了直连通道(shortcut 或者 skip connection),允许原始输入信息直接传到后面的层中,如下图所示:
我们要求的映射是H(x), 其中H(x)=F(x)+x
现在我们将这个问题改变为求解(学习)网络的残差映射函数,即F(x), F(x)=H(x)-x : 即,求映射H(x)的本质还是学习残差F(x)
残差(Residual):观测值与估计值之间的差。
这里H(x)就是观测值,x就是估计值(也就是上一层ResNet输出的特征映射)。
我们一般称x为Identity Function,它是一个跳跃连接;称F(x)为ResNet Function。
理解:
我们为什么非要经过F(x)之后再求解H(x),如果是采用一般的卷积神经网络,原先要求解的是H(x) = F(x)这个值。
现在假设,网络已经达到最优状态(两层含义,此时网络深度最合适,网络错误率最低,再往下加深网络的话就会出现退化问题)。如果现在加深一层网络,现在要更新网络的权值再次达到收敛就会变得很麻烦,这要调整网络所有的参数,而不只是新加一层的参数;并且最后得到的错误率将大于之前的网络。
但是采用残差网络就能很好的解决这个问题。还是假设当前网络的深度能够使得错误率最低,如果继续增加ResNet的层数,为了保证下一层的网络状态仍然是最优状态,只需要把令F(x)=0就可以,因为x是当前输出的最优解,为了让它成为下一层的最优解也就是希望咱们的输出H(x)=x的话,只要让F(x)=0就行了。
当然上面提到的只是理想情况,在真实测试的时候x肯定是很难达到最优的,但是总会有那么一个时刻它能够无限接近最优解。采用ResNet的话,也只用小小的更新F(x)部分的权重值就行了。不用像一般的卷积层一样大动干戈。
网友评论