第1章
人工智能概述
1.1 人工智能的定义
人工智能对应的英文术语为Artificial Intelligence(AI),有时也被称为Machine Intelligence。作为计算机学科的一门分支,以及20世纪70年代以来的世界三大顶尖技术之一,AI虽然已经走过了几十年的历史,但业界似乎还没有对它形成统一的定义。不过,这种“分歧”不但没有阻碍AI的蓬勃发展,反而“有助于”它的“野蛮生长”。
对此,斯坦福大学曾在一份报告(参见https://ai100.stanford.edu/2016-report/section-i-what-artificial-intelligence/defining-ai)中指出:
“Curiously, the lack of a precise, universally accepted definition of AI probably has helped the field to grow, blossom, and advance at an ever-accelerating pace. Practitioners, researchers, and developers of AI are instead guided by a rough sense of direction and an imperative to ‘get on with it’.”
大意:奇怪的是,AI缺乏一个精确且能让人普遍接受的定义,反而让这个领域不断成长和繁荣——因为人工智能的实践者、研究人员和开发者们在一种“粗略”方向感的指引下,可以不受限地“继续前进”。
就如莎士比亚所说的“一千个观众眼中有一千个哈姆雷特”一样,我们倒是可以借鉴一下计算机界的先驱们心中的AI定义(从AI学科的角度)。
AI定义1:业界普遍认为,人工智能学科起源于1956年在达特茅斯学院举办的一场研讨会。当时出席会议的专家包括Allen Newell(CMU),Herbert Simon(CMU),John McCarthy(MIT),Marvin Minsky(MIT)和Arthur Samuel(IBM)等人。其中,John McCarthy(因为在计算机及人工智能领域的突出贡献,于1971年获得了计算机最高奖——图灵奖)对人工智能的定义是:“面向智能机器制造的科学和工程。(The science and engineering of making intelligent machines.)”
AI定义2:斯坦福大学研究所人工智能中心主任Nils J. Nilsson对人工智能的定义是:“Artificial intelligence is that activity devoted to making machines intelligent,and intelligence is that quality that enables an entity to function appropriately and with foresight in its environment.”
大意:人工智能是一种致力于让机器具备“智能”的活动——而“智能”则是让一个实体在其环境中能够像人一样有“先见之明”的品质。
AI定义3:另一位来自于MIT的人工智能科学家Patrick Henry Winston(http://people.csail.mit.edu/phw/index.html)对人工智能的理解是“研究如何使计算机去做过去只有人才能做到的智能工作”。
从上面三种人工智能定义中,不难发现大家对于AI的理解是从以下两方面来阐述的。
1.人工(Artificial)
这一点和人类与生俱来的智能是相对的,即AI是由人工通过计算机程序等手段创造出来的一种技术。
2.智能(Intelligence)
智能是什么?对于这个问题可以说直到目前为止,在整个AI领域都还存在比较大的分歧。因为人类对于“智能的本质是什么”“智能是如何构成的”等基础问题一直都是“一知半解”,所以自然无法准确定义智能是什么。
通常认为,智能至少会涉及意识、自我、心灵等问题,因而是超越技术本身的一个概念。如果从人工智能学科目前的几大发展方向来看,那么AI在实现“智能”的路上,大致存在以下一些需要研究的领域。
(1)决策推理(Reasoning)。
(2)知识表示(Knowledge Representation)。
(3)学习能力(Learning)。
(4)规划能力(Planning)。
(5)自然语言处理(Natural Language Processing)。
(6)感知(Perception)。
(7)运动控制(Motion and Manipulation)。
(8)通用智能(General Intelligence)。
……
具体到人工智能的研究方法上,自然更是“百花齐放”了——而且在不同历史时期,一些流派会呈现“各领风骚”的现象。目前业界普遍认为,AI可以划分为符号主义、连接主义和行为主义等几大流派,后面将做详细讲解。
1.2 人工智能发展简史
人工智能并不是一个新概念,它的发展可以算得上“由来已久”。如果以AI的数次“高潮”与“低谷”作为界线,那么可以将它划分为6~8个阶段。需要特别指出的是,对于这些阶段的准确起始时间点,业界还没有形成统一的认识,所以下面阐述的只是业界认可度较高的一种划分方式。
(1)“AI史前文明”:1956年之前。
(2)第一次黄金时期:1956—1974年。
(3)第一次AI寒冬:1974—1980年。
(4)第二次黄金时期:1980—1987年。
(5)第二次AI寒冬:1987—1993年。
(6)第三次崛起:1993—2011年。
(7)持续繁荣:2011年至今。
AI历史发展趋势简图如图1-1所示。
图1-1 AI历史发展趋势简图
限于篇幅,接下来只围绕上述几个阶段做精要讲解。
1.2.1 史前文明,曙光初现(1956年前)
如果抛开“计算机范畴”这个限制,那么人工智能的历史绝对可以说是“源远流长”的。譬如古希腊神话中就有关于人造人的记载:Hephaestus是一位集砌石、雕刻、铸铁匠等艺术技能于一身的奥林匹斯十二主神之一,他制作的工艺品无人能敌,其中就包括一组金制的女机器人,她们既可以在铁匠铺完成高难度工作,还可以和人类开口交流——这些机器人无疑已经具备了高度的“人工智能”。
又如希腊神话中描绘了一位名为Pygmalion的雕刻家,他爱上了自己的一尊雕塑作品Galetea,并每天对着她说话。他的这种“痴情”最终感动了爱神Aphrodite,于是这位女神给雕塑赋予了生命——然后像很多童话故事中的结尾一样,Pygmalion和他的雕塑变成的美女结婚了,如图1-2所示(注:由此还引申出了皮格马利翁效应(Pygmalion effect),指的是人在被赋予很高的期望后,往往会表现得更好的一种现象)。
图1-2 人们根据Pygmalion和Galetea的故事创作的绘画作品
另外,人们针对“人造智慧”这一题材创作的小说也很多。例如,科幻小说之母Mary Shelley(1797—1851年)在Frankenstein中描述了“一位青年科学家Frankenstein创造了一个奇丑无比的怪物,但是它并不服从主人,反而接连杀害他的亲人,最终导致Frankenstein忧愤而死”的故事。可以肯定的是,作者在两百年前所描绘的这个具有生命意识的怪物,直到目前为止我们还是没有办法真正实现出来。
除了文学作品外,人类也在实践中探索着制造“类人”物体的可行性。例如,古代社会里的很多“能工巧匠”所制作的各式各样的“人偶”。《列子·汤问》中就记载了一位名为偃师的工匠,他以制造能歌善舞的人偶而著称于世(据称这也是我们可以追溯到的中国最早出现的“机器人”,如图1-3所示),如下是其中的一些节选片段。
“周穆王西巡狩,越昆仑,不至弇山。反还,未及中国,道有献工人名偃师。穆王荐之,问曰:‘若有何能?’偃师曰:‘臣唯命所试。然臣已有所造,愿王先观之。’穆王曰:‘日以俱来,吾与若俱观之。’翌日偃师谒见王。王荐之,曰:‘若与偕来者何人邪?’对曰:‘臣之所造能倡者。’穆王惊视之,趋步俯仰,信人也。巧夫!领其颅,则歌合律;捧其手,则舞应节。千变万化,惟意所适。王以为实人也,与盛姬内御并观之。技将终,倡者瞬其目而招王之左右侍妾。王大怒,立欲诛偃师。偃师大慑,立剖散倡者以示王,皆傅会革、木、胶、漆、白、黑、丹、青之所为。王谛料之,内则肝胆、心肺、脾肾、肠胃,外则筋骨、支节、皮毛、齿发,皆假物也,而无不毕具者。合会复如初见。王试废其心,则口不能言;废其肝,则目不能视;废其肾,则足不能步。穆王始悦而叹曰:‘人之巧乃可与造化者同功乎?’……”
图1-3 偃师和人偶(图片来源于网络)
在电子计算机问世之前,很多名家学者也尝试过以机械化的手段来“复现”人类的思考过程,从而达到“人造的智能”。多个国家的哲学家在公元前就提出了各自的形式推理理论——例如,亚里士多德的三段论逻辑、欧几里得的几何原本等。可以看到,这些学者们似乎都试图从数学、逻辑推理等基础学科的角度来分析人类智慧的本质。这种依托于科学推理的研究方法,无疑对后来计算机AI的发展产生了较为深远的影响。
伴随着计算设备(特别是电子计算机)的不断改良,人们借助这些新型的“武器”也做了不少探索。例如,Charles Babbage在19世纪初设计了一款可能有无限潜能的可编程计算设备,如图1-4所示(不过很遗憾他自己最终没有让这一设计真正落地实现)。
图1-4 基于Charles Babbage的设计实现的机器
步入20世纪50年代后,距离人工智能学科成立的脚步越来越近了——这段时间内,数学、心理学、神经学、工程学等多个学科都发生了不少足以载入史册的关键事件。AI在当时已经是“山雨欲来风满楼”了。
1.早期的人工神经网络
事实上,神经网络的出现甚至比人工智能学科还要早,只不过前期受限于很多因素并没有取得很大的应用成果。人们普遍认为Walter Pitts和Warren McCulloch是最早描述人工神经网络理论的学者,他们分析了理想状态下的人工神经元以及它们可以完成的一些简单的逻辑功能。1951年左右,他们的学生Minsky(麻省理工学院人工智能实验室的创始人之一,因其在人工智能方面的突出贡献,于1969年获得了图灵奖)在此基础上,构造出人类历史上第一台神经网络机器SNARC,如图1-5所示。
图1-5 神经网络机器SNARC
2.神经病理学
人类社会很多划时代的科技创新,都是在向大自然学习和观察的过程中研究出来的,比如飞机、潜艇等。因而人们在研究AI时,自然不会放过“智能”的天然来源——也就是人类自身的大脑和神经系统。在人工智能学科创立的前几年,神经病理学有了一个重大的发现,即人类大脑是由神经元组成的,它存在“激活状态”(只存在“有”和“无”两种可能性),如图1-6所示。结合图灵的计算理论,人们逐渐对如何“仿造”人类大脑有了一些模糊的认知。
图1-6 神经元经典结构(参考Wikipedia)
3.图灵测试
诞生于1950年的图灵测试无疑是这一阶段最重要的AI“催化剂”之一(图灵本人被称为“人工智能之父”。另外,他和冯·诺依曼还被并称为“计算机之父”。这里不去细究他们究竟谁“贡献大一些”的问题)。图灵测试是在什么历史背景下产生的?又或者说,它在解决一个什么样的问题呢?
图灵测试是图灵在曼彻斯特大学工作时,在1950年的一篇名为“Computing Machinery and Intelligence”的文章中给出的一项提议。他最初的目的似乎是想解决“机器能不能思考”这个问题。由于直接回答这一问题太难了,于是他就想到了另外一个对等的问题,即大家现在所熟知的图灵测试,如图1-7所示。
图1-7 图灵测试示意图
它涉及以下三个角色。
(1)询问者(Interrogator,对应图中的人类提问者)。
(2)计算机(Computer,对应图中的计算机回复者)。
(3)人类(Human,对应图中的人类回复者)。
首先,这三个角色是不能直接接触的,它们只通过一些受限的手段进行交流(比如计算机键盘和屏幕)。其次,询问者可以和其他两个角色开展受限的交流——如果他无法准确区分计算机和人类的真实身份,那么就说明这台机器通过了图灵测试。
值得一提的是,在最初的图灵测试中,询问者和其他角色是不能有物理上的互动和接触的,这其实在一定程度上降低了测试的难度。后来人们逐渐不满足于普通的图灵测试,于是加入了部分物理上的交互要求,使得受试者不得不另外具备计算机视觉、自动化控制甚至“人类仿真皮肤/外表”等高阶能力——这种类型的测试称为“完全图灵测试”。
4.游戏AI上的突破
在人工智能的发展历史中,似乎总是和游戏(如象棋、围棋、跳棋、Atari等)有着某种“千丝万缕”的联系,如表1-1所示。这主要有以下两方面原因。
一方面,人类认为游戏是一种需要“高级智力”才能参与的活动,因而对于人工智能而言无疑是很有挑战的。
另一方面,很多游戏可以提供不错的仿真环境,帮助人们快速地迭代优化和验证人工智能理论。
表1-1 游戏AI的历史
例如,在20世纪50年代初期,曼彻斯特大学的Christopher Strachey和Dietrich Prinz分别在Ferranti Mark1机器上写出了第一个西洋跳棋和国际象棋程序。随着人工智能技术的不断演进,人类在各种游戏(主要是棋类游戏)上也可以说是“捷报频传”,特别是前几年DeepMind公司开发的AlphaGo与人类世界围棋冠军的几次对决,彻底点燃了人工智能爆发的“导火索”,意义非凡。
1.2.2 初出茅庐,一战成名(1956—1974年)
业界普遍认为,人工智能学科起源于1956年在达特茅斯学院召开的一个大会,出席会议的不少人后来都成为人工智能方面成就特别高的人,比如:
● Dr. Claude Shannon(信息论的创始人,相信大家都不会陌生)
● Dr. Marvin Minsky
● Dr. Julian Bigelow
● Professor D. M. Mackay
● Mr. Ray Solomonoff
● Mr. John Holland
● Mr. John McCarthy
……
会议召开的一个背景是:当时的学者们对于如何研究“会思考的机器”有各自的理解,对这种“机器”的命名也是五花八门,如Cybernetics、Automata Theory等。有鉴于此,John McCarthy在1955年开始筹划组织一次研讨会,以便大家互通有无——人工智能(Artificial Intelligence)这个词就是他为这个新领域所取的名字。这个名字在次年的达特茅斯大会正式开始之前就已经在圈内获得了一定的认可。这一点从他和Marvin Minsky等人所发出的会议提案中可以得到论证,如图1-8所示。
图1-8 达特茅斯AI研讨会(1956年)提案节选
可以看到,1955年9月2日多人联名发出的提案中已经使用了artificial intelligence这个词。其后这个名字又在达特茅斯研讨会上取得了与会人员的一致认同,于是一直沿用至今。1956年的达特茅斯大会的研讨内容可以说影响了AI后来几十年的发展,核心议题包括:
● 计算机(Computers);
● 自然语言处理(Natural Language Processing);
● 神经网络(Neural Networks);
● 计算理论(Theory of Computation);
● 抽象和创造性(Abstraction and Creativity);
……
从1956年开始直到人工智能的第一次寒冬,有关AI的各种学术研究成果如“雨后春笋”般涌现了出来。其中,John McCarthy仍然是发挥关键作用的学者之一,他从达特茅斯学院转到MIT后(1958年),陆续做出了多项令人瞩目的贡献,例如:
(1)定义了高级语言LISP。
LISP是人类历史上第二个高级语言(FORTRAN比它早一年)——如果从人工智能研究的角度来看,它则是最早的一种语言(当然,LISP实际上是一种通用语言,只是在当时的环境下被主要用于人工智能领域)。同时,LISP还是第一个函数式程序语言,所以它和C等命令型语言以及Java等面向对象语言在设计理念上会有些差异。
下面是使用LISP语言编写的一个factorial函数,读者可以感受一下。
(defunfactorial(n) (if(=n0)1 (*n(factorial(-n1)))))
(2)发明了垃圾回收(Garbage Collection)和分时复用(Time Sharing)等技术。
不得不承认,大牛的人生道路上的随便一个缩影都有可能让普通人“望尘莫及”。例如,另一位图灵奖获得者Donald Ervin Knuth在写作The Art of Computer Programming时因为认为计算机排版软件效果太差,破坏了其著作的美感,居然辍笔数年创造出了划时代的字体设计系统METAFONT以及排版系统TEX等。又如,McCarthy为了解决LISP语言的问题而发明了“垃圾回收”机制;而为了解决计算机的效率问题(以便更好地研究AI),他还在1961年提出了“分时复用”的概念,这些基础技术对后来编程语言和计算机理论的发展起到了不小的促进作用。
(3)创作第一个AI程序。
1958年,McCarthy在他的一篇论文“Programs with Common Sense”中提出了一个名为Advice Taker的计算机程序。他是人类历史上第一个提出通过逻辑推理来做知识表示的学者,对其后的问题系统和逻辑编程产生了很大的影响。
1966年,McCarthy以及他在斯坦福大学的团队还设计出了一个可以用于玩多种棋类游戏的计算机程序。
除了McCarthy之外,其他多位学者也在人工智能方面取得了突破性的研究成果。例如,MIT AI实验室的Marvin Minsky和Seymour Papert等人提出了通过Micro Worlds来开展AI研究工作。他们认为,一个复杂的学科往往可以使用简化模型来帮助理解基本原则,其中应用最广泛的就是Blocks World,如图1-9所示。
当时人们普遍对AI充满信心,甚至有学者乐观地认为人类只需要较短的时间就可以彻底解决人工智能所遇到的问题。
图1-9 积木世界(Blocks Worlds)
由于人们的乐观态度,再加上AI学术界的蓬勃发展,当时人工智能项目的预算可以说是非常充足的。例如,MIT仅在1963年一年间就收到了DARPA超过200万美金的AI项目资助,这在当时无疑是一笔巨款。
1.2.3 寒风凛冽,首次入冬(1974—1980年)
所谓希望越大,失望也越大,AI在第一次浪潮中的表现始终是“雷声大雨点小”。过度的收益承诺始终无法兑现,让人们的耐心一点点地被消耗殆尽。于是,在经历了将近二十年的繁荣后,人工智能于20世纪70年代初逐步进入了第一次低谷。
小结一下,AI首次入冬的时代背景大概如下。
1.AI没有产生有用的价值
当时AI所能做的事情都是极其受限的,比如无法准确分辨出哪怕是诸如椅子这样的常见物体,仅能识别为数不多的几个词汇。换句话说,人工智能在当时只不过是用来尝鲜的玩具,除此之外似乎毫无价值。
2.经济不景气
可以看到,第一次AI寒冬前后的经济环境相对比较恶劣,在这种情况下,人们首先考虑的当然是如何活下去的问题。
在这样的历史条件下,各个国家纷纷表达了对AI领域的悲观态度。最终,1973年的一份非常著名的“Lighthill Report”(即“Artificial Intelligence:A General Survey”)成为“压死骆驼的最后一根稻草”,如图1-10所示。这份报告是由一位名为James Lighthill的应用数学家主导的,起初发表在Artificial Intelligence:a paper symposium上面。“Lighthill report”严厉地批评了AI并没有如承诺的那样体现出任何有用的价值,并对它的多个领域表达了非常失望的态度。英国政府随后就停止了对Edinburgh,Sussex和Essex三所大学的AI项目资助。同年,美国国家科学委员会在给AI赞助了近两千万美元后因为看不到希望也中止了资助。
到了1974年,AI项目已经完全成了资本的“弃儿”。随着AI项目资金链的中断,本身没有造血能力的AI研究自然而然就在寒冬中被“冻死”了。
图1-10 Lighthill Report节选
1.2.4 卷土重来,威震八方(1980—1987年)
AI寒冬期一直持续到6年后,也就是1980年才有所好转。那么当时发生了一些什么关键事件使得人工智能又重新进入了人们的视野呢?
1.专家系统得到大家的赏识
专家系统(Expert System),如其名所述,主要是采用知识表示和知识推理的方式来让计算机程序具备人类的知识和经验,从而达到解决复杂问题的目的。
专家系统一般是由两部分关键元素组成,即
知识库(Knowledge Base)+应用推理机(Inference Engine)
其中,知识库用于承载人类的知识、经验等,应用推理机则通过应用各种逻辑规则来做推理。
当然,专家系统并不是这个阶段才出现的。如图1-11所示,它最早是由Edward Feigenbaum(专家系统之父,1994年图灵奖获得者)提出来的,并很快成为人工智能领域的一个分支(后续还有更详细的讲解)。只不过直到20世纪80年代初,专家系统才开始取得了一些关键进展,而且这些进步还逐步体现在了实实在在的商业落地上——据当时的统计报告显示,有将近三分之二的财富500强公司都运用了专家系统技术或者其延伸产品。换句话说,人工智能正在逐步完善自己的“造血能力”。从历史规律来看,这一点无疑是一项新兴技术能否可持续发展的关键所在。值得一提的是,当时第一个被大规模使用的专家系统是SID(Synthesis of Integral Design)。它是在1982年左右被开发出来的,而且使用的编程语言就是前面介绍的LISP。
图1-11 早期的专家系统
据说当年还由此催生了一批“知识工程师”,他们的主要工作就是和各种各样的专家交流,研究后者是如何思考和解决问题的,然后再“填空”到专家系统中,如图1-12所示。对于简单的问题,这或许是一条可行之路。但现实情况是,很多专家解决问题的过程本身就依赖于“直觉”。换句话说,连他们自己都无法准确描述出问题的思考和解决过程,更何况还要把这些过程逻辑化。不过当时专家系统正处于如日中天的时期,这些显而易见的问题似乎很轻易地被人们忽视了,这或许也为后面的AI再次进入寒冬埋下了伏笔。
图1-12 专家系统
2.连接主义重获新生
连接主义在第一轮AI浪潮中,由于无法给出令人信服的理论基础而被人们所遗弃。不过从20世纪80年代初开始,以神经网络为代表的连接主义又重获新生了,这主要归功于以下两个因素。
(1)因素1:Hopfield net。
1982年,John Hopfield证明了神经网络是有能力来做更深层次的学习和处理工作的,人们称之为Hopfield net。简单来讲,它是一种结合了存储系统和二元系统的神经网络,如图1-13所示。
图1-13 Hopfield net结构
(2)因素2:反向传播法(Backpropagation)在神经网络中的应用。
与此同时,Geoffrey Hinton(深度学习三驾马车之一)等人提出了直到现在都在使用的神经网络训练方法——反向传播法,从而有效解决了神经网络无法优化训练的问题。
在多重因素的刺激之下,人工智能在沉寂了若干年之后,于20世纪80年代初又步入了人们的视野。全球多个国家又陆续在AI领域投入重金,比如日本的国际通商产业部(Ministry of International Trade and Industry)在1981年斥资8.5亿美元,来支持其第五代计算机项目的研发。这个项目的目标是制造出可以翻译语言、与人对话、具备推理能力的机器。美国包括DARPA等在内的多个组织也纷纷慷慨解囊,使得AI项目的投资金额成倍增长。
人工智能的第二春,就这样悄然来临了。
1.2.5 失望弥漫,再度入冬(1987—1993年)
在人工智能的“第二春”如火如荼之时,实际上就已经有人预测出它将会再度进入寒冷的冬季——果不其然,仅7年后的1987年,AI就迎来了自己人生的第二个“大坎儿”。
和首次入冬类似,人们主要还是因为看不到希望而对AI再次“判处了死刑”。当时的背景事件有如下几个。
1.LISP machines产业崩塌
LISP machines是一种通用型的计算机,它以LISP为主要的编程语言和软件(需要硬件上的支持)。到了20世纪80年代,Apple和IBM等公司生产的桌面型计算机(如图1-14所示)在性能和价格上都占据了绝对优势,因而前者逐步退出了人们的选购清单。
图1-14 20世纪80年代的Apple Macintosh计算机
2.专家系统“难以为继”
前面所讲的专家系统,在此时也暴露出很多问题——比如很难维护,经常出现各种奇奇怪怪的问题,价格高昂,等等。
当时有一个很有名的项目叫作Cyc(来源于Encyclopedia),它是由斯坦福大学教授Douglas Lenat在1984年设立,并由Cycorp公司开发维护的一个AI项目。Cyc致力于将各个领域的本体和常识集成在一起,并以此为基础来实现知识推理,以达到人工智能的目的。
Cyc还发明了一种专有的基于一阶关系的知识表示语言CycL,用于表示人类的各种常识——例如,“每棵树都是植物”“植物都会死亡”等描述语句(语法上与LISP类似)。Lenat曾预测可能需要至少构建25万条规则,才能支撑Cyc系统的成功。不难理解,这种人工构建的规则既费时费力,有时候还“事倍功半”。据悉Cyc就曾在一个故事中闹出过笑话:这个故事是说一个名为Fred的人正拿着一个电动剃须刀,因为在Cyc的知识库里“人体的构成是不包含电气零件的”,因而它推断出正在刮胡子的Fred已经不是人了。
在人类认为很好理解的不少场景下,专家系统却总是表现得让人“啼笑皆非”,久而久之自然就沦落成大家“茶余饭后”的谈资了。
3.日本第五代计算机工程宣告失败
日本在20世纪80年代左右的经济形势还是不错的,因而愿意投入巨资来研究有潜力的方向。然而若干年过去后,在当年定下的计划目标始终“遥遥无期”的情况下,日本政府开始大幅缩减AI预算也就是情理之中的事了。
4.统计学方法开始大行其道
这个时期其实除了统计学外,还有一股力量是不容忽视的,那就是这几年才大红大紫的神经网络。不过神经网络能够发挥威力的一些前置条件(数据和算力)那时候还没有得到满足,所以当时不管从哪个角度来看,它在20世纪80年代都没有比统计学方法来得更为优秀——后者既简单实用,消耗的资源又少,因而神经网络在当时自然没有掀起多大的风浪。
据说那时候流行一个“月亮梯子”的笑话,专门用来描述人工智能的处境——即人工智能总是把目标设定为“登月”,但最后造出来的却多半只是一把“梯子”,让人贻笑大方。
一言以蔽之,AI又一次进入了寒冬。
1.2.6 重出江湖,渐入佳境(1993年至今)
人类对于人工智能一直以来都有一种“执念”,因而即便是在它的两次寒冬期间,依然有人“孜孜不倦,十年如一日”地潜心做着研究——比如后面会讲到的深度学习“三驾马车”便是如此(据说这也是他们获得图灵奖的原因之一)。
或许也正是因为这种“执念”,大概在20世纪90年代初人工智能又开始时不时地出现在人们的视野中。例如:
(1)1997年,深蓝战胜国际象棋世界冠军Garry Kasparov。
这是人工智能历史上的一个里程碑,深蓝因此成为世界上首个打败人类顶尖国际象棋棋手的计算机系统。
(2)1998年,LeNet成功商用。
LeNet当时被美国银行和邮政系统所接纳,用来识别支票、邮政编码中的手写或机打数字,也算是为神经网络的“可商用化”提供了有力证明(虽然当时的神经网络还比较简单)。LeNet网络结构如图1-15所示。
图1-15 LeNet网络结构
(3)新的研究方法的出现。
人类逐渐意识到,专家系统虽然从理论上看是“靠谱”的,但如何构筑庞大的“专家知识库”却成了众多学者“心中的痛”。例如,前面所提及的美国科学家Douglas Lenat曾尝试建立一个名为Cyc的超级知识库,把几百万条常识用逻辑语言描述出来,借以帮助专家系统构建能力。然而这显然有点儿“天方夜谭”——举个简单的例子,猫应该有几条腿呢?正常的猫是4条腿,但我们并不能否认残疾的猫有可能出现3条腿或者2条腿的异常情况,又或者基因突变的猫有5条腿的情况。所以人们开始寻找其他的实现方式。比如MIT的Rodney Brooks在1990年左右曾发表了论文“Elephants Don't Play Chess”,阐述了基于“行为”和环境的人工智能模型。他在论文中对当时的AI研究方法提出了质疑,关键部分引用如下。
“What has gone wrong? (And how is this book the answer?!!)
In this paper we argue that the symbol system hypothesis upon which classical AI is based is fundamentally flawed, and as such imposes severe limitations on the fitness of its progeny. Further, we argue that the dogma of the symbol system hypothesis implicitly includes a number of largely unfounded great leaps of faith when called upon to provide a plausible path to the digital equivalent of human level intelligence. It is the chasms to be crossed by these leaps which now impede classical AI research. But there is an alternative view, or dogma, variously called nouvelle AI, fundamentalist AI, or in a weaker form situated activity 1. It is based on the physical grounding hypothesis. It provides a different methodology for building intelligent systems than that pursued for the last thirty years.”
大意:“出什么问题了?(这本书的答案是什么?!!)
本文认为,经典人工智能所依据的符号系统假设从根本上说是有缺陷的,因此对其衍生理论的适应能力造成了严重的限制。此外,当被要求提供一条与人类水平相当的数字化道路时,我们认为符号系统所假设的教条隐含着许多基本上没有根据的东西。正是这些需要跨越的鸿沟阻碍了经典人工智能的发展研究。但是有另一种观点或教条,被称为新AI、原教旨主义AI,或以更弱的形式定位活动。它基于物理基础假设。它提供了一种与我们过去三十年所采用的智能系统建设方法不同的实现方式。
2000年以后,人工智能以及多个学科的发展速度明显加快了。业界普遍认为这主要得益于以下几个核心因素。
(1)互联网大发展的时代。
(2)云计算。
(3)芯片计算能力呈现指数级增长。
(4)大数据。
……
此外,斯坦福大学等学术机构“十年如一日”建立起来的规模庞大的数据平台,为众多学者验证和改进模型提供了非常重要的基线,如图1-16所示。
图1-16 ImageNet超大规模图像数据集
进入21世纪的第二个十年后,人们对于人工智能特别是深度学习的热情更是达到了“前无古人”的地步。可以说在这个“人人谈AI”的时期,不懂AI似乎就意味着“落伍”——在不少人的心里,AI甚至已经成为前沿时尚的代表。图1-17所示的是斯坦福大学某AI人员为某奢侈品牌做的广告(图片资源来源于网络)。
图1-17 AI与时尚
广告上的CHERCHEUR EN INTELLIGENCE ARTIFICIELLE是法语,译为“人工智能研究人员”。
毫无疑问,我们正身处于人工智能的本轮热潮中。
1.3 人工智能经典流派
在人工智能几十年的发展历程中,人们对于AI的认知始终是“飘忽不定”的。这期间出现了形形色色的理论和实践——它们有的从一开始就“一无是处”,有的在取得了短暂成功后退隐江湖,有的则直到今天仍然奋战在AI领域的一线。
AI科学家Carlos E. Perez曾对这些理论做了比较系统的分析,并在The Many Tribes of Artificial Intelligence中把它们归为多个“部落”,如图1-18所示,针对它们的描述如表1-2所示。
图1-18 各AI“部落”
表1-2 AI“部落”简述
当然,表1-2中的流派划分其实有重叠的地方,不一定是最佳的划分方式,因而仅用于参考即可。除此之外,业界还有多种其他学派划分方式。比如AI界最初一个比较主流的观点是机器学习主要由连接主义、符号主义等学派组成。最近几年,有的学者对此又做了进一步的细分——比如华盛顿大学的Pedro Domingos在一次演讲中将AI划分为如下几个学派,如表1-3所示。
表1-3 五大学派及其代表作
一方面,各个学派都在AI领域占据着重要位置;另一方面,它们在“AI长河”中所留下的踪迹也颇有意思——简单来说就是“三十年河东,三十年河西”“各领风骚数十年”,如图1-19所示。接下来的几节中,我们将带领读者一起来回味这几个“生死冤家”之间的“沉浮人生路”。
图1-19 各学派在不同历史阶段“各领风骚”
1.3.1 符号主义
符号主义(Symbolism)也被称为逻辑主义(Logicism)、心理学派(Psychlogism)或计算机学派(Computerism),其主要观点是利用物理符号系统及有限合理性原理来实现人工智能。具体来讲,符号主义认为人类思维的基本单元是符号,而基于符号的一系列运算就构成了认知的过程,所以人和计算机都可以被看成具备逻辑推理能力的符号系统,换句话说,计算机可以通过各种符号运算来模拟人的“智能”。
因为这种学派对于AI的解释和人们的认知是比较相近的,可以较容易地为大家所接受,所以可以说它在AI历史中的很长一段时间都处于主导地位。
符号主义的代表人物是Allen Newell、Herbert A. Simon和Nilsson等人。从前面的学习中,读者已经了解到他们都为整个人工智能的发展做出了各自卓越的贡献。比如Allen发明了信息处理语言,完成了当时最早的两个AI程序——Logic Theorist和General Problem Solver,同时为计算机科学和认知信息学领域提供了很多前沿性的理论成果(其本人和Simon一起在1975年获得了图灵奖)。
符号主义在不同历史时期都有些代表性的成果,例如:
(1)逻辑理论家。Allen等人发明的“逻辑理论家”,可以证明出《自然哲学的数字原理》(Principia Mathematica)中的38条数学定理(后来可以证明全部52条定理),而且某些解法甚至比人类数学家提供的方案更为巧妙,如图1-20所示。
图1-20 Logic Theorist(逻辑理论家)
(2)启发式搜索思路。Allen和Simon等人提出了通用问题解决器(General Problem Solver)推理架构以及启发式搜索思路,影响相当深远(比如AlphaGO就借鉴了这一思想)。
(3)专家系统。专家系统对20世纪AI的繁荣起到了非常重要的推动作用,理论上来讲它也属于符号主义的研究成果。
(4)知识库和知识图谱。专家系统的主要难点在于:知识的获取构建以及推理引擎的实现。所以学者们围绕这些困难点发展了不少理论,比如反向链(Backward Chaining)推理、Rate算法等。
我们近几年接触到的知识图谱以及大数据挖掘,也或多或少地与知识库的发展有关联性,如图1-21所示。
图1-21 知识库发展推动了知识图谱的建立
虽然当前机器学习处于主导地位,但并不代表其他学派没有一些好的理论。建议读者有空的时候可以阅读Allen Newell等人的著作,从中窥探符号主义在几十年间的变迁史。
除了Newell“老前辈”,符号主义的代表人物还包括Tom Mitchell、Steve Muggleton、Ross Quinlan等人,如图1-22所示。
图1-22 符号主义代表人物
1.3.2 连接主义
连接主义(Connectionism)也被业界称为“仿生学派”,这是因为它的其中一个研究重点在于人脑的运行机制,然后将研究结果应用到人工智能的分析中。由于这种学科间的交叉关系,我们有时候会发现研究人工智能的科学家可能同时也会是脑神经科学家,又或者是心理学家。连接主义发展历程如图1-23所示。
图1-23 连接主义发展历程
比如,连接主义理论的创始人Edward Lee Thorndike就是一名心理学家(教育心理学的奠基人),他从动物的实验研究中得到了启发,然后提出了连接主义的理论基础,即
刺激(Stimulus)+反应(Response)
他曾主导了一个著名的关于“猫”的迷箱实验,如图1-24所示。
图1-24 迷箱(Puzzle Box)
在这个实验中,Thorndike将一只饥饿的猫放到一个迷箱中——它从所在的箱子里可以看到箱外的食物,同时要求它必须学会解决箱子中的一些特殊装置(例如踏板或者拉绳等)才能逃出去。
Thorndike发现,猫开始时的表现总是“盲目无序”的,它会到处乱跳、撕咬、咆哮,然后偶尔可以触碰到踏板从而打开箱门。不过第一次成功后,猫并不能马上就学会开门的方法,所以第二次它还会重复之前的盲目动作。
随着实验次数的增多,猫的尝试次数却在减少——最后,它就可以做到在被放到箱里的很短时间内找到开门的机关。如果以横坐标表示实验的次数,纵坐标表示猫成功逃出所需的时间,那么就得到了猫的学习曲线,如图1-25所示。
图1-25 猫的学习曲线
连接主义其后的发展出现了多个里程碑事件,包括但不限于以下几个。
1.1943年的人工神经元
Warren McCulloch和Walter Pitts等人于1943年提出的第一个人工神经元是由TLU(Threshold Logic Unit)实现的,被称为McCulloch-Pitts模型,从而揭开了人们针对神经元网络的研究序幕,如图1-26所示。
图1-26 MP模型简图
2.1957年的感知机
在Pitts等人开创了人工神经网络研究时代的十多年后,美国神经科学家Frank Rosenblatt于1957年又进一步发展出了可以模拟人类感知能力的机器,称为感知机(Perceptron)。
Frank Rosenblatt首先在IBM的704机器上完成了感知机的仿真,而后两年他再接再厉打造出了一种被命名为“Mark I”的神经计算机,如图1-27所示。这种基于感知机的计算机已经能够识别一些英文字母,而此时AI正处于第一次发展期(1960年)。
图1-27 Mark I感知机
虽然当时感知机的识别能力还很有限(比如对于不在训练集中的图像,或者针对图像做了平移、旋转等操作,就无法识别了),但人们仍然对其寄予了厚望。
3.1969年的异或问题(XOR Problem)
感知机在1969年遭遇到了“滑铁卢”,因为这一年业界大牛Marvin Minsky等人在Perceptrons一书中,仔细分析了以感知机为基础的单层神经网络的局限性,并指出了它无法解决异或等线性不可分问题。虽然Rosenblatt当时已经认识到多层感知机可以解决这一缺陷,但一方面由于Minsky等人的权威性,另一方面Rosenblatt没有能够及时有效地做出回应,所以阴差阳错之下导致感知机从那时起停滞了将近二十年的时间。
4.多层感知机和反向传播算法
上述情况直到20世纪80年代多层感知机(如图1-28所示)和反向传播算法出现后才有所转机。后续章节对此还有详细分析,这里先不做过多描述。
图1-28 多层感知机
5.1995年后期出现SVM
SVM(如图1-29所示)出现之后,因其不仅在实现上更为简单,而且业务效果也往往特别出众,所以在一定程度上抢了感知机的“饭碗”。于是在20世纪90年代后期到2010年之前的一段时间内,感知机又“转入地下工作”了。
图1-29 SVM(支持向量机算法)
关于SVM背后的原理以及更多应用实践细节,本书在后续章节会有详细阐述。
6.2010年后的深度神经网络
当时间步入21世纪的第二个十年后,情况又逐渐发生了变化。以深度神经网络为代表的人工智能以及它的各种应用场景,以迅雷不及掩耳之势抢占了人们工作生活的方方面面,造成了目前“人人谈AI”的局面。
另外,业界还有一种观点,即从神经网络的维度来看,它也可以分为控制论、连接主义和深度学习三大阶段。
在深度学习领域,Yoshua Bengio、Yann LeCun和Geoffrey Hinton三人可以说是“无人不知,无人不晓”。由于他们都在深度学习领域做出了杰出的贡献,所以长期以来人们把他们并称为“三驾马车”——特别是在深度学习处于低潮期时,他们仍能十年如一日地坚守在这个领域,从而为后续深度学习的再次崛起提供了创造性的理论基础。在本书写作期间,“深度学习三巨头”Yoshua Bengio、Yann LeCun和Geoffrey Hinton(见图1-30)共同获得了图灵奖,可以说是实至名归。
图1-30 深度学习三巨头
从“辈分”上来看,Hinton是LeCun的博士后导师,他还被人们称为“神经网络之父”“深度学习鼻祖”。他的主要贡献:
(1)将反向传播算法引入深度神经网络进行训练。
(2)发明了波尔兹曼机。
(3)NLP词的分布式表示。
(4)时延神经网络。
(5)亥姆霍兹机。
……
读者对LeCun可能比较熟悉,因为他的著作颇丰,他的主要贡献:
(1)开发出应用非常广泛的卷积神经网络CNN。
(2)开发出图像压缩技术DjVu。
(3)提出了开源的面向对象编程语言Lush。
……
Bengio是三人中年龄最小的,他的主要贡献:
(1)开创了神经网络用于自然语言处理模型的先河。
(2)机器翻译。
(3)ICLR的推动者。
……
同时他们还培养和影响了一大批深度学习领域的专家学者,开创出了属于自己的“AI门派”,如图1-31所示。
图1-31 深度学习“门派”关系图
毫不夸张地说,当下正是连接主义“坐镇天下”的时候。
1.3.3 行为主义
除了连接主义和逻辑主义,“AI江湖”的另一大门派是行为主义。
行为主义(Actionism),也被人们称为进化主义(Evolutionism)或者控制论学派(Cyberneticsism)。从这些名字中,可以来推测一下它是一个什么样的学派——或者说,它是以何种“心法武学”来自成一派,从而扬名立万的呢?
没错,就是控制论,以及据此所发展出的一系列成果。
前面分析人工智能历史时,就曾讲到控制论在AI早期阶段就已经出现了。例如,美国应用数学家Norbert Wiener在20世纪50年代之前所提出的控制论,就描述了电子网络的控制和稳定性问题。在人工智能领域,行为主义学派认为AI来源于控制论,所以他们倾向于把信息理论、控制理论、逻辑和计算机结合起来研究AI。早期的行为主义研究重点是人在控制过程中的智能行为(例如自寻优、自适应、自组织、自学习等),这同时也为后期机器人的发展打下了理论基础(20世纪80年代才诞生智能机器人系统学科)。
行为主义在AI发展过程中也有很多里程碑事件,下面摘选其中一些核心点来讲解。
1.1948年,控制论
根据业界普遍认可的观点,控制论是由Norbert Wiener于1948年在他所著的Cybernetics,to define the study of control and communication in the animal and the machine一书中提出来的——书名其实就是Wiener对它的定义。
控制论的应用范围非常广泛,例如,在生物、物理、经济、心理等诸多领域都可以看到它的身影,同时它也是一门综合性的科学理论。
2.1957年,马尔可夫决策过程
马尔可夫决策过程(Markov Decision Process,MDP),简单来说是针对随机动态系统最优决策过程的一种建模方式。它的起源可以追溯到20世纪50年代R. Bellman在Journal of Mathematics and Mechanics上发表的一篇文章“A Markovian Decision Process”,以及Ronald A.在20世纪60年代出版的Dynamic Programming and Markov Processes一书。随后MDP逐渐在多个学科方向上获得了长足的发展(特别是机器人、自动化控制等需要工业应用和理论知识相结合的研究领域)。
马尔可夫性质是概率论中的一个概念,指的是如果一个随机过程满足“其未来状态的条件概率分布(Conditional Probability Distribution)只依赖于当前状态”的条件,那么就可以称之为具备了马尔可夫性质的马尔可夫过程。
对于马尔可夫链(Markov Chain),通常的理解就是状态或者时间空间离散的一种马尔可夫过程。因而在面对不同的问题时,需要依据它们的具体属性来选择合适的模型加以分析,这样才能保证最终结果的准确性。
马尔可夫决策过程是上述马尔可夫链的扩展。如果每个状态只有一种可选动作(Action),并且所有的奖励(Reward)都是一样的,那么MDP就等同于MC了。
MDP通常利用一个五元组来表示,即(S,A,P,R,γ),其中:
S代表一个有限的状态集合;
A代表一个有限的动作集合;
Pa(s,s`)是指在状态s下采取动作a迁移到状态s`的概率大小;
Ra(s,s`)是指在状态s下采取动作a迁移到状态s`所获得的立即奖励(Immediate Reward);
γ∈[0,1],是一个折扣因子(Discount Factor),它的作用是让我们可以综合考虑长期奖励(Future Reward)和当前奖励(Present Reward)的重要性。
MDP所要解决的核心问题,就是在状态s时如何做出最佳决策,表示为П(s)。那么,什么样的决策是最佳的呢?如果单纯只是考虑让当前的奖赏值最大化显然是不够的,这就好比在下棋时,更需要的是取得全局性的最终胜利,而不是在中间过程中去计较小得小失。
总的来说,一方面,马尔可夫决策过程是强化学习的理论基础,其范例如图1-32所示;另一方面,后者又继承和发展了MDP,或者说合理应用增强学习是MDP问题的一种有效解决方案。由于它们之间的这种密切联系,所以理解MDP对于学习后者是大有裨益的。
3.1984年,强化学习
强化学习其实已经有几十年的历史了,它在最近几年的“爆火”则要归功于DeepMind。这家建立于英国的小公司从2013年开始就不断地在实现各种突破——从Atari游戏打败人类,并将成果发表于Nature上;再到开发出AlphaGO系列围棋智能程序,一次次地挑战着人类的智慧巅峰。这些爆炸性的消息在一遍遍地刷新着每天的热点榜单的同时,也直接带火了深度强化学习(以及强化学习)。关于AlphaGO的内部实现原理,本书后续章节会有详细的解析。
强化学习和有监督学习/无监督学习类似,是机器学习(Machine Learning)的一种类型。与后两者的不同点在于,它强调的是从环境的交互中来寻求最优解,如图1-33所示。
图1-32 Markov Decision Process范例
图1-33 强化学习的基本概念
在强化学习过程中,智能体(Agent)从环境(Environment)中观察到状态变化,并根据当前情况做出相应的动作(Action);环境则针对智能体的动作所产生的效果来判断是否应该给予智能体一定的奖励(Reward)或者惩罚。例如,在Flappy Bird中,一旦小鸟成功穿越了一根柱子,则分数值会加1。
强化学习是一种普适性理论,意味着很多其他领域都可以运用它来解决问题,例如博弈论、控制论、信息论、统计学、运筹学等。
行为主义的代表人物包括Richard S. Sutton、Watkins C. J. C. H.及Demis Hassabis(DeepMind公司)等人,如图1-34所示。
图1-34 行为主义代表人物
作为小结,再来横向比较一下行为主义、连接主义和符号主义三大学派的优缺点,如表1-4所示。
表1-4 三大学派横向对比
在项目实践过程中,读者可以根据各个学派的典型特点,结合自己项目的具体诉求和实际情况来思考应该选择何门何派中的算法来解决问题。例如,项目是否可以提供足够的数据用于机器学习,问题本身的特征是否足够明显(假设通过规则就可以很好地描述问题,那么实在没必要“杀鸡用牛刀”,使用深度学习来解决问题),等等。
1.3.4 贝叶斯派
贝叶斯学派的特征比较明显——简单来讲,它就是利用概率统计理论进行推理的一个“帮派”,其所依据的一个基础理论是贝叶斯法则(Bayes' Theorem/Bayes Theorem/Bayesian Law)——或者也可称为贝叶斯定理或者贝叶斯规则、贝叶斯推理等。
贝叶斯定理是英国学者贝叶斯(1702—1763)于18世纪所提出的一个数学公式,本身并不复杂,如下所示。
其中:
● P(A|B)是指B已经发生的情况下,A发生的条件概率,也由于得自B的取值而被称作A的后验概率。
● P(A)是A的先验概率(或边缘概率)。
● P(B|A)是指A已经发生的情况下,B发生的条件概率。也由于得自A的取值而被称作B的后验概率。
● P(B)是B的先验概率(或边缘概率)。
这个公式也可以理解为
后验概率=(可能性×先验概率)/标准化常量
贝叶斯学派中有不少经典的算法,而其中应用最为广泛的,可能要属朴素贝叶斯(Naive Bayes)了,它的理论基础包括如下两点。
(1)贝叶斯原理。
(2)特征条件独立假设理论。
后续章节对这些理论还有详细的分析,因而这里先不做过多叙述。
贝叶斯学派的典型代表包括David Heckerman、Judea Pearl和Micheal Jordan等人,如图1-35所示。
图1-35 贝叶斯学派代表人物
贝叶斯学派虽然属于小众“帮派”,不过其代表人物Judea Pearl(贝叶斯之父)却在2011年斩获了图灵奖,可见业界对它还是非常青睐的。
1.4 人工智能与机器学习
可能读者会有这样的疑惑,即机器学习和人工智能之间是什么关系呢?
如果从人工智能的演进过程来看,那么机器学习属于它的早期阶段,如图1-36所示。
如果回顾历史的话,会发现机器学习这个词最早是由Arthur Lee Samuel于1959年提出来的(据说他在1949年就已经开始启动机器学习的研究了)。前面曾经介绍过Samuel,他是参加1956年第一次AI研讨会的一个专家,同时也是世界上第一个自学习程序Checkers-playing的作者——从当时的情况来看,Samuel可能是为了开发这个程序而提出了机器学习的概念。换句话说,在Samuel眼里,机器学习是为前者服务的。可能也是由于这个原因,所以目前业界比较认可的机器学习定义其实来源于另一位AI专家Tom M. Mitchell。
图1-36 人工智能的三个发展层级
“A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E.”
这个定义中涉及以下几个核心概念。
1.任务
机器学习可以完成多种类型的任务(Task),通常把它们抽象为如下几种。
1)分类任务
例如,输出一张原图,模型预测它所描述的是猫、狗等类别。
2)聚类任务
“聚类”任务属于“无监督学习”,它试图将数据集中的样本通过聚类模型划分为若干个不相交的子集;每个子集被称为一个“簇(Cluster)”,分别代表着聚类算法对这组数据集的不同观测角度。
3)回归任务
在回归任务中,计算机程序需要针对给定输入预测出结果数值。
4)预测任务
……
2.经验
根据学习经验(Experience)的不同,通常把机器学习划分为如下几种。
1)有监督学习
有监督学习中,用于训练的数据集样本都带有一个标签,因而通常需要一个标注的过程。
2)无监督学习
无监督学习中,用于训练的数据集样本不需要显式地给出标签。
3.性能
性能(Performance)指标用于评估机器学习模型的能力。依据任务的不同可能有多种度量方法,例如,准确率、精度等。后续章节会有更详细的讲解。
所以,机器学习就是在经验E提供的数据基础上,通过不断地学习来使得任务T的性能度量指标得到不断的改进和提升。
从研究概念上来讲,机器学习和人工智能的关系如图1-37所示。
图1-37 AI、机器学习等术语的关系
换句话说,它们之间是一种包含的关系,即:
(1)人工智能包含机器学习。
(2)机器学习包含表示学习。
(3)表示学习包含深度学习。
……
如果再进一步分析,经典的机器学习方法与近几年如火如荼的深度学习方法在处理手段上的显著差异,如图1-38所示。
图1-38 不同机器学习方法间的核心差异
以深度学习为代表的表示学习,摒弃了传统算法中的“人工提取特征”环节。这样一来,一方面大幅降低了模型构建成本(实现了以原图等原生资源为输入的“端到端”处理手段),另一方面也为模型性能的大幅提升奠定了基础。
在本书的后续章节中,将首先从经典的机器学习算法入手,然后逐步扩展到深度学习、强化学习等近几年非常热门的算法理论中,以便读者可以深入理解它们之间的异同点。
1.5 如何选择机器学习算法
不管是人工智能抑或是机器学习,在长期的发展过程中都积累了大量的经验和算法,而且其中不少算法至今仍然在“大放异彩”,比如一些经典的实现:K-NN、k-means、朴素贝叶斯、SVM、决策树、随机森林、Adaboost、深度神经网络,等等。
客观地讲,上述这些实现之所以能在众多机器学习算法中占据“一席之地”,主要原因在于它们都有自己的绝对优势。这种别人无法取代的“制高点”一方面保证了它们可以在一轮又一轮的算法革新中仍能保留着“用武之地”,另一方面也给我们学习机器学习算法提出了一个基础问题——即如何根据自己的实际需求来选择一种最合适的机器学习算法呢?
庆幸的是,这是一个在机器学习领域的普遍性问题,因而已经有不少人尝试着给出了答案。读者可以通过Google搜索“Machine Learning Cheat Sheets”(注:“Cheat Sheet”是一个蛮有意思的词语。它原先是指考试作弊,同时也代指“小抄”——这和大学时有些半开卷的课程类似,会允许考生有条件地带一些自己抄写的资料,通常就是一两张A4纸)来获取更详细的信息。
接下来的几节中,首先介绍一个在AI领域已经达成共识的理论——没有免费的午餐理论(No Free Lunch Theorem),然后在此基础之上挑选目前业界认可度比较高的几种“机器学习算法”来进行讲解。
1.5.1 没有免费的午餐理论
No Free Lunch Theorem(NFL),直译为“没有免费的午餐”,是机器学习领域一条有名的定理,它由David Wolpert和William G. Macready在20世纪90年代提出。
NFL的基本思想,简单而言就是:对于算法A和算法B,无论它们是高效抑或是笨拙的,其期望性能都是完全一样的。换句话说,你精心设计的一个算法,并不会比什么都不做的“随机猜测”算法来得高明。初识这一理论的人可能会对它持怀疑态度,毕竟我们投入了大量精力才设计出一个算法,怎么可能会和“随机猜测”不相上下呢?
下面结合周志华老师在《机器学习》一书中的一段论述,来帮助读者更好地理解这个定理。
我们假设学习算法LA和LB分别产生了图1-39中曲线A和B所展示的模型。如果按照“奥卡姆剃刀”(Occam's razor)原则——“若有多个假设与观察一致,则选择最简单的那个”(可以参考后续章节中针对这一原则的更多讲解),同时假定“更平滑”意味着“简单”,那么毫无疑问,我们更偏好于曲线A。当然,奥卡姆剃刀原则存在多种诠释方式,比如“什么是简单”这个问题本身就不简单,因而并不见得是最好的衡量机制。
图1-39 没有免费的午餐
(引用自周志华教授的《机器学习》一书)
回过头来观察图1-39(a),可以看到A相比于B来说,它与训练集之外的样本更为一致(实心点:训练样本;空心点:测试样本)。换句话说,A的泛化能力是要强于B的——如果基于这一点来说的话,算法LA比LB更好。
不过有没有可能出现图1-39(b)的情况,即B与训练集外的样本更为一致呢?
事实证明这是完全有可能的。也就是说,对于学习算法LA,如果它在某些问题的解决上比算法LB好,那么必然存在另外一些问题,此时LB的解决方法又比LA好。这也就是本节所要阐述的定理,即“没有免费的午餐”了。
下面是这个定理的一个简单推论。
假设样本空间χ和假设空间﹁都是离散的(针对连续的空间,NFL是否成立目前还没有定论,不过人们更愿意相信它是成立的),同时令P(h|X,…a)代表算法…a基于训练数据X产生假设h的概率,f则代表我们希望学习到的真实目标函数。
那么…a的“训练集外误差”,可以计算为
其中,∏(·)是一个指示函数,当为真时函数取值为1,否则为0。
对于一个二分类问题,且真实目标函数可以是任何函数,函数空间为{0,1}|χ|。如果针对所有可能的f按照均匀分布来求误差之和,那么
此时可以看到,机器学习算法对总误差没有产生任何影响。换句话说,对于任意两个算法,都可以得到
既然如此,那么我们研究算法还有没有意义呢?
当然是有意义的。要特别注意的是,NFL的一个前提是“所有问题出现的机会相同,或者所有问题是同等重要的”,而实际情况并非如此。对此,《机器学习》一书中有一个例子比较贴切:假设需要决策如何从A地快速地到达B地,如果我们关心的A指的是南京鼓楼,B是南京新街口,那么“骑自行车”是很好的解决方案;如果A是南京鼓楼,而B地换成了北京新街口,那么无疑上述方案是不能接受的。但这并不影响我们在第一种假设中选择“骑自行车”,因为它确实给出了我们所关心的问题的答案。而至于它是否存在其他问题,甚至是否能在相似问题上发挥出同样的作用,我们并不强求。
所以说,NFL也给我们“提了个醒”——脱离问题本身的算法优化是没有意义的。我们应该从具体的问题出发来思考如何可以得到“更好”的算法,而不是一味地寻求“万金油”或者“屠龙宝刀”。
1.5.2 Scikit Learn小抄
Scikit Learn基于Python语言,是当前非常流行的一个机器学习工具平台。它在其官方文档中也讨论了机器学习算法的择优问题,并给出了一张经典的“机器算法导航”图,如图1-40所示。
Scikit Learn小抄(Cheat Sheet)主要从数据规模、机器学习意图等几个维度来引导大家逐步选出最适合自己的算法。鉴于整个流程图的导引相当清晰,也没有什么不好懂的地方,因而本书不做过多描述。
图1-40 Scikit Learn:ML小抄
(引用自http://scikit-learn.org/stable/tutorial/machine_learning_map/)
1.5.3 Microsoft Azure小抄
Azure是Microsoft旗下的公有云平台,随着近几年人工智能的持续火爆,它也上线了机器学习工作室等AI相关功能。
不难看出,Microsoft Azure主要从机器学习意图以及各种算法的特点等方面为开发人员提供了机器学习算法的择优建议,涵盖了分类、聚类、回归等多种主流的学习算法。
当然,本节所讲解的各种“小抄”主要是依据行业的普遍经验得出来的,因而读者在参考之余,还需要做到:
(1)深入理解各种算法的原理和优缺点。
本书后续章节会帮助读者逐步揭开这些经典算法的“神秘面纱”。
(2)根据自己的实际项目诉求,“因地制宜”地选择最佳算法。
相信在理论结合实践的基础上,读者们会对“如何选择适合自己的机器学习算法”产生越来越好的判断能力。
1.6 机器学习的典型应用场景
根据历史经验,人工智能如果要成为新一轮产业革命的“催化剂”,那么它就得像电力一样逐步渗透到人类社会的方方面面。
这一点在全球范围内的学术界和工业界已经基本上形成了共识。例如,Google早在两年前就发布了“从移动领域优先(Mobile First)向AI优先(AI First)转型”的公司战略;国内包括华为、百度、腾讯等在内的各个大型企业也纷纷出来为AI站台,并描绘出了AI在社会各行各业中的应用前景。
不可否认,不同行业对AI的诉求或多或少都会存在差异。但如果仅从技术角度来分析的话,那么各行各业所需要的AI基础能力其实是有共通性的。为了方便读者理解,本书将其中一些共性的AI基础能力进行了汇总,如表1-5~表1-12所示。
表1-5 图像技术
表1-6 语音技术
表1-7 视频技术
表1-8 自然语言处理NLP
表1-9 AR和VR(1)
表1-10 人脸识别与人体识别
表1-11 大数据与人工智能
表1-12 知识图谱
接下来选取AI在行业中的一些典型应用场景来做进一步讲解。
1.6.1 计算机图像领域
基于AI的计算机图像处理主要包括如表1-13所示的5个方向,其主要区别如图1-41所示。
表1-13 基于AI的计算机图像处理
图1-41 几种计算机视觉任务的区别
(引用自Stanford课程cs231n)
根据工业界的经验来看,计算机图像处理是人工智能技术应用最广泛的一个方向,例如,摄影场景识别、拍照识物、行人检测等。我们可以把图像分类、物体定位、物体分割等作为基础技术,再与实际工业场景诉求相结合,从而衍生出各种落地方案。
Image Caption也是这几年比较火热的一个研究方向,如图1-42所示。虽然相关论文很多,但不得不承认这个领域还存在很多需要克服的技术难点。
图1-42 Image Caption范例(图片下面的文字就是算法的输出结果)
在本书后续章节中,将结合CNN基础知识来讲解这些图像处理技术的实现原理。
1.6.2 自然语言处理简述及其应用
自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要方向,同时也是一门融合了语言学、数学、计算机科学等多领域知识的复杂学科(特别是针对中文的处理)。我们知道,深度学习是近年来才流行起来的,而自然语言处理的热度则持续了几十年。这一方面是由于自然语言处理是实现人和机器之间“无障碍”通信的基础;另一方面则在于NLP可以在很多实际的生活场景中发挥重要作用,例如,人机对话、机器人制造、机器翻译、问答系统等。
NLP的整体框架简图如图1-43所示。
图1-43 NLP整体框架简图
接下来先对NLP中的一些基础知识进行讲解,本书后续章节还会从技术的层面对它做进一步剖析。
1.基于词
以词为处理对象,经常会涉及如下一些概念。
1)分词
对于很多语言来说(例如中文),各个词之间本身没有明显的分隔符,这种情况下首先要执行“分词”操作。譬如“杭州西湖是一个特别美的景点”,我们通常会把它分成“杭州”“西湖”“是”“一个”等若干个独立的词语,然后才能做进一步的处理。
2)词性标注
对于很多自然语言来说,同一个词很可能有多种词性(这也是汉语“博大精深”的原因之一),因而需要为句子中的各个词汇标注上其在该句子上下文环境中的准确词性,如图1-44所示。
图1-44 词性标注范例
业界常用的词性标注方法包括但不限于以下几种。
(1)基于最大熵的词性标注。
(2)基于最大概率统计的词性标注。
(3)基于HMM的词性标注。
(4)基于CRF的词性标注。
3)自动术语识别
自动术语识别是文本挖掘和知识抽取等信息处理技术中的关键步骤——基于术语和术语之间的关系构建领域术语知识库,可以帮助人们从海量文献中抽取重要的信息知识。
4)词干提取
在某些语言中,一个单词有可能是另一个单词的“变种”,例如,happy就是happiness的词干,而fishing、fished、fish和fisher则有同一个词根“fish”。
5)Word Embedding
NLP中经常需要利用一定的算法,将单词映射到向量(通常是低维向量,如100维或者50维)来表示。目前业界有不少成熟的工具和方法来完成Word Embedding,例如,Google开发的影响相当广泛的word2vec。
2.基于短语
1)关键词提取
关键词是指能够反映文本语料主题的词语或短语,当前比较主流的提取算法包括TF-IDF、主题模型、TestRank、rake等。
2)文本摘要
文本摘要可以被应用到日常生活中的多个场景,比如从大量的新闻数据中自动抽取有用的信息,从而节约人们的阅读时间。
3)拼写检查
可以基于短语来分析是否存在拼写错误,并加以纠正。
3.基于文本长串
1)Text2vec
Text2vec的作者是Dmitriy Selivanov,他于2016年10月发布了这个R包。Text2vec可以为文本分析和自然语言处理提供一个简单高效的API框架。
2)文本分类
文本分类可以说是自然语言处理领域一个比较基础,而且应用广泛的算法了。从最开始的基于规则的分类实现,到20世纪80年代的专家系统,再到基于统计学习、机器学习、深度学习的方法等,文本分类问题一直占据着“一席之地”。
3)文本聚类
文本聚类通常先把文本表示成聚类算法可以处理的数学形式,然后按照特定算法计算它们之间的距离,进而得到不同的“簇”。它和文本分类一样,在很多领域都有较广泛的应用。例如:
(1)作为多文档自动文摘系统的预处理步骤,去除冗余信息。
(2)针对搜索引擎结果进行聚类,使用户快速定位到所需信息。
(3)优化文本分类结果。
(4)文档集自动整理,等等。
一种基于深度学习的文本分类方法(TextCNN)如图1-45所示。
图1-45 一种基于深度学习的文本分类方法——TextCNN
1.6.3 制造业中的预测性维护
预测性维护(Predictive Maintenance,PM)是“工业4.0”背景下的一个关键创新点。我们可以基于连续的测量,结合AI算法分析,来实现诸如机器零件剩余使用寿命等关键指标的预测。这些关键的运行参数数据可以帮助我们判断机器当前的运行状态,预测故障的发生时间,以及优化机器的维护时机等。传统的周期维护如图1-46所示。
图1-46 传统的周期性维护
预测性维护可以带来如下一些优势。
(1)缩短非计划性停机时间。
(2)减少周期性维护所带来的资源浪费。
(3)延长机械的使用寿命。
……
预测性维护的具体实现方式有很多种,其中,基于机器学习的实现方案是当前的主流选择,核心步骤如下所述。
Step1:理想情况下,我们可以向被维护系统中添加传感器,以监控和收集关键数据。不过基于成本等因素的考虑,在某些应用场景下可能不会选择这种方式,转而通过其他间接数据来做预测——比如采用被维护系统运行过程中所产生的log信息,或者已有的一些数据资料,等等。
Step2:我们收集的用于预测性维护的数据通常是时间序列数据,而且以结构化数据居多。它们会包含诸如时间戳、传感器读数以及设备标识符等各种设备运行信息。
例如,如图1-47所示的是美国NASA提供的一个针对发动机的数据集范例,其中就包括发动机的编号、时间戳、三个设置项以及21个传感器的读数。被预测的发动机仿真图如图1-48所示。
图1-47 NASA提供的某燃气涡轮发动机的运行数据范例
(引用自https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/#turbofan)
图1-48 被预测的发动机仿真图
Step3:利用上述收集的时间序列数据,我们的目标就是训练一个机器学习模型,使其可以利用t时刻之前的数据来做一些预测,例如:
(1)设备是否会在一定的时间间隔内发生故障。
(2)设备出现故障的可能时间点。
(3)可能出现的故障类型,等等。
根据不同的预测目标,我们可以有针对性地采用相应的算法,例如:
(1)分类算法:可以用于预测系统在后续n个步骤中是否有可能出现故障。
(2)回归算法:可以用于预测系统离下一次故障出现还需要多少时间,也称之为剩余使用寿命(Remaining Useful Life,RUL)。
以预测前面NASA发动机的RUL为例,我们在算法上需要结合预测性维护的典型处理流程(见图1-49),思考如下一些核心点。
图1-49 预测性维护的典型处理流程
(1)数据清洗。
在生产环境中收集的数据,由于各种因素的影响不可避免地会带有一些噪声,因而在使用数据之前首先要对它们进行清洗。数据清洗的具体内容并不是固定的,主要包括如下一些操作。
①数据完整性。
②数据合法性。
③数据一致性。
④数据唯一性。
⑤数据去除冗余。
⑥数据降维度。
……
如果数据清洗做得好的话,那么在不改变算法的情况下也可能显著地降低误差值,因而是非常重要的一个环节。
(2)特征工程和特征提取。
从原始数据集的描述中,我们可以知道数据的特征维度有哪些,例如,下面是26个传感器中的几个。
通过特征工程,可以选择达成最佳预测目标所需要的关键特征。譬如有哪些传感器的数据是必不可少的,针对每个传感器数据的概率分布所生成的特征,等等。特征工程中的典型操作如表1-14所示。
表1-14 特征工程中的典型操作
(3)误差函数。
完成特征选取后,还有两个重要的元素需要确定,即模型和误差函数。
在这个场景中,可以考量预测的RUL和真实的RUL之间的误差。回归算法中的误差函数有多种选择,比如采用下面的RMSE来完成。
(4)模型选择。
针对同一种AI任务,业界提供的潜在算法可能有很多种,因而需要确定哪一种最适合自己的项目诉求。通常会从以下两个维度来做考量。
①AI算法与项目诉求的契合度。
比如所挑选的算法的内部实现原理,算法的优缺点是否可以很好地契合项目自身的一些特殊要求,等等。
②实践才有发言权。
没有实践就没有发言权。除了从理论层面来分析算法差异外,也建议读者先基于各种潜在的算法来跑出预测结果,然后再以此为基础横向比较它们之间的性能差异。
图1-50是针对这个场景,几种典型算法的初步误差结果比较。
图1-50 比较不同算法下的RMSE
(5)超参数寻优。
模型所使用的超参数(例如神经网络层数、神经元个数、学习速率等)是可以调整的,可以通过一些方法来找到最佳的参数值设置,例如Grid Search算法,如图1-51所示。
图1-51 利用Grid Search来为超参数寻优
由图1-51可以看到,超参数寻优后RMSE降低了大概2.4个步长大小,说明这一个环节是有效的。
从上述描述过程中可以得知,通过机器学习确实可以有效解决某些场景下的预测性维护问题。
1.6.4 软件自动化开发和测试
人们正在尝试将机器学习应用到各种以前只有人类才能完成的高难度领域,比如软件开发和测试。软件开发可以说是一种“高智能”的工作项目,软件工程师通常需要多年的理论、技术和实践经验积累才有可能开发出高质量的软件产品。但正如当初人们不相信AI可以在围棋这种代表人类智慧的领域超越自己,却在AlphaGO等的攻击下“节节败退”一样,AI在软件开发领域的应用也正在逐步刷新曾经骄傲的世人们的看法。
目前已经有多个业界巨头正在使用AI技术来提升软件自动化开发能力,其中的先行者当数AlphaGO所属公司Google,以及Facebook等几大互联网巨头。本书后续章节对此会有专门的介绍,因而这里先不做过多描述。
不仅是软件开发领域,软件自动化测试在AI的攻击下也同样逐步沦陷。值得一提的是,自动化测试(Automated Testing)并不是一个新概念,它已经存在了几十年了。而且从历史发展过程来看,它与AI之间并没有过多的交集——它们之间的“触电”是因为自动化测试领域已经来到一个瓶颈期,更确切地说,就是借助传统的技术已经没有办法满足它进一步提升的需求了。
可以思考一下,如果需要将AI应用到自动化测试领域,有哪些可能的切入方向呢?下面是本书对基于AI的软件自动化测试的“畅想”。
1.游戏自动化测试
一方面,由于游戏(特别是移动设备端游戏)规则的不确定性、画面渲染动态性等多方面原因,游戏的自动化测试一直是学术界和业界的一大难题——这个难题催生了不少专业的游戏自动化测试公司。但到目前为止,业界能做到的最好状态也只是能够完成少量的自动化测试。
另一方面,学术界和业界已经有很多在游戏方面击败人类的案例,譬如围棋界的AlphaGO,国际象棋界的Deep Blue(深蓝)等。那么有没有可能进一步将这些成果应用到游戏的自动化测试领域,并代替人的手工测试呢?虽然短期内仍然存在不少棘手的问题,但我们相信这个问题的答案是肯定的。随着AI浪潮的崛起和越来越多的技术突破,这或许只是一个时间问题了。
2.自动化探索测试
目前的软件自动化测试水平,还无法在完全没有人工干预的情况下生成有效的“功能测试用例”。这其中的核心原因在于自动化测试框架缺乏“思考”能力。换句话说,它们只能机械地执行人类利用测试脚本等方式告知它的“固定做事方法”。这样带来的坏处是显而易见的。一方面人们需要持续投入人力来编写和维护测试脚本;另一方面对于测试过程中出现的各种异常情况,它们也只能“望洋兴叹”。
基于AI的自动化探索测试可以赋予现有测试框架所欠缺的“逻辑思维”能力,从而有效解决传统测试技术中的瓶颈。当然,和游戏自动化测试类似,只有持续的技术和资源投入才可能最终触发这一方向的“质变”。
3.传统测试框架的技术瓶颈
传统测试技术已经遇到了很多瓶颈,特别是当测试过程中需要用到只有人类才具有的“高级”能力时更显得“捉襟见肘”,包括但不限于以下几方面。
1)感观判断能力
例如,界面设计是否人性化,用户使用是否便捷,颜色是否合适,界面是否花屏,等等。
2)逻辑判断能力
例如,计算器计算1+1得出3是错误的结果,购票软件无法支付或者支付后没有出票,天气预报的文字显示是“大晴天”但播放的却是“大雨”视频,等等。
3)测试的可继承性
做过测试工作的读者应该深有体会,即现有的自动化测试的可继承性也是很糟糕的。因为软件本身并非“一成不变”(甚至是以天的周期在不断迭代),而依赖人类去告知它这种变化性的现有测试技术,无疑是测试人员的“噩梦”。因而如何借助AI技术来提升测试技术,从而有效应对变化所带来的影响,将给测试行业带来比较大的变化。
当然,上面只是我们对于软件开发、测试领域与AI技术相结合所能带来的变化的一些设想。未来将会如何,我们拭目以待。
1.7 本书的组织结构
本书的组织结构如图1-52所示。
建议读者在阅读后续章节的过程中,可以时常“回来”对照一下本书的组织结构,以避免在复杂的知识海洋中陷入“不识庐山真面目,只缘身在此山中”的尴尬境地。
图1-52 本书的组织结构
(1) AR,Argumented Reality,增强现实;VR,Visual Reality,虚拟现实。