DenseNet简介
\space\space\space\space\space\space
DenseNet借鉴了之前的短路连接网络,推出的一种密集连接的网络。下图展示了一个dense block的结构。
\space\space\space\space\space\space
为了最大化传递信息流,DenseNet把所有层都连接起来——前面所有层的输出融合在一起作为当前层的输入,对于
l
t
h
l^{th}
lth层就会有前面
l
l
l层的特征图(feature map)合在一起作为输入;当前层的输出又以同样的方式传递到其后的所有层。于是层和层之间总的连接数是
L
(
L
+
1
)
2
\frac{L(L+1)}{2}
2L(L+1)。这样密集的连接,对于前向传播,每一层都可以直接获得原始的输入信号;对于反向传播,每一层都可以直接获得loss函数的梯度。这样显著的增强了信息流在网络中的传递,缓解了梯度消失问题,降低了训练难度。
\space\space\space\space\space\space
对于每层输入的特征融合操作,ResNet是将特征图作元素级别的加法(summation),而DenseNet是将特征图在通道方向作连接操作(concatenate)。论文当中提到特征相加(summation)可能会阻碍信息流的传递。
\space\space\space\space\space\space
相比传统的网络,DenseNet需要更少的参数,因为它无需重新学习冗余的特征图。传统的网络,每层既要学习新信息又要保留旧信息。DenseNet结构明确区分了添加到网络中的新信息和保留的信息。所以网络每层只需要少量的参数来获取新信息即可,旧信息可直接从前面网络层的输出获得。(ResNet的残差结构也是这样,但是DenseNet连接更密集,所需的参数更少)
\space\space\space\space\space\space
综上,DenseNet的优势:1.它缓解了梯度消失问题;2.增强了传递的特征信息;3.鼓励特征重用;4.减少了参数数量。
DenseNet细节
1.如上图所示,dense block中的每一层都是由三个连续的操作组成:batch normalization (BN)、rectified linear unit (ReLU)、3×3 convolution (Conv)。
2.由于下采样的缘故,特征的连接操作会因为维度不匹配而无法进行,所以网络被分为多个dense block,每个dense block中没有下采样,连接操作正常进行;dense block与dense block之间加入一个transition block来完成下采样,它也由三个连续的操作组成:batch normalization (BN)、1×1 convolution (Conv)、2×2 average pooling layer。如下图所示。
3.如果每层输出 k k k个特征图,那么对于 l t h l^{th} lth层,它的输入是 k 0 + k × ( l − 1 ) k_0+k\times(l-1) k0+k×(l−1),其中 k 0 k_0 k0是dense block一开始输入层的特征图通道数。论文当中称 k k k为增长率(growth rate)。如果将所有特征图看作全局状态(global state)或集体知识(“collective knowledge”),那么每层可以为全局状态(global state )或集体知识(“collective knowledge”)添加 k k k个新状态(新知识)。一般 k k k取比较小的值就可以达到很好的效果,因为相比传统网络,DenseNet可以直接获得之前的信息,无需重复学习。
4.虽然 k k k取值比较小,但是随着层数增加,每一层输入特征图会越来越多(通道数越来越多),为了提高计算效率,增加瓶颈层(bottleneck layer)来减少输入特征图的数量。dense block中每一层的操作变为:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)。(论文当中每个1×1的卷积生成 4 k 4k 4k个特征图)
5.论文当中还引入了一个压缩因子 θ \theta θ,来减少transition block输出的特征图数。如果dense block输出 m m m个特征图,那么transition block输出 ⌊ θ m ⌋ \lfloor\theta m\rfloor ⌊θm⌋( 0 < θ ⩽ 1 0<\theta\leqslant1 0<θ⩽1)个特征图( 0 < θ ⩽ 1 0<\theta\leqslant1 0<θ⩽1)
DenseNet的网络结构(用于ImageNet)如下图所示。