DenseNet主要是借鉴总结前人ResNet,Highway Networks,Stochastic depth,FractalNets等的思想,提出了一种新的网络层的连接方式——(每个DensNet Block中)每个网络层的输入都来自于(此DenseNet Block)前面所有层的输出feature map的合并,且与ResNet的跳跃连接的按位相加合并不同。ResNet是不同feature map的同一位置的数相加,但DenseNet是将所有跳跃连接的feature map通道合并,作为输入。
DenseNet的优点有:
- 1、与所有使用了skip connection结构的网络一样,减轻了梯度消失的烦恼;
- 2、使得特征传播更为有效,增加的特征的使用效率;
- 3、减少参数,有正则化减轻过拟合的作用。
现在的网络性能增加主要是朝着两个方向发展:加深(从AlexNet到VGG)或者加宽(GoogLeNet的inception结构等)。然而更有技术的方式应该是去研究如何改变网络结构,网络的连接方式,如ResNet就是改变了网络层之间的连接方式,很大程度解决了梯度传播的问题。DenseNet也是从网络连接方式上对网络性能进行了改进。
传统的神经网络一般都是相邻网络层之间相连,不想邻网络层之间没有连接。而ResNet对此进行了改进,增加了skip connection分支连接,而DenseNet可以看做是ResNet的加强版,一个Block中不止有一个skip connection,而是每两个网络之间都有连接,也即每两个不相邻的网络间都有skip connection。这样的好处是使得feature 得到了充分的利益。文章最开始的那个图,就是一个Dense Block。
一个普通的L层的网络层与层之间的连接数为L,但是在Dense Block中其连接数为(L+1)*L/2。在ResNet中跳跃连接层的输入的函数如下,其中相加为按位数字相加求和: ResNet中的残差函数 在DenseNet中每一层网络的的输入的函数如下: Dense Block连接输入函数其中[x0,x1,... ]表示各层的feature map,这个函数的意思就是将各层输出的feature map的channel 合并,而不是像ResNet中那样相加求和。 与ResNet相似,DenseNet也是由多个Block组成的,每个Block中间通过一个transition layer连接,这个transition layer是用来降维及下采样的(1x1卷积用来降维,池化用来下采样)。由于transition layer 的输入feature map channels是前面一个Dense Block的所有层的feature map channel的总和,这使得每一层卷积层的channel可以设置得很小,不用像别的网络那样动辄几百上千。
总结一下感觉就像是ResNet的增强版吧,增强了每一层网络产生的feature的利用效率,有效缓解梯度消失,减少参数减轻过拟合,效果还是很好的。
网友评论