专栏首页有三AI【AI不惑境】网络的宽度如何影响深度学习模型的性能?

【AI不惑境】网络的宽度如何影响深度学习模型的性能?

1 为什么需要足够的宽度

网络更深带来的一个非常大的好处,就是逐层的抽象,不断精炼提取知识,如下图第一层学习到了边缘,第二层学习到了简单的形状,第三层开始学习到了目标的形状,更深的网络层能学习到更加复杂的表达。如果只有一层,那就意味着要学习的变换非常的复杂,这很难做到。

而宽度就起到了另外一个作用,那就是让每一层学习到更加丰富的特征,比如不同方向,不同频率的纹理特征。

下面是AlexNet模型的第一个卷积层的96个通道,尽管其中有一些形状和纹理相似的卷积核(这将成为优化宽度的关键),还是可以看到各种各种的模式。

因为该卷积层的输入是RGB彩色图,所以这里就将其可视化为3通道的彩色图,每一个大小是11*11。

有的是彩色有的是灰色,说明有的侧重于提取纹理信息,有的侧重于提取颜色信息。

可以发现卷积核可视化之后和Gabor特征算子其实很像。Gabor特征算子就是使用一系列不同频率的Gabor滤波核与图像卷积,得到图像上的每个点和附近区域的频率分布。通常有8个方向,5个尺度。

太窄的网络,每一层能捕获的模式有限,此时网络再深都不可能提取到足够的信息往下层传递。

2 网络到底需要多宽

那么一个网络是越宽越好吗?我们又该如何利用好宽度呢?

2.1、网络宽度的下限在哪?

就算一个网络越宽越好,我们也希望效率越高越好,因为宽度带来的计算量是成平方数增长的。我们知道对于一个模型来说,浅层的特征非常重要,因此网络浅层的宽度是一个非常敏感的系数,那么发展了这么久,那些经典的网络第一个卷积层的宽度都是多少呢?

从AlexNet的96层到Vgg,Resnet等多数网络使用的64层,到高效网络Mobilenet的32层和Shufflenet的24层,似乎已经探到了下限,再往下性能就无法通过其他的方法来弥补了。

前次我们说过有许多的研究都验证了网络必须具有足够的深度才能逼近一些函数,比如文[1]中构造的3层网络,如果想要2层网络能够逼近表达能力,宽度会是指数级的增加。

那么反过来,是不是也有一些函数只有足够宽才能够表达呢?

针对网络宽度的研究虽不如网络深度多,但是也有学者做了相关研究。文[2]中就提出了任何Lebesgue-integrable函数,不能被一个宽度小于n的ReLU网络逼近,n是输入的维度,Lebesgue-integrable函数就是满足下面积分条件的函数。

不过与深度不同的是,这样的一些函数宽度减少后,用于补偿模型性能的深度不是呈指数级增长,而是多项式增长,这似乎反应了宽度并没有深度那么重要。

不过不管怎么样,当前研究者们都从理论上探索了宽度和深度的下限,表明宽度和深度是缺一不可的。

2.2、网络宽度对模型性能的影响

网络的宽度自然也不是越宽越好,下面我们看看网络的宽度带来的性能提升。

我们看一下Mobilenet网络的结果,Mobilenet研究了网络的宽度对性能的影响,通过一个乘因子来对每一层的宽度进行缩放,它们试验了1, 0.75, 0.5和0.25共4个值。

从上面结果可以看得出来,性能是持续下降的。

那么,是不是网络越宽越好呢?下面我们还是通过几个实验来证明就是了。公开论文中使用的ImageNet等数据集研究者已经做过很多实验了,我们另外选了两个数据集和一个全卷积模型。

第一个数据集是GHIM数据集,第二个数据集是从Place20中选择了20个类别,可见两者一个比较简单,一个比较困难。

使用全卷积模型的基准结构,包含5层卷积和一个全连接层, 因此我们称其为allconv6吧,表示深度为6的一个卷积网络。

对这个网络的各个卷积层,我们也设置了不同的参数配置如下,每一个卷积层的stride都等于2。

首先我们比较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上的实验结果进行证明,结果如下:

2.3、网络宽度和深度谁更加重要?

这个问题目前没有答案,两者都很重要,不过目前的研究是模型性能对深度更加敏感,而调整宽度更加有利于提升模型性能。

Mobilenet的作者们将深层更窄的网络和浅层更宽的网络进行了对比,去掉了conv5_2到conv5_6这5层不改变分辨率的depth seperable卷积块,结果对比如下:

更窄的网络拥有了更少的参数和更好的性能,这似乎也验证了增加网络的深度比增加网络的宽度更有利于提升性能。

