目录
网络的深度带来了逐层的抽象能力,而网络的宽度更宽可以让每层学习到更加丰富的特征,如不同方向,不同频率的纹理特征;
1 为什么需要足够的宽度
网络更深带来的一个非常大的好处,就是逐层的抽象,不断精炼提取知识。如下图第一层学习到了边缘,第二层学习到了简单的形状,第三层开始学习到了目标的形状,更深的网络层能学习到更加复杂的表达。如果只有一层,那就意味着要学习的变换非常的复杂,这很难做到。
而宽度就起到了另外一个作用,那就是让每一层学习到更加丰富的特征,比如不同方向,不同频率的纹理特征。
下面是AlexNet模型的第一个卷积层的96个通道,尽管其中有一些形状和纹理相似的卷积核(这将成为优化宽度的关键),还是可以看到各种各种的模式。
因为该卷积层的输入是RGB彩色图,所以这里就将其可视化为3通道的彩色图,每一个大小是11*11。
有的是彩色有的是灰色,说明有的侧重于提取纹理信息,有的侧重于提取颜色信息。
可以发现卷积核可视化之后和Gabor特征算子其实很像。Gabor特征算子就是使用一系列不同频率的Gabor滤波核与图像卷积,得到图像上的每个点和附近区域的频率分布。通常有8个方向,5个尺度。
注意:太窄的网络,每一层能捕获的模式有限,此时网络再深都不可能提取到足够的信息往下层传递。
2,经典网络的第一层的宽度
就算一个网络越宽越好,我们也希望效率越高越好,因为宽度带来的计算量是成平方数增长的。我们知道对于一个模型来说,浅层的特征非常重要,因此网络浅层的宽度是一个非常敏感的系数,那么发展了这么久,那些经典的网络第一个卷积层的宽度都是多少呢?
从AlexNet的96层到Vgg,Resnet等多数网络使用的64层,到高效网络Mobilenet的32层和Shufflenet的24层,似乎已经探到了下限,再往下性能就无法通过其他的方法来弥补了。
前次我们说过有许多的研究都验证了网络必须具有足够的深度才能逼近一些函数,但同时宽度会带来参数的指数级增加。
3,宽度对模型性能的影响
网络的宽度自然也不是越宽越好,下面我们看看网络的宽度带来的性能提升。
我们看一下Mobilenet网络的结果,Mobilenet研究了网络的宽度对性能的影响,通过一个乘因子来对每一层的宽度进行缩放,它们试验了1, 0.75, 0.5和0.25共4个值。
从上面结果可以看得出来,性能是持续下降的。说明网络的宽度并不是越宽越好,对于每个模型是有一定的极限的。
在有三的书中,使用allconv6实验验证深度对网络模型的影响,在allconv6基础上修改出8种不同宽度的网络,验证宽度对网络性能的影响,使用的数据集是第一个数据集是GHIM数据集,第二个数据集是从Place20中选择了20个类别
首先我们比较Allconv6_1,Allconv6_2,Allconv6_3,Allconv6_4这4个模型和基准模型的结果,它们是以Allconv6_1为基础的模型。
Allconv6_1是各个通道数为baseline的四分之一的网络,而Allconv6_2,Allconv6_3,Allconv6_4分别是将Allconv6_1的第1,2层,第3,4层,第5层卷积通道数加倍的网络。
在GHIM数据集上的收敛结果如下:
从上图结果可以看出,基准模型allconv6的性能最好,allconv6_2,allconv6_3,allconv6_4的模型性能都超过allconv6_1,说明此时增加任何一个网络层的通道数都有益于模型性能的提升,而且性能仍旧未超过基准模型。
然后我们再看allconv6_5,allconv6_6,allconv6_7,allconv6_8与基准模型的对比,allconv6_5的各层的通道数只有baseline模型的一半。
从上图可以看出,模型的性能相差不大,这说明allconv6_5已经有足够好的宽度,再增加无益于性能的提升。
这一点可以通过Place20上的实验结果进行证明,结果如下:
4 如何更加有效地利用宽度
4.1 提高每一层通道的利用率
宽度既然这么重要,那么每一个通道就要好好利用起来,所以,第一个发力点,便是提高每一层的通道利用率。下面我们首先观察一下AlexNet网络的第一个卷积层。
看出来了吧,有些卷积核很相似,相互之间可以通过反转得到,比如前面两个,那么就只需要学习一个就行了,这便是网络参数互补现象,如果将减半后的通道补上它的反,会基本上相当于原有的模型。
基于这个原理,文[3]便是通过输入通道取反和输入通道进行concat的方式来扩充通道。这样仅仅以原来一半的计算量便维持了原来的网络宽度和性能。
4.2 用其他通道的信息来补偿
这个思想在DenseNet网络中被发挥地淋漓尽致。DenseNet网络通过各层之间进行concat,可以在输入层保持非常小的通道数的配置下,实现高性能的网络。
5 经典网络模型宽度设计方法
借鉴有三书中的方法,网络宽度设计方法主要包括三种设计思路,第一种通过简单的调整每一层的通道数量如第三节中讲述的基于Allconv6的通道数的改进方式。第二种 采用多分支网络结构如Inception,ResNext结构。第三种是采用通道补偿的方法。下面主要看第二种和第三种模型宽度的实际方法
5.1 采用多分支网络结构设计
该方法是使用经典的结构替换原始网络中的卷积层,使用宽度较好的神经网络模块替换原网络的模块,从而更改原网络的深度;
1)ResNext结构
作者提出 ResNeXt 的主要原因在于:传统的要提高模型的准确率,都是加深或加宽网络,但是随着超参数数量的增加(比如channels数,filter size等等),网络设计的难度和计算开销也会增加。因此本文提出的 ResNeXt 结构可以在不增加参数复杂度的前提下提高准确率,同时还减少了超参数的数量(得益于子模块的拓扑结构一样)。
网络 ResNeXt,同时采用 VGG 堆叠的思想和 Inception 的 split-transform-merge 思想,但是可扩展性比较强,可以认为是在增加准确率的同时基本不改变或降低模型的复杂度。ResNeXt是网络ResNet在宽度上的一个扩充。下图左边是ResNet,右边是ResNeXt网络结构
ResNeXt的基本模块包含了32个分支,每个分支一模一样。每个矩形框中的参数分别表示输入维度,卷积大小,输出维度。它主要是通过1*1的卷积 层进行降维然后再升维。
计算这两个网络结构的参数:
ResNet的参数 256*1*1*64+64*3*3*64+64*1*1*256=6932
ResNeXt的参数32*(256*1*1*4+4*3*3*4+4*1*1*256)=-70144
说明ResNet和ResNeXt参数数量是差不多,说明网络的宽度提升了,但是网络的参数是没有太大变化的。
Table1 列举了 ResNet-50 和 ResNeXt-50 的内部结构,另外最后两行说明二者之间的参数复杂度差别不大。
2)Inception结构
Inception结构,是一个多尺度,更宽的分支结构。寓意进行更深刻的感知。其基本结构如图所示,基本组成是4个并行的分支,三种不同尺度的卷积核和一个池化。通过4个分支的计算,在最后将计算的结果进行融合。
在InceptionA中3*3,5*5卷积仍然会导致参数量过大,对此问题进行改进,改进的inceptionB结构为:
通过改进的InceptionB,网路的宽度没有改变,Inception通过大小不同的卷积核提取图像不同尺度信息,可以得到多个粒度的特征表达
5.2 通道补偿技术
如果不想改变模型的宽度和深度,同时性能还能提高,可以通过以下的方法,类比将模型的宽度加深
1)提高每层网络通道的利用率
例如将输入通道取反然后和输入的通道进行连接的方式来扩充通道的宽度;
2)用其他通道的信息进行补偿
网络的个卷积层可能拥有不同的分辨率大小和不同抽象层次的信息。如果将不同通道信息进行融合,可以实现信息的互补。例如DenseNet网络。