论文阅读 | CVPR2017(Best Paper) | Densely Connected Convolutional Networks

一 为什么读这篇

大名鼎鼎的DenseNet,17年CVPR的best paper(当然有争议是后话),不得不读。黄高博士的扛鼎之作,之前在读他的Snapshot-Ensembles时感觉就很舒服,整个文章逻辑很清楚,实验对比做的也十分全面,相信这篇best paper更是没有问题,会给读者一种爽的感觉。

二 截止阅读时这篇论文的引用次数

2019.2.20 2852次。绝对值很高,但相比其他经典网络,ResNet,GoogLeNet之类,有些差距。

三 相关背景介绍

本篇在16年8月挂到arXiv上,中了2017年CVPR,是继16年何大神的ResNet之后,第二个华人的best paper,这里有个作者本尊的talk,现场讲解。一作Gao Huang(黄高)05年北航的本科生(GPA第一),15年清华博士毕业(读了6年。。),后来在康奈尔待了3年做博后,此刻在清华作青椒,本篇是在康奈尔时的工作。二作刘壮(同等贡献)也是碉堡,现在在伯克利做博士生,之前是清华姚班的(13级),发这篇文章时还在清华,也就是说本科生。。。最近以一作的身份新发了一篇《Rethinking the Value of Network Pruning》,中了19年的ICLR,同时也是18年NIPS的best paper award。。这个世界太疯狂了,这都不是潜力股了,而是才华横溢溢的不行了。

官方实现在这里:https://github.com/liuzhuang13/DenseNet

黄高个人主页在这里:http://www.gaohuang.net/

刘壮个人主页在这里:https://liuzhuang13.github.io/

四 关键词

DenseNet

五 论文的主要贡献

1 提出DenseNet的网络结构

六 详细解读

0 摘要

先前的研究中说明只要网络包含短路连接,基本上就能更深,更准确,更有效的训练。本文基于这个观察,引入了密集卷积网络(DenseNet),它以前馈方式将每个层连接到所有层。传统的卷积网络L层有L个连接,而DenseNet有\frac { L ( L + 1 ) } { 2 }​个直接连接。对于每一层,它前面所有层的特征图都当作输入,而其本身的特征图作为所有后面层的输入(短路连接被发挥到极致,网络中每两层都相连)。DenseNet具有几个引入注目的优点:可以缓解梯度消失问题,加强特征传播,鼓励特征重用,并大幅减少参数数量。

1 介绍

随着CNN变得越来越深,一个新的研究问题出现了:随着输入信息或梯度通过多层,它在到达网络结尾(或开始)处就消失了。ResNets和Highway Networks通过恒等连接将信号从一层传输到下一层。Stochastic depth通过在训练期间随机丢弃层来缩短ResNets,以得到更好的信息和梯度流。FractalNets重复组合几个并行层序列和不同数量的卷积块,以获得较深的标准深度,同时在网络中保持许多短路径。尽管上述方法的网络结构都有所不同,但它们有一个共同特征:创建从早期层到后期层的短路径。

本文提出一个简单的连接模式:为了确保网络中各层之间的最大信息流,将所有层(匹配特征图大小)直接相互连接。为了保持前向传播性质,每个层从所有前面的层获得附加输入,并将其自身特征图传递给所有后续层。

densenet-fig1.png

至关重要的是,与ResNets相比,在传递给下一层之前,不是通过求和来合并特征,而是通过concat来合并特征。因此,\ell ^ { t h }层有\ell个输入,包括所有先前卷积块的特征图。其特征图被传递到后续所有L - \ell层。这在L层网络中引入了\frac { L ( L + 1 ) } { 2 }个连接,而不是传统架构的L个连接。正是因为这种密集连接模式,所以称本文方法为密集连接网络(Dense Convolutional Network DenseNet)。

相比传统卷积网络,这种密集连接模式有有一点可能违反直觉的是,它需要更少的参数,因为无需重新学习冗余的特征图。本文提出的DenseNet架构显式区分了添加到网络的信息和保留的信息。DenseNet的层非常窄(如每层只有12个滤波器),只给网络的"集体知识"增加一小组特征图,并保持其余的特征图不变。

