2.5 通过推理来行动
之前的部分假定Agent有着很多在各个时段保留下来的信念状态。对于一个智能Agent,信念状态可以非常复杂,甚至可用占用单独一层。
学习和构建智能Agent的经验表明智能Agent需要某些信念状态的内部表示方法。知识指的是领域内的信息,可用于解决该领域内的问题。知识指的是用于特定情境、领域的一般性知识。因此关于特定状态更常使用知识而非信念。基于知识的系统是可以使用领域内知识来动作或者解决问题的系统。
哲学家们将知识定义为正确的、经过证实的信念。人工智能研究者们则更倾向于融合两种概念。知识更倾向于已被证实的一般性信息。而信念则是可以被新的信息修正的信息。一般信念都会伴随着可信度和如何交互的模型。在人工智能系统里,知识不必是真的,且只在有用时才去证实。这点区分经常会变得模糊不清,因为经常会有Agent的一个模型将某种信息看做真,而另一个模型则认为这些信息需要继续修正。
图2-9是图1-3的精练表示,针对的是基于知识的Agent。知识库是离线建立的,但被用于在线产生动作。Agent的这种分解与Agent的分层观点是正交设计;智能Agent既需要分层组织又需要知识库。
在线是指,当一个Agent动作时,它会使用自己的知识库、对世界的观察、目标和能力来共同选择去做什么及更新知识库。知识库是长期记忆,这里存储着将来动作时会用到的知60识。这些知识来自于先验知识以及从数据和先前经验所学的结合。信念状态则是Agent的短期记忆,它保留着步长之间所需要的当前环境模型。一般性知识与专门知识之间并不总是存在明显的界限;比如,一个户外的传送机器人可以学习特定城市的一般性知识。从推理引擎到知识库是存在反馈的,因为在环境中观察和行动可以提供更多的可供学习的数据。
离线,指的是在Agent有所动作之前,它能构建一个对其在线行动时有用的知识库。离线计算的任务是使得在线计算更加有效、高效。知识库是通过先验知识和先前经验得来的数据(既可是它自己的先前经验,也可是别人给予的数据)来构建。机器学习领域中的研究者们已经考虑过有很多数据和仅一点先验知识的情况。而专家系统中研究了有很多先验知识和很少甚至没有可用于学习的数据的情况。然而,对于几乎所有非平凡领域,Agent必须使用所有可用的信息,因此既需要丰富的先验知识又需要大量数据。
目标和能力是离线赋予、在线赋予还是都赋予,主要取决于Agent。举个例子,一个传送Agent可能有保证实验室清洁并不损坏自己或者其他物品的一般性目标,但是它也可在运行中获取其他传送目标。如果知识库被调整为适合特定目标和能力,那么在线计算会变得更加高效。然而,当不能获知运行中的全部目标和能力时,这一般来说不大可能。
2.5.1 设计时间与离线计算
在线计算需要的知识库可以在设计时便初始化,然后由Agent离线扩张。
本体是用于信息系统的符号含义的一种描述。它指定了建模什么及系统中使用的词汇。最简单的情况,如果Agent正在使用完全观察的明确的基于状态的表述,那么本体就表示环境和状态间的映射方式。如果没有这个映射,Agent也许知道其在状态57,但是如果没有本体,对于其他Agent或者人来说,这个信息毫无意义。在其他情况下,本体同样能定义特征或者个体和关系。它被用于将未加工的感知转换为对于Agent有意义的信息,或者用于从人类或者其他知识源处获得有意义的输入。
本体是由社区构建的,一般独立于特定的知识库和特别的应用。正是由于此共享特性61才允许使用多种来源(视觉、人类、数据库)的数据进行有效的沟通和内部操作。个体和关系情况的本体在13.3节讨论。
本体逻辑上应早于数据和先验知识:我们需要一个本体来获取数据或者知识。没有本体的话,数据仅是比特串。没有本体,人们不知道应输入什么;正是本体给数据赋予了含义。一般来说本体会在系统开发时逐步完善。
本体会指定一个或多个抽象层。如果本体发生改变,那数据必须改变。例如,机器人应该有关于障碍物的本体(如任何实体对象都是应该避开的障碍物)。如果再被扩展到可区分的人类、椅子、桌子、咖啡杯或者其他类似东西,那么就需要更多的关于环境的不同数据。
知识库是离线地通过结合专家知识和数据来构建。其通常在Agent了解将活动的环境前就已构建。在线计算的部分通常包括保存并调整知识库。62
离线时,涉及基于知识系统的有三个主要任务:
- 软件工程师构建推理引擎和用户接口。他们通常并不知道知识库的内容。在使用他们所实现的系统方面,他们并不需要很专业;然而,在编程语言,如Java、Lisp、Prolog的使用方面,而非他们自己所设计系统的知识表示语言方面,他们必须是专家。
- 领域专家是那些在某一领域有适当先验知识的人。他们了解相关领域,但是通常来说他们对于一些可能会遇到的特殊情况一无所知。例如,一个药学领域的专家知道疾病、症状及相应关联,但是可能却不知道某个特定病人的症状或者疾病。一个传送机器人领域的专家也许知道必须认识的个体种类、电池仪表的意义与各种动作的耗费量。领域专家通常并不知道Agent会遭遇的环境的详细信息,比如,对于诊断助手来说的病人的详细信息,或者机器人所在房间的详细信息。
领域专家通常并不清楚人工智能系统的内部工作过程。一般他们仅有关于知识的语义观点且并不关心推理引擎在使用何种算法。系统应以领域的形式与他们进行交互,而非计算步骤的形式。例如,若一个知识库采用显示答案产生轨迹的方式,然后寄希望于领域专家来修正此知识库是不明智的。因此,并不需要提供给领域专家修正工具来跟踪程序的执行。 - 知识工程师在同领域专家协商的基础上设计、构建和修正知识库。他们了解系统的详细信息且通过领域专家了解领域内的详细信息。但是他们对于具体案例毫不了解。他们应该知道有用的推理技术和完整系统的工作流程。
同样一个人可以完成多个任务:一个了解人工智能的领域专家可以作为知识工程师;一个知识工程师可以作为编写系统的人。一个大的系统可以有许多不同的软件工程师、知识工程师和专家,其中每一个人专门执行系统的一部分。这些人可能甚至不知道他们仅是系统的一部分,他们发布的信息可被任何人使用。
离线时,Agent可以结合专家知识和数据。在这个阶段,系统可以被测试和修正。Agent能够计算那些非特殊指定情况。例如,它能编译部分知识库来使得推理更加高效。
2.5.2 在线计算
在线状态时,具体事例的信息开始可用,且Agent需要开始行动。这些信息包括领域的观察信息以及可行动作、偏好和目标的信息。Agent可以从传感器、用户和其他信息源处(如网站)获得信息,但是我们假定它不能从领域专家或者知识工程师处获得信息。
一般来说Agent的离线计算时间要远大于在线计算时间。然而,在线计算时它能更好地利用特定目标和特定的观察。
例如,一个医药诊断系统仅当在线状态时才有特定病人的详细信息。离线状态时,它能获知疾病和症状相关性的信息,并能对知识进行修正和完善。仅当它在线状态时,才能处理特定病人的相关信息。
在线主要包括以下几个任务:
- 用户是一个需要专业知识的人或者有个体案例信息的人。用户通常不是知识库相关领域的专家,所以他们一般并不知道系统需要什么样的信息。因此不可能奢望他们能自主地提供特定案例的信息。这时候就需要一个简单自然的界面,因为用户通常并不知道系统的内部结构。他们一般会根据系统给出的建议做一个相对全面的决定,因此需要对所给的建议给出一个合适的解释。
- 传感器会提供环境的信息。例如,温度计是一个可以提供其所处位置当前温度的传感器。传感器也可以更加复杂,如视觉传感器。在最底层,视觉传感器简单地提供每秒30帧的大小为720480像素的矩阵。而在更高层,视觉系统也许能够回答一些特定问题,如特定特征的位置、某种物品是否存在或者视野中是否存在某些特定的个体。一个麦克风的数组可被用在底层抽象级上,用来提供详细的震动信息。它同样可以被用做高层传感器的组件来检测爆炸,并预测爆炸的类型和位置。
传感器主要分为两种。一种是被动传感器,总是连续的发送信息给Agent。被动传感器包括温度计、相机和麦克风。设计者可以选择传感器的放置位置和方向,但是他们仅能提供Agent信息。而另一种主动传感器则恰恰相反,它可被控制或者可向其咨询信息。主动传感器的例子有很多,如可以回答关于病人的特定信息的医用探针,或者智能辅导系统中的一份给学生的测试。经常会出现一个传感器在底层抽象级上是被动传感器,而在高层抽象级上被看为主动传感器。64例如,相机可被询问房间内是否存在特定人物。为了完成此任务,它必须找出房间内的面孔并找出每个人的不同特征。 - 外部知识源,如一个网站或者数据库,一般能够回答问题并且在受限领域提供答案。Agent可以向一个天气网站询问某一地点的温度,也能向一个航空网站询问指定航班的到达时间。知识源有不同的协议和有效的权衡机制。Agent与外部资源间的接口被称为封装,封装可以互相转换Agent使用的表达信息与外部知识源准备去处理的查询信息。一般来说封装的设计意义在于一个Agent可以向多个知识源询问同一事情。例如,一个Agent也许希望知道飞机的到达时间,可是不同的航线或者飞机场需要不同的协议接口进入以获得此信息。当一个网站或者数据库通用一个共同的本体时,他们就能互相使用信息了,因为相同的符号代表相同的意义。相同符号代表相同事情这也叫做语义互通。当他们使用不同的本体时,那么在本体间必须存在映射关系以便能够实现互通。
而且,任务这样便分开了,尽管完成这些任务的人群之间可能会重叠。例如,领域专家可以作为一个用户来测试和修正系统,每个任务对他们需要的工具来说都有不同的要求。那些用于向用户解释系统如何得出结果的工具,也可以是领域专家用来修正知识的工具。