经典优化策略模型ResNet,之所以收录在此专栏,是因为现阶段的图像分割深层模型基本上都用到了残差块与跳接的思想,值得去细细品读。建议读者有时间的话自己也去看一下原文,相信会有更多的收获。
要点
1. 提出了一个残差学习框架,使更深网络的训练过程变得更加容易
2. 为残差网络更易优化的结论提供了全面的经验证据
3. 残差网络能够随着网络的加深继续提高精度
读引言
研究背景
网络的加深能够在多种任务中获得收益,取得领先结果的重要模型都是来自于非常深的模型。
但是这并不是意味着神经网络越深就能学习的越好,实际上对于收敛过程一直存在梯度消失和梯度爆炸两种障碍。这一问题在很大程度上已经被初始归一化和中间归一化层解决过了。
为什么要研究
当更深的网络能够逐渐收敛的时候,出现了退化问题:随着网络模型深度的增加,精确度毫无意外地达到饱和,但随后会迅速下降。这个问题并不是过拟合造成的,给深度适当的模型添加更多的层就会导致更高的错误率。
针对这个问题,尝试构造一个残差网络结构:如果已经达到最优,那么就输出恒等映射,否则就就通过残差映射路径去学习。
主要内容
找到恒等映射的扰动要比学习新的函数更容易。需要学习的部分是F(x),它表面上看是非线性全连接层,实际上可以甚至更多时候是卷积层,可以是多层的叠加。
x与F(x)的维度必须相等,如果不等则需要在跳接过程中增加一个线性变换Ws,使得维度是匹配的。
(仅在维度匹配时使用)
实验如何开展
测试两种类型的模型进行对比实验:普通网络和残差网络。
(对比实验中普通网络部分的小认识:特征图的大小减半时要将卷积核的数量加倍,输出双倍的通道,这样可以保证每层网络足够的时间复杂度。)
残差网络中遇到通道增加时需要进行维度对齐,Wsx通过SAME卷积实现,此时改变通道数。Keras代码实例如下。
def identity_Block(inpt, nb_filter, kernel_size, strides=(1, 1), with_conv_shortcut=False):
x = Conv2d_BN(inpt, nb_filter=nb_filter, kernel_size=kernel_size, strides=strides, padding='same')
x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=kernel_size, padding='same')
if with_conv_shortcut:
shortcut = Conv2d_BN(inpt, nb_filter=nb_filter, strides=strides, kernel_size=kernel_size)
x = add([x, shortcut])
return x
else:
x = add([x, inpt])
return x
结果
整体上看,残差网络组比普通网络组更加有效,能获得更高的精度,且收敛速度更快。同时,通过34-layer和18-layer resnet的对比可以看出,随着迭代次数的增加,两者在验证集上的结果均能收敛到稳定状态,但34的效果更好,拥有更低的错误率,这表明残差网络的加深能够获得精度上的回报。
实验证明,仅在通道数增加时使用Wsx能获得最理想的结果,在正常shortcut中没必要使用,提升不大但是引入了太多的参数。
拓展到瓶颈结构,将层数从34加深到了50、101、152,尽管已经加深到如此地步,依旧低于VGG16/19的复杂度。
观察50/101/152resnet的结果,发现深度的大幅增加可以显著提高精度,没有观察到退化问题。
数据分析
在CIFAR-10数据集上关注极深网络的表现,依旧使用这种简单的结构。
当深度增加时,相比普通网络学习的困难和产生退化现象,ResNets设法克服了优化的困难并获得了极高的精度增益。
但是从110层加深到1202层时验证集精度反而降低了,考虑到训练集的精度非常高,这可能产生了过拟合的问题,对于这个小数据集的问题来说,网络过大了。
在目标检测类的任务中,使用R-CNN作为检测方法,只是将VGG16换成了ResNet101,获得了28%的相对进步,这说明残差网络的学习是有效的,具有良好的泛化性能。
结论
深度神经网络通常集成了低层、中层和高层特征,特征的 “层级” 可以通过增加网络深度来丰富,随着网络深度的增加,准确率达到饱和后迅速降低,但是这种退化并不是由于过拟合导致的。于是引入残差结构,在训练接近饱和时由网络自行决定是否继续学习,如果不继续学习则让残差 为0即可,这种带残差的网络更容易优化并可以随着深度的增加获得更好的精度。
论文地址:https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html
笔者实验室研究的主要方向是血管图像分割,以及利用生理信号评价脑血流自动调节功能。此专栏会记录我个人对分割领域经典论文,以及一些感兴趣项目的笔记,如果有哪里理解不好的地方欢迎大家指正,共同学习共同进步。