深度学习——基于Python语言和TensorFlow平台(视频讲解版)(txt+pdf+epub+mobi电子书下载)


发布时间:2021-03-29 13:09:42

点击下载

作者:谢琼

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深度学习——基于Python语言和TensorFlow平台(视频讲解版)

深度学习——基于Python语言和TensorFlow平台(视频讲解版)试读:

前言

人工智能(Artificial Intelligence,AI)从孕育、诞生至今,已经有近80年历史了。近80年的光阴,虽然在历史的长河中不过是浪花一朵,但如果以人的一生来说,已经是进入耄耋之年了。但奇迹般的是,随着深度学习技术的横空出世,人工智能又神奇地焕发出了再一次的“青春”。深度学习系统AlphaGo及其升级版本一再战胜围棋领域的多位世界冠军级选手,最后甚至到了一败难求、人类选手只能仰视的地步,不能不说这是引起了世人广泛关注人工智能领域的决定性事件。指纹识别、人脸识别、无人驾驶等应用了深度学习方法而又贴近人们日常生活的技术,可以说深刻地改变了人类的生活和消费方式,也因此让人工智能更加深入人心,激起了人工智能(尤其是深度学习领域)的学习热潮。

笔者从小学三年级开始学习计算机,初中时就有机会接触第一个人工智能应用Animals,这是一款通过人的训练,不断向人提问,来猜测人心中所想的一种动物的程序。程序每次猜错后,会要求人提供一个可以纠正其判断逻辑的新问题,从而猜测得越来越准,能猜的动物越来越多。后来笔者也接触过当时最热的人工智能语言之一——Prolog语言。从那时起,笔者和大多数人工智能领域专家等都认为人工智能始终是要在人的指导下进行学习的,甚至到IBM公司的DeepBlue(深蓝)系统战胜了围棋世界冠军卡斯帕罗夫后仍没有改变这个观点。然而,深度学习的出现,颠覆了大多数人的看法,尤其是AlphaGo Zero系统,只在了解围棋基本下棋规则的基础上,完全不依赖人类的围棋知识,进行不到一天的自我学习,就能对围棋、国际象棋、日本将棋等最高水平的人类选手,甚至是AlphaGo这个它的前任实现完美超越。这充分证明了人工智能能够不依赖人类,从零开始,自己分析事物的逻辑,提取数据的特征,解决超出人脑计算和思考能力之外的问题。

因此,虽然计算机还缺少人类所具有的很多思考模式、逻辑创新、情感产生和变化的能力,但是在处理一些基于经验的、需要海量处理和计算(如图片、语音、视频的识别等)的机械任务上,人工智能已经具备条件帮助人类去更快、更准地完成。而以大数据为基础的逻辑判断和行为决断(如无人驾驶和医疗机器人),是深度学习下一步发展的目标。

当前对几款主流的深度学习框架(如谷歌的TensorFlow、微软的CNTK、新锐MXNet及老牌的Theano和Caffe、另辟蹊径的Torch等)的学习,无论是在国内还是在国外,可以说是如火如荼。然而,由于深度学习技术的基础属于人工智能中神经网络相关的知识范畴,而神经网络的研究又基于线性代数、矩阵运算、微积分、图论、概率论等复杂的数学理论,市面上出版的一些书也是开篇就讲这些数学理论基础,这让很多初学者望而生畏。另外,这些深度学习框架的最新文档大多为英文,并且直接讲类似MNIST的较复杂图像识别范例。诚然,图像识别是深度学习中最激动人心的创新应用之一,也是本次人工智能大潮的焦点,但对初学者来说,骤然跨过这么高的门槛反而会增加入门的难度,并影响学习的信心。

本书就是为了解决初学者可能遇到的门槛问题而著。书中精选了几个最贴近生活的、浅显易懂的实际问题,采用手把手实例讲解的方式,帮助初学者少走弯路,迈好踏入深度学习殿堂的第一步,打好进一步提高的知识基础,也树立继续进阶学习的充足信心。本书中的实例讲解均基于使用Python语言的TensorFlow框架,只需稍具Python语言编程的基础,通过阅读本书,就可以迅速掌握用深度学习技术解决实际问题的方法,并具备举一反三的能力。没有任何编程基础或无意学习编程开发的读者,也可以通过本书了解深度学习的概念和它的科学思维方法。本书第2章中还为有兴趣学编程的读者准备了快速编程入门的内容,学习后基本能够看懂本书所有实例中的代码。

最后,作为入门书籍,根据笔者常年进行企业培训和在线教育的经验,太过追求严谨和精确的概念定义或深陷于数学理论的推导,反而会影响初学者对相关知识的理解。因此,本书尽量减少对纯数学理论的研究探讨,对概念和一些理论知识也做了一定简化易懂的处理,这样有益于读者快速掌握基础知识和加强进一步自学深造的能力。本书在章节上也进行了精心的编排,确保读者能够循序渐进地学习;各个概念和知识点的引入也是精心穿插在合适的章节位置中,既能避免读者死记硬背大量理论知识,又能保证学习相关技术前拥有必需的知识基础。

本书提供了配套视频文件和其他配套资源,读者可到人邮教育社区(www.ryjiaoyu.com)下载。

由于编写时间仓促、编写水平有限,书中疏漏或不妥之处在所难免,请广大读者、同仁不吝指教,予以指正。另外,如有任何关于本书的建议或疑问等,欢迎发送电子邮件到topget@sina.com进行交流。编者2018年1月第1章 人工智能极简历史本书的内容重点不在于人工智能的历史,但了解人工智能的发展历程和主要理论、关键技术、重要事件出现的经纬,对于后面理解深度学习的知识无疑是有帮助的。因此,本章试图用最简要的描述,勾勒出人工智能发展至今近80年的历史大脉络。1.1 重要的奠基时期

人类利用机器来帮助自身工作的愿望由来已久,但人工智能并不是凭空产生的,它的诞生有着深刻的历史背景和先决条件。总结起来说,人工智能诞生的关键要素有下面几个。1.1.1 神经元的研究和人工神经元模型的提出

