在DenseNet出现之前,CNN的进化一般通过层数的加深(ResNet)或者加宽(Inception)的思想进行,DenseNet通过对特征的复用提出了一种新的结构,不但减缓了梯度消失的现象参数量也更少.本文通过大量可视化以及参数计算来进行讲解.
目录
- 背景
- DenseBlock
- 非线性组合函数
- Transition层
- 整个结构的计算
- DenseNet的思考
- 参考
背景
当CNN的层数变深时,输出到输入的路径就会变得更长,这就会出现一个问题:梯度经过这么长的路径反向传播回输入的时候很可能就会消失,那有没有一种方法可以让网络又深梯度又不会消失?DenseNet提出了一种很简单的方法,DenseNet直接通过将前面所有层与后面的层建立密集连接来对特征进行重用来解决这个问题,连接方式可以看下面这张图:
我们可以看到每一层的输出都连接到了后一层,这样对于一个L层的网络来说就会有 L ( L + 1 ) / 2 {L(L + 1)}/2 L(L+1)/2个连接,这里看完有些摸不着头脑没关系,接下来我们会具体展开.
Dense Block
Dense Block是DenseNet的一个基本模块,这里我们从一般的神经网络说起:
上图是标准神经网络的一个图,输入和输出的公式是 X l = H l ( X L − 1 ) X_l = H_l(X_{L-1}) Xl=Hl(XL−1),其中 H l H_l H