浅谈残差网络(Residual Network)

版权声明:转载请注明出处 https://blog.csdn.net/The_lastest/article/details/82820015

最近看了一些有关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)=0F(x)=0,就能达到恒等映射的目的,而这要相对容易得多)

以上就是残差网络得主要思想,下面附上一些参考文章中得截图,以便更好理解:

参考文章:

  1. Deep Residual Learning for Image Recognition
  2. Understanding and Implementing Architectures of ResNet and ResNeXt for state-of-the-art Image Classification: From Microsoft to Facebook [Part 1]
  3. How does deep residual learning work?
  4. Why is Deep Residual Learning called that way?
  5. 大话深度残差网络(DRN)ResNet网络原理
  6. 深度学习——残差神经网络ResNet在分别在Keras和tensorflow框架下的应用案例
阅读更多

扫码向博主提问

亡城

只上代码不讲思路的博文都是耍流氓!
  • 擅长领域:
  • 深度学习
  • LSTM
  • Tensorflow
去开通我的Chat快问

没有更多推荐了,返回首页