浅谈残差网络(Residual Network)
最近看了一些有关ResNet的博客和文章,目的在于想要弄清楚
①为什么出现了残差网络?
②残差网络的思想
1.为什么出现了残差网络?
在深度学习领域,一直以来(直觉上)就认为:网络层数越深提取到的特征就应该越高级,从而最终的效果就应该更好。不然也不会有从一开始LeNet5的5层网络发展到了后来的VGG的19层网络。于是为了达到更好的网络效果,deeper们又开始加深网络的层数,可这次迎来的确不是网络性能上的提升,而是降低。这也就是论文Deep Residual Learning for Image Recognition中所说的degradation problem 问题。
When deeper networks are able to start converging, a degradation problem has been exposed: with the network depth increasing, accuracy gets saturated (which might be unsurprising) and then degrades rapidly. Unexpectedly, such degradation is not caused by overfitting, and adding more layers to a suitably deep model leads to higher training error.
如图所示是一个不同层数的普通堆叠的网络,在cifar10数据集上随着层数增加的错误率。可以发现,当网络从20层增加到56层的时候,随着迭代次数的曾经网络的错误率不降反升,而这并使用overfitting就能够解释的通的。
出现这个问题之后,deeper们就想:假如现在有两个网络,一个为N层,另一个为N+k层;那么即使后者的性能再差,应该也不会低于前者。
如图所示:红色方框中的部分为两个网络都有的部分,橙色部分为第二个网络额外增加的部分,此时理论上应该出现两种情况:
最糟糕的情况:假如红色方框中的部分(即图中左边的网络)已经达到最佳性能,那么只要右边网络的橙色方框部分做恒等映射(参数均为1),那么右边网络的性能就应该同左边的一样;
期望中的情况: 右边增加了橙色部分的网络能够训练出比左边网络更好的效果;
可是在已知现有的所有训练方法下,训练出来的网络均在这两种情况之外,换句话说就是性能不升反降!或许这就真的不是训练方法的错,而是网络结构的错。因此,在这种背景下,残差网络应运而生!
2. 残差网络的思想
从上面的分析可以知道,引入残差网络的目的是为了解决由于加深网络而导致的degradation problem,也就是说通过残差网络能够保证:①不断的提高网络性能;②达到最优性能时多余的网络层做恒等映射;
那要同时实现以上两个目标该怎么设计网络呢?那答案就是论文中给出的网络结构,如下图:
通过这样一个结构能够使得:①网络在进行反向传播训练时,不会出现梯度完全消失的问题,这也就实现了第一个保证;②当网络网络的性能达到一个瓶颈后多余的网络层做恒等映射(应为在这种结构下,只要拟合F(x)=0 F(x)=0F(x)=0,就能达到恒等映射的目的,而这要相对容易得多)
以上就是残差网络得主要思想,下面附上一些参考文章中得截图,以便更好理解:
原文:https://blog.csdn.net/The_lastest/article/details/82820015