CNN 2.3 残差网络(ResNet)

什么是残差网络

残差网络是2015年提出的深度卷积网络,一经出世,便在ImageNet中斩获、检测、定位三项的冠军。 残差网络更容易优化,并且能够通过增加相当的深度来提高准确率。核心是解决了增加深度带来的副作用(退化问题),这样能够通过单纯地增加网络深度,来提高网络性能。

该网络出自论文《Deep Residual Learning for Image Recognition》

我们都知道增加网络的宽度和深度可以很好的提高网络的性能,深的网络一般都比浅的的网络效果好,比如说一个深的网络A和一个浅的网络B,那A的性能至少都能跟B一样,为什么呢?因为就算我们把B的网络参数全部迁移到A的前面几层,而A后面的层只是做一个等价的映射,就达到了B网络的一样的效果。一个比较好的例子就是VGG,该网络就是在AlexNex的基础上通过增加网络深度大幅度提高了网络性能。

对于原来的网络,如果简单地增加深度,会导致梯度弥散或梯度爆炸。对于该问题的解决方法是正则化初始化和中间的正则化层(Batch Normalization),这样的话可以训练几十层的网络。

虽然通过上述方法能够训练了,但是又会出现另一个问题,就是退化问题,网络层数增加,但是在训练集上的准确率却饱和甚至下降了。这个不能解释为overfitting,因为overfit应该表现为在训练集上表现更好才对。退化问题说明了深度网络不能很简单地被很好地优化。作者通过实验:通过浅层网络等同映射构造深层模型,结果深层模型并没有比浅层网络有等同或更低的错误率,推断退化问题可能是因为深层的网络并不是那么好训练,也就是求解器很难去利用多层网络拟合同等函数。

ResNet刚好能解决这些问题。

Residual block

ResNet

残差网络ResNet的优点

在理论上,当你使神经网络更深, 它在训练数据上的性能应该只会更好 。理论上来讲 一个更深层次的网络只会有帮助。 但在实践中,或在现实中, 有一个普通网络,没有ResNet, 有一个很深的纯网络意味着 你的优化算法训练起来会更困难。 所以,在现实中, 如果你选择的网络太深,则训练误差会更糟。 但有了ResNet的情况是,即使层数越来越深, 你仍可以让训练误差继续下降, 即使我们训练一个超过100层的网络。 然后现在有些人甚至拿超过1000层的网络做实验。 尽管我很少看到有人在实际应用中用到那么多层的网络 。但把这些激活X 或者这些中间层的激活输出,连接到更后面的层去 这确实对解决梯度消失和爆炸问题非常有帮助 使得我们可以训练 深得多的神经元网络而不会看到性能倒退的现象 。尽管可能在某一个点会达到plain阶段 。

发布了28 篇原创文章 · 获赞 0 · 访问量 1227

猜你喜欢

转载自blog.csdn.net/gaohanjie123/article/details/88673199