人类对大脑的研究由来已久,在19世纪末到20世纪初,在大脑神经系统的研究方面获得了突破性的进展。1906年,西班牙神经组织学家、被誉为现代神经科学之父的圣地亚哥·拉蒙-卡哈尔(Santiago Ramóny Cajal)因对人脑神经系统的突出贡献获得当年的诺贝尔生理学或医学奖。他明确阐述了神经元(也叫作神经细胞)的独立性和神经元之间通过树枝状触角相互连接的关系,奠定了生物神经网络(Biological Neural Networks)的基础,也为人工神经网络(Artificial Neural Network,常简称为神经网络)提供了可参考的重要依据。

图1.1是一个典型的单个生物神经元结构的示意图。每个神经元除包括细胞体和细胞核以外,一般还包括树枝状的树突和较长的一条轴突。树突和轴突都与其他神经元相连接,连接形成的组织叫作突触。树突是神经元的输入部分,也就是接收信号的结构;轴突是神经元的输出部分,也就是输出信号的结构。图1.1 生物神经元结构示意图

如图1.2中示意的,不同神经元之间通过突触相互连接,形成了生物神经网络。这是神经系统的主要构成形式。图1.2 生物神经网络示意图

1943年,神经学家沃伦·麦卡洛克(Warren McCulloch)和年轻的数学家沃尔特·皮茨(Walter Pitts )这一对绝妙的组合提出了一个人工神经元的模型——麦卡洛克-皮茨神经元模型(McCulloch-Pitts Neuron Model),一般简称为MP模型,如图1.3所示。图1.3 MP模型描述的人工神经元示意图

图1.3圆圈中是一个人工神经元(后面简称神经元)。与生物神经元的树突类似,每个神经元可以接受多个输入,也就是图中的X、1X,直至X,每个X输入到神经元后,会进行放大或缩小,也就是乘2n上一个权重值W,即图中的W至W,然后进行相加求和操作,也就1n是图中的∑符号所表示的操作。∑操作求得的值再经过一个门限函数T,得到最终的输出值Y,Y也就形似生物神经元的轴突。门限函数T后来一般叫作激活函数(Activation Function)。在后来的模型中,也常常在∑操作后再加上一个偏移量b来增加模型的适应性,也就是图中虚线箭头所示的部分。

每一个神经元的输出又可以作为下一个神经元的输入,因此,多个神经元就可以组成现代意义上的人工神经网络。

MP模型的提出无疑是人工智能史上最具有开创性的事件之一,具有极其深远的影响。迄今为止,神经网络的基本元素间仍然在使用该模型。它的意义在于,给出了一个可实际参照实施的神经网络的最小构件,在此基础上,神经网络就可以像拼插积木一样堆积而成。1.1.2 计算机和程序的出现

1930年,美国科学家范内瓦·布什造出世界上首台模拟电子计算机。1945年末至1946年初,世界上第一台数字计算机埃尼阿克诞生在美国宾夕法尼亚大学,ENIAC是Electronic Numerical Integrator And Calculator(电子数字积分计算机)的缩写。1951年,第一台实现了“计算机之父”冯·诺依曼提出的冯·诺依曼体系结构的计算机EDVAC (Electronic Discrete Variable Automatic Computer,离散变量自动电子计算机)问世。冯·诺依曼体系结构主要有3个创新:一是首次用二进制代替了十进制数字;二是提出了程序存储在数字计算机内运行的方式;三是提出了计算机中运算器、控制器、存储器、输入设备和输出设备这五大基本组成部件。至今为止,哪怕是最先进的计算机,仍在使用冯·诺依曼体系结构。

计算机和程序的出现,使得人工智能的实现有了硬件和软件基础(虽然当时还没有完整的软件的概念)。通俗地说,人类拥有计算机后,相当于拥有了第二个大脑,可以帮助人类思考和计算,所以后来也把计算机叫作“电脑”。而这第二个大脑所做的事情,已经具备了人工智能的雏形。人工智能的主要特征包括思维和行为,而从一定意义上来说,程序就是人类思维的体现,执行程序就是计算机的行为方式。1.1.3 图灵测试的提出

被视为计算机科学奠基人之一的艾伦·图灵(Alan Turing)也被视为人工智能之父,这是因为他在1950年发表了一篇名为《计算机器与智能》(Computing Machinery and Intelligence)的论文,里面提出了“机器能思考吗?”的问题,并给出了肯定的答案。这篇论文中,图灵驳斥了一些反对的观点,描述了人工智能研究的目的,给出了人工智能发展的方向,并预言了真正具有思维能力的机器的出现,被广泛视为人工智能理论的开山之作。

图灵还提出了被称为“图灵测试”(见图1.4)的一种判断机器是否能够有思维的测试方法,即由一个人(A)同时分别与另一个人(B)及一台机器(C)进行对话,对话的双方互不见面,仅以文字方式进行,由A负责提问,B和C分别进行回答。如果有相当多的人扮演A的角色并问了一系列问题后,其中有一定比例的人无法判断出B和C哪个是人哪个是机器,那么就说明机器具备了智能。图1.4 图灵测试示意图

图灵预言,在20世纪末,一定会有计算机通过图灵测试。到了2014年,终于有人,或者应该说是有机器通过了从1991年开始的年度图灵测试,它就是由俄罗斯人弗拉基米尔·维西罗夫(Vladimir Veselov)开发的人工智能聊天机器人软件——尤金·古斯特曼(Eugene Goostman)。图灵的预言终于实现了。

图灵的贡献主要在于:坚定地确认了人工智能成功的可能性,并确定了一个判断人工智能成功与否的标准。1.2 人工智能的诞生

