购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 神经网络发展简史

神经网络的发展同人类发展一样,经历了各种起伏和挫折、淘汰和进化。正是发展过程中的一些意外成就了人工神经网络今天的辉煌,正如人类进化过程中所遇到的意外一样,充满了不确定的意外和惊喜。正是有了不确定才出现了另外一个词,叫希望。

1.1.1 神经网络的前世今生

人工智能的起源可能要追溯到第二次世界大战,其间涌现出很多优秀的科学家,包括神经学家格雷·沃尔特和数学家艾伦·图灵。其中,沃尔特制造了人类历史上的第一个机器人;图灵则提出了一种测试,这种测试旨在验证机器是否可以达到真正的智能,而这种测试后来被称为图灵测试。图灵测试的思想是测试者在与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问,进行多次测试后,如果有超过30%的测试者不能确定被测试者是人还是机器,那么这台机器就通过了测试,并且被认为具有人类智能。

1956年,在美国达特莫斯大学举行了两个月的学术讨论会,从不同学科的角度探讨用机器模拟人类智能等问题,并且首次提出了人工智能(AI)的术语,同时出现了最初的成就和最早的一批研究者,这一事件被看作AI诞生的标志。由于计算机的产生与发展,人们开始了具有真正意义的人工智能的研究。

1957年,罗森·布拉特基于神经感知科学的背景提出并设计出第一个计算机神经网络模型,这个模型模拟了人类大脑的生物学特性,被称为感知机(Perceptron)。

1960年,维德罗首次将Delta学习规则用于感知机的训练步骤,这种方法后来被称为最小二乘方法。最小二乘法和感知机的结合创造了一个良好的线性分类器。

1968年,马文·明斯基将感知机推到顶峰。他提出了著名的异或(XOR)问题和感知机数据线性不可分的情形,在数学上证明了单层或多层网络的堆叠无法解决数据线性不可分的问题(后来人们通过引入激活函数来解决线性不可分的问题)。此后,神经网络的研究长期处于休眠状态。

1970年,林纳因马提出反向传播(Back Propagation, BP)神经的概念,并将其称为自动分化反向模式,但是并未引起足够的关注。

1980年,在美国的卡内基梅隆大学召开了第一届机器学习国际研讨会,标志着机器学习研究已在全世界兴起。此后,机器归纳学习进入应用。经过一些挫折后,多层感知机(Multilayer Perceptron, MLP)由伟博斯在1981年的神经网络BP算法中具体提出。有了反向传播的新思想,神经网络的研究进程逐渐加快。

1983年,J. J. Hopfield和D. W. Tank建立了互相连接的神经网络模型,被称为霍普菲尔德神经网络,并用它成功地探讨了旅行商(TSP)问题的求解。

1986年,D.E.Rumelhart等人实现了多层网络BP算法,把学习结果反馈到中间层次的隐藏单元中,改变它们的联系矩阵,从而达到预期的学习目的。迄今为止,它仍是应用最广泛的神经网络训练更新算法。

20世纪90年代,统计学习出现并迅速占领了历史舞台,支持向量机(Support Vector Machine,SVM)就是这一时代的产物,SVM在数据分类、图像压缩等应用领域取得了非常好的成绩。

2006年,Hinton及其学生发表了利用(Restricted Boltzmann Machine)自编码的深层神经网络的论文 ——Reducing the Dimensionality of Data with Neural Networks ,目前这篇论文的实用性并不强,它的作用是把神经网络又拉回人们的视线中,利用单层的RBM自编码预训练使深层的神经网络训练变成可能,但那时候深度学习(Deep Learning)的争议很多。

2016年被称为人工智能的元年。在这一年,AlphaGo在围棋比赛中赢了专业棋手李世石,打破了人类自尊的最后的堡垒。

目前,深度学习在不经意间就会出现在我们的日常生活中——它是Google的声音和图像识别,是Netflix和Amazon的推荐引擎,是Apple的Siri,是电子邮件和短信的自动回复,是智能聊天机器人,是百度的智能导航,是阿里巴巴的自动风险感知,是字节抖动的智能推荐。神经网络的发展史如图1.1所示。

图1.1 神经网络的发展史

1.1.2 深度学习框架对比

深度学习框架发展迅速,各种语言实现的框架层出不穷,最广为人知的是TensorFlow,但最好用且Python友好又便于调试的首推PyTorch。TensorFlow是使用人数最多的深度学习框架,但其是基于静态图定义的框架,使用和调试都非常困难。因为静态图首先需要定义,定义好之后就不能修改。要定义静态图涉及很多特殊的语法及概念,提升了学习门槛,对于初学者来说,无异于学习一门新的语言。而PyTorch是基于动态图构建的,可以使用Python一般的语法,如If/Else/While/For等,天然的Python友好且便于调试,熟悉Python的人们可以快速上手。

测试一个框架热门程度的最直接方式就是搜索指数。通过对比GitHub统计指数,可以直观地发现一个框架的流行程度,如图1.2所示是最常用的几个深度学习框架TensorFlow、Keras、PyTorch、Theano的GitHub统计指数,通过对比可以发现一些趋势。

图1.2 深度学习框架GitHub统计指数变化趋势

在Star和Fork的数量上,TensorFlow在深度学习领域用得最多,但从趋势来看其地位是否能在接下来继续保持第一位仍然值得关注,因为排名靠后的PyTorch、PaddlePaddle、MXNet等深度学习框架的影响度正在逐年上升。深度学习框架已经变成TensorFlow和PyTorch之争,也是动态图与静态图之间的“斗争”。PyTorch能否登顶非常值得期待。

