DenseNet论文简析

前言

本文是 2017 年 CVPR 的 oral paper,也就是直接在大会现场展示做 presentation 的论文,非常厉害。目前,仍然是计算机视觉中非常重要的网络结构。那么,我们就需要知道作者提出了怎样的创新性网络结构,能成为网红版的网络结构呢?

摘要

首先,作者观察到:研究者为了进一步提高网络的泛化能力,设计出的卷积网络越来越深,但是又为了避免网络产生梯度爆炸与消失的问题,研究者采用了一些 “捷径”,即可以跨层连接,并且如果这些连接能尽可能靠近输入层和输出层,那么网络的训练将会更快。所以作者基于这种跨层连接方式也提出了自己新颖的跨层连接方式,也就是:假设网络有 L 层,除输入层外,每一层都与之前的网络层相连,那么到最后一层就有 L 个连接,而网络的总连接数达到了 L*(L-1)/2。就是这么一个看似简单的连接方式,却给当前的一些视觉任务的最好表现又提升了一个档次,实在厉害。
作者说到,DenseNet 将会有以下四个优点。第一个是它们可以缓解梯度消失的问题;第二个是他们加强了特征在网络中的传播;第三个,鼓励特征重用,因为这样的连接方式,使得前面网络层的特征可以直接用于后面的网络层嘛;第四个是极大地减少了网络的参数总量。
最后,作者为了试验网络结构的表现,分别在一些公开数据集上进行试验对比。如 ImageNet、CIFAR-10、CIFAR-100、SVHN。那么实验结果表明,DenseNet 的确可以凭借更少的计算代价达到目前最好的表现,而且能够超越目前最新的表现。

引入

作者首先提到了卷积网络的演变版本,从早期的 LeNet5,到 VGG-19,再到去年的 HighWay 网络以及 ResNet 网络,而后者已经可以超过 100 层了。目前,他们都是从网络深度的角度进行研究,但是网络深度太深会带来梯度消失问题,因此,当前一些可以比较深层的网络,如 HighWay、ResNet、FractalNet 等,都有这么一个规律,即个性中含有的共性:他们都是开辟了从更前面的网络层到更后面的网络层之间的短路径或称跳跃连接,来解决梯度消失的问题。那么,这样他们就可以训练更深的网络了。
在本文,作者基于上述的规律,提出了自己的简单连接方式:为了能保证更多的信息能够在网络层之间传播,作者将每一层与之前的每一层均建立连接路径,使得每一层都可以接收到前面所有层的 feature maps(即保存了前面层学到的特征)。 下面的图 1 呈现了这样的连接方式。

接下来,作者又提到:这样一种 dense 连接方式所需的参数总量比起传统网络更少。相比于 ResNet,它借助加性恒等变换来帮助信息在网络中的保存和传递,但由于每一层仍有权重参数,所以它所需的参数量并未减少,仍然非常之多,而本文的网络结构并不深,甚至可以更"瘦",也就是每一层最少可以仅有 12 个filter(这是网络层初始具备的 filter,不算拼接得到的),这也帮助了网络能够极大地减少了参数的总量。

作者又提到另一个优点,就是 DenseNets 提升了信息流和梯度在网络中的传播速度,所以网络将更容易训练。因为,DenseNets 这样的连接方式,使得网络中的每一层都可以直接和损失函数与原始输入数据接触,这样导致训练将更快。比如,在梯度下降的时候,梯度将可以不需要层层反向传播,而可以直接传播到网络中的某一层,这也一并缓解了梯度消失的问题。 另外,作者还发现,DenseNet 应用在小训练集上还有一点点正则化的效果。

相关研究

作者分别就网络的深度和宽度,介绍了一些相关网络。从深度出发,提到了 HighWay 网络和 ResNet及其相关变体,从应用短路径,到随机深度。而作者也发现在深度网络中存在的大量的冗余层,这也是作者的灵感之一。从宽度出发,提到了 Google Net,它通过拼接不同大小的 filter 来构建当前层的 feature maps。还有宽版本的 ResNet,以及FractalNets等使用宽网络的结构。

