深度学习论文翻译解析(十五):Densely Connected Convolutional Networks
论文标题:Densely Connected Convolutional Networks
论文作者:Gao Huang Zhuang Liu Laurens van der Maaten Kilian Q. Weinberger
论文地址:https://arxiv.org/pdf/1608.06993.pdf
DenseNet 的GitHub地址:https://github.com/liuzhuang13/DenseNet
参考的 DenseNet 翻译博客:https://zhuanlan.zhihu.com/p/31647627
声明:小编翻译论文仅为学习,如有侵权请联系小编删除博文,谢谢!
小编是一个机器学习初学者,打算认真研究论文,但是英文水平有限,所以论文翻译中用到了Google,并自己逐句检查过,但还是会有显得晦涩的地方,如有语法/专业名词翻译错误,还请见谅,并欢迎及时指出。
如果需要小编其他论文翻译,请移步小编的GitHub地址
传送门:请点击我
如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote
这里结合网友的笔记,用Keras实现了DenseNet,地址如下:
tensorflow学习笔记——DenseNet
在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如AlexNet, VGGNet, Inception,ResNet等模型。CNN史上一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcuts , skip connection),这有助于训练过程中梯度的反向传播,从而能训练出更深的CNN网络。今天我们要介绍的是DenseNet模型,它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。
众所周知,在DenseNet之前,卷积神经网络提高效率的方向,要么深(比如ResNet,解决了网络深时候的梯度消失问题),要么宽(比如GoogLeNet的 Inception),而作者从Feature入手,通过对feature 的极致利用达到更好的效果和更少的参数。所以DenseNet的另一大特色是通过特征在channel 上的连接来实现特征复用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比 ResNet 更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。本文学习其论文。
该文章提出的DenseNet核心思想在于建立了不同层之间的连接关系,充分利用了feature,进一步减轻了梯度消失问题,加深网络不是问题,而且训练效果非常好。另外,利用bottleneck layer,Translation layer以及较小的growth rate使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少了。DenseNet优点很多,而且在和ResNet的对比中优势还是非常明显的。
摘要
最近的研究表明,如果神经网络各层到输入和输出层采用更短的连接(shorter connections),那么网络可以设计的更深,更准确且训练起来更有效率。在这篇文章中,我们基于这个观点,介绍了稠密卷积网络(DenseNet),该网络在前馈时将每一层与其他的任一层都进行了连接。传统的 L 层卷积网络有 L 个连接——每一层与它的前一层和后一层相连——我们的网络有 L(L+1)/2 个连接。每一层都将之前的所有层的特征图作为输入,而它自己的特征图是之后所有层的输入。DenseNets 有一些很不错的优点:有助于解决梯度消失(vanishing-gradient)问题,增强特征 (feature)传播,促进特征的重复利用,大大减少了参数的数量。我们在四个目标检测任务(CIFAR-10, CIFAR-100, SVHN和 ImageNet)中验证了我们提出的结构。DenseNets 在这些数据集上大都有较大的提高,而且使用更少的计算量就可以获得更好的性能。代码和预训练模型如下:https://github.com/liuzhuang13/DenseNet。
1,引言
在视觉检测任务中,卷积神经网络(CNNs)已经成为占有绝对优势的机器学习方法。尽管它们在20年前就已经被提出了,但是计算机硬件和网络结构的改善才使训练深层的卷积网络在最近成为现实。起初的LeNet5有5层,VGG有19层,只有去年的Highway网络和ResNets网络才克服了100层网络的障碍。
随着CNNs变得越来越深,一个新的问题出现了:当输入或梯度信息在经过很多层的传递之后,在到达网络的最后(或开始)可能会消失或者“被冲刷掉”(wash out)。很多最新的研究都说明了这个或者与这个相关的问题。ResNet网络和Highway网络将旁路信息(bypass Signal)进行连接。随机深度(stochastic depth)在训练过程中随机丢掉了一些层,进而缩短了ResNets网络,获得了更好的信息和梯度流。FractalNets 使用不同数量的卷积 block 来重复的连接一些平行层,获得更深的网络同时还保留了网络中的 short paths。尽管这些方法在网络结构和训练方法等方面有所不同,但他们都有一个关键点:他们都在前几层和后几层之间产生了短路径(short paths)。
上图为一个dense block的结构图,在传统的卷积神经网络中,如果你有 L 层,那么就会有 L 个连接,但是在DenseNet中,会有 L(L+1)/2 个连接。简单说,就是每一层的输入来自前面所有层的输出。就是说 x0 是 input,H1 的输入是 x0(input),H2的输入是 x0 和 x1 (x1 是 H1 的输出)。
在这篇文章中,我们提出了一个结构,该结构是提炼上述观点而形成的一种简单的连接模式:为了保证能够获得网络层之间的最大信息,我们将所有层(使用合适的特征图尺寸)都进行互相连接。为了能够保证前馈的特性,每一层将之前所有层的输入进行拼接,之后将输出的特征图传递给之后的所有层。结构如图1所示。重要的一点是,与ResNets不同的是,我们不是在特征传递给某一层之前将其进行相加(combine),而是将其进行拼接(concatenate)。因此,第 l 层 有 l 个输入,这些输入是该层之前的所有卷积块(block)的特征图,而它自己的特征图则传递给之后的所有 L-l 层。这就表示,一个 L 层的网络就有 L(L+1)/2 个连接,而不是像传统的结构仅仅有 L 个连接,由于它的稠密连接模块,所以我们更喜欢将这个方法称为稠密卷积网络(DenseNet)。
该稠密连接模块的一个优点是它比传统的卷积网络有更少的参数,因为它不需要再重新学习多余的特征图。传统的前馈结构可以被看成一种层与层之间状态传递的算法。每一层接收前一层的状态,然后将新的状态传递给下一层。它改变了状态,但也传递了需要保留的信息。ResNets将这种信息保留的更明显,因为它加入了本身的变换(identity transformations)。最近很多关于ResNets的研究都表明ResNets的很多层是几乎没有起作用的,可以在训练时随机的丢掉。这篇论文【21】阐述了ResNets很像(展开的)循环神经网络,但是比起循环神经网络有更多的参数,因为它每一层都有自己的权重。我们提出的DenseNet结构,增加到网络中的信息与保留的信息有明显的不同。DenseNet层很窄(例如每一层有12个滤波器),仅仅增加小数量的特征图到网络的“集体知识”(collective knowledge),并且保持这些特征图不变——最后的分类器基于网络中的所有特征图进行预测。
除了更好的参数利用率,DenseNet 还有一个优点是它改善了网络中信息和梯度的传递,这就让网络更容易训练。每一层都可以直接利用损失函数的梯度以及最开始的输入信息,相当于是一种隐形的深度监督(implicit deep supervision)。这有助于训练更深的网络。此外,我们还发现稠密连接有正则化的作用,在更少训练集的任务中可以降低过拟合。
我们在四个目标检测任务(CIFAR-10, CIFAR-100,SVHN和ImageNet)中验证了DenseNet。在和现有模型有相似准确率的前提下,我们 的模型有更少的参数。此外,我们的网络还超过了目前在大部分的检测任务都有最好结果的算法。
2,相关工作
自从神经网络被提出之后,网络结构的探索就成为神经网络研究的一部分。最近神经网络的广泛关注也给这个研究领域注入了新的生机。网络层数的增加也让更多的人进行结构的改善,不同连接模式的探索,早期研究观点的复现等方面的研究。
在 1980s 神经网论文中提出的级联结构很像我们提出的稠密网络。他们之前的工作主要关注在全连接的多层感知机上。最近,使用批梯度下降训练的全连接的级联网络也被提出来了。尽管在小数据上有效,但该方法的网络却有几百个参数。【9, 23, 31, 41】提出在CNNs 中利用跨层链接获得的多种特征,这已经被证明在很多视觉任务上有效。和我们的工作类似,【1】使用和我们相似的跨层链接方式提出了一种纯理论的网络架构。
Highway是这些网络中第一个提出使用 100 多层的结构训练一个端到端的网络。使用旁路(bypassing paths)和门控单元(gating units),Highway 网络可以很轻松地优化上百层的网络。旁路被认为是使深层网络容易训练关键因素。该观点在ResNets中被进一步证实,ResNets使用本身的特征图作为旁路。ResNets在很多图像识别,定位和检测任务(如ImageNet 和 COCO 目标检测)中都获得了不错的效果,并且还打破了之前的记录。最近,一种可以成功训练 1202层ResNets的随机深度(stochastic depth)被提出。随机深度通过训练过程中随机丢掉一些层来优化深度残差网络的训练过程。这表明深度(残差)网络中并不是所有的层都是必要的,有很多层是冗余的。我们论文的一部分就受到了该论文的启发。预激活(pre-activation)的ResNets也有助于训练超过 1000 层的网络。
一种让网络更深(如跨层连接)的正交法(orthogonal approach)是增加网络的宽度。GooLeNet使用了“inception”模块,将不同尺度的滤波器产生的特征进行组合连接。在【38】中,提出了一种具有广泛宽度的残差模块,它是ResNets的一种变形。事实上,只简单的增加ResNets每一层的滤波器个数就可以提升网络的性能。FractalNets 使用一个宽的网络结构在一些数据集上也获得了不错的效果。
DenseNets 不是通过很深或者很宽的网络来获得表征能力,而是通过特征的重复使用来利用网络的隐含信息,获得更容易训练,参数效率更高的稠密模型。将不同层学到的特征图进行组合连接,增加了之后层输入的多样性,提升了性能。这同时也指出了 DenseNets和 ResNets 之间的主要差异。尽管 Inception 网络也组合连接了不同层的特征,但DenseNets 更简单,也更高效。
也有很多著名的网络结构获得了不错的结果。NIN 结构将多层感知机与卷积层的滤波器相连接来提取更复杂的特征。在DSN中,通过辅助分类器来监督内部层,加强了前几层的梯度。Ladder网络将横向连接(lateral connection)引入到自编码器中,在半监督学习任务中获得不错的效果。在【39】中,DFNs通过连接不同基础网络的中间层来改善信息的传递。带有可以最小化重建损失路径(pathways that minimize reconstruction losses)的网络也可以改善图像分类模型的性能。
图1表示的是 Dense block,而图2 表示的则是一个 DenseNet的结构图,在这个结构图中包含了3个 dense block。作者将DenseNet 分为多个 dense block,原因是希望各个 dense block 内的 feature map 的 size 统一,这样在做 concatenation 就不会有 size的问题。
3,DenseNets
假设一张图片 x0 在卷积网络中传播。网络共有 L 层,每一层都有一个非线性转换 Ht(*),其中 l 表示层的维度(即第几层)。 Ht(*) 是一个组合函数,有BN,ReLU,池化或者卷积。我们用 xt 表示 lth 层的输出。
ResNets。传统的前馈网络是将 lth 层的输出作为 (l + 1)th 层的输入,可用该方程来表示:xl = Hl(xt - 1)。ResNets增加了一个跨层连接,将自身与非线性转换的结果相加:
所以对ResNet而言,l 层的输出是 l-1 层的输出加上对 l-1 层输出的非线性变换。
ResNets 的一个优点是可以直接将梯度从后层传向前层。然而,自身与经过 Hl 得到的输出是通过求和的形式来连接的。这可能使网络中信息的传播受到影响。
稠密连接(Dense connectivity)。为了更好的改善层与层之间信息的传递,我们提出了一种不同的连接模式:将该层与之后的所有层进行连接,如图1所示,因此,lth 层将与之前所有层的特征图 x0,...xl-1作为输入:
其中 [x0, ...xl-1] 表示第 0, ... l-1层输出的特征图的进行拼接。由于他的稠密连接模式,我们称该网络结构为稠密卷积网络(DenseNet)。为了便于表达,我们将方程(2)中 Hl(*) 的多个输入表示为一个向量。
组合函数(composite function)。受【12】的启发,我们将 Hl(*) 定义为三种操作的组合函数,分别是BN,ReLU和3*3的卷积。
池化层(pooling layers)。当特征图的尺寸发生改变时,方程(2)中连接操作就会出现问题。然而,卷积网络有一个基础的部分——下采样层,它可以改变特征图的尺寸。为了便于下采样的实现,我们将网络划分为多个稠密连接的 dense block。如图2所示。我们将每个 block 之间的层称为过渡层,完成卷积核池化的操作。在我们的实验中,过渡层由 BN层,1*1卷积层和2*2平均池化层组成。
增长速率(growth rate)。如果每个函数 Hl 都产生 k个特征图,之后的 lth 层就有 k0+k(l+1) 个特征图作为输入,其中 k0 表示该层的通道数。DenseNet和现存网络结构的一个很重要的不同是,DenseNet的网络很窄,如 k=12.我们将超参数 k 称为网络的增长速率。我们会在文章的第4部分进行说明,一个很小的增长速率在我们测试的数据集上就可以获得不错的效果。这种情况的一种解释就是,每一层都可以和它所在的 block 中之前的所有特征图进行连接,使得网络具有了“集体知识”(collective knowledge)。可以将特征图看做是网络的全局状态。每一层相当于是对当前状态 增加 k 个特征图。增长速率控制着每一层有多少信息对全局状态有效。全局状态一旦被写定,就可以在网络中的任何地方被调用,而不用像传统的网络结构那样层与层之间的不断重复。
Bottleneck层。尽管每一层只产生 k 个输出特征图,但它却有更多的输入,在【37, 11】中已经说明可以在 bottleneck 层中3*3的卷积之前加入 1*1 的卷积实现降维,可以减少计算量。我们发现这种设计对 DenseNet 极其有效,我们将具有 bottleneck 层,即 BN-ReLU-Conv (1*1)——BN-ReLU-Conv(3*3) 的结构称为 DenseNet-B。在我们的实验中,我们令 1*1 的卷积生成 4k 个特征图。
Compression(压缩)。为了简化模型,我们在过渡层中减少了特征图的数量。如果一个Dense block 有 m 个特征图,我们让之后的过渡层生成 θm 个输出特征图,其中 0 < θ <=1 表示Compression系数,当 θ=1 时,经过过渡层的特征图数量没有改变。我们定义 θ<1 的DenseNet为DenseNet-C,并且在我们的实验中 θ = 0.5。如果 bottleneck 和过渡层都有 θ < 1,我们称该模型为 DenseNet-BC。
实现细节。在除了ImageNet外的所有数据集上,我们实验中使用的 DenseNet都有3个dense block,每个 block 都要向他的层数。在进入第一个 dense block 之前,输入图像先经过 16个(DenseNet-BC中是两倍的增长速率)卷积。对于 3*3 的卷积层,使用一个像素的零填充来保证特征图尺寸不变。在两个 dense block 之间的过渡层中,我们在 2*2 的平均池化层之后增加了 1*1 的卷积。在最后一个 dense block 之后,使用全局平均池化和softmax分类器。三个 dense block 的特征图的尺寸分别是 32*32, 16*16, 8*8 。我们改变一些参数 {L=40, k=12},{L=100, k=12},{L=100,k=24},在基本的 DenseNet上做了一些实验。对于 DenseNet-BC,分别设置{L=100, k=12},{L=250, k=24},{L=190,k=40}。
对于在ImageNet数据集上的实验,我们使用4个dense block的 DenseNet-BC结构,图片的输入是 224*224。最开始的卷积层有 2k(64)个卷积,卷积核是 7*7,步长是2;其余所有层的特征图都设为 k。在ImageNet数据集上的网络如表1所示。
table1 就是整个网络的结构图。这个表中的 k=32,k=48中的 k 是 growth rate,表示每个 dense block 中每层输出的 feature map个数。为了避免网络变得很窄,作者都是采用较小的 K,比如32这样的,作者的实验也表明小的 k 可以有更好的效果。根据 dense block 的设计,后面几层可以得到前面所有层的输入,因此 concat后的输入 channel 还是比较大的。另外这里每个 dense block的 3*3 卷积前面都包含了一个 1*1 的卷积操作,就是所谓的 bottleneck layer,目的是减少输入的 feature map 数量,既能降维减少计算量,又能融合各个通道的特征。另外作者为了进一步压缩参数,在每两个 dense block 之间又增加了 1*1 的卷积操作。因此在后面的实验对比中,如果看到DenseNet-C这个网络,表示增加了这个 Translation layer,该层的 1*1 卷积的输出 channel 默认是输入 channel 到一半。如果你看到 DenseNet-BC这个网络,表示既有 bottleneck layer,又有 Translation layer。
4,实验
我们在一些检测任务的数据集上证明 DenseNet的有效性,并且和现有的一些网络进行了对比,特别是ResNet和它的变形。
4.1 数据集
CIFAR。两种CIFAR数据集都是 32*32 的彩色图,CIFAR-10(C10)是10类,CIFAR-100(C100)是100类。训练集和测试集分别有 50000 和 10000 张图片,我们从训练集中选 5000 张作为验证集。我们采用这两个数据集上广泛使用的数据增强方式(镜像/平移)。用在数据集后的“+”来标色使用了这种数据增强方式(如C10+)。至于预处理,我么使用每个颜色通道的均值和标准差来归一化。最后,我们使用全部的 50000 张训练图片,在训练结束时记录测试误差。
SVHN。SVHN数据集是 32*32的彩色数字图。训练集有 73257张图片,测试集有 26032张,有 531131 张作为额外的训练。在接下来实验中,我们没有使用任何的数据增强,从训练集中选取 60000 张图片作为验证集。我们用验证集误差最小的模型来进行测试。我们对像素值执行除 255 操作,归一化到 【0, 1】。
ImageNet。ILSVRC 2012 分类数据集有 1.2百万张训练集,50000张验证集,共 1000类。我们采用和论文【8, 11, 12】同样的数据增强方式,在测试时使用 Single-crop 或 10-crop 将图片尺寸变为 224*224。根据【11, 12, 13】,我们记录了在验证集上的分类误差。
table 2 在三个数据集(C10, C100,SVHN)上和其他算法的对比结果。ResNet【11】就是Kaiming He的论文,对比结果一目了然。DenseNet-BC的网络参数和相同深度的 DenseNet相比确实减少了很多!参数减少除了可以节省内存,还能减少过拟合。这里对于SVHN 数据集,DenseNet-BC的结果并没有 DenseNet(k=24)的效果好,作者认为原因主要是 SVHN 这个数据集相对简单,更深的模型容易过拟合。在表格的倒数第二个区域的三个不同深度 L 和 k 的 DenseNet的对比可以看出随着 L 和 K 的增加,模型的效果是更好的。
4.2 训练
作者在不同数据集上采样的 DenseNet 网络会有一点不一样,比如在 Imagenet 数据集上,DenseNet-BC 有 4个 dense block,但是在别的数据集上只用3个 dense block。
所有的网络均使用随机梯度下降法(SGD)进行训练。在CIFAR和SVHN 数据上,我们令 batchsize = 64,分别训练了 300轮和40轮。最初的学习率都为 0.1,分别在训练总轮数的 50%和75%时,将学习率变为原来的 0.1倍。在ImageNet上,我们将模型训练了90轮,batchsize=256。初始学习率设为 0.1,在第30轮和第 40 轮分别将学习率缩小 10倍。受 GPU内存的限制,我们设最大的模型(DenseNet-161) batchsize=128。为了弥补小 batch size 的不足,我们将模型训练了 100 轮,并且在 90轮时将学习率除以 10。
根据【8】,我们设置梯度衰减值为 10e-4,Nesterov 动量设为 0.9。我们采用论文【10】中介绍的权重初始化方式。对于三种没有使用数据增强的数据,如 C10, C100,SVHN,我们在每个卷积层(除了第一层)之后增加了一层 dropout层,并且设置失活率为 0.2。对于每个任务和每个模型都只进行一次测试。
4.3 在CIFAR 和 SVHN 上的分类结果
我们使用不同的深度(L),不同的增长速率(k),来分别训练 DenseNets。在CIFAR 和 SVHN 上的结果如表2所示。为了突出结果,我们对其做了标记,将性能优于现存模型的结果加粗,将该数据集上的最好结果用蓝色标记。
准确率(Accuracy)。可能最惹人注目的是表2最后一行的结果,其是 L=190, k=40 的 DenseNet-BC 网络在CIFAR 上的结果,性能已超过现存的所有模型。在C10+上错误率为 3.45%,在C100+上的错误率 为 17.18% 。在C100+上的误差率远远低于宽ResNet(wide ResNet)网络。我们在C100和C100(无数据增强)上的误差很喜人:比 FractalNets和使用dropout正则项的结果低了接近 30%。在SVHN上,L=100,k=24 的 DenseNet(使用dropout)也远超宽ResNet 的最好结果。然而,250层的DenseNet-BC 的性能却没有提升太多。这可能是因为 SVHN的任务很简单,复杂的模型往往会导致过拟合。
容量(Capacity)。不考虑 compression或bottleneck层, L和k越大,模型性能越好。我们把这归功于模型容量的增加。这在C10+和C100+这两列中得到了很好的证明。在C10+这列,误差率从 5.24%降到了 4.10%,最后到了 3.74%。因为模型的参数量从1M增加到7M,最后到了 27.2M。在C100+这列,我们可以看到相似的结果。这表明DenseNet可以使用更大更深的模型来增加表征能力,也表明他们没有出现过拟合或者残差网络的优化困难等问题。
参数效率。表2 的结果表明DenseNet比常见的网络(特别是ResNet)的参数效率更高。使用 bottleneck结构并且在过渡层使用降维操作的 DenseNet-BC的参数利用率极其高。例如,我们的 250层模型只有 15.3 M的参数量,但是它的性能却远超其他参数量超过 30M的模型,像 FractalNets和 宽 ResNet。我们也将L=100,k=12的 DenseNet-BC性能与 1001层 pre-activation的 ResNet进行了比较(如,在C10+的误差 4.51%VS4.62%, 在C100+的误差:22.27%VS22.71%)。这两个网络在C10+数据上的训练loss和测试误差如图4(右图)。1001层的深度ResNet收敛到一个更低的loss,但却有相似的测试误差。我们会在接下来对这个内容进行更深入的探讨。
过拟合(Overfitting)。更高效的利用参数的一个作用是DenseNets不容易发生过拟合。在不使用数据增强的数据集上,我们发现到 DenseNet结构和之前的工作相比较,其改进还是很明显的。在C10上,误差降了 29%,从 7.33%降到了 5.19%。在C100上,降了大约 30%,从 28.2%降到了 19.64%。通过实验,我们发现一个潜在的过拟合现象:在C10上,通过将 k 从 12 增加到 24,模型的参数量增加了 4倍,而误差却从 5.77% 增加到 5.83%,DenseNet-BC 的 bottleneck 和 compression层似乎是应对这种现象的一种有效措施。
4.4 ImageNet 分类结果
我们在ImageNet分类任务上测试了不同深度和增长速率的 DenseNet-BC 的误差,并且和ResNet结构的性能进行了比较。为了对这两种结构有一个公平的比较,我们排除了其他所有的因素,如数据预处理方式,优化器设置。我们仅仅将 DenseNet-BC 网络替代ResNet模型,而保留ResNet的其他实验参数不变。
我们记录了DenseNets在ImageNet上 single-crop 和 10-crop的验证误差,如表3所示。
DenseNets 和 ResNets Single-crop的top-1 验证误差如图3所示,其中左图以参数量为变量,右图以 FLOPs为变量。
如图3所示,与ResNets相比,在相同性能的前提下 DenseNets参数量和计算量更小。例如,拥有 20M 参数的 DenseNet-201 的误差率和拥有超过 40M 参数的 101-ResNet 误差率相近。从图3的右图也可以看到类似的结果:和ResNet-50 计算量接近的 DenseNet 大约是 ResNet-101 计算量的两倍。
图3是DenseNet-BC 和 ResNet在ImageNet数据集上的对比,左边的那个图是参数复杂度和错误率的对比,你可以在相同错误率下看参数复杂度,也可以在相同参数复杂度下看错误率,提升还是很明显的,右边是flops(可以理解为计算复杂度)和错误率率的对比,同样有效果。
值得注意的是,我们是修改和ResNets对应的超参数而不是DenseNets的。我们相信还可以通过修改更多的超参数来优化DenseNet在ImageNet上的性能。
图4也很重要,左边的图表示不同类型DenseNet的参数和 error 对比。中间的图表示 DenseNet-BC和ResNet在参数和error的对比,相同 error 下,DenseNet-BC的参数复杂度要小很多。右边的图也是表达 DenseNet-BC-100 只需要很少的参数就能达到和 ResNet-1001相同的结果。
5,讨论
从表面来看,DenseNets和ResNets很像:方程(2)和方程(1)的不同主要在输入 Hl(*) (进行拼接而不是求和)。然而,这个小的改变却是给这两种网络结构的性能带来了很大的差异。
模型简化性(Model Compactness)。将输入进行连接的直接结果是,DenseNets 每一层学到的特征图都可以被以后的任一层利用。该方式有助于网络特征的重复利用,也因此得到了更简化的模型。
图4左边的两张图展示了实验的结果,左图比较了所有 DenseNets的参数效率,中图对DenseNets 和 ResNets 的参数效率进行了比较。我们在 C10+ 数据上训练了不同深度的多个小模型,并绘制出准确率。和一些流行的网络(如AlexNet, VGG)相比,pre-activation 的 ResNets 的准确率明显高于其他网络。之后,我们将 DenseNets (k=12)与这网络进行了比较。DenseNet的训练集同上节。
如图4,DenseNet-BC 是参数效率最高的一个 DenseNet 版本。此外,DenseNet-BC 仅仅用了大概 ResNets 1/3 的参数量就获得了相近的准确率(中图)。该结果与图3的结果相一致。如图4右图,仅有 0.8M 参数量的 DenseNet-BC 和有 10.2M参数的 101-ResNets 准确率相近。
隐含的深度监督(implicit deep supervision)。稠密卷积网络可以提升准确率的一个解释是,由于更短的连接,每一层都可以从损失函数中获得监督信息。可以将 DenseNets 理解为一种“深度监督”(Deep supervision)。深度监督的好处已经在之前的深度监督网络(DSN)中说明,该网络在每一隐含层都加了分类器,迫使中间层也学习判断特征(discriminative features)。
DenseNet和深度监督网络相似:网络最后的分类器通过最多两个或三个过度层为所有层提供监督信息。然而,DenseNets的损失含数字和梯度不是很复杂,这是因为所有层之间共享了损失函数。
随机 VS 确定连接。稠密卷积网络与残差网络的随机深度正则化(stochastic depth regularzaion)之间有着有趣的关系。在随机深度中,残差网络随机丢掉一些层,直接将周围的层进行连接。因为池化层没有丢掉,所以该网络和DenseNet有着相似的连接模式:以一定的小概率对相同池化层之间的任意两层进行直接连接——如果中间层随机丢掉的话。尽管这两个方法在根本上是完全不一样的,但是 DenseNet 关于随机深度的解释会给该正则化的成功提供依据。
总结一下:DenseNet和stochastic depth的关系,在 stochastic depth中,residual中的layers在训练过程中会被随机drop掉,其实这就会使得相邻层之间直接连接,这和DenseNet是很像的。
特征重复利用。根据设计来看,DenseNets 允许每一层获得之前所有层(尽管一些是通过过渡层)的特征图。我们做了一个实验来判断是否训练的网络可以重复利用这个机会。我们首先在 C10+ 数据上训练了 L=40, k=12 的 DenseNet。对于每个 block的每个卷积层 l,我们计算其与 s 层连接的平均权重。三个 dense block 的热度图如图 5 所示。平均权重表示卷积层与它之前层的依赖关系。位置(l, s)处的一个红点表示层 l 充分利用了前 s 层产生的特征图。由图中可以得到以下结论:
- 1,在同一个 block 中,所有层都将他的权重传递给其他层作为输入。这表明早期层提取的特征可以被同一个 dense block 下深层所利用
- 2,过渡层的权重也可以传递给之前 dense block 的所有层,也就是说 DenseNet 的信息可以以很少的间接方式从第一层流向最后一层
- 3,第二个和第三个 dense block 内的所有层分配最少的权重给过渡层的输出,表明过渡层输出很多冗余特征。这和 DenseNet-BC 强大的结果有关系
- 4,尽管最后的分类器也使用通过整个 dense block 的权重,但似乎更关注最后的特征图,表明网络的最后也会产生一些高层次的特征。
6,结论
我们提出了一个新的卷积网络结构,称之为稠密卷积网络(DenseNet)。它将两个相同特征图尺寸的任意层进行连接。这样我们就可以很自然的设计上百层的网络,还不会出现优化困难的问题。在我们的实验中,随着参数量的增加,DenseNets的准确率也随之提高,而且也没有出现交叉表现或过拟合的现象。通过超参数的调整,该结构在很多比赛的数据上都获得了不错的结果。此外,DenseNets有更少的参数和计算量。因为我们只是在实验中调整了对于残差网络的超参数,所以我们相信通过调整更多的超参数和学习率,DenseNets的准确率还会有更大的提升。
遵循这个简单的连接规则,DenseNet可以很自然地将自身映射(identity mappings),深度监督(deep supervision)和深度多样化(diversified depth) 结合在一起。根据我们的实验来看,该结构通过对网络特征的重复利用,可以学习到更简单,准确率更高的模型。由于简化了内部表征和降低了特征冗余,DenseNets可能是目前计算机视觉领域中在卷积网络方面非常不错的特征提取器。在以后的工作中我们计划研究 DenseNets下的特征迁移工作。