什么是人工智能?
本章将带领我们了解什么是计算机、算法和程序,特别是人工智能程序。
什么是人工智能?在讨论机器是否有将人类变成圈养的奴隶的风险之前,也许我们需要问问自己人工智能到底是什么。让我们首先明确一点:人工智能并非在寻求将计算机智能化。计算机是机器,它们只是简单地执行人类要求它们执行的工作而已。
计算机科学和计算机
要完全理解计算机能做什么,不能做什么,首先必须理解什么是计算机科学。让我们就从这里开始。
计算机科学是信息处理的科学,用来设计自动处理各种信息(数字、文本、图片等)的机器。
首先从计算器开始。当时处理的信息包括数字和一些待执行的操作。例如:
346 + 78 = ?
然后,就像史前工具一样,一步一步向前发展,处理的信息变得越来越复杂。从数字到单词,再到图片,最后到声音。今天,我们知道如何制造可以听取人类命令(待处理的“信息”)的机器以及可以利用听到的信息执行人类要求的操作的机器。例如就像您向您的苹果手机提问的时候:“Siri,告诉我跟医生预约的时间是几点?”计算机就是处理这些信息的机器。
计算机和算法
为了处理信息,计算机应用了一种被称为“算法”的方法。让我们尝试着了解一下它是什么。在上学的时候,您已经学会了如何做加法:必须将数字排成列,每个数位必须对齐;然后计算每一个数位的总和。如果个位有进位,您需要把它记录下来并且加在十位数上,以此类推得到最终的答案。
这种方法就是一种“算法”。
算法就是数学的烹调菜谱:比如炒蛋需要把鸡蛋打碎倒进碗里,进行充分搅拌,然后倒入长柄平底锅……算法也是同样的道理。就像一本烹饪食谱中炒蛋的烹调步骤一样,您可以将描述任何一种信息处理方式的算法写出来,例如如何做加法。因此我们可以对这些算法进行学习并加以应用。
在计算器中,我们将算法转换成一套电子线路。然后,我们就获得了一台能够在给出两个数字的情况下,计算并显示其相加结果的机器。这三个概念(烹调菜谱、算法和执行算法的电子机器)或多或少有点儿复杂,但是我们已经掌握得很好了:厨师知道如何编写和按照烹调菜谱做菜;计算机科学家知道如何编写算法;电子工程师知道如何构建计算器。
算法和计算机科学
计算机科学的中心思想就是算法本身,即信息。
你能想象用数字或机器可以解释的其他符号形式描述加法的配方吗?
让我们想象一下,能用数字或者机器可以解释的其他符号形式。然后再想象一下,我们要建造的这台机器,它不是计算器,它比计算器稍微复杂一些,我们可以向其提供两个数字和我们编写的加法算法。这台机器需要能够“解码”算法并执行其描述的操作。这样会发生什么呢?
您可能会对我说:“好吧,是的,它会做加法了,可然后呢?”然后,就像计算器可以用来对任意数字进行加法运算一样,这台用于解码算法的机器也可以配合任何其他的算法一起使用,例如乘法运算!现在,就是见证奇迹的时刻,我们可以使用一台机器同时进行任意的加法和乘法!
天哪,我感觉激动得不行了……做加法和乘法,虽然这在您看来可能并没有什么特别之处。但是查尔斯·巴贝奇提出的这个绝妙主意就是计算机的起源!计算机是根据在物理介质(一般情况下就是提供数据的介质)上编写的整套指令处理物理介质上提供的数据的机器(例如一张打孔的卡片、一盘磁带、一张数码光盘):它是一台执行算法的机器!
一台万能的机器
艾伦·图灵在1936年提出了计算机的数学模型:著名的图灵机。每台图灵机上有一条纸带,纸带上可以写上符号。为了更好地向您展示这个东西,您可以想象一个35毫米的电影胶卷,上面都是一个一个的小格子,您可以在每个格子里面放上一张照片。在图灵机上,我们不是使用照片,而是一个一个的字母,也就是一个符号的清单(比如说,0和1就是计算机科学家们最喜欢的符号)。每个格子里只能写一个符号。
为了使图灵机可以正常运行,您需要像下面这样对编号的指令集进行定义:
指令编号为1267:
符号0 → 向右移动一个空格,跳转至指令3146
符号1 → 写0,向左移动一个空格,重新开始指令1267
图灵机会分析当前格子里包含的符号,然后执行相关的指令。
这个原理有点儿像以您为主角的书:请注意,您已经拿起了一把剑,然后翻到第37页。可以拿来对比的就只有这一点。与您是主角的那本书的读者不同,机器不会选择打开箱子或进入龙的巢穴:它只执行这本书的作者写在页面上的内容,而不会做任何决定。
它完全遵循算法中编写的内容。
艾伦·图灵证明了他的“机器”可以复制任何一种算法,无论有多么复杂。然而,更确切地说,计算机的工作方式完全和图灵机一模一样:计算机有一个存储器(相当于图灵机的“纸带”),它可以通过电子线路读取存储器格子里的符号,然后执行其定义的指令。因此,从理论上来说,计算机就是一台可以执行任何算法的机器。
生成程序的程序
我们总结一下,计算机是一台带有存储器的机器,存储器中写入了两种东西:数据(更通常来说是信息,这也是信息科学这个名称的来源)和由特定语言编码的算法,算法用来定义对这些数据的处理。用机器可以翻译的语言编写的算法被叫作计算机程序,当机器执行算法中描述的操作时,我们称之为计算机正在运行该程序。
我们已经在图灵机的例子中看到,比起简单地“将数字排列然后计算其总和”,编写一个程序要复杂得多。它看起来更像是这样:
取第一个数字的最后一位
取第二个数字的最后一位
计算总和
记录“总和”单元格里的最后一位数字
记录“进位”单元格里前面的数字
重新开始计算前一数列
机器需要执行的操作必须按照一个步骤接一个步骤的过程,非常精确地被描述出来,而且只能使用这些小型电子计算器可以执行的操作来描述。因此,通过这种方式编写的算法是非常有局限性的……
计算机科学家们因此发明了一些语言和用来翻译这些语言的程序。例如,我们要求机器将“+”这个符号转换成上面描述的一系列操作。
这样就可以让编写程序变得更加简单,可以重复使用已经编写好的程序去编写更为复杂的程序。就好像原始人使用史前工具制造工具那样!一旦有了轮子,您就可以制造独轮车,然后如果有时间和精力的话,您甚至还能制造一个可以生产轮子的机器。
那这里面的人工智能是什么呢?
人工智能就是编写特定的程序。
根据20世纪50年代人工智能创始人之一马文·明斯基的观点,人工智能是“专注于构建计算机程序的计算机科学,主要致力于编写可以完成目前人类更加胜任的工作的计算机程序,因为这些工作需要一些高级的思维过程,比如:知觉学习、组织记忆和批判性推理”。
它通过编写程序来执行之前人类最为擅长的信息处理任务,因此,我们应该称之为“一个人工智能程序”,而不是“一个人工智能”。
现在有很多通过人工智能程序解决此类信息处理任务的例子:比如精通国际象棋、预测明天的天气、为“美国第五任总统是谁”的问题搜寻答案,等等。所有这些可以通过机器完成的事情都依赖于人工智能衍生的方法和算法。因此,关于人工智能的所作所为,无关神奇也无关智能:仅仅是机器应用由人类编写的算法而已。如果说有智能,也只是程序员的智能为机器提供了正确的指令。
机器会学习吗?
显然,编写一个人工智能程序并不是件简单的事情:需要编写一些指令,保证在无论提供什么数据的情况下都能获得一个看起来很“智能”的回答。因此,计算机科学家通常会使用一些复杂的程序,这些程序可以自动从数据中计算出“正确”的答案,而不是手工编写指令的详细信息。就像做饭一样,我们尝试着使用机器来简化编写程序。这个原理是人工智能技术的核心,被称为“机器学习”。
这个名称曾经在计算机科学家和人工智能用户之间引起了一个巨大的误解。显然,这并不是指把程序抛弃在大自然中要求它们自己想办法解决!我们只是简单运用计算机的一个属性:这些数据的处理方式(例如如何进行加法运算)是通过一个程序来定义的,而这个程序本身就是提供给机器的一种数据。因此,这个数据自身是可以通过另外一个程序进行修改或重新创建的。
因此您可以编写程序,这些程序可以根据数据生成新的人工智能程序。
服从命令吧,我真心希望!
一切就是这么发生的,就好像在以您为主角的那本书中,作者要求您用其他单词替换某些单词来重写页面内容,或者在书末尾的空白页面上写新的语句。计算机可以操纵这些信息,无论是数据还是程序本身,都可以由程序进行修改。
但这些改变都是通过遵循算法的指令来完成的。一个程序不可能生成任何程序。它只能生成它被编写用来生成的程序。如果启动程序没有给出正确的指令,“结果程序”就很可能包含着错误,这样的话也就无法执行任何哪怕最简单的“智能”处理。让我们再次以您为主角的书为例:如果作者的指令是将所有的“e”替换为“w”,那么在页面应用该指令之后,您就几乎没有可以继续冒险的机会了!
同样也需要记住,您的学习程序是否能够执行操作生成处理程序,始终取决于其接收到的数据。在这本以您为主角的书里,有一个这种类型的指令:“寻找您拿起的第一个东西的第一个字母”。所做的修改都取决于接收到的数据(在这里,数据就是您选择第一个拿起的东西)。显然,如果数据选择不当,那么生成的程序也不会很有效。
因此,只有当提供了正确的数据和指令之后,使用机器学习的人工智能程序才可能生成一个“正确”的程序。所有这些都不是单独工作的!
注意:一个程序可以隐藏另外一个程序!
我们还没有准备好看到计算机自己编写程序来解决超出其功能范围之外的问题。这实在太难了:一个程序的正常运行需要太多不同的数据,需要设定太多的规则。可以解决所有问题然后冲一杯咖啡作为自我奖励的人工智能程序并不存在,因为,确切来说,每个问题都需要一个特定的程序和与之相应的数据。
为了编写AlphaGo这个冠军程序,Google的工程师们需要编写第一个程序来观察无数局的围棋游戏,然后根据这些数据生成第二个程序,使其能够在每种情况下提供最佳的落子位置。这需要长达数年的工作!而且需要向这个程序提供正确的信息,使其可以在这些数据的基础上进行学习。
而获取的结果是特别适用于围棋游戏的:您不能直接重复使用它来玩另外一个游戏。当然您可以调整分析程序,使其可以构建另一个程序,然后可以根据其他数据为国际象棋或西洋棋提供最佳的落子位置。但这需要计算机科学家们研究编写程序并对其进行修改、定义国际象棋游戏的规则并解释如何分析与围棋棋盘完全不同的国际象棋棋盘。您的程序不能独立地改变自己从而产生某些智能化的东西。
难道我们期望一辆赛车能够打鸡蛋和洗衣服吗?
那么,究竟什么是人工智能呢?
为了理解什么是人工智能,让我们一起来看一下编写人工智能程序所使用的不同方法。
所有的这些方法都是基于算法的,有时候很容易理解,但通常都是很难实现的。我们将看到,针对需要人类推理能力的不同任务,如何发明出使其有机会变得自动化的方法。我们同样可以看到这些方法有时候和一个相对理性的人在相同情景下做出的反应截然不同。因此,正如马文·明斯基所说,这只是编写一些“可以完成目前人类更加胜任的工作的计算机程序”。而不是“像人类一样”去完成工作。
马文·明斯基对人工智能的定义也挺令人扫兴的。它从一开始就设定了人工智能的界限。如果机器可以和人类一样完成一项任务,那它就不再是人工智能了。这也是事实:全球定位系统导航出拜访住在康塔尔的奶奶的最佳路线,精确得就像它在那里度过了童年时代一样,不会有人觉得这有多了不起。但是,这就是人工智能。
当然也有其他一些针对人工智能的定义。1979年1月出版的《研究》杂志第96期提出的观点就很有意思:它断言,“人工智能旨在研究一些可能的方法,这些方法可以赋予计算机系统与人类智力相提并论的功能”。于是,我们再次陷入幻想:究竟是不是能赋予机器与人类相近的智力呢……
这是一个非常宏伟的目标,会令人产生很多联想,这也是它令人兴奋的原因。
而真正的问题是我们可以朝这个方向走多远……