【模型解读】“全连接”的卷积网络,有什么好?
08
这是深度学习模型解读第8篇,本篇我们简单介绍Densenet。
言有三
毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人
作者 | 言有三(微信号:Longlongtogo)
编辑 | 言有三
1
从skip connect到dense connect
我们知道,曾经深度网络训练不好收敛,Resnet的出现打破了这一僵局,背后的思想仅仅只是拉了一个skip connect,也就是将输入和输出相连相加,下面是一个resnet18的展示。这个输入输出,可以是刚好相邻的两个卷积block,也可以是跳过若干层的两个。
假如,我们再进一步,将这个思想发挥到极致,会怎样?把所有层都与其他所有层相连,也就是说N层的网络,会有N*(N-1)/2个连接,如下图所示:
这就是densenet【1】,CVPR 2017最佳论文,可以看作是一个发挥到极致的resnet。
2
为什么会设计densenet?
大家如果对resnet理解不够深的话,可以回过头去读我们的上一期对resnet的解读。残差连接的必要性和有效性,在那篇文章中做了很详细的解读。
神经网络越深,网络的能力越强,就越有可能过度学习数据集,导致过拟合。大家应该还记得,作为第一个深层网络Alexnet网络,它提出了重要的策略dropout,对于提高模型的泛化能力非常有效。alexnet网络至今仍然可以用于很多的任务,这足以说明其鲁棒性。后来BN和数据增强等正则化策略替代dropout也在一定程度上缓解了过拟合的问题。文【2】是densenet作者们早期的研究,它们通过训练时随机丢掉一些网络层,提高了ResNet的泛化性能。
从这里可以看出来一个重要特性,这也是神经网络中大家比较关心的问题,网络的冗余性绝对是存在的,而且不小,通过探索dropout值的比例对性能的影响可以去估算这个冗余。
既然丢掉某些层间连接或者整个层不影响性能,就说明这一层学习到的非线性转变很小,既然转变很小,那么每一层学习几百个通道,还有必要吗?这几百个通道,正是万恶的计算量所在。
考虑到这一点,densenet就同时做了两件事情,一是将网络中的每一层都直接与其前面层相连,提高特征的利用率;二是把网络的每一层设计得很窄,也就是卷积的输出通道数通常很小,只有几十,该层学习非常少的特征图并与输入concat使用。
这实现了资源的最大化利用和计算量的压缩。ImageNet分类数据集上达到同样的准确率,DenseNet 所需的参数量不到ResNet的一半,所需的计算量也只有ResNet的一半左右。
思想就是这么简单,当然,我们在使用的时候,不会真的这么夸张去将所有层都连接起来,更多的是将网络的后面一些层做dense连接。毕竟网络设计的通用思想是网络越深宽度更宽,这里做dense连接对于减小计算量更有意义。
3
简单思考
人类对深度学习模型只有三个要求,运行速度快,网络模型小,性能好。
提升网络性能,最朴素的方法就是加深加宽网络,但这与前面两者是冲突的。所以,工程师们都在想方设法压榨每一个通道的性能,但又要避免网络发生过拟合。
既要没用的网络层减少,又要有用的网络层不能太灵敏,那就只有一条路可以走了。充分压榨已有的网络层的性能,让他们充分交流。
网络发展到现在,早已经不是Lenet,Alexnet,Vggnet这样简单的网络加深的路线,网络各层之间信息的融合,在图像分割(FCN),目标检测(FPN)等任务中都至关重要,看看下面的网络图就知道。
FCN结构
FPN结构
不同层之间的连接,融合不同抽象层级的信息,融合不同尺度的信息,densenet将这个发挥到了极致,就这么简单。
知乎其他技术人员有很多更详细的解读,感兴趣大家可以自行去选读。
https://www.zhihu.com/search?type=content&q=densenet
参考文献
【1】Huang G, Liu Z, Van Der Maaten L, et al. Densely Connected Convolutional Networks[C]//CVPR. 2017, 1(2): 3.
【2】Huang G, Sun Y, Liu Z, et al. Deep networks with stochastic depth[C]//European Conference on Computer Vision. Springer, Cham, 2016: 646-661.