【AI不惑境】网络宽度对模型性能有什么影响?
大家好,这是专栏《AI不惑境》的第三篇文章,讲述模型宽度与模型性能的关系。
进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考。如果说学习是一个从模仿,到追随,到创造的过程,那么到这个阶段,应该跃过了模仿和追随的阶段,进入了创造的阶段。从这个境界开始,讲述的问题可能不再有答案,更多的是激发大家一起来思考。
作者&编辑 | 言有三
上一期咱们说到深度学习模型之所以在各种任务中取得了成功,足够的网络深度起到了很关键的作用。
在一定的程度上,网络越深,性能越好。这一次我们来考虑另一个维度,宽度,即通道(channel)的数量。注意我们这里说的和宽度学习一类的模型没有关系,而是特指深度卷积神经网络的宽度。
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网络中被发挥地淋漓尽致。DenseNet网络通过各层之间进行concat,可以在输入层保持非常小的通道数的配置下,实现高性能的网络。
这一次的网络宽度对模型性能的影响就说到这里,更多请大家至我的知乎live中交流。
如何设计性能更强的 CNN 网络结构?
参考文献
[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.
总结
深度学习成功的关键在于深,但是我们也不能忘了它的宽度,即通道数目,这对于模型性能的影响不亚于深度,在计算量上的影响甚至尤比深度更加重要。
下期预告:学习率和batchsize如何影响模型的性能。
AI白身境系列完整阅读:
第一期:【AI白身境】深度学习从弃用windows开始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】学AI必备的python基础
第四期:【AI白身境】深度学习必备图像基础
第五期:【AI白身境】搞计算机视觉必备的OpenCV入门基础
第六期:【AI白身境】只会用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】学深度学习你不得不知的爬虫基础
第八期: 【AI白身境】深度学习中的数据可视化
第九期:【AI白身境】入行AI需要什么数学基础:左手矩阵论,右手微积分
第十期:【AI白身境】一文览尽计算机视觉研究方向
第十一期:【AI白身境】AI+,都加在哪些应用领域了
第十二期:【AI白身境】究竟谁是paper之王,全球前10的计算机科学家
AI初识境系列完整阅读
第一期:【AI初识境】从3次人工智能潮起潮落说起
第二期:【AI初识境】从头理解神经网络-内行与外行的分水岭
第三期:【AI初识境】近20年深度学习在图像领域的重要进展节点
第四期:【AI初识境】激活函数:从人工设计到自动搜索
第五期:【AI初识境】什么是深度学习成功的开始?参数初始化
第六期:【AI初识境】深度学习模型中的Normalization,你懂了多少?
第七期:【AI初识境】为了围剿SGD大家这些年想过的那十几招
第八期:【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?
第九期:【AI初识境】如何增加深度学习模型的泛化能力
第十期:【AI初识境】深度学习模型评估,从图像分类到生成模型
第十一期:【AI初识境】深度学习中常用的损失函数有哪些?
第十二期:【AI初识境】给深度学习新手开始项目时的10条建议
AI不惑境系列完整阅读:
第一期:【AI不惑境】数据压榨有多狠,人工智能就有多成功
第二期:【AI不惑境】网络深度对深度学习模型性能有什么影响?
感谢各位看官的耐心阅读,不足之处希望多多指教。后续内容将会不定期奉上,欢迎大家关注有三公众号 有三AI!
【AI不惑境】网络宽度对模型性能有什么影响?相关推荐
- 【AI不惑境】网络的宽度如何影响深度学习模型的性能?
大家好,这是专栏<AI不惑境>的第三篇文章,讲述模型宽度与模型性能的关系. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程 ...
- 「AI不惑境」网络深度对深度学习模型性能有什么影响?
https://www.toutiao.com/a6703349467061420557/ 大家好,这是专栏<AI不惑境>的第二篇文章,讲述模型深度与模型性能的关系. 进入到不惑境界,就是 ...
- 【AI不惑境】网络深度对深度学习模型性能有什么影响?
大家好,这是专栏<AI不惑境>的第二篇文章,讲述模型深度与模型性能的关系. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程 ...
- 【AI不惑境】学习率和batchsize如何影响模型的性能?
大家好,这是专栏<AI不惑境>的第四篇文章,讲述学习率以及batchsize与模型性能的关系. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿, ...
- 「AI不惑境」学习率和batchsize如何影响模型的性能?
https://www.toutiao.com/a6712708989177561611/ 大家好,这是专栏<AI不惑境>的第四篇文章,讲述学习率以及batchsize与模型性能的关系. ...
- 「AI不惑境」移动端高效网络,卷积拆分和分组的精髓
https://www.toutiao.com/a6714182512374989323/ 大家好,这是专栏<AI不惑境>的第六篇文章,讲述卷积拆分和分组卷积的精髓. 进入到不惑境界,就是 ...
- 【AI不惑境】模型压缩中知识蒸馏技术原理及其发展现状和展望
大家好,这是专栏<AI不惑境>的第十一篇文章,讲述知识蒸馏相关的内容. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程,那 ...
- 【AI不惑境】模型量化技术原理及其发展现状和展望
大家好,这是专栏<AI不惑境>的第十篇文章,讲述模型量化相关的内容. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程,那么 ...
- 【AI不惑境】模型剪枝技术原理及其发展现状和展望
大家好,这是专栏<AI不惑境>的第九篇文章,讲述模型剪枝相关的内容. 进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考.如果说学习是一个从模仿,到追随,到创造的过程,那么 ...
最新文章
- ORACLE ERP 的前世今生(5)
- Vivado中使用逻辑分析仪ILA
- zabbix 监控项自动发现过滤_Zabbix监控之配置Linux自动发现与自动注册报警
- javascript (function(){})()
- Python in worker has different version 3.7 than that in driver 3.6
- Spring Batch –使用JavaConfig替换XML作业配置
- 还驾驭不了4核? 别人已模拟出百万核心上的并行
- 随想录(编写用户侧定时器)
- 微软hci推荐服务器,Azure Stack HCI 的系统需求
- 给基于HEXO的博客添加gitter在线交流
- SpringBoot整合极光推送
- redis关于hash的常用命令
- SQLmap Tamper编写方法(笔记)
- FUD(恐惧,不确定性和怀疑)被揭穿...
- 手游开发中你需要了解的开发语言知识
- 计算机在艺术娱乐的应用,计算机技术在艺术领域的应用
- Python:【4】利用讯飞开放平台实现语音识别
- codevs 2627 村村通
- 基于 qiankun 的微前端最佳实践(万字长文) - 从 0 到 1 篇
- 怎样用计算机做初中物理实验,初中物理实验软件
热门文章
- hibernate教程--事务处理详解
- (SpringMVC)概述和简单使用
- 基于JWT的Token认证机制实现
- Packet tracer软件安装,模拟网络搭建【Packet tracer安装和使用】
- [转]virtualbox下安装增强工具简单步骤
- arcgis怎么运行python_在arcgis上用python脚本(arcpy)做数据批处理
- 极限中0除以常数_高中物理必知的50个关键常数
- 有一种惨:人还在,数据没了...
- 如何定位并修复 HttpCore5 中的 HTTP2 流量控制问题
- seata-golang 一周年回顾