【AI不惑境】网络深度对深度学习模型性能有什么影响?

大家好,这是专栏《AI不惑境》的第二篇文章,讲述模型深度与模型性能的关系。

进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考。如果说学习是一个从模仿,到追随,到创造的过程,那么到这个阶段,应该跃过了模仿和追随的阶段,进入了创造的阶段。从这个境界开始,讲述的问题可能不再有答案,更多的是激发大家一起来思考。

作者&编辑 | 言有三


深度学习模型之所以在各种任务中取得了成功,足够的网络深度起到了很关键的作用,那么是不是模型越深,性能就越好呢?

1 为什么加深可以提升性能

Bengio和LeCun在2017年的文章[1]中有这么一句话,"We claim that most functions that can be represented compactly by deep architectures cannot be represented by a compact shallow architecture",大体意思就是大多数函数如果用一个深层结构刚刚好解决问题,那么就不可能用一个更浅的同样紧凑的结构来解决。

要解决比较复杂的问题,要么增加深度,要么增加宽度,而增加宽度的代价往往远高于深度。

Ronen Eldan等人甚至设计了一个能被小的3层网络表示,而不能被任意的2层网络表示的函数。总之,一定的深度是必要的。

那么随着模型的加深,到底有哪些好处呢?

1.1、更好拟合特征。

现在的深度学习网络结构的主要模块是卷积,池化,激活,这是一个标准的非线性变换模块。更深的模型,意味着更好的非线性表达能力,可以学习更加复杂的变换,从而可以拟合更加复杂的特征输入。

看下面的一个对比图[2],实线是一个只有一层,20个神经元的模型,虚线是一个2层,每一层10个神经元的模型。从图中可以看出,2层的网络有更好的拟合能力,这个特性也适用于更深的网络。

1.2、网络更深,每一层要做的事情也更加简单了。

每一个网络层各司其职,我们从zfnet反卷积看一个经典的网络各个网络层学习到的权重。

第一层学习到了边缘,第二层学习到了简单的形状,第三层开始学习到了目标的形状,更深的网络层能学习到更加复杂的表达。如果只有一层,那就意味着要学习的变换非常的复杂,这很难做到。

2 如何定量评估深度与模型性能

上面就是网络加深带来的两个主要好处,更强大的表达能力和逐层的特征学习。

理论上一个2层的网络可以拟合任何有界的连续函数,但是需要的宽度很大,这在实际使用中不现实,因此我们才会使用深层网络。

我们知道一个模型越深越好,但是怎么用一个指标直接定量衡量模型的能力和深度之间的关系,就有了直接法和间接法两种方案

直接法便是定义指标理论分析网络的能力,间接法便是通过在任务中的一系列指标比如准确率来进行比较等。

2.1、直接法

早期对浅层网络的研究,通过研究函数的逼近能力,和布尔电路的比较,网络的VC维度等进行评估,但是并不适用于深层网络。

目前直接评估网络性能一个比较好的研究思路是线性区间(linear regions)。可以将神经网络的表达看作是一个分段线性函数,如果要完美的拟合一个曲线,就需要无数多的线性区间(linear regions)。线性区间越多,说明网络越灵活。

Yoshua Bengio等人就通过线性区间的数量来衡量模型的灵活性。一个更深的网络,可以将输入空间分为更多的线性响应空间,它的能力是浅层网络的指数级倍。

对于一个拥有n0个输入,n个输出,kn个隐藏层的单层网络,其最大数量为:

对于拥有同样多的参数,n0个输入,n个输出,k个隐藏层,每一层n个节点的多层网络,其最大数量为:

因为n0通常很小,所以多层网络的数量是单层的指数倍(体现在k上),计算方法是通过计算几何学来完成,大家可以参考论文[3]。

除此之外还有一些其他的研究思路,比如monica binachini[4]等使用的betti number,Maithra Raghu等提出的trajectory length[5]。

虽然在工程实践中这些指标没有多少意义甚至不一定有效,但是为我们理解深度和模型性能的关系提供了理论指导。

2.2、间接法

间接法就是展现实验结果了,网络的加深可以提升模型的性能,这几乎在所有的经典网络上都可以印证。比较不同的模型可能不够公平,那就从同一个系列的模型来再次感受一下,看看VGG系列模型,ResNet系列模型,结果都是从论文中获取。

在一定的范围内,网络越深,性能的确越好。

3 加深就一定更好吗?