说到人工智能的诞生,就不能不提到达特茅斯会议(Dartmouth Conference)。1956年夏天,以约翰·麦卡锡(John McCarthy,计算机与认知科学家,也被誉为人工智能之父)、马文·明斯基(Marvin Minsky,人工智能与认知学专家)、克劳德·香农(Claude Shannon,信息论的创始人)、艾伦·纽厄尔(Allen Newell,计算机科学家)、赫伯特·西蒙(Herbert Simon,诺贝尔经济学奖得主)、纳撒尼尔·罗切斯特(Nathaniel Rochester,IBM公司初代通用计算机的设计师)等为首的一批当时科学界的年轻才俊在美国的达特茅斯开会,会议名称为人工智能夏季研讨会(Summer Research Project on Artificial Intelligence)。在会议上,大家一起研究探讨了用机器模拟智能的一系列有关问题,并首次正式提出了“人工智能”这一术语,它标志着“人工智能”(Artificial Intelligence,AI)这门新兴学科的正式诞生,此后业界普遍认为1956年是人工智能的元年。1.3 第一个快速发展期

人工智能诞生后,很快经历了一个快速发展的阶段。

1957—1958年,美国神经学家弗兰克·罗森布拉特(Frank Rosenblatt)成功地实现了一种他后来正式命名为感知机(Perceptron)的机器研发。这种感知机能够对放在它的感应器之前的图像进行一定的判断并做出反馈。他研发所基于的模型就是MP模型,并且做了一定的改进。罗森布拉特提出了两层的感知机模型,建立了第一个真正的人工神经网络,之后又提出了包含隐藏层在内的三层感知机模型。罗森布拉特还给出了一种感知机自行学习的方法,即给出一批包括输入和输出实例的训练数据集,感知机依据以下方式进行学习:对比每组输入/输出数据,如果感知机的输出值比训练数据集中的输出值低,则增加它对应的权重,否则减少它的权重。感知机模型的出现,使人类历史上开始了真正意义上的机器学习时代。

1958年,来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)发明了第一款面向人工智能的高级计算机语言LISP,LISP名称源自列表处理(List Processing)的英文缩写。在LISP语言中,率先实现了多个在当时比较先进的技术,包括树形数据结构、自动存储管理、动态类型、条件表达式、递归运算等。LISP是一种函数式程序设计语言,所有运算都能以函数作用于参数的方式来实现。LISP的这些特点,使得它先天就符合当时人工智能运算的需要,也使它成为长期以来人工智能领域的主要语言之一。

1959年,美国自适应信号处理和神经网络创始人之一的伯纳德·威德罗(Bernard Widrow)和他的学生马辛·霍夫(Marcian Hoff)提出了自适应线性元件(Adaptive Linear Element,Adaline)。它是感知机的变化形式,也是机器学习的创始模型之一。它与感知机的主要不同之处在于,Adaline神经元有一个线性激活函数,它允许输出的是任意值,而不仅仅只是像感知机和MP模型中那样只能输出0或1两种结果。

在这个阶段,人们对于人工智能的前景过于乐观,认为用感知机模型构建出的神经网络,可以很快形成和人脑一样的思维来解决问题。因此,世界范围内的很多实验室纷纷投入这方面的研究,并且各国政府和军方也投入大量科研资金进行支持。1.4 人工智能的第一个寒冬

马文·明斯基是达特茅斯会议的组织者之一,是人工智能的创始人之一,对于人工智能的发展做出了卓越的贡献。1970年,明斯基获得了计算机科学界最高奖项——图灵奖(Turing Award),同时他也是第一位获此殊荣的人工智能学家。然而,也正是明斯基,被公认为是造成人工智能第一个寒冬的最重要因素之一。

1969年,明斯基和西蒙·派珀特(Seymour Papert)出版了Perceptron一书,从数学角度证明了关于单层感知机的计算具有根本的局限性,指出感知机的处理能力有限,只能解决线性问题,无法解决非线性问题,甚至连异或(计算机科学中的一种运算,记作XOR,其特点是1 XOR 1=1,0 XOR 0=0,1 XOR 0=1,0 XOR 0=0)这种基础的计算问题也无法解决,并在多层感知机的讨论中,认为单层感知机的所有局限性在多层感知机中同样是不可能解决的,因而得出了基于感知机的研究注定将要失败的结论。这很大程度上导致了在20世纪70年代末开始的很长一段时间内,大多数人工智能研究者们放弃了神经网络这一研究方向。

另外,在当时的计算机能力水平下,无法支持哪怕是极简单的问题来用神经网络的方式去解决。因此,在耗费了巨额的投资和很长时间的研究后,由于理论上的缺陷和硬件环境的不足,仍然没有能够带来具有实用价值的人工智能系统的出现。1973年,著名数学家詹姆斯·莱特希尔(James Lighthill)向英国科学研究委员会提交报告,介绍了人工智能研究的现状,他得出结论称:“迄今为止,AI各领域的发现并没有带来像预期一样的重大影响。”最终各国政府和投资人对AI研究的热情急剧下降,美国和英国政府开始停止对AI领域的研究提供支持,标志着人工智能的第一个寒冬开始了。1.5 人工智能研究的沉默探索与复苏

在AI的第一个寒冬过程中,人们对AI的研究并没有完全停止,总有一些信念坚定的人在坚持。但是,这次AI所遇到的挫折也给之前对AI抱过高期望值的研究者降了温,研究者们更理性地思考AI所能够做到的事情,开始收缩AI系统的目标和AI研究的范围,将其局限在最有可能发挥当时条件下AI系统能力的方向上。现在回过头去看,在这个阶段及后面的沉默探索过程中,很多研究成果对后来神经网络的发展是具有相当重要的作用的,有一些甚至是决定性的。

20世纪60年代末,人们开始了关于专家系统的研究,专家系统是汇聚了某个领域内的专家知识和经验,由计算机系统进行推理和推断,帮助和辅助人类进行决策的系统。专家系统至今仍活跃于人工智能领域,是人工智能领域的一个重要分支,被广泛应用于自然语言处理、数学、物理、化学、地质、气象、医疗、农业等行业。1972年,面向专家系统应用的高级计算机语言Prolog面世。Prolog是一款支持知识获取、知识存储和管理的计算机语言。当时其他的大多数语言还是聚焦于计算与流程的控制上,基本上还是以顺序执行的程序为主;而Prolog语言没有所谓的执行顺序,它主要的使用方式是由人来提出问题,机器根据知识库来回答问题。这种形式和现在基于事件产生反馈的非顺序化编程方式非常相似,这在当时,甚至现在也是属于比较先进的一种方式。

图1.5中,第一个线框中是一段用Prolog语言编成的实例代码,前3行分别定义了3件事实,即亚当(adam)是男人,夏娃(eve)是女人,蛇(snake)是动物;最后一行定义了一条规则,即如果X是男人,Y是女人,那么X和Y相爱。第二个线框中是前面Prolog代码执行时,我们做出的提问,例如,当问到亚当夏娃是否相爱时,系统会回答“true”(是);当问到夏娃和蛇是否相爱时,系统会回答“false”(否)。这就是一个典型的把知识灌输给计算机系统后进行使用的例子,其中事实和规则都是知识,而提问和获得答案的过程就是对专家系统知识库的应用。

专家系统和以Prolog为代表的人工智能语言的出现,标志着人们把对知识认知和应用作为人工智能研究的重要方向之一;从此之后,对于知识表达形式的研究,以及如何利用知识进行推理和计划决策等研究,逐步被人们重视起来,并对后来的人工智能领域产生了深远的影响。图1.5 Prolog代码示意图

1972年,芬兰科学家托伊沃·科霍宁(Teuvo Kohonen)提出了自组织特征映射(Self-organizing Feature Map,SOFM)网络,这是一个支持无监督学习(Unsupervised Learning)的神经网络模型,能够识别环境特征并自动分类。无监督学习是人们收集数据,让神经网络自己去发现规律并做出处理的机器学习方法,是现在乃至未来人工智能研究的重要方向之一。

1974年,保罗·沃波斯(Paul Werbos)第一次提出了后来对神经网络的发展腾飞具有重要意义的反向传播算法(Back-propagation Algorithm,简称BP算法)。该算法是根据神经网络的计算结果误差来调整神经网络参数以达到训练神经网络目的的方法。但由于处于AI的寒冬期中,该方法在当时没有得到足够的重视。

1976年,美国认知学家、神经学家史蒂芬·格罗斯伯格(Stephen Grossberg)和他的伙伴女神经学家盖尔·卡彭特(Gail Carpenter)提出了一种自适应共振理论(Adaptive Resonance Theory,ART)。在这个理论中,提出了一些支持有监督和无监督学习的神经网络,来模仿人脑的方式处理模式识别和预测等问题。

1982年,美国物理学家约翰·约瑟夫·霍普菲尔德(John Joseph Hopfield)提出了一种具有反馈机制的神经网络,被称为霍普菲尔德网络(Hopfield Network)。霍普菲尔德首次引入了能量函数的概念,形成了神经网络一种新的计算方法;用非线性动力学方法研究神经网络的特性,提出了判断神经网络稳定性的依据,并指出了神经网络中信息存储的方式。霍普菲尔德提出了动力方程和学习方程,对神经网络算法提供了重要公式和参数,使神经网络的构造和学习有了理论指导。1984年,霍普菲尔德用运算放大器模拟神经元,用电子线路模拟神经元之间的连接,成功实现了自己提出的模型,从而重新激发了很多研究者对神经网络的研究热情,有力地推动了神经网络的研究。

1983年,安德鲁·G. 巴托(Andrew G. Barto)、理查德·S. 萨顿(Richard S. Sutton)等人发表了关于增强学习(Reinforcement Learning)及其在控制领域的应用的文章。增强学习是研究机器如何在不断变化的环境中相应地做出最合适的反应的方法,主要通过让机器不断调整自己的行为以求获得更好的长效回报(Long-term Reward)来实现机器学习。增强学习现在结合深度学习的其他方法,已经成为深度学习领域中非常热门的一个分支,被广泛应用于无人驾驶、电子竞技等方面。

1985年,大卫·艾克利(David Ackley)、杰弗里·辛顿(Geoffrey Hinton)和特里·塞吉诺斯基(Terry Sejnowski)等人基于霍普菲尔德神经网络加入了随机机制,提出了玻尔兹曼机(Boltzmann Machine)的模型,这个模型由于引入了随机振动的机制,一定程度上具备了让神经网络摆脱局部最优解的能力。

1986年,大卫·鲁姆哈特(David Rumelhart)和詹姆斯·麦克莱兰(James McClelland)在《并行分布式处理:对认知微结构的探索》(Parallel Distributed Processing:Explorations in the Microstructure of Cognition)一文中,重新提出了反向传播学习算法(Back-propagation Learning Algorithm,简称BP算法)并给出了完整的数学推导过程。BP算法正式出现的意义在于,对于如何更高效地训练神经网络,让神经网络更有序地进行学习,提供了有效的、可遵循的理论和方法,这在以后神经网络(尤其是深度学习)领域是一个里程碑式的事件,至今BP方法仍然是训练多层神经网络的最主要、最有效的方法。在同一时期,辛顿、罗纳德·威廉姆斯(Ronald Williams)、大卫·帕克(David Parker)和杨立昆(Yann LeCun)等人也分别做出了关于BP算法的独立研究或类似的贡献。

这一时期的重要成果还包括多层前馈神经网络(Multilayer Feedforward Neural Network)模型的提出和梯度下降算法等数学和概率论方法被应用于神经网络的学习中。多层前馈神经网络是一个包含输入层、多个隐藏层和输出层在内的神经网络(见图1.6),所谓的前馈指的是神经网络中的各层均只从上一层接收信号并向下一层输出信号,即每层只向前传递信号而不向后反馈;梯度下降算法则被作为训练神经网络的反向传播算法的基础之一。另一重要的贡献是,基于不同研究人员及多方面对多层神经网络的研究,基本上推翻了明斯基对于多层感知机无法实现解决非线性问题的预测,这给神经网络的研究者们继续按此方向研究下去提供了极大的信心。图1.6 典型的多层前馈神经网络结构图1.6 人工智能的第二个冬天

