了解ResNet

产生背景
网络的层数越多,就能够提取更多的特征,但是如果只是简单的增加深度,就会导致梯度爆炸 。也有文章提出,解决该问题的方法是正则化初始化和中间的正则化层,但是这样会导致另一个问题,退化,网络的层数增加,但是在训练集上的准确率达到饱和之后开始下降,导致深度网络不能被很好的优化 。
意义
作者根据输入将层表示为学习残差函数 。实验表明,残差网络更容易优化,并且能够通过增加相当的深度来提高准确率 。核心是解决了增加深度带来的副作用(退化问题),这样能够通过单纯地增加网络深度,来提高网络性能 。
的网络结构
如果我们把一个网络的输出定义为 H,残差定义为 H-x ,那么,其实就是在学习这个残差 F=H-x,通过将残差最小化,来学习模型 。而且,在CNN中,输出的维度可以与输入维度不一样,比如池化层、或者卷积核的设为2,这就会导致输出 F 与输入 x 的维度不一样,这个时候就不能直接把 F,x 直接相加了,针对这种情况,作者建议可以用 1 * 1 的卷积层,=2,就是采用下图中的右边模块,从而与 F 维度匹配起来,再进行相加 。
下图是中使用的两种残差单元:一种是以两个33的卷积网络串接在一起作为一个残差模块,另外一种是11、33、11的3个卷积网络串接在一起作为一个残差模块 。(也就是实现与虚线的区别)
的结构图:
不同深度的:
输出结果
从下图可以看出残差网络能够在深度增加的情况下,维持较高的准确率的增长,有效地避免了VGG网络中层数增加到一定程度,模型准确度不升反降的问题
【了解ResNet】时间有限,以后再补充一些细节 。
代码实现部分参考链接: