在人工智能领域,推理引擎是将逻辑规则应用于知识库以推断新信息的系统的一个组成部分。第一推理机是专家系统(expert systems)的组成部分。典型的专家系统由知识库(knowledge base )和推理引擎组成。知识库存储了关于世界的事实。推理引擎将逻辑规则应用到知识库中,推导出新知识。这个过程将迭代,因为知识库中的每个新事实可以触发推理引擎中的附加规则。推理引擎主要工作在两种模式中的:正向链( forward chaining)和反向链(Backward chaining)。正向链从已知的事实开始并断言新的事实。反向链接开始于目标,并且向后工作以确定哪些事实必须被断言,来实现目标。
Architecture 结构
推理引擎使用的逻辑通常表示为IF-THEN规则。这些规则的一般格式是:
IF <logical expression> THEN <logical expression>
IF <逻辑表达式>THEN <逻辑表达式>
在开发专家系统和推理引擎之前,人工智能研究人员将注意力集中在更强大的定理证明环境,它提供了更完整的一阶逻辑实现。例如,包含通用量化(对于所有X,语句都是true)和存在性量化(存在一些X,语句是true)的一般语句。研究人员发现,这些定理证明环境的力量也是它们的缺点。创建逻辑表达式太容易了,可能需要一些时间甚至无限的时间来终止。例如,在通用量化中,在一个无穷集合(如所有自然数的集合)上进行语句是很常见的。这样的陈述是完全合理的,甚至在数学证明中也是需要的,但是当包含在计算机上执行的自动定理证明器中时,可能导致计算机陷入无限循环。关注IF-THEN语句(逻辑学家称之为Modus Ponens)仍然为开发人员提供了非常强大的表示逻辑的通用机制,但是该机制可以有效地用于计算资源。此外,一些心理学研究表明人类在存储复杂知识时也倾向于IF-THEN表示。
在介绍性逻辑书中经常用到的一个简单例子是“如果你是人,那么你就是凡人”,"If you are human then you are mortal"。这可以用伪代码表示为:
Rule1: Human(x) => Mortal(x)
在正向链接中,推理引擎将在知识库中找到与Human(x) 匹配的任何事实,并且对于找到的每个事实,推理机将向知识库中添加新的信息 Mortal(x) 。所以如果它发现一个叫做Socrates的物体是人类,它就会推断Socrates是Mortal。
在反向链接中,系统将被赋予一个目标,例如回答问题Socrates 是否是Mortal?它将通过知识库搜索并确定Socrates是否是Human人类,如果这样的话,他也将是Mortal凡人。然而,在反向链接中,一种常见的技术是将推理引擎与用户界面集成。这种方式不是简单地自动化,该系统现在可以是交互式的。在这个小小的例子中,如果系统被赋予了回答Socrates 是否是凡人的问题目标,并且系统还不知道他是否是人类,那么它将生成一个窗口,向用户询问“Socrates 是人类吗?”然后相应地使用这些信息。
这种将推理引擎与用户界面集成的创新导致了专家系统的第二个早期进步:解释能力。作为规则而不是代码的知识的明确表示能够对用户生成解释。解释都是实时的,并且具有事实支撑。如果系统问用户“苏格拉底是人类吗?”("Is Socrates Human?" ),用户可能会奇怪她为什么会被问到这个问题,系统会用规则链来解释为什么它想确定那个知识:即,它需要确定苏格拉底是否是凡人,并且获得这个知识,就要为了确定他是否是人类。起初,这些解释与开发人员在调试任何系统时处理的标准调试术来提问、理解和生成,而非计算机形式化的问题和解释。
推理引擎通过三个循序渐进的步骤循环:匹配规则、选择规则和执行规则。规则的执行常常会导致新的事实或目标被添加到知识库中,从而触发循环的重复。这个循环持续下去,直到没有新的规则可以匹配。
- 在第一步匹配规则中,推理引擎查找由知识库的当前内容触发的所有规则。在向前链中,引擎寻找与知识库中的一些事实相匹配的规则。在反向链接中,引擎寻找能够满足当前目标之一的前因。
- 在第二步选择规则中,推理引擎对匹配的各种规则进行优先级排序,以确定执行这些规则的顺序。
- 在最后一步,执行规则,引擎按照步骤2中确定的顺序执行每个匹配的规则,然后再次迭代回到步骤1。循环持续下去,直到没有新的规则匹配。
推理策略
- 正向推理(数据驱动,其基本思想是:从问题已有的事实(初始证据)出发,正向使用规则,当规则的条件部分与已有的事实匹配时,就把该规则作为可用规则放入候选规则队列中,然后通过冲突消解,在候选队列中选择一条规则作为启用规则进行推理,并将其结论放入数据库中,作为下一步推理时的证据。如此重复这个过程,直到再无可用规则可被选用或者求得了所要求的解为止。)
- 反向推理(目标驱动,它是首先提出某个假设,然后寻找支持该假设的证据,若所需的证据都能找到,说明原假设是正确的;若无论如何都找不到所需要的证据,则说明原假设不成立,此时需要另做新的假设。)
- 双向推理(正向推理与逆向推理同时进行, 且在推理过程中的某一步骤上 “碰头” 的一种推理)
【出处:https://en.wikipedia.org/wiki/Inference_engine 】
2. 发展历史
描述
早期的推理引擎主要集中于前向链接。这些系统通常是用LISP编程语言实现的。1958年,Lisp 是John McCarthy在麻省理工学院发明的。LISP是一个早期的人工智能研究的平台,由于其强大操作符号的能力。此外,作为解释语言,它提供了适合于调试复杂程序的开发环境。这些好处的一个必然结果是,LISP程序往往比当时的编译语言(如C)更慢,更不健壮。一个典型的方法就是建立一个专家系统并且将其他专家系统的推荐引擎打包。例如,MYCIN是一个早期的医学诊断专家系统,而EMYCIN是一个从MYCIN打包出来的推理引擎,可供其他研究人员使用。
随着专家系统从研究原型向系统的转变,人们更加关注速度和鲁棒性等问题。OPS(据称是“Official Production System”的缩写)系列是由Charles Forgy在卡内基梅隆大学于20世纪70年代末开发的。 Allen Newell的人工智能研究小组已经在生产系统上工作了一段时间,但Forgy他的Rete算法的成功应用,特别有效,足以扩展到涉及数百或数千条规则的更大问题。OPS5是最早也是最流行的前向链接引擎之一,它使用Rete算法来优化规则触发的效率。
另一种非常流行的技术是Prolog逻辑编程语言。Prolog主要关注反向链接,并且还具有各种商业版本和优化,以提高效率和鲁棒性。Prolog源于一阶逻辑,一种形式逻辑,与许多其他编程语言不同,Prolog主要用作声明性编程语言:程序逻辑用关系表示,表示为事实和规则。 通过对这些关系运行查询来启动计算。这种语言最初是由法国 Marseille的Alain Colmerauer的一个小组在20世纪70年代初构思出来的,第一个Prolog系统是由Colmerauer于1972年由Philippe Roussel开发的。
【出处:https://en.wikipedia.org/wiki/Inference_engine 】
2001年,Drools问世,基于线性蛮力搜索。Drools是一个业务逻辑集成平台,基于JAVA和RATE算法的产生式规则引擎实现,是Red Hat旗下的开源产品。在2.0版本后,又基于Rate算法进行了重写,提高了Drools的性能,规则文件主要以XML为主。在3.0版本,引入了.drl文件格式,它是一种领域特定语言(DSL)专门针对规则编写。在5.0版本,引入了Drools Funsion/Flow rule等重要功能模块。
NVIDIA TensorRT是一种高性能神经网络推理(Inference)引擎,用于在生产环境中部署深度学习应用程序,应用有图像分类、分割和目标检测等,可提供最大的推理吞吐量和效率。TensorRT 的性能特点,原理结构和使用方法等内容。
由于专家系统引起了商业界各个公司的浓厚兴趣,许多专家系统都是由杰出的人工智能研究人员创立或指导的,他们创建了产品化的推理引擎版本。例如,智能化最初是由Edward Feigenbaum引导的。这些推理引擎产品通常也是在LISP中开发的。然而,对更经济实惠和商业上可行的平台的需求最终使个人计算机平台非常流行。1983年,Hayes-Roth, F.撰写了《Building expert system》。2016年,, Pu, J., Pedram, A., Horowitz, M. A., & Dally, W. J. 提出《efficient inference engine on compressed deep neural network》使用深度神经网络来有效的实现推理引擎,收到了广泛的关注。
主要事件
年份 | 事件 | 相关论文 |
1960 | John McCarthy在麻省理工学院发明的Lisp | McCarthy, J. (1960). Recursive functions of symbolic expressions and their computation by machine, Part I. Communications of the ACM, 3(4), 184-195. |
1983 | Hayes-Roth, F., Waterman, D. A.提出如何建立一个专家系统 | Hayes-Roth, F., Waterman, D. A., & Lenat, D. B. (1983). Building expert system. |
2003 | Haarslev, V., & Möller, R.对语义信息的WEB建立推理引擎 | Haarslev, V., & Möller, R. (2003, October). Racer: A Core Inference Engine for the Semantic Web. In EON (Vol. 87). |
2016 | Han, S., Liu, X., Mao, H.,使用深度神经网络来有效的实现推理引擎 | Han, S., Liu, X., Mao, H., Pu, J., Pedram, A., Horowitz, M. A., & Dally, W. J. (2016, June). EIE: efficient inference engine on compressed deep neural network. In Computer Architecture (ISCA), 2016 ACM/IEEE 43rd Annual International Symposium on (pp. 243-254). IEEE. |
3. 发展分析
瓶颈
优点:推理机的程序与知识库的具体内容无关,所以对知识库的修改不需要改动推理机。
缺点:纯粹的形式推理会降低问题求解的效率。因此一般采用推理机和知识库相结合的方法。
未来发展方向
bengio才采访中提到框架:基于深度学习的感知和符号主义的推理机来连接自然语言,连接符号主义
「下雨了,人们撑起了伞。」是单独存在的语言,寥寥数字里有两个明确的要素:「是否下雨」和「是否撑伞」,你可以很容易地把它们从句子里摘出来,然后用它们建立规则进行推理。但是这种推理是与真实世界隔离的。
上面这幅照片则是单独存在的表征,虽然用一团像素表达了和语言同样的意思,可是我们无法把代表「下雨」和「撑伞」的像素挑出来,更无法推理说一些像素是另一些像素的原因。我们能做的只是以标签的形式告诉机器,这张图里有一个很重要的概念,叫做「下雨」,而这样形式习得的表征也无法完成推理任务。
「意识先验是将联结主义与符号主义结合的粘合剂。符号主义 AI 向联结主义表征 RNN 表达诉求:我想要完成『下雨的时候人们会打伞。』这样的推理,请给我合适的变量,而表征 RNN 需要自己发现,『下雨』是一个能够从图像中提取出的、帮助推理的特征,然后学习它。」
【来源: https://zhuanlan.zhihu.com/p/51138031】
Contributor: Ruiying Cai