在Wide Resnet网络中,作者们在CIFAR10和CIFAR100上用参数只是稍微增加的一个16层的宽网络取得了比1000层的窄网络更好的性能,而且计算代价更低。在ImageNet上50层的宽Resnet在参数增加少量的基础上,也比相应的ResNet152层的性能更好。

另一方面,宽度相对于深度对GPU也更加友好,因为GPU是并行处理的,许多研究也表明加宽网络比加深网络也更加容易训练。

没有谁更重要,根据笔者的经验,我们应该优先调整网络的宽度。

3 如何更加有效地利用宽度?

从前面的结果我们可知,网络的宽度是非常关键的参数,它体现在两个方面:(1) 宽度对计算量的贡献非常大。(2)宽度对性能的影响非常大。

我们的追求当然是越窄同时性能越高的网络,确实很贪婪,不过这是要实现的目标,可以从以下几个方向入手。

3.1、提高每一层通道的利用率

宽度既然这么重要,那么每一个通道就要好好利用起来,所以,第一个发力点,便是提高每一层的通道利用率。下面我们首先观察一下AlexNet网络的第一个卷积层。

看出来了吧,有些卷积核很相似,相互之间可以通过反转得到,比如前面两个,那么就只需要学习一个就行了,这便是网络参数互补现象,如果将减半后的通道补上它的反,会基本上相当于原有的模型。

基于这个原理,文[3]便是通过输入通道取反和输入通道进行concat的方式来扩充通道。这样仅仅以原来一半的计算量便维持了原来的网络宽度和性能。

3.2、用其他通道的信息来补偿

这个思想在DenseNet[4]网络中被发挥地淋漓尽致。DenseNet网络通过各层之间进行concat,可以在输入层保持非常小的通道数的配置下,实现高性能的网络。

这一次的网络宽度对模型性能的影响就说到这里,更多请大家至我的知乎live中交流。

参考文献

[1] Eldan R, Shamir O. The power of depth for feedforward neural networks[C]//Conference on learning theory. 2016: 907-940.

[2] Lu Z, Pu H, Wang F, et al. The expressive power of neural networks: A view from the width[C]//Advances in Neural Information Processing Systems. 2017: 6231-6239.

[3] Shang W, Sohn K, Almeida D, et al. Understanding and improving convolutional neural networks via concatenated rectified linear units[C]//international conference on machine learning. 2016: 2217-2225.

[4] Huang G, Liu Z, Van Der Maaten L, et al. Densely connected convolutional networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4700-4708.

总结

深度学习成功的关键在于深,但是我们也不能忘了它的宽度,即通道数目,这对于模型性能的影响不亚于深度,在计算量上的影响甚至尤比深度更加重要。

本文分享自微信公众号 - 有三AI(yanyousan_ai),作者:言有三

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【模型解读】深度学习网络只能有一个输入吗

    早在上个世纪90年代的时候,LeCun等研究人员就开始利用神经网络陆续进行一些研究,比如我们熟知的大名鼎鼎的LeNet5,但这绝不是唯一,今天我们来说他们的另一...

    用户1508658
  • 【Lasagne速成】Lasagne/Theano图像分类从模型自定义到测试

    说了这么久的开源框架,我们好像一直忘了一个很老牌的框架,就是theano对不对,在2008年的时候,这个框架就由Yoshua Bengio领导的蒙特利尔LISA...

    用户1508658
  • 【模型解读】“全连接”的卷积网络,有什么好?

    我们知道,曾经深度网络训练不好收敛,Resnet的出现打破了这一僵局,背后的思想仅仅只是拉了一个skip connect,也就是将输入和输出相连相加,下面是一个...

    用户1508658
  • Web Components 笔记

    关键字:ES2015类的自定义元素写法、全局声明自定义元素、shadowroot,生命周期事件

    申君健
  • 空间映射网络--Spatial Transformer Networks

    Spatial Transformer Networks 主要对目标在特征空间做不变性归一化 解决 角度、尺度等变形引入的影响 Code: http...

    用户1148525
  • 腾讯会议进入后全部听不到声音,请问怎么设置?

    今天公司需要开个在线会议,安装好腾讯会议后,听不到任何声音,只有人员进入的声音。各种设置也调整过了,都不行。请问应该怎么设置,还是需要另外购买?

    用户6924812
  • RTK:针对大数据的稀释曲线

    Link: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5870771/

    生物信息知识分享
  • Python爬虫笔记5-JSON格式数

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。...

    py3study
  • 【答疑解惑】i++,++i,i+=的区别

    说起这个i++, ++i 入门练习都会搞这个,一如既往,百试不爽。 表达式 a = i++; 它等价于 a = i ; i = i + 1; 表达式 a = ...

    程序员互动联盟
  • Python Json

    ''' 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON, 因为JSON表示出来就是一个字符串,...

    py3study

扫码关注云+社区

领取腾讯云代金券