前面说到加深在一定程度上可以提升模型性能,但是未必就是网络越深越越好,我们从性能提升和优化两个方面来看。

3.1、加深带来的优化问题

ResNet为什么这么成功,就是因为它使得深层神经网络的训练成为可行。虽然好的初始化,BN层等技术也有助于更深层网络的训练,但是很少能突破30层。

VGGNet19层,GoogleNet22层,MobileNet28层,经典的网络超过30层的也就是ResNet系列常见的ResNet50,ResNet152了。虽然这跟后面ImageNet比赛的落幕,大家开始追求更加高效实用的模型有关系,另一方面也是训练的问题。

深层网络带来的梯度不稳定,网络退化的问题始终都是存在的,可以缓解,没法消除。这就有可能出现网络加深,性能反而开始下降。

3.2、网络加深带来的饱和

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

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

第一个模型就是简单的卷积+激活的模型,第二个就是mobilenet模型。

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

接下来我们试验各种配置,从深度为5到深度为8,下面是每一个网络层的stride和通道数的配置。

我们看结果,优化都是采用了同一套参数配置,而且经过了调优,具体细节篇幅问题就不多说了。

看的出来网络加深性能并未下降,但是也没有多少提升了。allconv5的性能明显更差,深度肯定是其中的一个因素。

我们还可以给所有的卷积层后添加BN层做个试验,结果如下,从allconv7_1和allconv8_1的性能相当且明显优于allconv6可以得出与刚才同样的结论。

那么,对于更加复杂的数据集,表现又是如何呢?下面看在place20上的结果,更加清晰了。

allconv5,allconv6结果明显比allconv7,allconv8差,而allconv7和allconv8性能相当。所以从allconv这个系列的网络结构来看,随着深度增加到allconv7,之后再简单增加深度就难以提升了。

接下来我们再看一下不同深度的mobilenet在这两个数据集上的表现,原始的mobilenet是28层的结构。

不同深度的MobileNet在GHIM数据集的结果如下:

看得出来当模型到16层左右后,基本就饱和了。

不同深度的MobileNet在Place20数据集的结果如下:

与GHIM的结果相比,深度带来的提升更加明显一些,不过也渐趋饱和。

这是必然存在的问题,哪有一直加深一直提升的道理,只是如何去把握这个深度,尚且无法定论,只能依靠更多的实验了。

除此之外,模型加深还可能出现的一些问题是导致某些浅层的学习能力下降,限制了深层网络的学习,这也是跳层连接等结构能够发挥作用的很重要的因素。

关于网络深度对模型性能的影响,这次就先说这么多。更多请大家至我的知乎live中交流。

如何设计性能更强的 CNN 网络结构?www.zhihu.com图标

[1] Bengio Y, LeCun Y. Scaling learning algorithms towards AI[J]. Large-scale kernel machines, 2007, 34(5): 1-41.

[2] Montufar G F, Pascanu R, Cho K, et al. On the number of linear regions of deep neural networks[C]//Advances in neural information processing systems. 2014: 2924-2932.

[3] Pascanu R, Montufar G, Bengio Y. On the number of response regions of deep feed forward networks with piece-wise linear activations[J]. arXiv preprint arXiv:1312.6098, 2013.

[4] Bianchini M, Scarselli F. On the complexity of neural network classifiers: A comparison between shallow and deep architectures[J]. IEEE transactions on neural networks and learning systems, 2014, 25(8): 1553-1565.

[5] Raghu M, Poole B, Kleinberg J, et al. On the expressive power of deep neural networks[C]//Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017: 2847-2854.

总结

深度学习的名字中就带着“深”,可见深度对模型的重要性。这一次我们讲述了深度对模型带来提升的原理,如何定量地评估深度对模型性能的贡献,以及加深网络会遇到的问题。

下期预告:模型的宽度对性能的影响。

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不惑境】网络的宽度如何影响深度学习模型的性能?

编辑于 2019-05-01

文章被以下专栏收录

    这里是有三AI学院,内容覆盖很多的系列文章。《方向综述》,《开源框架》,《数据理解》,《模型结构》,《深度学习理论》,《深度学习模型训练》,《行业发展》与《就业机会》,《学习习惯培养》,小知识《AI-1000问》,系统性的AI工程师进阶路线,涵盖白身,初识,不惑,有识,不可知5个境界,讲述从编程,图像基础到深度学习理论和实践,一步一步晋升之路。

    深剖深度学习模型的发展与优化