1.2 深度学习技术的发展历程
深度学习是基于人工神经网络发展起来的一项技术,而神经网络的起源可以追溯到20世纪40年代。神经网络的基本组成单元为神经元,1943年心理学家W.S.McCulloch和数理逻辑学家W.Pitts首次提出神经元计算模型,并讲述了神经元的形式化数学描述和网络结构方法,验证了单个神经元具有逻辑功能[5],从此打开了人工神经网络研究领域的大门。
人工神经网络在全世界科研工作者的持续努力下不断发展,1957年,Frank Rosenblatt首次提出“感知器”的概念[6],该项工作在当时得到了广泛应用,在许多研究领域都取得了一定的成果。但由于当时计算条件的限制,并没有能够持续很长时间。此外,还有一个主要原因是1969年Marvin Minsky和Seymour Papert出版的书籍Perceptron,该书主要论证了“感知器”不能解决异或问题(也就是“异或门”),而且当时的计算机硬件满足不了神经网络的复杂计算。此后,神经网络的发展陷入低潮,在很长一段时间都没有得到重视。
尽管如此,Geoffrey Hinton一直在坚持神经网络领域的研究,1986年,DE Rumelhart,G.E. Hinton和R.J. Williams共同在Nature上发表论文[7],提出误差后向传播(Error Back Propagation,EBP)算法,该算法解决了“感知器”的“异或”问题,降低了神经网络的计算复杂度,在解决相同问题的前提下,基于误差后向传播算法的神经网络的效果要优于简单“感知器”。误差后向传播算法在各个领域得到广泛应用,并延续至今,重新掀起了神经网络高潮。1989年,Yann Lecun成功将误差后向传播算法应用到手写邮政编码的识别任务上[8]。Yann Lecun在人工神经网络的基础上提出了“卷积神经网络”,目前卷积神经网络在图像和视频分析等领域都取得了很好的成果。
深度神经网络是模仿人脑机制构建的具有学习和分析解决问题的神经网络,它是由输入层、若干隐层和输出层构成的多层网络结构。相邻层之间的神经元通过权重相互连接,同层或跨层之间的神经元没有连接,权重值的大小表示对整体输出的贡献值,神经元采用非线性激励函数(Activation Function)获得输出值。深度学习之所以被称为“深度”,是相对于支持向量机(Support Vector Machine,SVM),Boosting提升方法等“浅层学习”方法而言的,深度学习可以自动学习数据特征,不需要手工设计特征,省去了很多人工设计的工作,能够更好地表达数据的本身特征。但深度神经网络需要大量的调参、迭代学习来寻找最佳的特征表达模型。
深度学习一般包含多个网络层,利用海量数据进行训练,通过逐层特征变换,形成对数据本身更抽象的特征,得到更具有代表性的特征,从而提高分类或预测的准确率。“深度学习”是手段,“特征学习”是目的,与“浅层学习”的区别主要在于:
(1)深度模型包含更多的网络层,通常是5层、7层,甚至是10层以上。
(2)强调特征学习的重要性,通过逐层特征变换,得到更具有代表性的特征[9]。
2006年,机器学习泰斗、多伦多大学计算机系教授Geoffery Hinton在Science上发表的文章[10],采用基于深度信念网络(Deep Belief Networks,DBN)的非监督的逐层训练算法,解决了深度神经网络训练难度大的问题。
随着深度学习技术的不断发展,逐渐出现了许多深度学习开发框架,比较典型的有Torch[11],Caffe[12],Theano[13],Pylearn2[14]等,这些工具都可以让开发者很轻松地学习使用深度学习相关技术,并提供了各种不同的接口供不同的开发人员使用,其中Caffe是基于C++实现的开源库,提供了Python和Matlab外部接口,通过修改配置文件,修改网络参数可以轻松实现训练深度模型,支持CPU和GPU两种模式的无缝切换;Torch是基于Lua实现的开源库,该开源库在使用的过程中,并不像Caffe那样直接修改配置文件就可以实现所需功能,它需要开发人员自己写训练过程的代码,但这样可以更好地理解网络的整个训练过程的原理;Theano是基于Python实现的开源库,是用来有效地定义、优化和计算关于多维数组数学表达式的Python类库;Pylearn2是基于Theano开发的深度学习工具,可以方便地定义参数,快速训练模型。2016年,Google开发了其深度学习平台TensorFlow,Facebook开发了其基于Torch的深度学习框架Torchnet。