人工智能的第二个冬天相比第一个来说,没有显得那么突出。这主要是由于下面两个原因。

• 经过AI第一次泡沫的破灭,大多数人都低调了很多,对于AI的前景期望值明显降低;

• 这一次并没有遭遇类似第一次AI寒冬时对于感知机的全盘否定式的理论上的挫折。

因此,在AI经历再一次低潮的时候,并没有引起人们太大的反应。继续研究的人也还在坚定前行,当然也有很多人去拥抱当时更热门的其他研究领域。AI的第二个冬天也没有一个明显的时间范围,有观点认为是从1987年华尔街金融危机带来的对人工智能投资大幅缩减开始的。AI的第二个冬天的原因之一是仍然没有能够体现AI价值的实际应用出现,或者说人工智能的研究成果与投资方的期待值仍然无法匹配;另一个主要的原因是个人计算机(Personal Computer,PC)的出现。

1981年,IBM公司推出了第一台真正意义上的个人计算机。自此之后,基于个人计算机进行的各种研究及应用软件的发展,使得很多人忘记了人工智能,尤其是神经网络。人们把极大精力投入到利用个人计算机越来越强大的能力,通过编程开发来解决各类问题上。这个时期确实给人类历史特别是信息技术(Information Technology,IT)行业带来了蓬勃发展,促进了各行各业的自动化、信息化,但跟人工智能和神经网络关系并不大。

还有,虽然计算机是深刻影响人类生活方式的划时代发明之一,但在当时,包括最强大的巨型机在内的所有计算机的运算能力仍然与使用神经网络解决问题所需要的能力相差甚远。另外,当时计算机软件的发展水平及人们对计算机软件的驾驭能力,也与人工智能的需求有着不小的差距。

因此,在20世纪八九十年代中,人工智能被不断涌现的其他技术和热点所掩盖,鲜有发声的机会,陷入了一个不大不小的低潮期。但就在这个低潮期中,还发生了1997年IBM公司的人工智能系统“深蓝”(DeepBlue)战胜了国际象棋世界冠军卡斯帕罗夫这样的事件。虽然“深蓝”当时采用的技术还是基于类似于优化过的穷举方法,但这种在人类实际生活中获得成功的案例,已经预示着AI的第二次黎明即将到来。1.7 再一次腾飞

就像黑暗中的钻石等到光线照射的时候就会无比绚烂一样,人工智能终于等到了蓬勃发展的历史时机,沉默耕耘了多年的研究者们成了这一次大潮的弄潮儿。

AI的这一次腾飞也不是无缘无故发生的,而是依赖于下面几个主要的因素。1.7.1 计算机综合计算能力的大幅提升

计算机从诞生至今,经过人们的不断努力,各方面能力得到了大幅的提升。其中与人工智能发展紧密相关的包括5个方面。

• 计算机进行计算与处理的核心——CPU的处理速度以2010年与671975年相比增长了6~7个数量级(10~10),并且多核CPU的出现,事实上进一步提升了CPU的处理能力。

• GPU(Graphics Processing Unit,图形处理单元,也就是显卡中的主要功能部件)的出现,大幅提升了计算机的科学运算能力。GPU的产生主要是为了高速处理大量的图形图像,而这需要大量的浮点数(一般所说的小数)运算,CPU处理整数运算速度尚可但对浮点数的运算能力很一般,而GPU设计时的主要目标之一就是应对浮点数的运算;另外,由于图形处理要求巨量数据超高速的运算,因此GPU一般均采用大量的并发运算单元来进行同时运算以满足其要求。而浮点数运算能力和大量并发运算能力恰恰是人工智能(尤其是神经网络)运算最需要的能力。因此,GPU的出现和其能力的快速提升,可以说是大大促进了人工智能发展的速度。从图1.7中可以看出,从2002年到2014年,GPU的理论浮点计算能力已经上升了数千倍。图1.7 CPU、GPU浮点运算能力理论峰值图

• 神经网络的计算需要大量的存储数据,包括训练数据、计算过程中间数据和输出数据等,例如,现在自然语言处理的原始训练数据一般均在几百兆字节至几个吉字节(在计算机存储中,一般1TB≈1000GB,1GB≈1000MB,1MB≈1000KB,1KB≈1000B,B代表Byte,即字节,1个字节代表一个8位的二进制数字);而进行较大分辨率的图像识别所需的数据就更多,往往有几十个GB到1TB以上,这就要求计算机内存和外存(主要是硬盘)足够大,另外还要访问速度足够快,才能支持神经网络的运算。幸好,计算机的发展超出了我们的期望,一般计算机的内存从20世纪70年代的几十KB大小快速发展到现在常见的几十GB,访问速度也有了指数级的提升。

• 计算机软件发展至今,已经非常成熟,人们对于软件的驾驭能力也越来越成熟。计算机软件方面值得一提的是,现在在人工智能领域最常用的计算机语言Python。Python于1989年发明,到现在已经成为最受欢迎的语言。2017年IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会)发布的年度编程语言排行榜中,Python高居首位。Python由于其免费、开源的特点,受到开发人员的喜爱,许多开发者为其编写了不同用途的第三方代码包和库,使其功能在基本的计算机语言功能基础上迅速扩充;另外,由于Python易于上手、编写方便,许多科学研究者也喜欢使用Python来进行科学计算。因此,Python逐步成为人工智能领域中最热门的语言,而Python语言的越来越成熟也反过来推动了人工智能的发展。

