Abstract
DenseNet在前馈神经网络中每层都连接到其它层。
普通网络L层网络有L条连接, DenseNet有L(L+1)/2条连接。
对于每一层,它前面层的特征都作为它的输入, 它的输出特征作为后面层的输入。
DenseNet有几大优势:
- 减缓梯度消失
- 加强特征传播
- 促进特征复用
- 大幅减少参数数量
Introduction
一个新的研究问题
当输入和梯度穿过多层网络后, 随着深度的增加, 它们到达网络的最后的时候消失了
提出一种新的结构:
- 将所有层连接到其它层, 确保网络中层之间信息的最大化流动
- 相比与ResNet, 没有通过求和的方式组合特征,而是通过拼接的方式组合特征
传统的网络和DenseNet:
- 传统的网络可以看作带有状态的算法, 这种状态层与层之间传递。它改变了状态并且保留了所需要传递的信息。
- DenseNet明确区分了添加到网络的信息和保留的信息
- DenseNet很窄(比如每层只有12个卷积核), 仅增加一小部分特征到网络的联合知识, 并且保留原来的特征不变, 最终基于所有的特征分类器进行决策。
除了参数效率外, DenseNet的另一个优势是网络中信息和梯度的流动的提升, 这使得它们更容易训练:
- 每一层都可以直接从loss函数中直接获取梯度
- 而输入的原始信号,可以作为隐含的深层监督
- 稠密连接有正则化的效果
Related Work
增加深度:
- Highway Networks
- ResNet
- Stochastic depth
- pre-activation ResNet
增加宽度:
- GoogLeNet
- 增加ResNet每层的卷积核数量
- FractalNets
特征复用:
- DenseNet
- 相比于Inception也从不同层拼接特征, DenseNet更加简单更加有效
DenseNet
网络由L层组成,每层执行一个非线性变换H_l(·), H由BN、ReLU、Conv组成
ResNets:
\[x_l = H_l(x_{l-1}) + x_{l-1}\]Dense connectivity:
\[x_l = H_l([x_0, x_1, ..., x_{l-1}])\]Composite function: BN+ReLU+Conv
Pooling layers:
- 将网络分成多个dense blocks
- transition layers由BN和1x1卷积组成,其后是一个2x2的平均池化层
Growth rate:
- 如果每个H_l产生k个特征, 那么l^{th}层有k_0 + k x (l - 1)个输入特征, 其中k_0是输入层的通道数量
- DenseNet和现有的网络结构的一个重要不同是DenseNet有非常窄的层, 比如k=12, 我们令参数k表示growth rate
- 相对小的growth rate是足够的, 对此的一个解释是, 每层都可以访问块中前面的特征, 因此可以访问网络的联合知识
Bottleneck layers:
- 尽管每层仅产生k个输出特征,但是它仍然有很多输入
- 在bottleneck层中在3x3卷积之前使用1x1卷积减小输入特征的维度
- BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3) 叫做DenseNet-B
Compression:
- 进一步提升模型的压缩, 在transition层减小特征的数量
- dense block 包含 m 个特征, 让transition产生 $\theta_m$个输出特征, 其中0<$\theta$<1为压缩系数
- 把$\theta$<1的DenseNet 叫做 DenseNet-C
- 当同时使用bottleneck和transition layers的\theta<1时, 模型叫做DenseNet-BC
Implementation Details:
在其他数据集:
- 除了ImageNet数据集, DenseNet实验使用的三个dense blocks, 它们有相等的层数
- 在进入第一个dense block之前, 在输入图像上使用一个输出通道为16的卷积(或者对于DenseNet-BC两倍的增长率)
- 每个卷积层的卷积核大小为3x3, padding为1, 使用zero-padding
- 在两个dense block之间使用1x1卷积紧跟着一个2x2平均池化作为transition layers
- 在最后一个dense block之后, 使用了一个全局平均池化和一个softmax分类器
- 三个dense blocks的特征图的大小尺度分别是32x32, 16x16, 8x8
- DenseNet结构的配置为{L=40, k=12}, {L=100, k=12}, {L=100, k=24}
- DenseNet-BC, 网络的配置为{L=250, k=12}, {L=250, k=24}, {L=190, k=40}
在ImageNet数据集上:
- 在ImageNet数据集上, DenseNet-BC结构为四个dense block, 224x224输入图像
- 初始层,卷积核数量为2k, 卷积核大小为7x7, 步长为2
- 所有其他层的特征数量为k
Experiments
Training:
- 优化器SGD
- CIFAR10和SVHN使用batchsize 64分别训练300和40个epochs
- 初始学习率为0.1, 在epochs为50%和75%的时候除以10
- ImageNet: 训练90epochs, batchsize 256, 初始学习率0.1, 在30epochs和60epochs除以10
- DenseNet的原始执行可能会有内存效率问题
- 权重衰减0.0001, 动量0.9
- 在CIFAR10、CIFAR100、SVHN上无数据增强
- 在每个卷积层后, 除了第一层,都有dropout层,dropout rate为0.2
Classification Results on CIFAR and SVHN:
Accuracy:
- 在所有CIFAR数据集上, DenseNet-BC L=190, k=40超过了所有SOTA
- 在C10上3.46%的错误率和在C100上17.18%的错误率比wide ResNet结构显著地低
- 在C10和C100上(无数据增强)最好的结果比带有drop-path的FractalNet将近低30%
- 在SVHN上, 加上dropout, DenseNet L=100, k=24 超过了取得最好成绩的wide ResNet
- 250层的DenseNet-BC不会继续提升性能,这说明SVHN是一个相对容易的任务, 容易过拟合
Capacity: 没有compression或者bottleneck层, DenseNet随着L和k的增加表现变好。他们将此归因于模型容量的增长。
Parameter Efficiency: DenseNet-BC 的 bottleneck结构 和 transition 层的维度减少 特别使得参数更有效率。
Overfitting: 更有效地利用参数意味着DenseNet更不容易过拟合
Classification Results on ImageNet : DenseNet201有20M参数产生与超过40M参数的101层ResNet相似的验证错误!