人工智能之DenseNet模型
前言:人工智能机器学习有关算法内容,请参见公众号“科技优化生活”之前相关文章。人工智能之机器学习主要有三大类:1)分类;2)回归;3)聚类。深度神经网络是不是越深越好?理想情况下,只要不过拟合,应该是越深越好。但是实际情况是网络加深,准确度却下降,针对这个问题,除了ResNet模型外,也有人提出了DenseNet模型来解决,今天我们重点探讨一下DenseNet模型^_^。
通过上一篇ResNet模型介绍, 我们知道传统的“提拉米苏”式卷积网络随着层数的加深,容易因梯度消失而造成训练集准确率下降现象。于是有牛人提出ResNet模型,它采用了Skip Connection, 梯度能畅通无阻地通过各个Res blocks,可以提高卷积网络深度,从而提高了卷积网络模型的准确率。
针对层数加深而引起的梯度弥散或消失问题,除了提出了ResNet模型外,又有牛人提出了DenseNet模型。
DenseNet模型更为极端,它的Skip Connection不仅仅只连接上下层,直接实现了跨层连接,每一层获得的梯度都是来自前面几层的梯度加成。
DenseNet模型概念:
受 Highway、ResNet 等算法思路的启发,有人提出了DenseNet模型,即提出了一种跨层的连接网络。DenseNet设计比较大胆,每个层的input 包括之前所有层的信息,通过将前面N多个层的 Feature 组合起来,形成对特征更丰富的描述和判别。从思想上来讲,是比较容易接受的。
DenseNet模型改变了传统网络反向传递时,梯度传播方式,由线性变成树状反向,这样的好处就在于减少了梯度消失的可能,并且加速训练,有利于更深层网络的训练。稠密的网络结构有类似正则功能,在小数据集合上能更好地避免过拟合。
DenseNet模型属于对ResNe模型扩展的一系列工作中比较有代表性的一个。
DenseNet模型结构:
一个词概括网络的结构特点就是Dense,一句话概括的话:
Foreach layer, the feature maps of all preceding layers are treated asseparate inputs whereas its own feature maps are passed on as inputs to allsubsequent layers.
DenseNet整个模型结构采用了模块化设计,其典型网络模块结构包含稠密块(Dense Block)和过渡层(transition layers),可以简单来可以看作是Dense Block-transition layers-Dense Block-transition layers…,如下图所示:
DenseNet在增加深度的同时,加宽每一个DenseBlock的网络宽度,能够增加网络识别特征的能力,而且由于DenseBlock的横向结构类似 Inception block的结构,使得需要计算的参数量大大降低。
下面来看看Dense Block内部结构,如下图所示。以5层Dense Block为例,层宽度(Growth rate)为k=4的Dense Block,层与层之间的激励函数(即Hl(⋅)Hl(⋅))为BN-ReLU-Conv(3x3)的结构。这个Growth rate实际上就是每一层特征图的数量,这样第l层就有k0+k×(l−1)k0+k×(l−1)个特征图。
简单地讲,就是每一层的输入来自前面所有层的输出。如下图:x0是input,H1的输入是x0(input),H2的输入是x0和x1(x1是H1的输出)……
为了进一步减少参数量,作了以下改进:
1)将Hl(⋅)Hl(⋅)该为BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)的结构,记为DenseNet-B
2)为了进一步减少参数量,在DenseNet-B的基础上,对过渡层的特征图进行压缩,产生[θm][θm]个特征图,其中0
DenseNet模型本质:
DenseNet模型本质或核心思想是HighWay Nets的思想:就是skip connection,对于某些的输入不加选择的让其进入之后的layer(skip),从而实现信息流的整合,避免了信息在层间传递的丢失和梯度消失的问题,还抑制了某些噪声的产生。
DenseNet则是让l层的输入直接影响到之后的所有层,它的输出为:xl=Hl([X0,X1,…,xl−1])。并且由于每一层都包含之前所有层的输出信息,因此其只需要很少的特征图就够了,这也是为什么DneseNet的参数量较其他模型大大减少的原因。
DenseNet模型优点:
1)减轻了vanishing-gradient(梯度消失);
2)加强了feature的传递;
3)更有效地利用了feature,支持feature重用;
4)一定程度上较少了参数数量。
DenseNet模型缺点:
1)训练时十分消耗内存,要消耗相当于 L(L+1)/2 层网络的内存;
2) 计算复杂度较大,比较耗显存和时间;
3) 当前深度学习框架对 DenseNe t的密集连接没有很好的支持,只能借助于反复的拼接(Concatenation)操作;
4) 对于大多数深度学习框架(如Torch和TensorFlow),每次拼接操作都会开辟新的内存来保存拼接后的特征。
DenseNet和ResNet比较:
1)DenseNet采用Concat层整合不同来源的特征,而ResNet则采用Eltwise层的加法操作。
2)DenseNet主要优势都是由Concat层带来的:
a)Concat层只是特征拼接,不对特征做任何改变。因此,只需相邻层的一个短接,后续所有层都可以拥有到该层的通路。 这些通路意味着更佳的信息前传与梯度反传。
b)Concat层会使得feature map 变厚,因此即使使用更少的卷积参数,feature map也不会因过小而产生信息瓶颈。这也是DenseNet一定程度上参数更少的原因。
3)DenseNet采用transition层(BN+1x1卷积+2x2AvePooling)来实现下采样,而ResNet则多采用MaxPooling以及卷积的stride。
4)DenseNet由于在一个模块中要使用Concat,因此feature map的大小必须保持不变。 而ResNet则会某种情况下存在采样的特殊情况。
DenseNet模型性能:
在四个极具竞争力的物体识别标准图像库(CIFAR-10,CIFAR-100, SVHN, and ImageNet)对DenseNet模型进行测试。结果表面在大多数的测试图像库中,DenseNet模型网络比同等深度的其他网络表现出了更好的性能和效果,然而它只需要很少的计算两来达到很高的性能。如下表所示:
DenseNet模型和ResNet模型在参数和浮点运算量对比结果,如下图所示:
由于每个Layer的输入会比较多,因此可以减少每一层的 Channel 数量,Feature 利用率比较高,整体算下来,同样的连接数量,DenseNet会比 ResNet 的 Feature 更少,通过实验对比,DenseNet用一半的计算量达到了ResNet的效果。
DenseNet在 ResNet 基础上,提出了更优秀的 shortcut 方式。Dense Connection不仅能使得feature 更加robust,还能带来更快的收敛速度。显存和计算量上稍显不足,需要业界进一步的优化才能广泛应用。
结语:
除了ResNet模型解决因层数加深而引起的梯度弥散或消失问题外,还有DenseNet模型。DenseNet模型设计比较大胆,每个层的input 包括之前所有层的信息,通过将前面N多个层的 Feature 组合起来,形成对特征更丰富的描述和判别。其核心思想是HighWay Nets的思想:就是skip connection,对于某些的输入不加选择的让其进入之后的layer(skip),从而实现信息流的整合,避免了信息在层间传递的丢失和梯度消失的问题,还抑制了某些噪声的产生。通过实验对比,DenseNet用一半的计算量达到了ResNet的效果。目前DenseNet在显存和计算量上稍显不足,需要业界进一步的优化才能广泛应用。
------以往文章推荐-----
领取专属 10元无门槛券
私享最新 技术干货