除了更好的参数利用率之外,DenseNet的一大优势是它改善了整个网络中的信息流和梯度,使得网络更易于训练。每层都可以直接访问损失函数和原始输入信号的梯度(我屮,这不就是GoogLeNet当时为解决梯度消失而在中间层引入分类器那种ugly办法的替代吗),从而导致隐式的深度监督。这有助于训练更深的网络。

2 相关工作

与DenseNet相似的级联结构早在1989年就提出来了。。Adanet的提出差不多是与DenseNet并行的,跨层连接也相似(话说竞争真激烈。。)

本文作者提出的另一个网络Stochastic depth说明并非所有层都需要,在深度残差网络中存在大量冗余的层。本文的部分灵感也来源于此。

相比从极深或极宽的架构中提取表示能力,DenseNet是通过特征重用来利用网络的潜力,得到易于训练和高参数效率的压缩模型。相比从不同层拼接特征的Inception网络,DenseNet更简单有效(看来Inception因其结构复杂性没少被批判)。

3 DenseNets

定义\mathbf { X } _ { 0 }为单张输入图像,网络由L层组成,每一层实现非线性变换H _ { \ell } ( \cdot ),其中\ell为层的索引号。H _ { \ell } ( \cdot )可以是BN,ReLU,Pooling,Conv等操作的复合函数,定义\ell ^ { t h }层的输出为\mathbf { X } _ { \ell }

ResNets

传统的层连接:\mathbf { x } _ { \ell } = H _ { \ell } \left( \mathbf { x } _ { \ell - 1 } \right)。ResNets增加了跳跃连接:\mathbf { x } _ { \ell } = H _ { \ell } \left( \mathbf { x } _ { \ell - 1 } \right) + \mathbf { x } _ { \ell - 1 }。ResNets的一个优势是梯度可以通过恒等函数直接从后面的层流向前面的层。然而,恒等函数和H _ { \ell }的输出通过加法合并,有可能会阻碍网络的信息流。

密集连接

本文引入与ResNets不同的连接模式:从任意层到所有后续层的直接连接(图1)。结果就是,第\ell ^ { t h }层接收所有之前层的特征图作为输入:\mathbf { x } _ { \ell } = H _ { \ell } \left( \left[ \mathbf { x } _ { 0 } , \mathbf { x } _ { 1 } , \dots , \mathbf { x } _ { \ell - 1 } \right] \right)。为了便于实现,concat H _ { \ell } ( \cdot )的多个输入为单一张量。

复合函数

受ResNet v2启发,定义H _ { \ell } ( \cdot )为三个连续运算的复合函数:BN,ReLU,3 x 3 Conv

池化层

当特征图的大小改变时,concat运算是不可能的,然鹅,卷积网络的一个关键组成部分就是下采样层,通过它可以改变特征图大小。为了便于在架构中进行下采样,将网络划分为多个密集连接的密集块(dense blocks),如图2所示。

densenet-fig2.png

将密集块之间的层称为过渡层(transition layers),它们进行卷积和池化。本文实验中的过渡层由BN,1 x 1卷积和 2 x 2平均池化组成。

成长率

如果每个函数H _ { \ell }生成k个特征图,它后面跟着的\ell ^ { t h }层有k _ { 0 } + k \times ( \ell - 1 )个输入特征图,其中k _ { 0 }是输入层的通道数。DenseNet和现有网络架构的一个重要区别是DenseNet可以有非常窄的层,如k = 12。本文将超参数k定义为网络的成长率(growth rate)。对此的一种解释是,每一层都可以访问其块中所有前面的特征图,即,网络的『集体知识』。可以将特征图视为网络的全局状态。每一层增加自己的k个特征图到这个状态。成长率反映了每层由多少新信息对全局状态有贡献。全局状态一旦写入,就可以被网络中的任何地方访问,而不像传统网络那样,无需从一层复制到另一层。(全文精华应该就是这一段了)

瓶颈层

1x1 conv非常有用(提升计算效率),本文也大用特用。本文定义DenseNet-B的H _ { \ell }​为 BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)

压缩