• 云计算技术的出现与GPU的出现类似,也大幅提升了计算机系统的计算能力。云计算的核心本质是调度网络上具备运算能力的计算机,并行协同处理某些计算任务,以求实现人们所能掌控的计算能力不再被计算机所处的地理位置和单台计算机的运算能力所限制。1.7.2 大数据的出现

大数据(BigData)概念的出现,无疑也是推动人工智能(尤其是机器学习领域)发展的重要因素,甚至可以说是捅破的最后一层窗户纸也不为过。

以前的人工智能研究,即使有了理论方法也很难研制出有实际价值的系统,其主要原因之一就是缺少大量的训练数据。尤其是机器学习,更需要用海量的训练数据来进行训练才能够使系统的准确率达到实用的要求。

经过IT行业几十年的发展,人们对于数据的存储和管理水平不断进步。这期间,大型关系数据库技术为人们积累数据、运用数据提供了重要的支撑。现在数据库技术经过几代发展,已经向多元化、多型态化进一步发展。数据存储与管理技术的进步,促进了大型应用系统的实用化,例如政府部门的政务处理系统、银行的金融管理系统、电信行业的营业系统和计费系统、企业内部的资源管理系统等,都得到了大范围的应用;这反过来也推进了海量资源和用户数据的积累。据测算,人类在2013年的数据存储总量已经达到80EB(1EB≈1000PB,1PB≈1000TB),而到了2015年,已经达到了300EB;预计到2020年,人类数字化的数据总量将达到35ZB(1ZB≈1000EB)。海量的数据让研究人员不再缺乏机器学习训练数据的来源。

人们在大数据技术的发展过程中,并非仅仅得到了数据本身,还成功提升了自己处理数据、从数据中进行发掘/发现、对数据进行分类合并、快速从原始数据中提取有效的训练数据的能力。1.7.3 神经网络研究的成熟化

现代社会某项科技的发展,离不开其研究者和关注者心态的成熟,这一点在人工智能这个领域体现得尤其明显。人工智能经历了两次寒冬,但寒风抹去泡沫对这个领域的发展并非坏事,留下来的人们都谨慎了许多,也务实了许多,把研究向更能体现人工智能价值的方向进行,例如图像识别、自然语言处理等。这期间,对于后来人工智能腾飞起到重大作用的事件包括以下几个。

• 反向传播学习算法研究进一步成熟,在前面所介绍的1986年提出的反向传播算法基础上,人们又对其在神经网络中多层、多个不同类型的隐藏层等情况下,进行了大量的实验验证,并改进了其随机性和适应性。如前所述,反向传播算法对于神经网络的训练是具有历史性意义的,因为它大幅缩减了神经网络训练所需要的时间。

• 在20世纪60年代就有了卷积网络的最初思想,但到1989年,Yann LeCun发明了具有实际研究价值的第一个卷积神经网络(Convolutional Neural Network,CNN)模型LeNet。卷积网络是前馈神经网络中的一种类型,最主要的特点是引入了卷积层、池化层这些新的隐藏层类型。卷积层特别适合对图像这种不同位置的像素点之间存在关联关系的数据进行特征提取,而池化层则用于对图片降低分辨率以便减少计算量。因此卷积神经网络的发明对于图像识别具有重要意义;由于卷积层具有特征提取和特征抽象能力,它对于后面深度学习的发明也有重要的启发意义。

• 早在20世纪80年代,已经有了循环神经网络(Recurrent Neural Network,RNN)的思想,这种网络与原来的纯前馈神经网络不同,引入了时序的概念,信号在神经网络中传递时,在下一时刻可以反向往回传递,也就是说,某一时刻某个神经元的输出,在下一时刻可能成为同一神经元的输入,这就是它命名中“循环”两个字的由来。循环神经网络特别适合解决与出现顺序有关的问题,例如自然语言处理中的语音识别,因为一句话中后一个单词是什么往往与之前已出现的词语有很大关系,所以判断人说的某个词往往要根据前面出现的词来辅助。但后来人们又发现,这种关系与单词之间的距离或者说时间顺序的联系并不是固定的,有时候距离很远也有很大影响,有时候距离很近但影响不大。因此,1997年,赛普·霍克赖特(Sepp Hochreiter)和于尔根·施米德胡贝(Jürgen Schmidhuber)提出了能够控制时间依赖性长短的新型循环神经网络——长短期记忆网络(Long Short-Term Memory Network,LSTMN),成功解决了这一类问题。2000年,菲力克斯·热尔(Felix Gers)的团队提出了一种改进的方案。

• 2006年,辛顿等人提出了深度学习的概念。深度学习并非是一种单一的技术或理论,而是结合了神经网络多项理论和成果的一套综合性方法,简单地说可以用一句话概括:深度学习是在多层的神经网络中,从原始数据开始,通过机器自主进行学习并获得解决问题的知识的方法。深度学习最主要的特点是机器自主从原始数据开始逐步将低层次的特征提取、组合成高层次的特征,并在此基础上进行训练学习,获得预测同类问题答案的能力。也就是说,AI已经具备了自主发现特征的能力,原来必须依靠人类指导来进行学习的机器,终于可以自己去学习了,这是人工智能发展史上一个划时代的进步,是最激动人心的成果之一。现在,深度学习已经成为人工智能领域中最活跃的方向。

• 以卷积网络和深度学习理论的出现为基础,人工智能的研究者们敏锐地找到了最合适的突破点:计算机视觉。计算机视觉是指人工智能系统进行的图像识别与分类、视频中的动作识别、图片中的物体分界、图像视频理解与描述文字生成、图像内容抽取与合成、图画风格替换、网络图片智能搜索等一系列与图形或视频处理等有关的行为。由于计算机视觉需要处理的都是海量数据,人脑难以应付这么大量而又需要高速处理的任务,而这正是卷积网络和深度学习理论上最擅长的方向,并且又具备了前面所述的软硬件条件,所以在后面可以看到,很多人工智能取得的成就都是与计算机视觉紧密相关的。