然后,作者不利用网络的深度或者宽度来抽取网络的表征能力,而是利用特征重用这样的方式。它既使得网络容易训练同时又使网络具备更高的参数效率。接着,作者又把该网络结构和 ResNet 进行了对比。在 ResNet 中,通过网络层的跳跃连接,前面层的 feature maps 是通过和的方式加到后面的网络层上的,相当于在后面网络层学习的基础上再加上一个额外项。然而,DenseNet 并不是这样来处理来自前面层的 feature maps,它是通过拼接的方式,将连接一端的网络层所输出的 feature maps 和另一端网络层所具有的 feature maps 拼接到一起再学习,这样就形成了更多数量的 feature maps,这一来相当于把前面层学到的特征又在后续网络层中进行重用,这就是 DenseNet 的出彩的地方。也因为这样的连接方式,所以作者将该网络结构称之为 DenseNet。

DenseNet


上图即为 DenseNet 网络结构示意图。
作者将采用这种连接方式的多个层称作为一个 Dense Block,每个 Dense Block 之间为转移层(transition layer)。而文中提到了三种网络结构,分别是 DenseNet,DenseNet-B,DenseNet-BC,三种结构,具体区别如下:

  1. 原始 DenseNet:
    Dense Block:BN+Relu+Conv(3x3)+dropout(0.2)
    transition layer:BN+Relu+Conv(1x1)(filternum:m)+dropout(0.2)+Pooling(2x2)

  2. DenseNet-B:
    Dense Block:BN+Relu+Conv(1x1)(filternum:4K)+dropout(0.2)+BN+Relu+Conv(3x3)+dropout(0.2)
    transition layer:BN+Relu+Conv(1x1)(filternum:m)+dropout(0.2)+Pooling(2x2)

  3. DenseNet-BC:
    Dense Bloc块:BN+Relu+Conv(1x1)(filternum:4K)+dropout(0.2)+BN+Relu+Conv(3x3)+dropout(0.2)
    transition layer:BN+Relu+Conv(1x1)(filternum:θm,其中0<θ<1,文章取θ=0.5)+dropout(0.2)+Pooling(2x2)

总结:对于 Dense block, 每一层卷积层前面均有 BN 层和 Relu 激活层,之后都有 dropout 层,并且在 3x3 的卷积层之前最好加入一个 1x1 的卷积层,因此引入瓶颈层即 1x1 卷积,可以减少输入到 3x3 卷积层中的 filter 数量,大大减少计算量,提高计算效率。这里还有个设置叫做 Growth rate,它控制 Dense Block 中瓶颈层中所含 filter 的数量,即控制宽度,其中 K 为网络的增长率。 对于transition layer,仍先通过一个瓶颈层进行处理,然后再进行池化降维。这里也有一个设置叫做压缩率 θ(0<θ<1) ,它控制着转移层中的瓶颈层的 filter 数量,m 为前一个Dense Block 输出的 feature maps 个数。

网络架构


上图所示即为作者应用于 ImageNet 任务上的四种网络架构,其中网络增长率 k=32,每一个 “conv” 之前都对于序列 BN-ReLu-Conv。

与 ResNet 在 ImageNet 上的比较


上图为 DenseNets 与 ResNets 在ImageNet 验证集上的 top-1 错误率比较图,左边的 X 周是网络中所需的参数量,右边的 X 轴是网络计算所需执行的浮点运算次数。显然,在验证集错误率一致的情况下,DenseNets 无论是在网络所需参数总量还是网络计算所需执行的浮点运算次数都大大优于 ResNets,那么这样一来,更说明了 DenseNet 计算效率更高,训练时间更快。

总结

感觉这篇文章的精髓就在于特征的重用,使得特征可以在网络中持续传播,可能网络因此就学比较好。然后所提出的网络连接方式也有助于缓解梯度消失的问题。而引入的瓶颈层结合增长率又控制了网络的宽度,可以极大地降低网络参数的总量,进而能以较少的计算代价就达到当前最好的水平。最后,由于 DenseNet 的特征重用使得网络能够更紧凑地学习,加上特征冗余的降低,所以它可能会是个很好的视觉任务特征抽取器。

参考

[1] 深度学习小白——DenseNet学习
[2] DenseNet解读
[3] DenseNet算法详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值