目录Contents
Why Deep?
本文是笔者关于机器学习中神经网络关于网络深度与广度的一个思考,同时也涉及了一些网络的可解释性的内容。本文只是笔者对于神经网络的浅薄认识,如有错误,欢迎指出,共同进步。
1. 前言(Introduction)
笔者在学习深度学习的时候,一直有一个疑问,“为什么深度学习叫深度学习不叫宽度学习?”。字面意思的解释就是深度学习的神经网络模型的层数非常多,但是这又会引发一个问题,“为什么神经网络层数越多,模型的效果越好?”。由此又会引发另外一个问题,“神经网络的每一层的功能是什么?”。带着这些问题,本文将从神经网络的模型拟合,参数结构与功能模块这三个方面分析这三个问题。
2. 模型拟合(Model Fit)
现实中所有的数据都可以看成是一种分布,而神经网络的作用就是基于现实中给定的数据拟合出相应的模型。例如在MNIST手写数字中,把数字的像素都看作是某种分布 P P P下的数据,这个分布可能很复杂,无法用人工数学运算求解出来。而神经网络可以通过观察大量的训练数据,拟合出一个与原来相似的分布 Q Q Q;VAE模型则更为简单了,其直接把数据编码到标准正态分布中,然后对正态分布的采样点进行解码得到与原来相近的数据。
使用宽而浅的网络是很难拟合出一个较为正确的分布的,因为这些宽而浅的网络更倾向于记忆数据,其泛化能力则较差。
宽而浅的网络能够记得训练数据中输入数据与输出数据的一一对应关系,但是这在输入验证数据集或测试数据集的时候可能效果并不好,即宽而浅的网络更容易发生过拟合的现象,对输入数据敏感,其泛化能力降低。同时,过宽的网络还会学习到数据中的噪声,这同样不利于泛化能力的提高。
与此相对的是多层次的神经网络可以学习到不同层次的抽象特征,这使得它们拟合的模型更为准确,泛化能力更好。以卷积神经网络识别人脸为例,最靠近输入的卷积层提取的特征是边界,而下一层学习的特征是由边界组成的形状,再下一层学习的特征则是由这些形状的集合,如鼻子或嘴巴,再往下就是更高阶的特征,如人脸,以此类推。
所以增加网络的宽度只是提高网络对于样本的拟合程度,对其泛化性能则影响甚小;适当地增加神经网络的层数则有利于提取不同层次的特征,提高其泛化能力。
3.参数结构(Parameters Structure)
增加深度或者增加宽度都可以看作是增加模型的参数,从而提高网络的拟合能力。在实际设计网络的时候,二者都会纳入考虑的范围内,追求二者间的平衡。下面将分析深度与广度对网络内部结构参数的影响。
- 表达能力。在参数数量一定的时候,增加网络的深度比增加宽度的表达能力更强,后面的层次可以共享前面层次的计算结果。这个表达能力可以理解为信息传递的能力,网络中的一层可以理解为信息处理流程中的某一个功能,如A\D转换等。所以当网络的层数增加时,可以看作多一个信息处理的步骤,信号经过的层数越多,意味着输出的结果更完善。以卷积神经网络为例,增加一个卷积层实际上是扩大输出的接受域,采集更广范围内的信息量。但是网络的层数也不是越多越好,因为这会带来信息的损失,从参数传递的角度来讲就是梯度消失或梯度爆炸;
- 参数数量。假设每一层的各种超参数数量相同时,把某一层的宽度增加一倍时,参数数目就增加了单层参数数目的两倍;而增加一层的话,参数数目只增加了单层参数数目的一倍。例如假设一个位于网络中间的Dense层共含有 N N N个神经元,那么连接到该层的参数数量为 2 × N × N {2 \times N \times N} 2×N×N(不考虑偏置)。如果把该层的神经元数量增加到 2 N {2N} 2N,那么连接到这层的参数共有 2 × ( 2 N ) × N {2 \times (2N) \times N} 2×(2N)×N个,实际上增加的参数数量为 2 × N × N {2 \times N \times N} 2×N×N个。而如果增加多一层同样的Dense层,那么连接到这层的参数共有 2 × N × N {2 \times N \times N} 2×N×N个,实际上增加的参数数量只有 N × N {N \times N} N×N个。在这种情况下,增加网络的宽度比增加网络的深度需要的参数更多;
- 复杂度。就参数的数量而言,更多的参数需要更多的资源,包括计算时间与存储的空间。在同样神经元数量的情况下,更宽的网络往往比更深的网络需要更多的存储内存与计算时间。
网络的宽度与深度的选择不能一概而论,比如网络层数越多,虽然信息处理更完善,但是其信息损失值也更多;而当网络越宽的时候,虽然参数数量较多,但是其空间复杂度与时间复杂度也越高,同时容易发生过拟合的现象。所以网络的宽度与深度的选择需要与具体的问题结合。
4. 功能模块(Function Model)
神经网络是一种端到端(end to end)的模型。所谓端到端,就是由输入数据经过该模型直接得到对应的输出数据。实际上就是把神经网络看作是一个黑盒子,即我们不需要详细地知道网络内部每一层的功能,通过给黑盒子大量的数据,让它自己拟合出输入到输出的函数关系。从这个角度来讲,神经网络的宽度与深度似乎毫无意义,因为两三层的神经网络足以拟合大多数的非线性函数。
但是,从传统机器学习的角度来看,从输入数据到输出结果会经历特征工程(特征构建,特征提取与特征选择),模型选择,模型评估与参数矫正等步骤。这些步骤都有其对应的功能,并且这在数学上也是可以解释的,如特征工程是为了提取包含足够信息的样本数据;模型选择是为了选择拟合函数的方法,如线性回归,KNN等;模型评估是评估选择的模型的优劣程度;参数矫正是矫正模型的内部参数,提高模型的拟合程度。
对比传统机器学习的方法可以发现,神经网络中各层并没有明确的分工,只需要不断地向网络中输入大量的数据,而网络最终的拟合程度就不是人力可以决定的了(当然,调参也是人力的一部分工作,这里指的是网络内部参数的变化过程并不需要人工调整)。虽然神经网络存在不同的层如Dense层,Conv层和Pooling层,它们的结构与功能都是不一样的,但是当把它们连接到一起构成一个整体时,就无法明显地分割出哪层的具体功能是什么。
虽然神经网络很难解释,但是其训练的效果为什么就是比传统机器学习的方法好呢。这里以剪纸为例,把一张纸重叠多次,然后对重叠的纸进行裁剪,展开即可得到很好看的形状。神经网络的层数可以看作是剪纸折叠后的层数,其输入可以看作是裁剪的方案,而输出就是展开后的图形,而神经网络的结构可以看作是剪纸折叠的方案,这个方案决定了哪些地方是连在一起,而哪些地方又是没有连在一起的。所以折叠次数越多,剪出来的图案会更好看,更花里胡哨;对应着神经网络层数越多,功能越复杂。
从另一个角度理解剪纸与神经网络就是”降维打击“。如上图可以看作是在5维的空间对剪纸进行加工,而当其在二维平面上展开时就是一个很好看的图案。而神经网络拟合这个黑盒子可以看作是一个维度提升与下降器,输入的数据会先被投影到高维空间上进行处理,然后再从高维空间上下降到输出的空间中。
深度学习的可解释性是神经网络研究的一个重点内容。现在的研究大多都是提出某种新结构,又或者是达到了"state of the art",很少会对“为什么这种神经网络结构的训练效果会这么好,为什么另外的神经网络效果又这么差"进行回答。本人觉得,我们不应该仅仅停留在事物的表面现象,更应该对其内部原理理解通透,做到知其然与知其所以然。
5. 总结(Conclusion)
本文是笔者关于神经网络的宽度与深度的一个学习笔记,并分别从模型拟合,参数结构与功能模块三个方面比较了网络深度与宽度的关系。本文仅代表自己的浅薄认识,如有错误,欢迎指出。
版权声明
转载请注明出处
参考资料(Reference)
Why are neural networks becoming deeper, but not wider?