2.2 深度学习
2.2.1 深度学习的基本原理
在介绍深度学习之前,需要先了解深度神经网络(Deep Neural Network,DNN)的概念。实际上当今的深度学习,可以看作是利用深度神经网络来进行模型训练。深度神经网络是神经网络的一种延续,而神经网络是机器学习模型中的一种。
如果在几十年前介绍机器学习,神经网络会作为其中的一个模型出现,只不过后期神经网络逐渐独立出来,尤其在发展成深度神经网络以后,发挥了巨大的威力,因此逐渐形成了深度学习这个独立分支。神经网络模型与其他模型有所不同。其他大多数模型都直接从数学演变而来,如线性回归模型最早由高斯提出,用于进行人口统计,马尔萨斯人口论中曾经引述过这种模型,后来对其进行了一定的修正,逐渐形成了现在的逻辑回归模型。而神经网络模型是由生物界提出的,通过模仿生物神经网络进行研究和发展。
神经网络模型的发展经历了几度沉浮,图2-6所示为神经网络的发展史。它在20世纪40年代就已经被提出,20世纪
图2-6 神经网络发展史
80年代达到一次高峰,但是很快又归于平静。直到2006年,多伦多大学的Hinton教授发表了关于深度神经网络的论文“A fast learning algorithm for deep belief nets”,结合当时的硬件发展将GPU应用于深度学习的训练当中。这是在理论研究与硬件设备两个条件都发展成熟后,神经网络在深度学习领域的又一次大爆发。
神经网络由一个个神经元组成,这些神经元之间相互连接,形成了一个网络,这就是其名称的由来。图2-7就是一个神经网络,由于神经网络中的输入层一般不计入总层数,所以该神经网络一共有两层,在这两层中,一共有6个神经元,中间的隐藏层有4个神经元,最后的输出层有2个神经元,神经元之间相互有方向地进行全连接。这就是神经网络的一种非常典型的结构,也是很传统的一种结构。
图2-7 神经网络示例
如图2-8所示,一个神经网络由神经元和网络结构定义,不同神经网络的差异在于两点:神经元的不同和网络结构的不同,其中网络结构包括层数、每层的神经元个数,以及是否是全连接等。
图2-8 神经网络的组成
每一个神经元都进行两步运算,第一步是对上一层神经网络的所有输入进行线性加权,第二步是对加权结果进行非线性转换,如图2-9所示。
图2-9 神经元的运算
非线性转换用到的函数称作神经元激活函数。图2-10列举了几种激活函数,其中最传统的一种激活函数是Logistic函数,也称作Sigmoid函数,这实际上就是逻辑回归的模型函数。
图2-10 神经元的激活函数
神经网络很早就被提出,但是之前的几十年一直没能大放异彩,这是因为当神经网络的结构过于简单,如层数太少、神经元太少时,得到的模型质量往往不是很好,但如果层数过多、结构过于复杂,又会导致硬件设备的运算能力不足。在之前几十年中,神经网络的性能受限于运算力,但有了GPU之后,运算力的问题得到了解决,神经网络开始崭露头角,也因此有了深度神经网络。
不同的神经网络有什么差异呢?首先,网络层数不同。曾经有一段时间,人们在进行深度学习研究时,非常注重网络的层数。图2-11所示是一个用于完成图像处理的神经网络,在2012年时是8层网络,2013年变成了9层,2014年变成了19层,2015年又变成了152层。
图2-11 卷积神经网络示例
其次,神经元的连接方式不同。即便是在全连接的情况下,输入数据加权之后的非线性处理也可能五花八门。例如,图2-11所示的目前很热的卷积神经网络,其中的非线性处理方式称作卷积。卷积并不是把前面的输入加权后直接带入某个函数当中去运算,而是用一个小的矩阵在大的矩阵上做加权求和,然后把大的矩阵转换成一个小的矩阵,这和传统神经网络中的非线性转换有很大差异。
神经网络的结构很容易区分,直观来看,5层和8层的区别很明显,但是其类型怎么区分呢?事实上不同的神经网络除了网络结构和连接方式不同,更重要的在于其神经元本身也有所不同。
神经元有不同的复杂度,如图2-12(a)所示的简单循环神经网络(Recurrent Neural Network,RNN)的神经元中只有一步非线性运算,而图2-12(b)所示的长短期记忆(Long Short-Term Memory,LSTM)网络和图2-12(c)所示的门循环单元(Gate Recurrent Unit,GRU)则要复杂得多。后两者一般用在序列预测中,都是现在很常用的深度神经网络。图2-12中的每个框代表一个神经元,进入框中的线代表输入,从框中出去的线代表输出,框中每个不同颜色、不同形状的图形分别表示一种运算。可以看出,GRU和LSTM的神经元很复杂,对于这样复杂的神经元,在实际应用中,也许其层数并不多,但是由于内部运算的复杂性,其数据处理能力非常强大。
图2-12 不同神经元对应的不同神经网络
机器学习和深度学习最主要的区别在于特征提取方式不同。机器学习领域的特征提取主要靠人工完成,而深度学习可以全部交给神经网络完成,只需要导入事物的所有特征即可,这也是深度学习最初被青睐的一个原因。而且深度学习的自适应性比机器学习更好,如语音识别和语音合成,在几年前主要以机器学习模型为主体,但目前全部都在利用深度学习完成。
深度学习有如此多的好处,相应地肯定会有一些对资源或者运算能力的需求。深度学习所需要的数据量跟机器学习完全不在一个量级,训练一个机器学习模型可能用几千个样本就足够了,但是深度学习模型至少需要几万个样本。由于深度学习对数据的需求很大,所以它对计算能力的需求也同样远远超过机器学习模型。一个机器学习模型也许几分钟或者最多几小时就可以训练出来,但是深度学习模型一般要求有GPU的机器才可以进行训练。