当前位置:首页 > 财经/贸易 > 资产评估/会计 > 程序员为什么要学深度学习?
程序员为什么要学深度学习?转载自infoq(ID:infoqchina)。本文根据费良宏在2016QCon全球软件开发大会(上海)上的演讲整理而成。费良宏,现任亚马逊AWS首席云计算技术顾问。导读深度学习本身是一个非常庞大的知识体系。本文更多想从程序员的视角出发,让大家观察一下深度学习对程序员意味着什么,以及我们如何利用这样一个高速发展的学科,来帮助程序员提升软件开发的能力。前言1973年,美国上映了一部热门的科幻电影《WestWorld》,三年之后又有一个续集叫做《FutureWorld》。这部电影在80年代初被引进到中国叫《未来世界》。那部电影对我来讲简直可以说得上是震撼。影片中出现了很多机器人,表情丰富的面部下面都是集成电路板。这让那时候的我觉得未来世界都是那么遥远、那么神秘。时间到了2016年,很多朋友可能都在追看HBO斥巨资拍摄的同一题材的系列剧《WestWorld》。如果前两部电影还是局限在机器人、人工智能这样的话题,2016年的新剧则在剧情和人工智能的思考方面有了很大的突破。不再渲染机器人是否会威胁到人类,而是在探讨“Dreamsaremainlymemories”这一类更具哲理的问题。“记忆究竟如何影响了智能”这个话题非常值得我们去思考,也给我们一个很好的启示——今天,人工智能领域究竟有了怎样的发展和进步。今天我们探讨的话题不仅仅是简单的人工智能。如果大家对深度学习感兴趣,我相信各位一定会在搜索引擎上搜索过类似相关的关键字。我在Google上以deeplearning作为关键字得到了2,630万个搜索的结果。这个数字比一周之前足足多出了300多万的结果。这个数字足以看得出来深度学习相关的内容发展的速度,人们对深度学习的关注也越来越高。从另外的一个角度,我想让大家看看深度学习在市场上究竟有多么热门。从2011年到现在一共有140多家专注人工智能、深度学习相关的创业公司被收购。仅仅在2016年这种并购就发生了40多起。其中最疯狂的是就是Google,已经收购了11家人工智能创业公司,其中最有名的就是击败了李世石九段的DeepMind。排名之后的就要数Apple、Intel以及Twitter。以Intel公司为例,仅在今年就已经收购了3家创业公司,Itseez、Nervana和Movidius。这一系列大手笔的并购为了布局人工智能以及深度学习的领域。当我们去搜索深度学习话题的时候,经常会看到这样的一些晦涩难懂的术语:Gradientdescent(梯度下降算法)、Backpropagation(反向传播算法)、ConvolutionalNeuralNetwork(卷积神经网络)、受限玻耳兹曼机(RestrictedBoltzmannMachine)等。如打开任何一篇技术文章,你看到的通篇都是各种数学公式。大家看到如下左边的图,其实并不是一篇高水准的学术论文,而仅仅是维基百科关于玻耳兹曼机的介绍。维基百科是科普层面的内容,内容复杂程度就超过了大多数数学知识的能力。右边的图则是深度学习很流行的深度学习框架Theano的一个简单的例子。对于大多数程序员而言,学习这一类框架和程序代码的时候更让人抓狂,大段代码我们完全不明就里。我们看到的很多概念,对很多程序员来说觉得非常陌生,所以这确实是对程序员的一个很大挑战。在这样的背景之下,我今天的的话题可以归纳成三点:第一,我们为什么要学习深度学习;第二,深度学习最核心的关键概念就是神经网络,那么究竟什么是神经网络;第三,作为程序员,当我们想要成为深度学习开发者的时候,我们需要具备怎样的工具箱,以及从哪里着手进行开发。为什么要学习深度学习首先,我们谈谈为什么要学习深度学习。在这个市场当中,最不缺乏的就是各种概念以及各种时髦新技术的词汇。深度学习有什么不一样的地方?我非常喜欢AndrewNg(吴恩达)曾经用过的一个比喻。他把深度学习比喻成一个火箭。这个火箭有一个最重要的部分,就是它的引擎,目前来看在这个领域里面,引擎的核心就是神经网络。大家都知道,火箭除了引擎之外还需要有燃料,那么大数据其实就构成了整个火箭另外的重要组成部分——燃料。以往我们谈到大数据的时候,更多是强调存储和管理数据的能力,但是这些方法和工具更多是对于以往历史数据的统计、汇总。而对于今后未知的东西,这些传统的方法并不能够帮助我们可以从大数据中得出预测的结论。如果考虑到神经网络和大数据结合,我们才可能看清楚大数据真正的价值和意义。AndrewNg就曾经说过“我们相信(神经网络代表的深度学习)是让我们获得最接近于人工智能的捷径”。这就是我们要学习深度学习的一个最重要的原因。其次,随着我们进行数据处理以及运算能力的不断提升,深度学习所代表的人工智能技术和传统意义上人工智能技术比较起来,在性能上有了突飞猛进的发展。这主要得益于在过去几十间计算机和相关产业不断发展带来的成果。在人工智能的领域,性能是我们选择深度学习另一个重要的原因。这是一段Nvidia在今年公布的关于深度学习在无人驾驶领域应用的视频。我们可以看到,将深度学习应用在自动驾驶方面,仅仅经历了3千英里的训练,就可以达到什么样的程度。在今年年初进行的实验上,这个系统还不具备真正智能能力,经常会出现各种各样的让人提心吊胆的状况,甚至在某些情况下还需要人工干预。但经过了3千英里的训练之后,我们看到在山路、公路、泥地等各种复杂的路况下面,无人驾驶已经有了一个非常惊人的表现。请大家注意,这个深度学习的模型只经过了短短几个月、3千英里的训练。如果我们不断完善这种模型的话,这种处理能力将会变得何等的强大。这个场景里面最重要的技术无疑就是深度学习。我们可以得出一个结论:深度学习可以为我们提供强大的能力,如果程序员拥有了这个技术的话,无异于会让每个程序员如虎添翼。神经网络快速入门如果我们对于学习深度学习没有任何疑虑的话,接下来就一定会关心我需要掌握什么样的知识才能让我进入到这个领域。这里面最重要的关键技术就是“神经网络”。说起“神经网络”,容易混淆是这样两个完全不同的概念。一个是生物学神经网络,第二个才是我们今天要谈起的人工智能神经网络。可能在座的各位有朋友在从事人工智能方面的工作。当你向他请教神经网络的时候,他会抛出许多陌生的概念和术语让你听起来云里雾里,而你只能望而却步了。对于人工智能神经网络这个概念,大多数的程序员都会觉得距离自己有很大的距离。因为很难有人愿意花时间跟你分享神经网络的本质究竟是什么。而你从书本上读的到的理论和概念,也很让你找到一个清晰、简单的结论。今天就我们来看一看,从程序员角度出发神经网络究竟是什么。我第一次知道神经网络这个概念是通过一部电影——1991年上映的《终结者2》。男主角施瓦辛格有一句台词:“MyCPUisaneural-netprocessor;alearningcomputer.”(我的处理器是一个神经处理单元,它是一台可以学习的计算机)。从历史来看人类对自身智力的探索,远远早于对于神经网络的研究。1852年,意大利学者因为一个偶然的失误,将人类的头颅掉到硝酸盐溶液中,从而获得第一次通过肉眼关注神经网络的机会。这个意外加速了对人类智力奥秘的探索,开启了人工智能、神经元这样概念的发展。生物神经网络这个概念的发展,和今天我们谈的神经网络有什么关系吗?我们今天谈到的神经网络,除了在部分名词上借鉴了生物学神经网络之外,跟生物学神经网络已经没有任何关系,它已经完全是数学和计算机领域的概念,这也是人工智能发展成熟的标志。这点大家要区分开,不要把生物神经网络跟我们今天谈到的人工智能有任何的混淆。神经网络的发展并不是一帆风顺的,这中间大概经历了三起三折的过程。大约在1904年,人类已经对人脑的神经元有了最初步的认识和了解。1943年的时候,心理学家麦卡洛克(McCulloch)和数学家Pitts参考了生物神经元的结构,发表了抽象的神经元模型M。这个概念的提出,激发了大家对人智力探索的热情。到了1949年,有一个心理学家赫布(Hebb)提出了著名的Hebb模型,认为人脑神经细胞的突触上的强度上是可以变化的。于是计算科学家们开始考虑用调整权值的方法来让机器学习,这就奠定了今天神经网络基础算法的理论依据。到了1958年,计算科学家罗森布拉特(Rosenblatt)提出了由两层神经元组成的神经网络,并给它起了一个很特别的名字—“感知器”(Perceptron)。人们认为这就是人类智能的奥秘,许多学者和科研机构纷纷投入到对神经网络的研究中。美国军方也大力资助了神经网络的研究,并认为神经网络是比“曼哈顿工程”更重要的项目。这段时间直到1969年才结束,这个时期可以看作神经网络的一次高潮。事实上感知器只能做简单的线性分类任务。但是当时的人们热情太过于高涨,并没有清醒的认识到这点不足。于是,当人工智能领域的巨擘明斯基(Minsky)指出个问题的时候,事态就发生了反转。明斯基指出,如果将计算层增加到两层,则计算量过大并且缺少有效的学习算法。所以,他认为研究更深层的网络是没有价值的。明斯基在1969年出版了一本叫《Perceptron》的书,里面通过数学证明了感知器的弱点,尤其是感知器对XOR(异或)这样的简单分类任务都无法解决。由于明斯基在人工智能领域的巨大影响力以及书中呈现的明显的悲观态度,这很大多数多学者纷纷放弃了对于神经网络的研究。于是神经网络的研究顿时陷入了冰河期。这个时期又被称为“AIWinter”。将近十年以后,神经网络才会迎来复苏。时间到了1986年,Rumelhar和Hinton提出了划时代的反向传播算法(Backpropagation,BP)。这个算法有效解决了两层神经网络所需要的复杂计算量问题,从而带动了使用两层神经网络研究的热潮。我们看到的大部分神经网络的教材,都是在着重介绍两层(带一个隐藏层)神经网络的内容。这时候的Hinton刚刚初露峥嵘,30年以后正是他重新定义了神经网络,带来了神经网络复苏的又一个春天。尽管早期对于神经网络的研究受到了生物学的很大的启发,但从BP算法开始研究者们更多是从数学上寻求问题的最优解,不再盲目模拟人脑网络。这是神经网络研究走向成熟的里程碑的标志。90年代中期,由Vapnik等人提出了支持向量机算法(SupportVectorMachines,支持向量机)。很快这个算法就在很多方面体现出了对比神经网络的巨大优势,例如:无需调参、高效率、全局最优解等。基于这些理由,SVM算法迅速打败了神经网络算法成为那个时期的主流。而神经网络的研究则再次陷入了冰河期。在被人摒弃的十年里面,有几个学者仍然在坚持研究。其中很重要的一个人就是加拿大多伦多大学的GeofferyHinton教授。2006年,他的在著名的《Science》杂志上发表了论文,首次提出了“深度信念网络”的概念。与传统的训练方式不同,“深度信念网络”有一个“预训练”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。在他的论文里面,他给多层神经网络相关的学习方法赋予了一个新名词—“深度学习”。很快,深度学习在语音识别领域崭露头角。接着在2012年,深度学习技术又在图像识别领域大展拳脚。Hinton与他的学生在ImageNet竞赛中,用多层的卷积神经网络成功地对包含一千个类别的一百万张图片进行了训练,取得了分类错误率15%的好成绩,这个成绩比第二名高了将近11个百分点。这个结果充分证明了多层神经网络识别效果的优越性。从那时起,深度学习就开启了新的一段黄金时期。我们看到今天深度学习和神经网络的火热发展,就是从那个时候开始引爆的。可以说在过去十几年时间里,图中这四位学者引领了深度学习发展最。第一位就是YannLeCun,他曾在多伦多大学随Hinton攻读博士后,现在是纽约大学的教授,同时还是Facebook人工智能最重要的推动者和科学家。第二位就是是之前我们多次提到的GeoffreyHinton,现在是Goog
本文标题:程序员为什么要学深度学习?
链接地址:https://www.777doc.com/doc-4420601 .html