行业跟踪
人工智能技术与现代应用
人工智能的定义:
人工智能(ArtificialIntelligence,AI)学科从1956年正式提出,目前已取得长足的发展,成为一门广泛的交叉和前沿科学。
总的说来,人工智能的目的就是让计算机这台机器能够像人一样思考。如果希望做出一台能够思考的机器,那就必须知道什么是思考,更进一步讲就是什么是智慧。什么样的机器才是智慧的呢?它们能不能模仿人类大脑的功能呢?
我们这里讲一种人工智能的分类是按照强弱来分类的。这种强弱不是说人工智能机器人的强弱,而是它能够在多大程度上,来达到人类的水平。
弱人工智能
我们说弱人工智能其实已经广泛地存在,很多很多技术里面都使用到了弱人工智能。
弱人工智能的定义就是:一个机器,它能够在某一个方面,达到和人类相同的水平。比如说下棋的程序,比如说简单的识别程序。它都在单个方面,达到了和人类同等的水平。
强人工智能
什么叫做强人工智能呢?就是说一台机器在所有方面,都达到了人类的智能水平。就是说,它已经和一个正常人,是没有任何区别的。
超人工智能
那我们要介绍一个概念叫超人工智能,这是新提出来的一个概念,也是大家担忧的一个东西。就是当一台电脑,它在所有方面都远远超越正常人的时候,我们就把这种人工智能叫做超人工智能。
如果我们仅仅是达到强人工智能的时候,我们并不需要担忧这个人工智能,它会不会对我们的生活造成影响。它无非就是个正常人,它再坏,也不就是个犯罪分子。但这个超人工智能就不一样了。它如果是个好人的话,它无疑对我们的生活做很多好事。它如果是个坏人的话,它对我们就可能造成毁灭性的打击。
所以说,如果未来有超人工智能的出现,那它势必会大大改变我们的生活。
人工智能的定义:
人工智能是一门交叉和前沿科学。人工智能的目的就是要制造出能够像人一样思考的机器,或者计算机。
人工智能又分为,弱人工智能、强人工智能和超人工智能。
弱人工智能就是:一个机器,它能够在某一个方面,达到和人类相同的水平。
强人工智能就是一台机器在所有方面,都达到了人类的智能水平。就是说,它已经和一个正常人,是没有任何区别的。
超人工智能就是在所有方面都远远超越正常人。
如果我们仅仅是达到强人工智能的时候,我们并不需要担忧这个人工智能,它会不会对我们的生活造成影响。它无非就是个正常人,它再坏,也不就是个犯罪分子。但这个超人工智能就不一样了。它如果是个好人的话,它无疑对我们的生活做很多好事。它如果是个坏人的话,它对我们就可能造成毁灭性的打击。
所以说,如果未来有超人工智能的出现,那它势必会大大改变我们的生活。
什么是图灵测试?
为什么人工智能这么难实现呢?计算机的速度现在如此的快,最快的计算机可以几秒钟读完图书馆里面所有的书,内存可以大到存下世界上所有书的知识。有些我们觉得非常困难的事情啊,比如说:微积分、金融系统、翻译等等,对它们来说,都太简单了。有些我们觉得非常容易的事情,比如说:视觉,动态,移动,直觉等等,对电脑来说,真是太难了。这到底是为什么呢?用一个计算机前辈的话说:“所有人类需要思考的事情,计算机都远远超越了人类。所有人类都不需要思考就做到的事情呢,计算机,就远远不如人类。”那些非常简单的事情,比如说我们拿起一本书这么简单的事情,对计算机就非常的难,这是一系列复杂的物理动作,包括肩膀手肘,手腕里面的肌肉,它配合着我眼睛的运作,使得我们能够在三维空间里面准确地拿到这个位置。
这是因为我们通过几亿年的进化、优化出来的。包括经络和肌肉,都是祖先已经帮我们安排好了的。要人去帮计算机把这些都配置好是非常非常困难的。对你来说非常轻而易举的事情,是因为我们脑子里面的这些软件已经非常非常完美了,但是对计算机来说没有这么完美的软件,它完全靠蛮力来算是非常非常费时的一件事情。
总的来说,对计算机而言,它学的东西越多,速度越慢。但对人来说,你教给人的知识越多,它反应是越快的。这是人和计算机的一个非常大的区别。
我们再来讲一下这个电脑速度的发展。其实现在电脑速度的发展已经非常快了,像我们国家的天河二号。它每秒能够进行3.4亿亿次计算,但它非常非常大,占地有700多平米。
电脑处理速度的发展
电脑发展的定律叫做摩尔定律:定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度。
每两年,硬件的运算速度就会翻一倍。如果两年前,花一千美元能够买一台2G的电脑。现在花一千美元能够买一台4G的电脑。那我们想,计算机达不到人类的水平是因为速度太慢吗?人类的大脑的运算速度已经有生物学家测量出来了,是一亿亿次每秒。那么说,现在最快的计算机已经达到跟人类一亿的运算速度了,但它为什么没办法和人脑一样的思考呢?是因为软件方面的问题。
所以说,我们现在的计算机的运算速度已经达到了强人工智能的水平,它至少可以在硬件上面和人脑PK一下了。当然,我们现在还不能去买一台天河二号放在家里,这是不现实的。可能在未来的10到20年,我们买一台家用电脑,它和人脑的运算速度是差不多快了。所以,我们又要想到一个问题,我们人脑的运算速度这么快,当我们算一个数的时候,还需要经过几秒钟的算的时间,这是为什么呢?
这是因为我们跟电脑的基本的组织结构是不一样的。我们需要接受一些信号的时候,要经过非常非常复杂的处理,才能够进行一些判断。电脑只需要非常小的一个时间单位就把这个东西给算出来了。所以当我们看到一个计算机的智能可以模拟一个蚂蚁,我们会觉得它很可爱。但当有一天,计算机的智能接近于我们人类中最傻的一个人的时候又或者有一计算机的智能已经超越我们,甚至更高的水平的时候,我们可能就没有办法理解这样的事情了。
空气动力学上说,人奔跑到一定的速度,就能够飞起来。那么我们能不能够说,一个计算机,它的运算速度达到一定的极限以后,它就能够产生一定的智能呢?这是有可能,这也是老师在这里开的一个玩笑。
到底什么时候能够出现强人工智能?就是和人类同样智能水平的机器,很多人的看法都是不一样的。包括专业的学者,包括专门做人工智能研究的人,他们也有可能有很多很多的分歧。
有些专家就做了一个问卷调查。涵盖了数百位这个人工智能的专家。问卷内容是, 你预测的人工智能在什么时候会出现?并且让回答者做了一个乐观的估计,不需要给出一个具体时间,而是拟一个时间段,比如说10年到20年, 20年到50年。
就算是最差的一种情况啊,也就是说,我们在有生之年,都能看到这个和人类同样智能水平的机器的出现的。还有一种人预测,在我们的有生之年里面就能够看到超人工智能的出现。也就是说,看到一个电脑,它在所有的方面都能远远凌驾于人类的这么一个机器的出现。并且,这些专家预测了,超人工智能的这种模式,未来超人工智能,它是一种什么样的模式出现的呢?
超级人工智能的工作模式
1、先知模式
它能够回答所有的问题,包括对人类来说非常非常复杂的问题。比如说,我们怎么样造一个更好的机器等。我们给它任何复杂的问题,它都能够回答出来,这叫做先知模式。
2、精灵模式
它就像我们佩戴在身上的这种东西,跟着人走,它能够执行任何的高级命令。比如说,我让它把这个书翻开,或者又就像一个很好的仆从一样,跟着每个人。
3、独立意识模式
或者是,它是一种独立的意识模式,它比我们聪明很多。他可以执行任何开放式的任务,就有点像终结者里面那个施瓦辛格。它也可能会有自己的意识。所以第三种情况,相对来说,风险性比较大的,他太自由了,所以他产生独立意识的可能性也比较大。
老师之前提到了很多的专家和学者,都没有提到他们的名字,并不是说这些学者都不够优秀,或者不够出名,而是我觉得,你要是真正来做这个领域的研究,或者深入的了解这个领域呢,你都会清楚,如果你只是过来学学这个学科呢,你没必要知道谁说了这个话,或者谁做了这个调查。但是有一个人的名字大家一定要知道。这个人不但是非常有名,而且对人工智能整个领域的奠基做出了非常重大的贡献。
诺贝尔奖大家都知道是颁给科学领域最杰出的科学家的,但诺贝尔当年在世的时候没有计算机,所以诺贝尔奖没有设立计算机的奖项。但是有一个跟诺贝尔奖有同样含金量的奖项叫做“图灵奖”。下面我们来介绍一下图灵。
介绍图灵就需要提到一部电影,这部电影叫做《模仿游戏》。电影就是描述了图灵在第二次世界大战时帮助盟军破译德军密码的事情,他传奇的一生做出了非常多的成就。图灵不但设置了图灵奖,更重要的是他还定义了一个如何测试机器的智能水平的测验叫做图灵测验。
图灵测验:如果电脑能在5分钟内回答由人类测试者提出的一系列问题,且其超过30%的回答让测试者误认为是人类所答,则电脑通过测试。
比如我们现在很多手机上都有SIRI和一些公众号,也可以进行交谈,但它们是不足以通过图灵测试的一些软件。我们现在就来测试一下SIRI系统,看它是不是能达到图灵测试的水平。
你不管和它说多少句,它都不会烦,但如果你和一个真人,不停的打招呼,他肯定会说,你这个人是不是有毛病啊?我们还是能够非常轻松地把它和真正的人给区分开来。
如果我们需要这个SIRI的程序员像真人,那也行, 问我第一次的时候它说:“你好!” 问它第二次的时候:“ 你怎么又说?”问我第三次的时候说:“你烦死了!”我们这样设置一下, 不就可以了吗? 但这不一样啊,如果我早上手机放在这和它说了句:“你好!”然后过了一段时间我一个朋友过来拿着说:“你好!”它就说:“你烦死了!”那我这个朋友就会觉SIRI是不是有问题。 所以,我们在设计人工智能的时候不但需要智能,还需要辅助。 比如说要识别区别讲话的这个人是不是就是刚才的那个人。所以人工智能是非常复杂的,想想好像特别简单, 但其实上是很难的。 比如我问一个手机:“你看看窗外什么景色啊?”机器根本就说不出来。这就是我们讲的一个图灵测验的一个内容。
计算机处理速度的不断增长,已经高达亿亿次的计算速度,但是还不能与人类的智能相提并论;
在有生之年可以见到强人工智能的出现;
人工智能氛围三种模式:
先知模式,能回答所有的复杂问题;
精灵模式,能像server一样,提供服务;
独立意识模式,有自己思考问题的能力。
图灵测试,除了能回答问题,还要有一种模式识别,是计算机科学技术,人工智能,测试,程序设计,FPGA,UML,DSP,面向对象,数据采集,现场可编程门阵列,J2EE ,工作流,软件无线电等等的一种综合合成后产生的,人工智能测试。
人工智能的主要学派
我们这节课的最后来讲一下人工智能的基础。人工智能这门课是一门前沿的交叉学科。什么是交叉学科?就是这门学科它涵盖了非常多其他学科的知识。为什么会出现交叉学科呢?交叉学科主要是针对一些开放性的问题,就比如说“人工智能”。学哲学的人觉得他想来解答这个问题,学心理学的人也有一套解决这个问题的思路。最多的就是学计算机的人,直接就把人工智能做出来,但学计算机的人也有可能有很多不同的思路。所以人工智能这门课它包括:哲学、数学、神经科学等。
神经科学主要是研究脑科学,包括很多生物学的科学家,他们通过观察生物的脑的运作来解释人脑到底是怎么操作的。心理学和人工智能其实是非常像的,我们买一本心理学的书和一本人工智能的教科书放在一起。发现有非常多的相似之处。第一章都是讲学科,第二章都是讨论记忆,第三章则是推理。所以心理学很多时候都会阐述很多人工智能需要了解的问题。然后是计算机工程,计算机工程就更加直接了,包括编程、SIRI等很多的人工智能都是计算机工程的工程师们把它做出来的。还有就是语言学,人工智能里面有很多关于自然语言处理和自然语言理解方面的一些问题都包括了一些语言学的成分。有这么多知识支持着这门学科,所以人工智能是一门重要的交叉学科。
由于有这么多学科的人来参与人工智能这个问题的讨论,所以人工智能就产生了一些主要的学派。我们这里讲到学派,并不是像大家想的像武侠小说。学派就是他的研究偏向于某一种理论基础。因为人工智能这门学科并没有大家都笃定的一套理论基础。不同的科研人员可能选择不同的基础。
生理学派或连接主义
比如说连接主义,它可能需要观察神经,大脑是怎样运作的,靠现象来说话。这个学派的人可能认为大脑是怎么运作的,电脑就该怎么运作。这样才能生成一个真正的人工智能。这个方向,现在发展得非常好。但是这个方向不一定就是对的。为什么呢?这个人类在发明飞机的时候,首先看到飞机是有翅膀的,但是鸟是拍着翅膀飞的,但实际上我们做出来的飞机却并不是拍着翅膀飞的。所以只要我们能够达到人工智能这个目的,至于它是不是和人是一个原理其实并不是特别重要。
逻辑学派或符号主义
接下来还有符号主义,符号主义主要是一些做数理逻辑、心理学的一些人,都会偏向于做这个方向的一些研究。这个研究在前一段时间比较火,最近几年没有很大的发展。但我们不能觉得它现在不行以后就肯定不行。学科学派都是此起彼伏的,最后人工智能到底是由哪一派的人做出来还是学派结合地做出来,都是不知道的。
行为主义或控制论学派
说到结合,由于现在人工智能领域已经开始商用化,已经有很多的工程师开始介入到这个领域来了。所以像老师就没有所谓的学派,这个原因是因为,最开始做人工智能的人都不是一直做人工智能的,他有可能本来就是做计算机研究的,甚至可能是做生物学或者是心理学的。他是对这门学科产生了兴趣,才来做人工智能研究的。现在很多人工智能的学者,他有可能一开始就做人工智能研究。所以他就没有所谓的一个学派的分别。以后, 学派之间的关系会越来越淡。
人工智能的主要涉及的领域非常多,像我们刚才说的弱人工智能就是在某一个领域。已经达到人类水平的机器已经深入到我们生活的很多角落里面去了。
计算机视觉
比如说计算机视觉中的图像识别、图像分割等。大家都玩过美图秀秀这个软件吧,它就是能把照片中的任务自动的变得非常好看,这个功能其实就用到了计算机视觉的一些知识。比如我要面部五官定位,那么等于是我找了一个专门做PS的人帮我把这个图给P了一遍。
自然语言理解
其他的关于自然语言理解包括google翻译等,我们把一段文字输入到网页里面,它能自动就把文字翻译过来,相当是一个翻译的专家专门为你做了这件事情。当然,这个技术现在还不是特别成熟,我们可以看到有很多机器翻译的反例在网上。
机器人技术
以前我们说机器人技术,似乎对我们非常的遥远!多么高大上!但现在你花上一千块钱,就能在家电商场买一个机器人扫地机放在家里。它能够自动的判断地上的灰尘和杂物,它能把它清理掉,当然也是还不够成熟。有一天我看到一个网友发帖子说,他打开门收个快递,发现机器人扫地机就离家出走了,这说明,机器人技术还有很多需要改进的地方。
以后会有越来越多的机器人走进我们的生活,这也是人工智能对我们生活一个最直观的影响。
人工智能兴起是是有很多其他领域的专家由于对人工智能研究产生兴趣构成的,所以,人工智能起初有很多学派之分。
弱人工智能已经在市面上可以轻易地买到了,但是还存在很多缺点。
状态空间法
前一阵子,老师有个朋友向老师推荐了一部电影。当时他绘声绘色的跟老师描绘了一下,非常非常的好玩,老师非常地感兴趣啊,就想一定要看这部电影。过了几天以后,老师把名字给忘了,但电影还是想看啊,又不好意思问人家,老师没办法,就打开某度搜索,我就把这部电影从网络上搜出来。老师想了一下,好像记得是一部法国电影,我就把“法国电影”打进去一搜,出来六千多个结果,这怎么办呢? 我不可能重新看所有的结果吧,我还得再找找线索。我后来想想,这部电影说的不是现代的事情,于是我打了一个“中世纪进去”,很明显,搜索的结果变少了,只有一千多条,但是,还是没办法找啊!后来我冥思苦想找了好久,好像他提到过,这是一个关于谋杀案的事情,最后我把“法国电影”、“中世纪”、“谋杀案”打进去以后,就出现了一个搜索结果,好像就是这部电影名字叫做《香水▪ 一个谋杀犯的故事》。终于老师如愿以偿的找到了这部电影。看完了以后,觉得非常非常的好看。
今天我们着重来讲讲这个“搜索技术”。刚才我说的这个例子可能很多同学在生活中都碰到过。在网络上搜索各种各样的资源,比如音乐、电影、文件等等,说明这个搜索技术对我们的日常生活已经产生了非常大的影响。
搜索是怎么样在电脑中进行的?
可以说搜索是人工智能的一个基本问题。我们更可以说搜索是计算机的一个基本问题。任何一台计算机设备它都要用到搜索技术,这个技术实在是太基础了,所以每一台计算机设备都要用到。我们更可以认为搜索是人类智能的一个基本问题。我们人在进行视觉识别,包括我们听到一个声音,我们看到一个图象,说一句话的时候,其实在脑海中都进行了搜索。
状态空间法
说到这个搜索问题,我们就不得不讲状态空间。什么叫做状态空间呢?状态空间就是计算机在进行搜索的时候的一个空间。状态呢?任何一个设备比如手表,它有时钟的指数和分钟的指数。当时钟的指数和分钟的指数都确定的时候,我们可以说这个手表处于一个状态,也就是现在的时刻。比如现在是13点40分,这是一个具体的状态,那么所有的手表的状态有多少种呢?假如它只有时钟和分钟的话,那就是12*60总共是720种状态,这样就构成了一个手表的状态空间。
其它的东西也有很多的状态空间,举个很有意思的例子:树袋熊除了在睡觉就是在找东西吃,它的状态就非常简单,它23个小时在睡觉, 1个小时在找东西吃。
像空调也有很多种状态,比如说它在制冷,或者说制热,这是它处的状态,但它的状态空间是一个非常大的一个范围,比如空调上面它有很多其他的参数,当它所有的参数都处于一个确定的值的时候,我们说空调处于一个什么样的状态,比如说制热多少度,这是一个状态;制冷多少度又是一个状态。它可能的所有状态的集合就组成一个状态空间。
状态(State):是表示问题求解过程中每一步问题状况的数据结构,它可形式地表示为: S={S0,S1,…},当对每一个分量都给以确定的值时,就得到了一个具体的状态。
状态空间里面我们还要讲一下操作这个问题,就是说我们从一个状态到另外一个状态之间,要经过一个什么样的操作才能从一个状态切换到另外一个状态呢?很多设备都做了这种人机交互的接口。比如说,按钮,我按一下这个按钮,它就从一个状态切换到了另一个状态。我们在设计设备的时候,我设计一些函数或者手段,当我们按这个按钮的时候,其实就是触发了这种函数或者手段。
操作(Operator): 也称为运算符,它是把问题从一种状态变换为另一种状态的手段。操作可以是一个机械步骤,一个运算,一条规则或一个过程。操作可理解为状态集合上的一个函数,它描述了状态之间的关系。
比如我们小时候玩过很多游戏像俄罗斯方块,积木从上面掉下来,我们按一个键,就变了一个方向,就说明我们通过操作让积木从一个状态切换到了另一个状态。说到状态空间呢,计算机学家都通常会提到一个游戏,就是围棋。围棋的状态空间,非常非常大。大家可能觉得,这个棋盘非常小,为什么这个空间这么大呢?围棋有391个交叉的点,391个交叉的点上,都有3种情况,有棋和没棋,有棋有两种情况,黑棋在这,白棋在这,它总共有多少种布局呢?它有3391,这是一个什么样的概念呢?可能大家没有接触过这么大的一个数,这个数,如果我们用最强的电脑来算的话,也要算到人类灭绝那天都算不完。
所以我们进行围棋下棋的时候,不可能把所有的棋局都考虑一遍再来进行判断,我们在进行搜索问题的时候就是在一些非常非常大的空间里面进行搜索。这时候我们必须要想一些办法。
还有一个问题叫做旅行商的问题,也经常是人工智能和做计算机研究的人非常喜欢考虑的。旅行商问题在接下来的课程中可能会经常提到。这个问题是三十多年前提出来的,那个时候大概只要商人去这么多地方出差。他要去30多个地方,他怎样走一遍的距离是最短的?
这样一个问题也是一个非常大的搜索空间。如果说我们有20个城市的话,这个数量级也是相当相当大的。不是计算机一下能够算出来的。怎样找到最短的距离呢?也要涉及到一个搜索的问题。搜索的问题在什么时候要考虑呢?如果计算机能够把东西都算一遍的话,不管它怎么搜,问题都不大。当我们没有能力把所有的空间都遍历一遍的话,我们才要用到这个搜索技术。
状态空间一般由4个部分组成。
初始状态的集合:比如空调,它出厂的时候是关着的。手表买回来的时候是00点00分。操作符的集合:设备上这么多按钮都是操作符,这些按钮都能够改变设备的状态。目标检测函数:我们要搜到一个什么样的目标。空调和手表,虽然都有状态空间,但它不是一个搜索问题。如果我们要用状态空间来进行搜索的话,我们就一定要有一个搜索的目标。比如说我们的旅行商问题,我们要有一个合理的走的路线,这就是一个搜索的目标。目标检测函数:就是检测当前的状态是不是我们的目标状态。有些时候我们的目标很简单,当我们的目标很复杂的时候,可能需要一个比较复杂的检测函数来检测。路径费用函数:就是来衡量某一个搜索的方法好不好。比如刚才我们说的走法,比如说我们算的是时间的一个花费。也可能算我们花的钱的花费。我们要找一个旅行方案,但是路径费用函数不一样。你要的是最省时的方案呢?还是最省钱的方案呢?这是两种不同的方案,它搜出来的结果也是不一样的。我们就是由这个路径费用函数来决定的。老师定义了一个非常简单也非常好玩的一个状态空间,我们来看下面这个图。
这个图我们模拟了一个非常简单的打怪物的游戏。操作有三种,第一种,我攻击怪物,结果是怪物的血量-1。还有一种是怪物攻击我,结果是我的血量-1。最后一种是我给自己治疗,这个操作的结果是我的血量+2。我们为了打败这个怪物,就有一个目标状态。这个目标状态,我的血量要>0,怪物的血量要=0.还有路径费用问题,我每攻击怪物一次回合数+1。
初始状态时最开始我碰到怪物的时候,我的血量是3,怪物的血量是5。
我们希望在最短的回合内,把怪物打败是最好的方案。我们可能有很多很多种方法可以达到这个目标,但我们想要找到最快的一种方法这就是一个搜索的问题。比如100个回合以后我把怪物打死了,目标虽然达成了,但是这个方法不一定是好的。搜索的问题就是找到一种非常快的或者是好的方法达到我们的目的。
说到这个搜索问题,还有一个非常经典的游戏。人工智能和游戏有非常大的渊源。我们说的游戏包括像棋牌类、八数码问题,比如我们小时候玩的拼图、移图的游戏。它有9个格子,8个数。一开始这8个数是混乱的。最后我要把它移城12345678,这么固定的一个顺序。8数码问题初始状态可能就是一个随机的状态。操作就是可以把这个棋往空的地方上下左右移。很多的拼图(jigsaw)也是这样来移的,这就是一个典型的搜索问题。
我们在讲人工智能搜索问题的时候绝大多数人都会给这个例子,因为这个例子非常的经典。如果你学了这门课,我给你举打怪物的例子,但你到别的地方去,人家给你看八数码这个例子你不明白,我们还是来讲讲八数码的例子。
很多人都用到这个例子。像中国的华容道其实跟这个也很像。华容道的游戏,曹操,最开始在上面,旁边都是张飞、马超、 赵云等等。最后你要把曹操从这个格子里面给移出来。这个移法也是一个搜索问题。它有很多种走法,还不是很容易走,老师小时候走了好多遍都没走出来。
搜索的问题,都是一个东西有很多固定的状态,它都是能从一个状态搜索到另外一个状态,这中间我到底要进行一些怎样的操作能够最快的达到这个目的。
深度优先搜索和广度优先搜索
我们在搜索策略中又分一个叫广度优先搜索和深度优先搜索。这是我们今天讲的另外两个比较关键的概念。这两个概念在我们讲的公司的面试和考试里面都经常会提到。
关于这个深度优先搜索和广度优先搜索老师先举一个非常通俗的例子。假如有一天你在校园里面看到一个背影非常好看的女孩子。长头发,穿着白色的裙子,穿着校服还有一双旅游鞋,你看了一眼她就不见了,你非常想把她找出来。
如果你这样找:把全校所有女生都叫到操场上来,深度优先搜索怎么搜索呢?一个一个地叫上来看是不是长头发,是不是白裙子,是不是穿校服,是不是穿旅游鞋,不是的话就让她走,是的话就让她留下,一个一个找,找完以后转过去,看看哪一个是你要找的那个人。广度优先搜索怎么找呢?先让穿白裙子的站一边,不穿白裙子的都走。白裙子里面,长头发的站一边,不是长头发的先走。最后穿旅游鞋的站一边,不是旅游鞋的先走。剩下这些人你再把她转过去,看看哪个是你想要的。这就是一个深度优先和广度优先的一个例子。这个例子不一定举得很好,这里只是举一个例子,大家不要深究。
广度优先搜索:从初始节点S0开始逐层向下扩展,在第n层节点还没有全部搜索完之前,不进入第n+1层节点的搜索。Open表中的节点总是按进入的先后排序,先进入的节点排在前面,后进入的节点排在后面。
可以看图上,这是一个八数码的图。第一层,有三种挪法:第一钟就是把中间的8移上去;第二种就是把2移到右边;第三种,把3移动到中间。广度优先搜索会先把所有的三种挪法都看一遍,看是不是我们要找的序列。如果说不是的话,我再看下一层。在下一层,我们上一层的第一种挪法又有三种新的展开。我们就是这样一层一层的往下过。直到找到我们要找的那个序列为止。广度优先还比较好理解。
深度优先搜索:从初始节点S0开始,在其子节点中选择一个最新生成的节点进行考察,如果该子节点不是目标节点且可以扩展,则扩展该子节点,然后再在此子节点的子节点中选择一个最新生成的节点进行考察,依此向下搜索,直到某个子节点既不是目标节点,又不能继续扩展时,才选择其兄弟节点进行考察。
看这个图,先从最边上的那种挪法开始,如果最边上的挪法不是我想要找的那个序列的话,它从最边上这个挪法又往下扩展。一直在挪,挪完以后,再看是不是。把整个一条树走到最边境。
当然,你问老师这两种方法到底是哪一种比较好,老师不敢说。这两种方法都各有各的优点。它都是叫一种全局搜索, 就是要把所有的空间都要走一遍。
有限深度优先搜索:我们先进行深度优先搜索,当搜索深度达到了深度界限,而尚未出现目标节点时,就换一个分支进行搜索。
比如说我挪八位码,挪到一定的程度以后,如果还没找到,我就觉得这个方向不太对,我就把它原路挪回来,然后我再从另外一个方向开始挪。这个有界深度优先搜索最明显的例子就是走迷宫。我们沿着迷宫的线路走,发现离目的地越来越远的时候,我们又会走回来。
包括我们在开车找路的时候也经常会碰到这样的问题,我们不会一条巷子走到底,发现碰到墙我们再往回折。基本上我们走到一定的深度,发现不太对,就会往回折。
迭代加深搜索:先任意给定一个较小的数作为dm,然后按有界深度算法搜索,若在此深度限制内找到了解,则算法结束;如在此限度内没有找到问题的解,则增大深度限制dm,继续搜索。
迭代加深搜索是一种回避选择最优深度限制问题的策略,它是试图尝试所有可能的深度限制:首先深度为0,然后深度为1,然后为2,等等,一直进行下去。
问题:迭代加深搜索看起来会很浪费,因为很多节点都要扩展多次。
假如我要去找一个药店,向东西南北四个方向,我先往东走两公里找一找,没找到,我又往西走两公里,没找到。东西南北两公里发现都没有药店。我就把搜索的范围增加到5公里。往东走5公里,再往西走5公里。再找不到我再变成10公里,直到我把药店找到为止。这就叫做迭代加深搜索方法。这种方法,在实际的生活中也是非常常见的。但是这种迭代加深搜索,还是一种非常盲目的搜索方法。如果光用这种方法,搜索效率还是非常低的。很多种情况下,我们对搜索的目标是有一定的了解的。如果我们对搜索目标和搜索范围没有任何了解的话,我们只能像刚才所说的那样。
就像我刚才说的那个例子。假如北边全部是一片森林,如果你知道这个信息以后你肯定就不会往北边走了。如果我告诉你西面有学校或者商圈,你肯定会认为那边有药店的概率会比较大,这种就是叫启发式。
启发式:运用某种方式或方法去判定事物的知识和技能
我们说的具体一点,像八位码的问题。看上去好像是盲目的搜,但高手都知道是怎么搜的。包括玩魔方,我们要把六个面的颜色都挪成一样。不会玩的人,随便挪可能永远挪不成那样。会玩的人可能几步就挪成那个样子了。
八位码问题就是我们当前状态,和我们要找的那个目标状态。它是有一个差别的。比如说我们9个格子里面有8个数,它和最终状态差的很近的话,那么是不是这个状态就比较好了。如果差的很远,那么这个状态就比较不好。
当然具体的来说,启发式信息它包括两个部分。
这两个部分一起叫做估价函数,记为f(x),它由两个部分组成。第一个部分叫做g(x),为从初始节点S0到节点x已经实际付出的代价。从刚开始搜,到我们现在这个状态,是不是付出了很大的一个代价。 代价表现在很多方面,比如这个旅行商问题,就是我们花费的钱,或者是走得时间。八位码问题就是我挪的这个步数。他根据不同的问题,这个代价是不一样的。
H(x)表现的就是当前状态和目标状态的一个差异。启发式就是要猜测,从这个节点开始到找到我们目标节点的可能性有多大。
这是我们存在的两个约束,在设计这个启发式的时候我们经常要考虑这两方面的问题。
深度优先搜索,就是从一个起始节点的一侧开始,一直向下遍历到底。
广度优先搜索,就是按每次挪动一步分层,每次遍历一层。
有限深度优先搜索,就是将深度优先搜索先限定一个深度,到达这个深度没找到就返回起始节点。
迭代加深搜索,就是有限深度优先搜索的改进,当某个深度到达不了时,就加深搜索深度。
如果搜索没有方向,则会很耗时间。所以产生了启发式。
启发式:运用某种方式或方法,判定是我的知识和技能。
A*搜索
下面我们来介绍一种具体的算法,我们把它叫做A*算法。
A*算法很重要,它广泛应用于游戏、导航等多种应用程序中。我们在打网游的时候站在一个高地上打一个怪,它如果走直线的话有可能会撞到墙,如果不走直线的弯着过来走什么样的路径?这就是一个搜索问题。它有可能绕一个大圈过来,它也有可能绕一个小圈过来。比较智能的情况是绕一个小圈过来,不然就被你白打。这是一个典型的搜索问题,这种算法很多时候就是用A*算法实现的。
A*算法: 就是一种启发式算法,它的估价函数由两部分组成。避免对已经扩展的路径进行再扩展。
f(x)=g(x)+h(x)
g(x)是已经走过的路程的代价,即从初始节点到x的最小距离。h(x)是从x到目标节点的最小距离。
对于具体的这个八数码的问题,g(x)很简单,我们挪了多少步,g(x)就等于几。h(x)是怎么回事呢?h(x)是1,2,3,4,5,6,7,8,假如我们把它们叫成牌的话,h(x) 等于它们不在位的距离和。图上这个例子是这样分布的,28316475,2它现在在的这个位子,它离它应该在的位置的距离是1,像3,4,5,7已经在牌好的位置上了,所以它们的不在位距离是0。像2,8,1,6,1的差距也是1,6的差距也是1,8它现在在最上面,但它应该在最下面,所以8的差距是2。所以h(x)在这样一个状态下,它的值是1+1+1+2=5. 这就是我们A*算法的h(x)的一个例子。
如果说换到我刚才说的那个打怪物的那个例子里面,它的h(x)应该怎么设计呢?我最终要把这个怪物打死,当然我的生命值是越高越好,那么我现在的状态就是,我的血量减去怪物的血量,要越高越好。所以这里的h(x)设计成我的血量减去怪物的血量。我的血量越来越少,怪物的血量越来越多,这种状态肯定是我不想看到的。
那么,这就是我们关于h(x)的另外一个例子,这个函数,在启发式算法也好,A*算法里面也好,都是非常关键的东西。所以大家一定要学会去设计这个函数,这个函数是根据你对目标的一个理解来设计的,不是盲目设计的。 如果这个设计得不好的话, 你可能会在搜索的过程中走很多的弯路。 这个图是我们这个A*算法在8位码的一个搜索的图。
我们可以看到,我们这个初始状态和刚才那个例子是一样的,2831647空格5。初始状态旁边有个0+4,说明g(x)是0,我们还没有走任何步骤。4是什么意思呢?4是说当前状态和目标状态的一个差异,就是不在这个顺序上的数和在这个顺序上的数加起来的一个和。这个状态它可以衍生出来的下一个状态,它有三种挪法。这三种挪法都会导致它的g(x)加1,但是这三种挪法导致的h(x)呢?也就是它现在的状态与目标状态的差异呢?左边一种和右边一种都是增大的,只有中间一种是减小的。那我们就假定先从中间一种开始搜,然后我们在用同样的方法又衍生出三种状态,其中有两种状态它的h(x)都是一样的,在这种情况下,我们就把两种状态都展开,发现我们得到了4种状态。g(x)就是说初始步数都移了3步,但有一种状态离目标状态是非常近的,它只有两个数不在牌位上,那我们就理所应当的从这个状态开始往下搜了。这里我们要注意的非常关键的一点就是,我们不是沿着一个地方一直往下搜,就不会往回走了,什么时候会回走呢?比如说我们搜索到第四步的时候,我们这里是4+1,但这里4加1变成4加3的话,那么我们会觉得这条路径搜索是不对的,我们要走到哪里去搜呢?我们要走到我们最左边的这个3+3这里开始搜,因为它是现在我们这个候选状态中总体的估价函数最小的一个。而不是随便找一个,我们是永远从总共加起来的和最小的一个往下来搜,这就是我们A*算法的一个主要内容。
游戏AI中的规则
哎,又被电脑虐了,这个AI真是设计得太强了,老师根本就玩不过它,今天老师非得研究研究,这个游戏AI到底是怎么样运作的,我们今天就来学习《游戏AI和基于规则的系统》
经常玩游戏的同学可能对游戏AI已经非常非常熟悉了。我们玩即时对战游戏中对战的电脑其实并不是我们玩的时候有个机器人在电脑前玩,而是在程序里面有一个AI的程序,程序能够模拟人和玩家进行对战。
还有的网络游戏中一些在野外的怪物包括NPC( non playercharacter),也就是说非玩家角色,比如说商店的老板、卖药的、卖武器的,这些NPC就会一些非常简单的命令,当然也有非常复杂的NPC,基本上就是“你好!”、“欢迎惠顾!”、“ 谢谢惠顾!”,大概就是一些这样的简单的命令。
我们打的BOSS也可以叫做AI,它们都会很多命令比如攻击、防守, 逃跑等。今天我们讲一讲游戏AI就为了介绍基于规则的系统。很多AI都是由规则来规范游戏里面这些角色,我们来看一下什么样的AI是好的AI呢?
一般来说设计AI的时候有考虑三点:
1、愚蠢的 AI不可行。如果一个AI太蠢,比如说你一直打它都不过来,这肯定是不行的。我记得以前魔兽世界里面有一个领袖叫凯恩血蹄,它是牛头人的领袖。按道理来说, 这个角色非常非常强大,但因为这个AI设计得不好,60级的时候它就被一个猎人放风筝(你打它一下, 它就会来追你),但是因为你的射程非常远,它又跑得没你快,所以它就被你一路这样打死。这就证明这个AI设计得是有缺陷的,所以不能设计过于愚蠢的AI。
2、不可设计随机的AI。如果一个游戏的AI设计得过于随机的话,这个玩家会非常郁闷。比如说我们玩游戏的时候碰到一个怪物,一开始打的时候发现它满地喷火。打了半天发现打不过啊,然后我们回去换了一身装备专门针对它喷火这个技能整装待发,重新走到它面前,发现它又开始放冰魔法了,这就说明这个AI设计得太过于随机了,这个随机的敌人就太致命。所以,AI也不能设计得太随机。
3、不能设计太过于复杂的AI。这个复杂AI的意思就是说不能让它耗费太多电脑的资源。不能开个AI电脑就非常卡,这就说明AI太复杂。
以上就是关于什么样的AI是一个好的AI。说到这个游戏AI ,就不得不提一件陈年往事。这是在我们人工智能史上一个里程碑的事情。就是“深蓝”电脑,”深蓝“是IBM公司生产的世界上第一台超级国际象棋电脑,是一台超级并行处理计算机,计算能力惊人,平均美妙可计算棋局变化200万步。1997年5月,IBM公司研制的深蓝计算机战胜了国际象棋大师斯帕洛夫。这个事件引起了广泛的关注,大家说人工智能战胜了人类了,舆论又开始炒作。其实是很多专家在一起研究了一个下象棋的系统,这个系统只能下国际象棋,它就可以看成是一个下国际象棋的专家,我们就说这种系统叫做专家系统。说起来,卡斯帕罗夫还挺冤的。深蓝这个电脑是由IBM公司和其他十几位国际象棋专家联合开发的。而这十几位专家专门的研究了卡斯帕罗夫下棋的技巧很多时间。然后再和IBM的电脑工程师花了很长时间才做了这么一件事情。并不是说这台电脑打败了它,而是说这十几位专家和电脑一起打败了他。所以我们觉得他是虽败犹荣。但是这个事情告诉我们,如果说我们给予电脑足够的知识,以及给予电脑足够的沟通的话,那么可以使得电脑在某一个领域非常的擅长。
在很多领域都有了非常非常多的应用。 比如说中医诊断、气象预测等,这些都是只有该领域的专家才能够做的事情,现在我们用计算机就能做到相同的事情,我们把这些计算机统称为专家系统。那么我们还说回到游戏AI里面来,游戏AI也是专家系统的一种,它是专门负责在游戏中陪玩家玩的。只是我们在游戏中经常碰到的AI都比较弱。我们来了解一下网游中是如何设计一个怪物AI的?
我们看以上这张图片,这是一个熊怪,它看上去凶神恶煞,其实它确实非常厉害,老师以前玩游戏的时候无数次的倒在它脚下。这样一个熊怪,我们经常看到它在游走,或者它在和玩家打,我们还看到它在跑或者在逃,它的这种行为其实是由一些列的规则来约束的。老师举出的这些规则:
R1:当没有任何玩家在身边时,进入游走状态;
R2:当有玩家进入一定范围时,进入警戒状态;
R3:当有玩家接近或受到玩家攻击时,进入战斗状态;
R4:当血量不足20%时,进入逃跑状态;
R5:当血量降至0时就进入死亡状态。
有限状态机
上节所说的这五种状态,我们在AI设计的时候用了一种叫做有限状态机的系统。我们今天学习的第一个非常重要的概念。
以上是一个有限状态机的图。图中间有刚才我提到的五个状态,什么叫有限状态机呢?就表示在有限个状态之间转移的数学模型。就是说明这个AI它只会在这五个状态的中不停地转换。比如说演示有一个人过来把这个怪杀了。它先从游走,然后到警戒,接着到战斗,然后到逃跑,最后到死亡。如果一个玩家过来被这个怪打死了, 先是游走,再是警戒,再到战斗,然后它不会逃跑,它打死这个人了,它又回到了游走状态。这就是有限状态机。
有限状态机跟上节课提到的状态空间有什么不同呢?状态空间它不仅需要一个初始状态,还需要一个终止状态,并且普遍用于解决贯穿始末的全套问题。就是说它往往描述的不是一个物体的问题,它往往描述的是几个物体的。比如说我们描述的是一个玩家和一个怪物的状态看成是一个状态空间。往往一个怪物的变化,就经常看成一个有限状态机。所以说这个有限状态机和状态空间是不一样的。有限状态机通常用来描述一个物体的状态转换,而状态空间中通常就会有多个角色。有限状态机经常描述的是一个角色,而状态空间经常描述得是多个角色的问题,所以状态空间的状态通常比有限状态机的状态要多得多。我们看到这里只有5个,可能还有很多有很多状态的复杂的例子,但是我们这里只举出了5个来说明有限状态机这个有限状态机。
我们还进一步地想到,要使得AI更加的人性化,有时候为了增加游戏的可玩性,我们会给游戏AI一定的随机性。比如说,这个怪物和玩家在打的时候没有血了,它有两种可能性,80%的情况下是跑,它不跟你打,还有20%的情况,它会狂暴,就是说我生气了,我要打死你,这个攻击力会增加等,这种情况下我们要用新的数学模型,我们把这种数学模型叫做FuzzyState Machine(FuSM)。就是从一种状态转换到另外一种状态的时候是有一定的概率的。我们看以下这副图,我们新增了一个状态叫狂暴,从战斗到逃跑,我们有一条边,从战斗还有一个箭头到狂暴这个状态,从战斗到逃跑这个状态有80%的概率,到狂暴这个状态有20%的概率。这个概率,会在边上写出来。
还有一点,这个有限状态机的节点就是这个圆圈,就是每一个状态,边就是规则的前面的部分。那些规则的前件,比如说从游走到警戒这条边,这就说明当有玩家进入它的视觉范围内。当从警戒到游走又不一样了,就是当有玩家从它的警戒范围内撤走,包括游走到战斗,就是由玩家直接从超出它警戒范围意外的地方攻击到它,那么它就直接进入到战斗状态,当然你也可以说它有一条线,从游走直接划到死亡,那就说明有些时候我们级别高了,到非常低的区域去的时候,就直接把怪秒杀了。看到没看清楚你上来就直接把它打死了。
所有说游戏AI基本上就是通过有限状态机,或者模糊状态机等这样一些数学模型作为基础来设计的。
专家系统
说了这么多游戏AI的内容,现在我们来了解一下什么叫做基于规则的系统?
人工智能中很多规则,我们把它看成是一个产生式:产生式是由美国数学家波斯特(E.POST)在1934年首先提出,它根据串代替规则提出了一种称为波斯特机的计算模型,模型中的每条规则称为产生式。产生式表示法已经成了人工智能应用最多的一种知识表示模式,尤其在专家系统方面,许多成功的专家系统都是采用产生式知识表示方法。
简而言之,它就是一个如果发生什么事情,那么就怎么做的一个规则,其实我们生活中的很多知识,都可以以产生式的形式表现出来。比如,如果明天天晴,那么天上的云就会比较少。
我们生活中非常多的知识,都可以用产生式的形式表现出来。我们可以看到,专家系统也是一个基于规则的系统。专家系统里面,有很多很多条规则,作为知识库,它是跟推理引擎相交互的一个系统,然后我们通过知识规划,最后给用户一个解释。说起来似乎有点抽象,其实,专家系统中最重要的是:如何建立一个有效的知识库?
就像我们刚才说的那个下围棋的例子,那么多的围棋专家为什么要经过那么长的时间才能把深蓝电脑给做出来?就是因为学围棋的人和学计算机的人他们之间的沟通是有障碍的。围棋的人,说的一个东西要解释给计算机的人,最后再变成一个程序的话,这需要非常多时间的交流。可以说那些做深蓝电脑的程序员,它到最后就有可能成为一个围棋高手,因为它和那么多的专家交流了那么多的时间。
那么在我们基于规则的专家系统中,出现了问题怎么办?比如说,规则非常非常多的情况下我们如何去检索这些规则?但我们发现一种情况,它和规则A是匹配的,和规则B也是匹配的,到底怎么取舍,都是专家系统中的一些主要问题。我们除了基于规则的专家系统以外,还有一种叫基于框架的专家系统。这种专家系统,主要是给专家用的专家系统。比如说有一些问题我们通过计算机把它定义好,然后再通过专家把症状什么的填进去以后,最后就能给我们一个结论。这就叫基于框架的专家系统。这种专家系统就不太适合给用户来用,它通常是给专家用。但现在,我认为在我们日常生活中有一种可谓是专家系统的一种非常通俗的一种应用,那就是我们熟知的“大众点评网”。
为什么说“大众点评网”是个专家系统呢?比如说你来到深圳或者长沙,你要找吃喝玩乐的话,这个系统就相当于一个对这个城市非常了解的一个专家。大众点评就是一个基于框架的专家系统。基于框架的专家系统就是要填写很多的属性。比如说,这个菜打多少分,我把它填好,别的用户它来看这个系统的时候,它就能看到,这个地方有哪些东西好吃,有哪些地方好玩,所以说这就叫基于框架的专家系统。其他的还有一些各种各样的专家系统,这节课上就不详细讲了。
那么我们来构建一个专家系统呢?那我们如何来设计专家系统呢,它主要分为三步:
第一步:设计初始知识库
比如说深蓝电脑是由一群专门下围棋的和一群计算机工程师一起设计的。比如,计算机工程师问围棋专家:“这个到底该怎么设计?”围棋高手A说他一般是这样下的,围棋高手B又说他喜欢这样下等等,他们会有很多种思路。所以导致这个初始知识库的设计,是有很多困难的,我们把很多专家的意见进行归纳和总结,最后精炼出非常少量的规则,然后构建出初始知识库以后,然后就要进行第二步。
第二步:原型机的开发与试验
专家系统跟我们互联网很多产品的开发是一样的,因为提到原型这个概念,很多做互联网开发的应该很熟悉。比如微信,现在功能很多,基本上什么功能都有,又能付款又能玩游戏,但是它在一开始推出的时候只有一个核心功能发短消息和特色功能发语音消息。包括我们一开始在构建一个专家系统的时候,比如说诊断系统,它就只能进行非常简单的触诊,或者说简单的症状的判断,那么我们在试验的时候,只能对原型机进行试。当我们发现,对原型机的试验都不能通过的时候,那肯定是我们的知识库出了问题,那么我们就要赶快的修改我们的知识库,然后再进行后续功能的开发。
第三步:知识库的改进和归纳
所以说这三步,不是一步一步就这样下来的,它是一个递归和循序渐进的,也许说它迭代反复了很多代,最后我们才把这个专家系统设计了出来。
专家系统在很多领域都有应用,包括我们刚才说的中医诊断,因为这个例子已经比较成熟了,它在很多地方都有应用。还有像股票投资,股票投资的专家系统当然没有那么容易做,因为这个东西的收益实在太大,但是有很多人研究怎么样用专家系统来进行股票投资,并不是专家系统在股票投资上得到了非常高的一个成就。当然也有很多的系统出来,因为诱惑非常大,所以有很多人在做这件事情。
还有就是天气预测,大部分情况下,都是靠机器完成的,因为有很多数据、指标,靠人,靠夜观星象是看不出来的。还有我们的导航系统,对我们日常生活造成了非常大影响的专家系统。你到哪里去,你要问一个当地人,你不管你对一个地方再怎么熟,也不可能把所有的道路,怎么走都记得非常清楚,所以导航系统是真正的一个通晓地理状况的一个专家。
游戏中的世界观与知识表示
刚才大家看到的这个视频是一个叫做龙与地下城的桌面游戏,这个游戏中国的很多同学可能不太熟悉,但是看过《生活大爆炸》的同学应该非常熟悉,主角谢尔顿和他那帮朋友们,几个高智商的科学家,就经常玩这个游戏,这是一个情景模拟加角色扮演的一个桌面游戏,它比我们玩的其他的桌面游戏都要复杂很多,因为它有一个庞大的世界观。
什么叫做世界观呢?就是说它这里面定义了很多的东西,比如说很多种族,比如说很多怪物、技能之类的,世界观是我们很多很多奇幻游戏的源头,包括像龙、地精、狗头人之类的怪物,都是从这里面出来的。最重要的是这个游戏创造了很多只属于这个虚拟世界的知识,那些著名的RPG,在我们看来非常经典的包括魔法门系列、英雄无敌系列、和博德之门系列等,都是这个桌面游戏改编而来。
那么我们首先有了一系列的知识,桌面游戏的知识,是写在一张纸上的,到最后,它变成了一个程序里面的知识,这就是构造了一个虚拟的世界。这个过程就涉及到很多如何使这些知识表示得能让计算机知道,这个过程不单单是人类语言和机器语言翻译的一个过程,很多情况都是一个知识表示的一个过程。这就是我们今天要讲的这节课,关于如何表示知识。
我们看到,在现实语言中,我们可以说,玩家A对怪物B造成了一些伤害,这是我们人类能够读得懂的一种语言,但机器语言通常是这样子的,通常你要告诉他,玩家A的攻击力是多少怪物B的防御力是多少然后玩家A对怪物B造成了一次攻击,然后我们这个攻击一减。 所以计算机和人类最大的不同就是,计算机会比较容易去理解一些结构化非常明确的数据,而计算机能够理解你的语言,也是因为它把你的语言转化成了数据结构才理解清楚的,所以说知识表示,在人和计算机的沟通上面,起了非常大的作用,这也是我们人工智能这门学科的一个核心问题,甚至是非常基本的一个问题。如果说,我们的所有知识,都能让电脑表征得非常清楚的话,那么我们说,人工智能的实现就指日可待了。
首先我们来看一下什么是知识?知识是我们人看到很多种现象通过我们大脑进行一个加工,得到一个思维的结果
知识是一个结论性的东西,当然,也不是说所有的知识都是正确的,知识还具有一些不确定性,和很多很多种特性。我们下面来看两个和知识有关的重要概念,一个叫数据,一个叫信息,什么叫做数据呢,我们计算机里面所有存储的东西,都可以叫数据,我们看黑客帝国里面,他把一个计算机一展开,就是一个满屏的0101010,的矩阵,就说明,这个虚拟世界的 所有东西,都只是数据,数据就是存储在硬盘或者光盘里面01的组合。
什么叫信息呢? 信息就是数据的语义,就是数据在特定场合下的具体含义。
这个可能理解起来比较生硬。有次我去参加一起面试,面试官就问我,数据和信息的区别我解释了一些以后,那个面试官还不是很满意,最后我就说,信息就是有用的数据,他说对对对他说你理解到了这个点,就说明你明白了数据和信息的区别。我们说,数据不一定是游泳的,因为有很多数据是冗余的,比如我们说,今天下雨了,存在电脑上,但有可能我们存了100遍今天下雨了,你说这里面都有用吗?这里面可能只有一条有用。信息呢,可能就一条,最近几天都在下雨。这就是数据和信息的一个区别。
知识是对很多信息得到关联以后得到的一种信息结构,它是事实和信息之间的规则形成的,它是经过加工,理解,整理,改造以后得到的信息。老师理解下来呢,但凡是知识,它都是有一定的预见性的。信息很多都是发生过的事情,我们通过整理这些信息可以对未来来进行一定的判断,这样的一些就可以成为知识。这是我们讲信息数据和知识三者之间的关系。
传统的知识表示方法
有哪一些知识表达的方法呢?知识表示的方法其实在计算机领域其实非常非常多,这节课我们不可能一一拿出来介绍。我们介绍一些非常典型且非常非常实用的一些方法,首先我们要讲一阶谓词逻辑表示法。
一阶谓词逻辑表示法
一阶谓词逻辑表示法就是把用逻辑(谓词)表示知识,实际上是把人类关于世界的认识变成一个包含个体、函数和谓词的概念化形式。比如说, 敲击这是一个谓词,开电脑这是一个谓词,我们大部分的行为或者思维都可以用主语加一个谓语,或者再加一个宾语这种形式表示出来,如果我们能把所有的知识,都用一阶谓词逻辑表示出来的话,那么我们就能得到一种知识表示的方法。
基本步骤
1、给出有关世界的个体、函数和谓词
2、构造一阶谓词公式(集)
3、对公式(集)给出解释,使该解释是相应公式(集)的一个模型。
一阶谓词逻辑表示法,它有很多很多种应用,比如说, 这是一本书,这个物体是x,isbook(x)就表示这是一本书。我们说张三是一个人,我们定义一个谓词, is Human或者是Human
一阶体现在哪里呢,就是说Human后面只有一个参数,如果human后面有两个参数,我们就说它是二阶的,比如说hit(x,y)就是x打了y一下。
我们说一阶谓词逻辑经常能表示非常多的简单的知识。然后我们通过逻辑表示方法,这个逻辑,在数学表示上,用一个箭头来表示,我们在两个一阶谓词逻辑中用一个逻辑来连接。它可以来表达一些比较复杂的知识。它可以在不同的知识之间建立联系。
我们现在举个例子,说人人都受法律的管制, 我们定义两个谓词, 第一个谓词叫做“是人”, 第二个谓词叫做“受法律管制”,其实这个人人都受法律管制,我们可以把它拆成这样子,如果一个东西它是人,那么这个单位,就应该受到法律的管制,我们把它拆成这样子以后呢,就好来做知识表示了。我们把它表示为, Human(x)后面打个箭头, lawed(x)。同样的,再举一个例子,如果一个人犯了罪, 那么它就应该受到惩罚,
如:
1. Human(x)->Lawed(x) 人人都受法律管制,x是同一个人
2. commit(x)->punished(x) 如果由于某个x是人而受法律管制,则这个人犯了罪就
一定要受到惩罚。
我们这里构造一个新的谓词, COMMIT,就是犯罪的意思,当然,commit也有很多其他的意思, commit x箭头punished(x) punished就是受惩罚的意思,如果x犯了罪的话,那么x就要受到惩罚。这里x不一定是人,如果我们一定要加上一个是人的谓词的话,我们这里介绍一个与的表示,是一个向上的尖角,我们把它叫做与。那它既是人,又犯了罪的话,那么它就应该受到惩罚。
我们知道了一阶谓词表示法和这个逻辑表示法以后就可以构造很多很多复杂的知识,让计算机记住,逻辑表示法有些什么样的优点呢?
1、严格性:一阶谓词逻辑具有完备的逻辑推理算法,可以保证其推理过程和结果的正确性,可以比较精确