深入探讨神经网络宽度对深度学习模型性能的影响|文末送书

社区活动 Admin ⋅ 于 3周前 ⋅ 最后回复由 Admin 2周前 ⋅ 474 阅读

本文作者为深度学习领域资深专家言有三。作者在AI领域笔耕不辍,近期发布新书《深度学习之模型设计:核心算法与案例实践》,系统讲述深度学习模型设计核心算法,同时配套大量实战案例。

我们特邀作者送出10本新书作为极市粉丝福利,获取方式见文末。活动截止时间:2020年7月21日20点


在一定的程度上,网络越深,性能越好。这一次我们来考虑另一个维度,宽度,即通道(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是并行处理的,许多研究也表明加宽网络比加深网络也更加容易训练。

这两个例子,一个网络深度影响更大,一个网络宽度影响更大,应该说无法比较谁更加重要,网络深度和宽度都很重要!倒是可以从这几个方向来看:

(1)深度相关计算量是O(N),宽度则是O(N*N),宽度更加敏感;(2)弥补深度不足需要的代价更高,而增加宽度提升性能更快;(3)增加宽度对GPU更加友好

根据笔者的经验,我们应该优先调整网络的宽度。

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

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

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

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

宽度既然这么重要,那么每一个通道就要好好利用起来,所以,第一个发力点,便是提高每一层的通道利用率。

文[3]研究表明网络中存在参数互补现象,如果将减半后的通道补上它的反,会获得相当于通道减半前原有模型的表达能力。基于这个原理,通过输入通道取反和输入通道进行concat的方式来扩充通道。这样仅仅以原来一半的计算量便维持了原来的网络宽度和性能。

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

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

总结

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

参考文献

[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.

送书福利

《深度学习之模型设计:核心算法与案例实践》
file

➤章节目录:
第1章 神经网络和计算机视觉基础
第2章 深度学习的基础
第3章 数据集、评测指标与优化目标
第4章 加深网络,提升模型性能
第5章 1×1卷积,通道维度升降的利器
第6章 加宽网络,提升模型性能
第7章 残差连接,深层网络收敛的关键
第8章 分组卷积与卷积拆分,移动端高效率经典模型
第9章 多尺度网络与非正常卷积,更丰富的感受野与不变性
第10章 多输入网络,图像检索和排序的基准模型
第11章 时序神经网络,有记忆的网络更聪明
第12章 卷积从二维变成三维,实现升维打击
第13章 动态推理与注意力机制,网络因样本而异
第14章 生成对抗网络

本书得到了依图科技CTO、新加坡工程院院士、IEEE Fellow颜水成教授,新智元创始人、CEO 杨静,中国科学院半导体研究所研究员鲁华祥,知识星球CEO吴鲁加4位业内大咖的鼎力推荐,是一本非常优质,适合任何深度学习领域从业者学习的好书。



$\color{#ff2941}{➤获取方式}$

在$\color{#ff2941}{本贴下面}$进行留言,写下自己的$\color{#ff2941}{深度学习}$心得感悟,$\color{#ff2941}{7月21日20点}$,极小东将选取$\color{#ff2941}{10条}$优质留言赠送此书(共10本)。没有被抽到的开发者可以通过本链接进行购买。

微信公众号: 极市平台(ID: extrememart )
每天推送最新CV干货

本帖由 Admin 于 2周前 取消置顶
回复数量: 22
  • 作为一个小白,深度学习在我看来就是建模来模拟想要表达的对象,跟构建函数一个道理,比如复杂的天气预测,影响天气有很多因素,比如风向,经纬度,大气环流,洋流和地形等等,这每个因素都是一个未知数,所以最终预测的天气就是每个未知数的n次方相加减,当然,这些参数都是需要大量训练得来的,到了深度学习这边,也可以把框架的每一层网络当成一个未知数,只要有足够多的样本,通过训练以及反向传播优化参数最后总能模拟出想要的对象,网络的深可以想成未知数的个数,网络的宽可以想成未知数的次方,通过训练得到结果才能大致确定最后的分配比。网络的深和宽无谓孰好孰坏,每种网络也不会有固定的分配比,但总有一个中和点能使网络性能达到最佳,这就要看先验经验和实验结果来最后确定了。小白拙见,当然,还是十分想要这本书的,是我想学习的😄 😄

    3周前
    • @ssyy 最近写了一个小模型,cifar10正确率91%左右,小白算是尽力了。。。即将步入研究生生涯,虽然深度学习近几年持续降火,最近又看到一些推文发的视觉职位灰飞烟灭的毒鸡汤,但我还是对这个方向有兴趣,就毅然决然地选择了这个方向。选的导师是图像处理方向的,但我之前是自动化专业,完全不了解图像,想着在家没事就提前来学校先学习一下基础吧,一开始连tensorflow gpu都装不好,真的是一脸懵逼,无从下手的感觉。。然后疯狂查资料配置环境和装VC,然后学习反向传播也是一头懵,看经典论文,Alexnet VGGnet Googlenet目前看的还行,Resnet和Densenet也有所了解,就萌生了自己写一个简单框架跑一下的想法。2012年的冠军Alexnet叱咤一时,虽然很经典,但是发展到现在大尺寸卷积的感受野也可以通过小卷积堆叠来做到了,并且减少了计算量,然后Googlenet的模块化堆叠虽然效果更好,但目前水平有限,所以最后还是采用结构相对简单的Vgg框架。设计的一共6层卷积,然后最后用Googlenet的全局平均池化代替全连接,实际效果比Flatten层略好,很可能是我的网络太浅所以作用不大,但毕竟就是学习一下,本来也没有什么实际意义。然后对于BN层放Relu前还是后的争论,我也试着做了一下,结果是BN放后面效果好了大概0.6%左右,在我目前的理解是Relu过滤<0的输入,然后BN再把relu的输出强行拉回正态分布,因为在我看来网络学习的就是数据的分布,这样有利于训练防止梯度弥散。然后训练200次准确率在85%左右,基本收敛,然后保存模型参数,再用keras的数据增强扩大一下训练集,再训练200次正确率91%左右,没有完全收敛,但笔记本感觉快要热爆炸了。。。等开学了拿导师的2080s试手哈哈。虽然目前cifar10的最高正确率接近96%,但我的模型简洁啊。。。开个玩笑,是实力不允许,也只是拿经典论文的创新点糅合一下,站在巨人的肩膀上,效果还不错,也懂得了调参的艰辛,最后推荐跟我一样的小白用jupyter调试,分段跑代码还是很方便的,但肯定效率没pycharm高就是了,毕竟小白容易出错,改着跑着很好用。做这个实验没有什么意义,跟深度和宽度也没什么关系,就是纯粹练习一下,只看论文有些细节还是不明白,并且通过实验也能验证自己的一些想法是不是对的,最近又出了很多模型,像那个chost net还没来得及看,总之给我的感受就是这行就是要关注最新的技术,说不定以后某一天深度学习就被新生技术取代了。。。最后希望自己能有所创新吧

      2周前
      • Admin 社区管理员 @ 极市平台

        @ssyy 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

        2周前
  • hunwenpinghao 学生 @ 西电

    对于宽度也就是channel,我觉得可以把它看做是关注点,举个例子,例如我们要辨别一张人脸,有些channel的关注点是鼻子,有些channel的关注点是耳朵,有些channel的关注点是眉毛,这些关注点一般来说当然是关注的越多越好,但是,如果channel过多呢?底层网络一般关注的是细节信息,高层网络关注的是语义信息。就底层而言。设想我们要辨别一对双胞胎,可能通过耳朵的卷曲程度这一点就能区别两个人,但是区别它两个的前提是首先识别他是个一个人,这就需要更多的信息,即更多的channel,那么如果channel太多,就会造成冗余,如果有3个channel关注了鼻子,只有一个channel关注了耳朵,那么就会造成不平衡,就会出现偏差;就高层而言,假如高层网络曲解了呢,越复杂月容易曲解。所以,现在NAS才那么火热,找到一个最合适的网络就交给网络自己解决吧,个人见解,不喜可喷!

    3周前
    • Admin 社区管理员 @ 极市平台

      @hunwenpinghao 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • hzlbbfrog 硕士 @ 东南大学

    我是一个深度学习的小白,本专业是传统工科。我希望可以用深度学习,给所在的古老的行业带来一点新的活力,引入不一样的气息。虽然前路艰难,宝宝会继续努力的!
    之前的送书活动,辛辛苦苦转发获得了100多个赞,第六名 :sob: :sob: :sob:。就差一名就有机会得到书了。这次,选我选我选我!!求pick!!!

    3周前
    • Admin 社区管理员 @ 极市平台

      @hzlbbfrog 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • cherryruan 学生 @ TUB

    深度学习看似简单,但实际上里面太多的细节需要斟酌了。想要书📖,谢谢大佬🧍‍♂️

    2周前
  • 作为一个只学了一点知识的小白,我觉得宽度是提取信息的特征,深度的话,是抽象得到的信息。他们在一定程度上加大了模型的复杂度,从而获取对实际更好的效果。虽然目前我看了一些论文都在刷某几个数据集,但希望自己可以改变模式,脚踏实地,对标实际的去解决生活中的问题。小白想要书,谢谢大佬。

    2周前
    • Admin 社区管理员 @ 极市平台

      @killme 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • 深度学习,我是又爱又恨,目前我没有资格去评论它.我只想说一下我的学习过程,第一次接触DL,导师就说让我多看论文,不要去跑那些人家已经开源的code,除了能看一下实验结果外,没有任何用处,当时我不信,就想,不去跑人家的demo那怎么知道和论文上的是不是对应的,结果事实证明导师是对的,尴尬.后来就很老实的回来看论文,把一篇论文读懂,再把code运行出来,应用可视化去看内部的流程,去反思人家的idea解决了什么问题,没有解决什么问题,再痛定思痛自己为什么没想出来,哈哈.学习的过程很痛苦,但始终坚信DL能改变未来,希望自己能在DL领域贡献自己的一份力,这就是我学习下去的动力.

    2周前
    • Admin 社区管理员 @ 极市平台

      @Lee_rain 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • 深度学习感悟,今年来深度学习在CV、NLP等等领域都得到了极大应用研究。深度学习作为机器学习方法的一类,通过构建众多参数、线性函数组合、非线性激活函数表达的神经元连接形式,实现深层次的网络化模型,通过构建代价函数(loss)和利用非线性优化的方法(如随机梯度下降)来实现网络中的参数对 有监督数据的 最优,从而实现模型的泛化能力。深度学习过程,一般是获取、处理数据,选择与设计模型,构建模型的评价函数、训练与测试、模型部署和移植优化的过程。各个领域目前都存在经典的模型算法,例如图像分类领域的VGG、Inception、ResNet模型,通常也出现在其他任务中的主干网络;目标检测领域的one-stage方法yolov4、SSD,two-stage方法FasterRCNN、RetinaNet,Anchor-free方法CerterNet、FCOS等;语义分割领域的Segnet、DeepLab;实例分割领域的MaskRCNN、BlendMask、YOLACT等。这些模型实际上存在主干网络、金字塔结构实现特征提取,然后neck部分实现特征的集成,head部分完成分类和回归任务。无论哪个领域,都离不开大量标注数据的支持,同时cv领域也需要 数据增强的方法 提升训练的效果。此外,loss函数对于不同的问题也需要不同的设计,如MSEloss、交叉熵loss、IOU loss等。对于训练过程,良好的数据batch量和优化的方法如随机梯度下降、Adam等方法都是常用的方法来进行非线性优化。最终模型的目的是实现训练loss较小、测试loss最小,最后完成模型的实际部署。

    2周前
    • Admin 社区管理员 @ 极市平台

      @Lincent 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • L4EX 学生 @ 南京理工大学

    一点心得

    学习如果想要效率高,最主要的就是要有目的,少点纠结细节,少看书,多实践。如果买一本书来看,几百页,看完都一个月过去了,看完估计也是什么都不懂,所以最实际的方法就是在网上搜教程,然后就直接上手。其次是合理的学习顺序,就是比如你不能跳过机器学习直接学深度学习的模型,只有深入理解了线性回归、逻辑回归,才能更好地理解神经网络,像这样一步一步踏实地学习,总是没错的。除此之外,我觉得学习一个模型,很重要的一点就是要自己推导一遍公式,用代码实现一次模型,然后写一篇文章记录下来,只有你能够向别人解释清楚这个模型是什么,这才算真正掌握了一个模型,所以虽然这个过程会耗费很多时间。
    ——————————————————————————————————————————
    因为看到有图像检索部分的内容,所以非常想要,我就是做这个方向的,但是这个方向的资料相对来说太少了,难得有一本书能提供一些资源,小编看我啊,看我看我看我!!! :kissing_heart: :kissing_heart::kissing_heart: :kissing_heart: :kissing_heart: :kissing_heart:

    2周前
    • Admin 社区管理员 @ 极市平台

      @L4EX 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • HDB

    在工程方面,网络的设计和任务以及数据集的关系特别大。ImageNet种类多数据量大,所以需要足够宽的浅层来提取丰富的梯度纹理等特征,输入分辨率大,也可以用足够深的网络来充分抽象出物体的高层特征。但在一些较简单的场景中,如果是种类比较少,尤其是物体本身的特征不是特别复杂的时候,就可以用比较瘦长的网络,既不会浪费通道又可以提高网络的效率。在深度方面,resnet结构真的太有用了,现在主流的backbone基本都有resnet的影子
    对3.1的结论有点异议,如果只是取反,就是原本特征的纯线性变化,并没有增加到该层的信息量。网络的提升,应该是该层concat后通道数增加了,导致下一层的卷积核也变多而带来的提升。

    2周前
    • Admin 社区管理员 @ 极市平台

      @HDB 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • Jhong 学生 @ 某学校

    看到ssyy的留言,真的学会了很多。我前几天也在经历自己的电脑tensorflow各种出问题。最近一直在看机器学习和深度学习方面的书籍,感觉各个方面都缺很多,理论知识需要数学基础,需要自己一点一点啃,进度缓慢。实践方面,用sklearn做还好,用tensorflow,我的小破电脑完全不行,真的快哭了。唉,真的入门不容易啊,到后面需要的训练集处理量肯定大。希望能获得这本书,能从这本书种得到一些启迪,深度学习是一门磨人的学科,咬咬牙,坚持吧,加油,陌生人!

    2周前
    • Admin 社区管理员 @ 极市平台

      @Jhong 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
  • kmustzc 学生 @ 昆明理工大学

    研二路过,本科材料成型及控制工程,对深度学习非常感兴趣,读研选择了图像处理专业,写了一年的论文刚刚被拒,我深知还有很多不足之处,所以愿意继续提升自己,吸取审稿意见,学习上,都是靠搜网页,看公众号扩大自己的视野,遇到很感兴趣或者很牛的方法,会去进一步了解,甚至会把这个带到组会分享,与同门一起进步,未来的工作的话,想继续从事该行业,想把这些算法应用到实际中,那一定是成就感满满 🤙🤙🤙 :kissing_heart: :joy: :blush:每天都要点开三哥和极市等各大公众号,感谢分享

    2周前
    • Admin 社区管理员 @ 极市平台

      @kmustzc 恭喜获得《深度学习之模型设计:核心算法与案例实践》一本,请添加极市小编(ID:fengcall19)领取~

      2周前
您需要登陆以后才能留下评论!