在上面所说的各种因素的合力推进下,沉寂已久的人工智能在21世纪第一个十年前后突然爆发了,这可以说在大多数人意料之外,但回过头看也在情理之中。

广泛被界内认可是,这一次人工智能大发展的起点为2012年,在ImageNet工程举办的年度图像识别大赛(Annual ImageNet Large Scale Visual Recognition Challenge)上,包括亚历克斯·克里泽夫斯基(Alex Krizhevsky)和辛顿等人在内的团体推出的AlexNet神经网络,获得了当年的冠军。ImageNet项目是一个大量收集图片数据用于智能图像识别研究的可视化数据库项目。从2010年开始,ImageNet每年都举办这个年度图像识别大赛。2012年,AlexNet在比赛中识别图像的top-5错误率(即系统给出的可能性最高的前5个预测结果全部错误)仅有16%左右,远远低于其他参赛的系统,距第二名足有10个百分点以上。AlexNet就是一个采用了深度学习技术的、使用了GPU并发运算加速的多层卷积神经网络,这也是在这项比赛中第一个采用了深度学习技术的系统。AlexNet在训练时,使用的CPU能力相较于1998年LeNet使用的高了1000倍以上,并且使用了GPU进7行加速,使用的训练数据量较LeNet高了10倍,可以说在充分利用了之前的各项人工智能研究成果之外,也有当时各项客观支撑条件发展的功劳。AlexNet取得一鸣惊人的成功后,在人工智能界引起了巨大反响和关注,很多大公司和有实力的研究团队加入到深度学习的研发领域中来,在后来的新系统中,已经将top-1错误率(只判断一次的错误概率)从AlexNet的50%~60%提升到80%以上。

如果说AlexNet的出现还仅仅是在IT业界获得了较大反响,那么让人工智能的能力广泛为世人所知,无疑是2016年,谷歌旗下DeepMind公司研发的AlphaGo成为第一个击败围棋世界冠军的人工智能系统。2016年3月,AlphaGo与围棋世界冠军、职业九段李世石进行了五番棋大战,最后4比1取胜。之后,AlphaGo在网络上与中、日、韩等多国围棋高手进行了几十局对弈,无一败绩。2017年中,经过进一步训练的AlphaGo与世界排名第一的柯洁对战3局,全部取胜。现在,几乎所有围棋选手都承认无法战胜人工智能,并且看不到胜机,甚至有围棋界元老认为AlphaGo可以对目前人类最高水平的选手让两子以上。然而,人工智能的研究并没有止步,2017年10月,DeepMind团队公布了AlphaGo的最新进化版本AlphaGoZero。之前的AlphaGo是以职业棋手棋谱作为训练的主要数据来源之一进行了大量的训练而成的;而AlphaGoZero已经摒弃了人类的知识,仅在知晓下棋基本规则的情况下,从零开始训练(这也是名称中Zero的由来之因),经过不到1天训练,就能对战围棋、国际象棋、日本将棋等最高水平的人类选手,甚至是AlphaGo这个它的前任实现完胜。

AlphaGo就是采用了深度学习的分支——增强学习技术来训练的神经网络系统。AlphaGo的出现,完全激发起了世人对人工智能的关注,让人深深感觉到人工智能的强大实力。围棋与国际象棋不同,每一步的下法以现在计算机的能力,也难以在正常时间内穷举来判断优劣,人类研究的人工智能在围棋领域实现的突破,具有极大的象征意义,代表着人工智能不仅已经可以有实用的、有价值的系统应用,而且已经可以超越人类自身的极限,对人类生活和社会的发展必将带来巨大的影响。于是,科技界的巨头公司也纷纷投入或加大投入到人工智能的研发中来。

现在,人工智能尤其是深度学习的热潮方兴未艾。在指纹识别、人脸识别、网络图像视频鉴别、疾病诊断、天气预报、无人驾驶、无人机、机器人、机器翻译、客户关怀等方向上,取得了大量成果,并迅速应用于实际生活中。这也是这一次人工智能腾飞与前几次AI泡沫相比最大的不同,即出现了真正有价值的系统而不仅仅是实验成果。也因此,这一次AI的大发展给人以更坚实、更有底气的感觉,它的发展前景一片光明。1.8 未来展望

目前,人工智能虽然已经取得了引人瞩目的成功,但这还远远不是它的巅峰,还有巨大的发展潜力。

人工智能可以从某种程度上分成3类,弱人工智能(Artificial Narrow Intelligence)、通用人工智能(Artificial General Intelligence)和超人工智能(Artificial Super Intelligence)。弱人工智能是指机器的智能在一些特定领域(或具体任务)上接近或超越人类的水平;通用人工智能是指机器在所有需要智能的方面具备和人一样解决各种问题的能力;超人工智能是指机器具备全方面超越人脑的能力,包括思维、创造性和社交能力。目前,人类取得的成果还局限在弱人工智能方面,但对通用人工智能的研究已经在进展中了。

对于神经网络的研究,也在不断进化中,例如对本次人工智能发展居功不小的反向传播算法,它的创始人之一辛顿最近已经对它提出了质疑,认为它不是人脑思考的方法(这也是人工神经网络和生物神经网络的最大区别之一),并提出了新的研究方向。无论其研究结果如何,不断地质疑、不断地进步是科学界正能量的体现。也祝愿人工智能行业能够获得更大的发展,更好地造福人类。下面列举近年来人工智能已经获得一定成功并很有希望获得更大成功的一些成果和一些有趣的案例作为本节的收尾。

• 由Richard Zhang等人研发的运用深度学习技术自动给黑白照片上色的系统(见图1.8),使用了8个以上卷积层的多层神经网络,效果非常不错。图1.8 用人工智能技术给黑白照片上色

• 著名的显卡生产公司英伟达(NVIDIA)提供的GPU对于人工智能特别是深度学习的发展起了很大的推动作用。英伟达公司也研发了一款“自动驾驶端到端深度学习系统”(End-to-End Deep Learning for Self-Driving Cars),如图1.9所示。在这个系统中,使用多层的卷积神经网络,从放在汽车前面的一个摄像头获取的最原始的图像数据为输入去学习自动驾驶的命令。图1.9 自动驾驶端到端深度学习系统

