【模型解读】“全连接”的卷积网络,有什么好?

【模型解读】“全连接”的卷积网络,有什么好?

08 这是深度学习模型解读第8篇,本篇我们简单介绍Densenet。

1 从skip connect到dense connect

我们知道,曾经深度网络训练不好收敛,Resnet的出现打破了这一僵局,背后的思想仅仅只是拉了一个skip connect,也就是将输入和输出相连相加,下面是一个resnet18的展示。这个输入输出,可以是刚好相邻的两个卷积block,也可以是跳过若干层的两个。

假如,我们再进一步,将这个思想发挥到极致,会怎样?把所有层都与其他所有层相连,也就是说N层的网络,会有(N*N-1)/2个连接,如下图所示:

这就是densenet【1】,CVPR 2017最佳论文,可以看作是一个发挥到极致的resnet。

2 为什么会设计densenet?

大家如果对resnet理解不够深的话,可以回过头去读我们的上一期对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://zhuanlan.zhihu.com/c_151876233

注:部分图片来自网络

—END—

打一个小广告,我在gitchat开设了一些课程和chat,欢迎交流。

猜你喜欢

转载自blog.csdn.net/hacker_long/article/details/82934744