《03 推理:目标树与基于规则的专家系统》视频链接

【Tips】
首先解释一下什么是基于规则的专家系统?
专家系统是人工智能的主要研究领域之一,是基于行业规则进行业务处理的计算机程序。这些规则来源于行业知识,用于描述特定条件下所要执行的动作,并且定义了相关动作对于数据的影响。因此,专家系统可以利用其推理能力得出结论或者执行相关分析任务。在专家系统中,解决问题所需的知识,作为一个规则集合存储在知识库中,形成知识库系统。

【内容简介】

这节内容教授主要讲述了三个例子来解释基于规则的专家系统。

First:一个可以移动方块的人工智能程序

一个可以移动方块的人工智能程序,这个程序的用途是:我们在桌面上放了一堆方块,程序作为一个假想手来操作这些方块,进行什么操作的命令是人为输入的。当我们输入命令后,程序开始移动这些方块来完成我们的命令。

这个程序的特别之处在于当它完成命令后,你可以向它提问它移动的步骤和思路,它会为你解释移动每一步的理由,看到这里,是不是觉得这个程序简直太智能了。实际上它的实现原理与我们上次说的目标树有关。

Second:一个识别动物的例子

有一个基于规则的专家系统,用来诊断血液中细菌感染的程序,准确率很高。但由于涉及到太多医学专业知识,所以用一个识别动物的例子来解释原理。

Third:杂货店装袋的例子

【笔记】

由于我没有找到教授的GitHub源码,所以我只能画图来解释了。

首先第一个例子:移动方块程序。

移动方块程序的流程图是这样的:

举个具体点的例子,如下图所示,我们要将 B1 放到 B2 上,则变化就如下图所示:

当移动完成时,教授向程序开始提问:
Q:为什么要移开Bx?
A:因为要清理B1的顶
》>>>>>>>>>>>>>>>>>>>>《
Q:怎么清理B1的顶?
A:移开Bx

上述移动操作及如何让程序回答自身行为的实现靠的都是下图-----目标树 来完成的:

如图所示:
当你要回答Why的问题是,向上追溯一个动作就可以
当你要回答How的问题是,向下追溯一个动作就可以

所以此程序之所以能精准地回答问题原因在于,它记录了自己每一步移动的步骤形成了目标树,当你提问时,他会按照目标树来回答问题。

正如人们观察到蚂蚁在海滩上会创造出复杂的移动轨迹,但实际上它只是为了避开沙滩上分布的沙砾而已。

行为的复杂性 = MAX(程序复杂性,环境复杂性)
The complexity of the behavior = Max ( the complexity of the program, the complexity of the environment)

第二个例子:识别动物的程序

加入我们现在身处一个动物园内,我给你一些动物的特征,你能猜出它是什么动物吗?

  1. has hair
  2. has claws
  3. sharp teeth
  4. forward pointing eyes
  5. eating meat
  6. got spots
  7. very fast

bingo,答案就是猎豹啦。

我们的整个推理过程就如下图所示:

上述图就又是一个 “目标树(Goal Tree)”,这就是一种基于规则的专家系统。

而基于规则的专家系统可以分为:

  1. 前向链专家系统(Forward-Chain Rule-Based Expert System)
  2. 后向链专家系统(Backward-Chain Rule-Based Expert System)

而我们这个识别动物的程序是 前向链专家系统(from the facts we give it to the conclusion up on the right),即从已知事实推出结论。

那什么是后向链呢?还是以这个例子为例,如果我给你面前摆了一个动物,我问你这个动物是猎豹吗?你首先会去确认:它是哺乳动物吗,看看有没有毛发?是肉食动物吗,看看有没有尖牙利爪?再看看身上是否有斑点?是否移动敏捷?如果符合则这是猎豹。

即我们的思考方式就如下图一样发生了改变(我将上图进行了镜像反转,不要在意图上文字的错误,主要是看思维方式发生了改变:这次我们是假设动物为猎豹,从而推导出去一些事情)

这里是先假设是这个动物是猎豹,往回利用之前的规则去验证,就是后向链专家系统(what I am going to do is work backward from a hypothesis)

【Tips】
不论是向前还是向后,专家系统都是 演绎系统,Deduction System (working with facts to produce new facts)

第三个例子:杂货店装袋的例子

这个例子主要是用来讲述 如何获取专业规则(知识工程中的三大法则) 。

如果说你是一个专业的装袋员,当你给顾客装袋时,你的规则是什么?大的重的放底部,小的轻的放顶部;容易被压坏的不能放底部;干的湿的要分开等等。

那么我们怎么知道这些规则的?

  1. 通过观察个案,获得规则。
  2. 考虑看起来相同,但实际处理方式有所不同的东西。比如普通酒水和冰冻的酒水就不能用相同的方式处理,因为冰冻的酒水会弄湿纸袋子和其他物品。
  3. 根据以上的规则建立一个系统,观察它何时出问题,出现问题的原因肯定是因为缺少了某一条规则,这时你再添加进去。

最后老师留了一个问题:从我们今天的例子我们可以得知所谓智能专家系统其实只是建立在规则上的加了修饰的系统,它基于规则,但是并不代表它理解这条规则,就比如最后一个例子中程序知道薯片不能放到袋子最底部,也许它还知道因为这样薯片容易被压坏,但它是否知道薯片为什么不能被压呢?也就是说它并没有常识,那么规则和常识之间又是什么关系呢?

《麻省理工学院公开课:人工智能》笔记三