为了使模型更紧凑,可以减少过渡层的特征图数量。如果密集块包含m个特征图,定义接下来的过渡层生成\lfloor \theta m \rfloor个特征图,其中0 < \theta \leq 1表示压缩率。定义\theta < 1的DenseNet为DenseNet-C,本位实验中设置为\theta = 0.5。当同时使用瓶颈层和压缩过渡层时,定义模型为DenseNet-BC。

实现细节

非ImageNet数据集采用同一个架构,由3个密集块构成。ImageNet的架构如表1所示

densenet-table1.png

4 实验

4.1 数据集

CIFAR SVHN ImageNet

4.2 训练

所有网络都用SGD。

CIFAR和SVHN的batch size为64,epoch分别为300和40,初始学习率为0.1,在50%和75%的epoch时分别除10。

ImageNet的batch size为256,90个epoch,初始学习率为0.1,在30和60epoch时分别除10。

weight decay为10 ^ { - 4 },动量为0.9。用He初始化。

对于CIFAR和SVHN,还在每个卷积层后接了dropout层(除第一个卷积层外),丢失率为0.2。

4.3 CIFAR和SVHN的分类结果

densenet-table2.png
准确率

看表2的最后一行

容量

DenseNet可以利用更大更深模型表示能力的增长。

参数效率

如图4所示

densenet-fig4.png
过拟合

4.4 ImageNet的分类结果

主要用DenseNet-BC和ResNet作比较。

densenet-table3.png
densenet-fig3.png

5 讨论

表面上看,DenseNets和ResNets没什么不同,两个式子的差别仅仅是输入从加法变为concat,然而,这种看似很小的修改导致两种网络架构的行为明显不同。

模型紧凑

因为鼓励特征重用,所以得到更紧凑的模型。

如图4所示。

隐式深层监督

对DenseNets准确率提升的一种解释是各个层通过短路连接从损失函数接收额外的监督(某种深度监督)。DenseNets用隐式的方式执行相似的深度监督:网络顶部的单个分类器通过最多两到三个过渡层为所有层提供直接监督。 然而,由于在所有层之间共享相同的损失函数,因此DenseNets的损失函数和梯度基本上不那么复杂。

随机与确定性连接

和随机深度的对比,随机深度有点类似DenseNet:如果所有中间层都随机丢弃,那么在相同的池化层之间的任意两层都有可能直接连接。

特征重用

densenet-fig5.png

6 总结

DenseNet就是好,就是好啊就是好。在遵循简单的连接规则的同时,DenseNets自然地整合了恒等映射,深度监督和多样化深度的属性。

七 读后感

又是一篇没有什么数学公式的paper,越来越感觉深度学习像物理,很多结果都是基于做实验得到的。通过对实验的观察对比分析,找出实验中的缺陷不足,从而去改进,然后发paper。黄高博士的写作套路还是非常讨喜的,特别是开头的地方,娓娓道来,一步一步告诉你为什么要这么做,为什么要引入这一步。此外,DenseNets和作者本人的工作『随机深度』也有千丝万缕的关系,看来功夫做扎实了,沿着一条道路是可以出一系列成果的。

素质四连

要解决什么问题

这是个好问题。。是要进一步衍生ResNet吗?

用了什么方法解决

提出密集连接结构,将ResNet的跳跃连接发扬光大为两两连接

效果如何

效果比ResNet还好,通过减少滤波器个数(文中称作成长率),参数量也下来了

还存在什么问题

感觉效果提升并没有那么明显,被后续出来的ResNeXt超过了

八 补充

各种网络结构的实现:https://towardsdatascience.com/history-of-convolutional-blocks-in-simple-code-96a7ddceac0c

黄高本人视频讲解:https://zhuanlan.zhihu.com/p/53417625

作者本人的解答:CVPR 2017最佳论文作者解读:DenseNet 的“what”、“why”和“how”

DenseNet的3个优势:

1 更强的梯度流

2 更高的参数计算效率

3 保留低阶特征

https://towardsdatascience.com/history-of-convolutional-blocks-in-simple-code-96a7ddceac0c

def dense_block(x, f=32, d=5):
    l = x
    for i in range(d):
        x = conv(l, f)
        l = concatenate([l, x])
    return l
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容