友情提示:请配合原文食用。
论文:Densely Connected Convolutional Networks
论文链接:https://arxiv.org/pdf/1608.06993.pdf
代码的github链接:https://github.com/liuzhuang13/DenseNet
0° Motivation
硬件突破和大数据集的完善,使原本凉凉的深度学习重新火了。自LeNet以后,学者一直致力于更好地提取特征,继而提出了多样的架构。虽网络各异,但总不过是令深网更深,通道更多。
然而,思路上革命性的创新(break point) 当属何恺明于2015年提出的残差网络ResNet。虽然ResNet的核心驱动,仍然是令深网有效地变深(让变深有收益,伴随Go Deeper, 准确率会提高),但提出的残差思路,实为一种突破性的贡献。
深网更深,凸显出一个关键问题:梯度消失。本文作者cue了一下ResNet, HighwayNet, FranctalNet 和随机深度网络。分析出共性:在网络架构上,都创造了shortcut。(这是一种 skip-connection,当前层提取结果直传到下一层)。作者领会了一下这么干的核心精神,然后得出了思路一:
尽力确保 最大化的 层级之间的 信息流动。网络中所有层互相直连。
(原文:to ensure maximum information flow between layers in the network, we connect all layers (with matching feature-map sizes) directly with each other.)
通过训练时随机弃用某些层,随机深度改善了训练。这表明 深网中某些层对提高表现贡献甚微,深网是一种冗余结构。另一方面,受GoogLeNet和FractalNet的启发,作者认为 只要深网够深,这时仅仅增加层内的通道数,就可以提高性能了(没必要动辄成百上千层)。综合这两点,产生了思路二:
并不极端地令深网更深,通道更多,而是通过特征再利用,提出了一种密集的压缩模型。
1°DenseNet架构
非线性环节
根据上述两大思路,作者做出了他的difference, 提出了DenseNet新架构。
传统CNN每一层前进后,都会产生output,即特征图。这种级联结构,当前层的结果特征图,运至下一层,作为下一层的输入。而DenseNet则是将当前层得到的特征图,输入到所有后续层。显然,对于一个L层网络,传统CNN包含L个层际之间的连接,而DN共包含 1 + 2 +…+L = L(L + 1)/2个层际连接。
考虑 经过CNN的单张图片,记作X0 。网络共L层,每一层都具备一个非线性环节,记作Hl(·) (P.S.函数H(·)下标l表示层数) (非线性环节可以是BN操作、ReLU、池化、Conv)。 记第l层输出为Xl
传统前馈卷积网络,将第l层的输入直接输入到l+1层, X l = H l ( X l + 1 ) X_l = Hl(X_l+1) Xl=Hl(Xl+1)
而ResNet中, 进行了跳跃直连,输入变为 X l = H l ( X l − 1 ) + X l − 1 X_l = H_l(X_l-1) + X_{