从人类智能到人工智能
1 现代计算机先驱者
1.1 人脑模仿者,图灵
二十世纪初,以英国数学家艾伦·麦席森·图灵(Alan Mathison Turing,常翻译为阿兰图灵)为代表的科学界大多有这样一个观点:人体是一台机器,“虽然比任何手工制作的机器都要复杂千万倍,但其本质上仍然是一台机器。”依现在的科学看,这种论点的正确性值得商榷,但该论点对现代科学发展的正向性是不容否认的。不过图灵研究的主体不是人,而是模仿人脑的机器。图灵认为我们可以用机器来模拟人脑进行数学运算的过程。在这个思想的引导下,艾伦·图灵在1936年提出了“图灵机”理论。原版的图灵机用数学语言叙述的,我们将其精简一下: 设想有一条无限长的纸条,纸条上有一个个方格,每个方格可以存储一个符号,纸条可以向左或向右运动。现在有一台机器,机器的探头指向一个方格以便读取该格子的符号。图灵机可以做下面三个基本的操作:
-
读取指针头指向方格的符号。
-
修改/删除方框中的字符。
-
将纸带向左或向右移动,以便修改其临近方框的值。
图1.1 图灵机理论的仿制品
我们可以拿出上厕所用的卫生卷纸来类比这个过程。卷纸可以当做上文中无限长的纸带子。卫生纸上的9*9数独是一个大格子。(注意我说的的是一道9*9数独题,不是一道数独题中的小格子,不要问我卫生纸上为什么有数独,卫生纸上有数学题不是常识吗?) 人就是一台机器,我们可以对卫生纸做三个动作:
-
看一道数独题。
-
在一道数独题上勾勾画画(这里的勾勾画画包括修改数独题本身,甚至包扣抹去数独题目自己画个猫。)
-
将卫生纸卷动,看前一道题或后一道题,以便对前一道题或后一道题进行勾勾画画。
这么看来图灵机的确模拟了我们在蹲坑时“不看手机”,“热爱数学”,“思考人生”的人脑活动与行为。别小看这三个操作,他们分别代表了:机器输入,机器输出,机器指令移动。给图灵机置入三种操作的排列组合,就可以让图灵机做很多炫酷事情。(当然图灵机纸带格子上没有放数独,而是符号。)按照现在的观点:对纸带的操作叫“计算机指令”;对这种排列组合叫做“算法”。这样观点的通用性十分之强,从小计算器到超级计算机,从俄罗斯方框到英雄联盟都在使用。
图1.2 图灵机纸带之卫生版
图灵又设想:“假如有一台计算机,其运算速度非常快、记忆容量和逻辑单元的数目也足够多,而且还为这台电脑编写了许多智能化的程序,并提供了合适种类的大量数据,那么是否就能说这台机器具有思维能力呢?” 1950年10月,图灵发表一篇题为《机器能思考吗》的论文,提出了著名的图灵测试:如果一台机器能够与人类展开对话(通过电传设备)而不能被辨别出其机器身份,那么称这台机器具有智能。二十世纪五十年代的计算机算力与人工智能算法水平,机器通过“图灵测试”很困难。七十多年后的今天,计算机硬件、软件、算法的大发展使得“图灵测试”机器的建造变为可能。
图灵是一位同性恋,当时的社会视同性恋为异端,因不堪其辱,于1954年自杀身亡。为表彰图灵同志的突出贡献,计算机协会(ACM)于1966年设立“图灵奖”,该奖有“计算机界诺贝尔奖”之称,专门奖励在计算机领域做出突出重大贡献的个人。
1.2 《计算机与人脑》冯·诺依曼
图灵的突出贡献被公认为“计算机科学之父”。还有一个与图灵并称的计算机先驱者,被称为“现代计算机之父”的美国籍匈牙利裔数学家约翰·冯·诺依曼(John von Neumann)。不要计较计算机为什么有这么多爹,因为伟大项目的诞生都是很多人共同努力的结果。图灵爸爸的贡献是解释了“计算机学科是什么”,并提出“计算机可以造”。而冯诺依曼的突出贡献是解释了“计算机怎么造最好”的问题。有些人会很奇怪“技术的完善者怎么也成为计算机之父了?”这还真不是因为冯·诺依曼沽名钓誉,而是因为他太有名了,对计算机科学的发展做了突出贡献,所以后人都往他身上贴荣誉而不觉尴尬。(就像某北京百年老店一直说自己的菜被慈禧“老佛爷”品尝并赞赏过一样。)
图灵认为“人脑是一台机器”,冯·诺依曼也有这种类似的想法。晚年的冯·诺依曼在研究“自动机理论”时, 故意将计算机与人脑作比较,用数学家的观点去理解神经系统。令人遗憾的是,1957年2月8日冯·诺依曼因癌症在华盛顿去世,终年54岁。他几乎是在他生命的最后时刻,于病榻上撰写了关于大脑神经系统与计算机关系的演讲稿。1958年,他的家人将该讲稿以《计算机与人脑》为题出版。这本书对计算机科学的从业者有很大影响(主要是我)。计算机科学的目的不仅是建造出快速计算的机器,还要模拟人脑进行更高维度的“思维模拟”。即构建出“机器智能”等同或超过“人类智能”的机器,就是计算机科学的目的。因此,计算机(Computer)的中文也称“电脑”,电子机器化拥有“智能”的大脑。人造机器大脑的智能可以为“人工智能”(Artificial Intelligence,AII)。
2 大脑模拟那些事儿
2.1 计算机没有“举一反三”的能力
上文介绍了的现代计算机先驱者们。但制造计算器具不是最终目的,他们要创造能够“思考”的“大脑”。会“思考”的“大脑”究竟是什么样呢?对比人类我们可以参照江苏卫视《最强大脑》中那些神人(作弊的那几位自动忽略):做快速大数开方运算的中国雨人周玮,短时间记忆的世界冠军王峰等等。他们分别展示了计算能力,短时记忆能力。我们不禁对人类的大脑的能力感到惊奇。但是对于仿造“人脑”的“电脑”,计算机却能轻易仿造这些能力。计算机的发明就已经证明了机器具有的计算能力;金庸先生的《鹿鼎记》全文约三四百万字,经计算机编码存储不过3M-4M,可见在“精确记忆能力”这一方面,机器已经超过人类。按照推论,计算机应该很快会发展更高级别的智力,但是事实绝不是这样。
计算机表现出来的“智力”是经过人类复杂的编程来实现。计算机没有“举一反三”的能力,只能处理符合规则的预制问题,并没有对新问题的解决方法。这种问题伴随着人工智能发展的始终。既然不能解决,就只能用穷举法列举出所有可能出现的问题,用以避免让计算机遇到不能解决的问题。很多时候,计算机工作者们都是通过升级程序(或给程序打补丁)的方式,令计算机适应各种新出现的问题,这就是人工智能的开始。例如下面的计算器代码,使用switch case语句穷举所有条件,用以适用不同的计算。
1
2
3
4
5
6
7
8
9
10
11
12
13
switch(c)
{
case '+': d=a+b;
printf("计算值为 %d",d); break;
case '-': d=a-b;
printf("计算值为 %d",d); break;
case '*': d=a*b;
printf("计算值为 %d",d); break;
case '/': d=a/b;
printf("计算值为 %d",d); break;
case '%': d=a%b;
printf("计算值为 %d",d); break;
}
这种穷举的方法直到现在仍然是最常用的方法。我们经常在一段代码看见几百个if else语句。但这种做法很难令人满意。代码很可能经常重改,一旦重改就会重新编译;最重要的是:穷举常常是举不到终点的。
如何让计算机产生对新事物的认知(即认识不断出现的新生事物)是一件极其困难的事。我们将“获得知识、技能或认知的过程”叫学习,“计算机得知识、技能或认知的过程”的过程称为机器学习。
2.2 机器学习
在百度百科词条上,“学习”一词的解释如下:学习是通过阅读、听讲、观察、研究、实践等途径而获得知识、技能或认知的过程。 仔细研究这个解释,我们可以得到两个点:
- 学习是个“过程”。
- 在学习这个“过程”产生之前,我们还需要一些前置的方法(“途径”)。
例如,我们不是天生就认识美国总统特朗普,但每个人都可以对他都有一番评价。那是因为每个人通过教育,阅读“历史上美国总统”的方式,总结学习出一套评价标准。通过这套标准,我们可以对未来任何美国总统产生一个有效认知。
1
2
3
4
5
6
7
8
9
10
11
12
输入总统:特朗普
score = 0
if 总统反建制,反精英:
score = score + 10*参数1
if 总统打仗:
score = score - 10*参数2
if 总统会处理经济:
score = score + 10*参数3
if 总统种族歧视:
score = score - 10*参数4
if(score < 0)这个总统是个带恶人
else 这个总统是个好总统
上面伪代码中,我们将某人的行为与立场转化为各种数据,这种转化不怕新人物的输入,都可以给出问题答案。。但是问题同时出现了。上面的参数怎么确定?不同人会给出不同答案。不同的答案会使得结果完全相反。 有些人自己提出参数设置,计算出“特朗普是个带恶人”;而有些人给出的参数却计算出“特朗普是美国历史上最好总统”。不同人在不同的生活环境会产生不同的参数。这里的参数就是人们的认知。我们可以想象。天天听“This is extremely dangerous to our democracy.”的青年人对特朗普总统反感是很正常的;而不相信精英的反建制派们,支持特朗普也是很正常的。 那么我可以得到以下结论:如果假设人类认知形成的原理相同,那么即使面对同一种人(或事物),在不同的环境下形成认知的人们立场与态度很可能完全不同。我们还可以抽象成计算机语言:当计算机代码执行方式是固定的,在面对相同的新输入时,不同人设置参数的程序输出很可能不同。 回到特朗普的例子,作为一个外国人,我最好听谁说的话呢?(我到底信谁的参数呢?)专家啊!!!对,这种“内部含有大量的某个领域专家水平的知识与经验,能够利用人类专家的知识和解决问题的方法来处理该领域问题”就叫“专家系统”。这样简单粗暴的算法,却成为人工智能第一个商用算法。(真正专家系统当然不那么简单,但是我们大部分接触的人工智能的确就是专家系统。) 专家系统的出现,解决了人工智能商用的问题。但是依靠专家经验处理问题的本质上还是人类智能,不是计算机智能。为了适应新需求,我们必须了频繁升级程序。此时,计算机开启了两个分支的发展:一支以完善“专家知识库+专家系统”为方向,进化为现在的“数据库+软件工程”;一支以完善“专家知识库+算法”为方向,进化成为现在的“训练集+算法建模”结构。软件工程这一分支很重要,但是不是我要讨论的,我要说的是“算法建模”这一分支。