下面笔者以各个深度学习框架出现的先后顺序进行对比分析。

分析各个框架出现的时间会发现一个很有意思的规律,在2015—2016年,不管是深度学习框架还是其他大数据框架(如Spark等),都呈现爆发式增长。这与2015年和2016年大数据及AI市场得到资本青睐息息相关,被投资的团队开始集中攻克技术难点及开源技术产品,所有的读者都是开源的受益者。

2008年1月,Theano诞生于蒙特利尔大学的LISA实验室。它是一个Python库,结合计算机代数系统CAS和编译器的优化,可以达到与C语言媲美的速度,可以用于定义、计算数学表达式,尤其是计算多维数组。Theano中的多维数组类似于NumPy中的Ndarray。因为Theano诞生于研究机构,具有浓厚的学术气息,并且很难调试,图的构建非常困难,缺乏文档,以及疏于宣传等缺点,所以使用的人很少。2017年9月,LISA实验室负责人Yoshua Bengio宣布“Theano is Dead”,在Theano 1.0正式发布后将不再进行维护。但是Theano作为第一个Python深度学习框架,其退出历史舞台时已完成了它的历史使命,为其他深度学习框架指明了设计方向:以计算图为核心,采用GPU设备加速。后来出现的深度学习框架(如TensorFlow、PyTorch、Caffe/Caffe2等)都采用计算图的方式来定义计算的Pipeline。

2012年1月,Torch项目诞生于纽约大学,Torch采用的是Lua语言,但是使用Lua语言的人不多,因此Torch这个深度学习框架在市场上应用得很少。但是Torch的幕后团队在2017年基于Python语言对Torch的技术架构进行了全面的重构,于是诞生了当下非常流行的动态图框架PyTorch。

2013年12月,使用Java语言开发的深度学习框架Deeplearning4j诞生,Deeplearning4j是使用Java语言开发的深度学习框架,同时支持Clojure接口和Scala接口,由开源科学计算库ND4J驱动,可选择在CPU设备或GPU设备上运行。Deeplearning4j还可以运行在Hadoop/Spark集群中,可以提高运行速度及大数据处理能力。

2013年9月,加利福尼亚大学伯克利分校的贾扬清博士在GitHub上首度发布Caffe,它的全称是Convolutional Architecture for Fast Feature Embedding,是一个清晰、高效的深度学习框架,核心语言采用C++,支持命令行、Python、MATLAB接口,可以选择在CPU设备或GPU设备上运行。Caffe使用简单,代码也易于扩展,运行速度得到了工业界的认可,社区也非常庞大。2017年4月发布的Caffe2是Caffe的升级优化版。

2015年3月诞生的Keras是一个高层的神经网络API,使用纯Python语言编写。它并不是独立的深度学习框架,后端采用TensorFlow、Theano及CNTK作为支持。Keras为实验室而生,能够将想法快速转换为结果,高层的API非常易于使用,因此是所有深度学习框架中最易上手的一个。Keras并不独立,是在其他框架上的层层封装。层层封装导致Keras运行速度慢,扩展性也不好,很多时候BUG被隐藏在封装之中,因此缺少灵活性,使用Keras很快将遇到瓶颈。

2015年5月MXNet诞生了。虽然由一群学生开发,但是MXNet拥有超强的分布式支持,对内存及显存的优化也非常好。2016年11月,MXNet被AWS正式选择为云计算官方深度学习平台。2017年1月MXNet进入Apache基金会,成为Apache孵化器项目。但是MXNet一直不温不火,主要是因为文档维护缓慢而代码更新过快,让老用户面对新接口也不知道如何使用,另外一个原因要归结于推广不力。MXNet是中国人开发的项目,笔者希望它能越来越好。

2015年11月,Google官宣TensorFlow开源。TensorFlow的开源确实在业界引起了不小的轰动,TensorFlow的大火得益于Google在深度学习领域巨大的影响力及强大的推广能力。目前,TensorFlow是用户数最多的深度学习框架,支持Python及C++编程接口,并且采用C++的Eigen库,所以可以在ARM架构上编译和优化。用户可以在各种服务器和移动设备上部署训练模型而无须执行单独的解码器或Python的解释器。业界对TensorFlow的褒贬不一,其中最大的问题是频繁变动的接口;另外一个问题是复杂的系统设计,TensorFlow源码超过百万行,想通过阅读源码弄懂底层的运行机制是非常痛苦的事情。

2016年1月Microsoft发布的CNTK支持在CPU设备和GPU设备上运行,并且把神经网络描述成一个计算图结构,这一点与其他的深度学习框架是一致的。CNTK的性能比Caffe、Theano、TensorFlow的都好,但是其文档设计晦涩难懂,推广也不给力,因此用户较少。

2016年8月,百度开源PaddlePaddle深度学习框架,PaddlePaddle的前身是百度于2013年自主研发的深度学习平台,并且一直被百度内部工程师研发使用。全球各大科技巨头开源的深度学习平台都极具各自的技术特点,对于百度,由于其自身具有搜索、图像识别、语音语义识别理解、情感分析、机器翻译、用户画像推荐等多领域的业务和技术方向,所以PaddlePaddle的表现更加全面,是一个功能相对较全的深度学习框架。

总之,在这个发生翻天覆地变化的年代,只有不断地学习和进步才能赶上时代的步伐,只有抓住机遇才能更好地迎接挑战。 O0L/TPuQlb7PuOwtD3pNs43FnJy7dk3GLFia+GBXZ8T3X19li/kCUXgU4CBFDQ35

点击中间区域
呼出菜单
上一章
目录
下一章
×