DenseNets论文笔记及读后感

12.19 densenets完结

首先是densenet的结构图。传统的神经网络层与层之间一般只有L个输出,而从图中可以看到而我们的这个新的网络有L(L+1)/2个输出。每层的输入都是拿前面所有层的features map作为输入,同样它的features map也作为所有下面层的输入。
这里写图片描述

陆陆续续花了几天时间读完了densenets论文,感受确是颇多,单单只是在分类这一模块中,模型已经进步了许多。不是仅仅只是传统的思路,单一的加多模型的层数。模型从最近的VGG16,Resnet,Highway Nets, GoogleNets, FractalNets, 到最新的DenseNets。很多网络都基于这么一个结论:如果每层之间更短的联系,并且更接近输入和输出,那么训练就更加有效。

VGG16虽然已经有非常好的性能,但是它的参数巨大,且训练非常慢,训练不有效。Highway Nets提供了一种新的思路,它用一种旁路(bypassing paths)的想法。ResNets继承了它的想法并发扬光大,它可以直接的连接两层并将上一层的特征,与上一层的输出通过简单的相加作为下一层的输入,并且在训练中随机地舍去一些层来加快训连效率。Googlenets与Resnets非常地像,但是Googlenets提供了一种新的加深网络深度的方法可,通过将特征图连在一起,加宽它的宽度。Fractals Nets提供了一种新的加快训练的方法,他将平行的几层随机组合,得到不同的随机深度。

最新的Densenets通过在一个模块中的dense connection,让每一层的输入都能由前面的所有层特征连在一起,并且每一层的输出都能作为后面所有层的输入。通过使用这种方法,会让信息和梯度流动更加有效,DenseNets拥有更少的参数,因为不需要更多的参数去重复学习冗余的特征。同样,梯度、信息的有效流动也能让训练更加有效。

作的一些笔记

1.pooling layers

因为在下采样过程中,特征的大小会发生变化,所以难以将这些特征图连在一起。为了解决这个问题,我们将网络分为多个dense块,在这些block之间再加入变化层,包括卷积层,BN层,和平均池化层。所以可以大概得出DenseNets的模型图样。这与最前面的图会有一点区别,加入了dense block。
这里写图片描述

2.Growth rate

即每层过滤器的个数,反映在特征图上就是channels。
可以通过看特征图来看这个网络的全局状态。每一层增加了k通道的特征图。

3.Bottleneck layers.Densenets-B

在33卷积前加上11,每个1*1生成4k的特征图。这就是Densenets,能够帮助遏制过拟合。

4.Compression。Densenets-C

在变化层加上一个θ参数(0<θ<=1),m代表上一个block的特征图数,θ*m就是经过该层后的特征图数,这能够有效压缩特征图信息。

比较Densenets,resnets等在不同数据集上的效果

Table 2(论文图表)
这里写图片描述

1.

实验结果表明(Table 2),DenseNets参数利用比其他网络(尤其是 ResNets)来的更加有效。D-BC中加入的两个尤其能让参数更加有效。

2.

首先要注意到的是,如果网络发生过拟合了,训练的loss是可能一直在下降的,但是它的测试error结果反而没有什么变化,甚至还有可能会增加。DenseNets更加有效利用参数的好处还有可能是,更少地导致过拟合。

3.

没有加入BC的网络可能存在一个潜在的过拟合情况,加bottleneck and compression可以有效遏制这种情况。

特征再使用

1.

同一个模块中的很早就被提取的特征,确是是被同一模块中很深的层所直接使用。

2.

transition层中的权重也是来自有前面的block中,从前到后的信息流动只有很少一部分是间接流动的。

3.

tranition层的输出特征很多是冗余的,它的权重占有很小的比例。这与BC的强大输出所吻合,该层只是压缩了输出。

4.

虽然最后的分类层使用了前面所有的密集快的特征,但是有相当一部分集中在最后一块内,这说明网络后面可能会产生更高级的特征。