• Scott Reed、ZeynepAkata、Xinchen Yan、Lajanugen Logeswaran、BerntSchiele和Honglak Lee等人2016年提交的论文Generative Adversarial Text to Image Synthesis(见图1.10)中,提出了用一种很有前景的深度学习神经网络——生成式对抗网络(Generative Adversarial Network,GAN)来实现根据文字内容生成图片的方法。图1.10 用人工智能进行文字到图像的生成

• 斯坦福大学学生Karpathy等人做的在网页浏览器中实现训练深度学习神经网络来进行图片分类与识别的项目(见图1.11)。图1.11 人工智能实现图像分类的生成

• 谷歌、微软、亚马逊、MathWorks等大公司都对图像中的物体识别或定位做了很多研究并已取得很多成果,图1.12是来自Javier Rey的探讨计算机视觉中这几个问题的一篇博文。图1.12 人工智能进行图片中的物体识别

• 所谓计算机视觉中的语义分界,指的是从一张图片中,划分出各个物体的边界范围。图1.13就示意了来自麻省理工学院科学与人工智能实验室研制的系统从一张照片中,成功标记出了汽车、草坪、树、天空、道路等物体的边界范围。图1.13 人工智能进行语义边界的划分

• Yannis M.Assael、Brendan Shillingford、Shimon Whiteson和Nando de Freitas等人提出的唇语识别系统LipNet是使用了深度学习的神经网络,虽然论文方面出现了一些波折,但作为一个深度学习应用,成功地把从视频中识别唇语的准确度达到了90%以上,已经超过了一般的人类识别水平,不能不说在实用化方面是有价值的(见图1.14)。图1.14 LipNet某一个落地项目的网站

• 人工智能系统在艺术领域也有了不凡的造诣,图1.15和图1.16分别是笔者在某网站利用人工智能进行基于模板的自动绘画系统中随便涂抹后由系统自动生成的卡通风格风景画,还挺像模像样的。图1.15 修改人工智能画的范围模式

• 谷歌的机器翻译系统GNMTS(Google Neural Machine Translation System)使用了基于深度学习的技术来训练系统,2016年宣布,在英语到法语互译、英语到西班牙语互译方面,已经非常逼近人类的翻译水平,如果6分是满分,机器翻译与人工翻译的已达到5.4和5.5这样的分数水平;中英文互译最差,但也在4.6和5.0这样的分数对比水平上。虽然这可能和实际使用系统的感觉还有差异,但不可否认比之前要提升了不少。图1.16 用人工智能画的卡通风格画1.9 本章小结:历史指引未来

本章用尽可能简短而又保留重要事件的方式叙述了人工智能的主要发展历程。人工智能的起起伏伏或许能给我们一些启迪。目前,人工智能的大潮正以无可阻挡的势头不断影响着我们的生活。深度学习是现在人工智能领域最有活力的方向之一,本书后面将循序渐进、一步一步地通过实例讲解,帮助大家快速入门,理解相关的概念,掌握应用深度学习方法解决实际问题的能力,并具备进一步自学提高的基础。第2章 开发环境准备本书后续的讲解将基于谷歌公司的深度学习框架TensorFlow,这是目前同类框架中最热门、使用最广泛的一个。TensorFlow的开发主要是使用Python语言,所以本章将先讲解如何安装Python和TensorFlow。另外,为了方便读者搭建一个高效的开发环境,本书还会介绍几种相关工具软件的安装。对于不熟悉Python语言的读者,本章最后一节还准备了有关Python语言编程的快速入门知识。2.1 安装Python

Python是一门解释型的高级计算机语言。所谓解释型,指的是计算机对用Python编写的程序不是预先编译成机器代码,而是在执行时逐条对命令进行翻译并逐条执行的。对比编译型语言来说,解释型语言速度会慢一些,但是一般编写程序时会更方便、快捷。Python在英语中是“蟒蛇”的意思,这个名字的由来据说是发明者Guido van Rossum受喜爱的一个英国剧团Monty Python的名字启发而来。Python语言写法简洁、优雅而又使用方便,受到很多人的喜爱,从1989年面世至今,已经发展成为使用最广泛的计算机语言之一。由于Python的开放性,多年来很多人为Python编写了第三方代码包或代码库,Python的功能越来越强大;其中就包括用于数学和科学计算的代码包,因此很多科学家也喜欢用Python来编写程序,这也是目前人工智能领域诸多系统使用Python来进行开发的重要原因之一。

Python语言发展到现在,有两个主要分支版本,即Python 2.x系列和Python 3.x系列,其中Python 2.x系列最新的版本是2.7,也是这个系列计划中的最后一个版本。Python 2.7版本是Python的一个经典版本,很多早期使用Python的开发者至今仍然愿意继续使用这个版本来进行开发;另外一个使用Python 2.x版本的原因是之前很多第三方代码库也是为Python 2.x版本开发的,但随着为Python 3.x开发的代码库逐渐丰富,这个问题慢慢已经不再重要。Python 3.x版本与Python 2.x版本相比有了比较明显的改进,写法更加规范,解决了很多遗留问题,最重要的是解决了Python 2.x版本中的编码问题,也就是中文的兼容问题被解决了。所以建议如果没有特殊情况,一定要使用Python 3.x系列的最新版本。有些操作系统(例如苹果计算机的Mac OS操作系统和一些Linux操作系统)已经预装了Python 2.x的版本,那么需要加装Python 3.x的最新版本。

下面将分操作系统介绍安装Python的过程。2.1.1 Windows操作系统下安装Python

Windows操作系统下一般没有预装Python,因此需要先到Python的官方网站去下载Python的安装包。用网页浏览器打开Python的官网首页,如图2.1所示。图2.1 Python官网首页

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载