为什么Lisp用于AI?

时间:2020-03-06 14:41:38  来源:igfitidea点击:

我一直在学习Lisp,以扩大我的视野,因为我听说它已在AI编程中使用。在进行了一些探索之后,我还没有找到AI实例或者任何其他使它更倾向于AI的语言。

Lisp过去是因为可用而使用过,还是我只是想缺少一些东西?

解决方案

我猜一个很大的原因是列表作为基本数据结构的灵活性。

当时,能够将它们变成各种复合对象,以及诸如消息传递和多态性等新事物,使其成为首选的语言。不是专门针对AI,而是针对大型,复杂的任务。特别是当他们尝试概念时。

我的猜测一直是,作为一种功能语言,它无法区分代码和数据。包括函数定义和函数调用在内的所有内容都可以视为列表,并且可以像其他任何数据一样进行修改。

因此,可以轻松编写自检,自修改的代码。

我认为我们是对的:Lisp是一种方便的工具。这是因为它在程序和数据之间没有太大区别。这使黑客可以非常轻松地操纵功能,就像数据一样。

但是,由于大括号和数据与程序之间的区别,lisp对于人类来说非常难以阅读。今天,我不会将lisp用于任何生产AI代码(甚至可能不用于原型制作),但更希望使用python进行脚本编写。

要考虑的另一件事是与该语言相关的现有库/工具。我无法将Lisp库与python库进行比较,但是我想库和开源现在比以前重要得多。

此答案的灵感来自于Lisp和python之间的以下比较:http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

Lisp WAS在AI中一直使用到1980年代末。然而,在80年代,Common Lisp作为" AI语言"被推销至商业世界。强烈的反对迫使大多数AI程序员使用C ++几年了。如今,原型通常是用一种较年轻的动态语言(Perl,Python,Ruby等)编写的,而成功研究的实现通常是用C或者C ++(有时是Java)实现的。

如果我们对70年代感到好奇...那么,我不在那儿。但是我认为Lisp在AI研究中取得了成功,原因有三点(按重要性排序):

  • Lisp是出色的原型制作工具。这是很长一段时间以来最好的。 Lisp仍然擅长解决我们尚不知道如何解决的问题。该描述完美地描述了AI。
  • Lisp很好地支持符号编程。旧的AI也是象征性的。长期以来,它在这方面也是独一无二的。
  • Lisp非常强大。代码/数据的区别较弱,因此感觉比其他语言更具扩展性,因为函数和宏看起来像内置的东西。

我没有Peter Norvig的旧AI书,但是这应该是学习用Lisp编程AI算法的好方法。

免责声明:我是计算机语言学的研究生。我知道自然语言处理的子领域比其他领域好得多。也许Lisp在其他子领域中使用更多。

一个可能的答案是,人工智能是非常棘手的问题的集合,而Lisp是解决棘手问题的好语言,而不仅仅是人工智能。

至于为什么这样:宏,通用函数和丰富的自省功能可提供简洁的代码,并轻松引入域抽象,这是我们可以使它更强大的一种语言。对于许多不必要的问题,它会产生自己的成本,但对于其他问题,则需要动力来取得进展。

原因之一是,它允许我们使用针对域的特定结构来扩展语言,从而有效地使其成为特定于域的语言。这项技术非常强大,因为它使我们能够推理要解决的问题,而不是对位进行改组。

我记得曾经听说过,Lisp是一种功能性语言,是实现递归算法的绝佳选择。在考虑决策过程(遍历)和最终结果(叶子节点)时,能够追踪一棵树并以自己的方式前进至关重要。

这是在我们学习Lisp的大学的AI课程中告诉我的。

我认为仅从AI角度考虑这是错误的。如果我们问为什么AI被用于AI,而不是为什么它现在不经常使用,那么AI冬季和对通用Lisp的商业影响之类的事情就会让人分心。

无论如何,我认为这是因为大多数AI代码本质上是研究代码。 Lisp是用于探索性编程,用于实现困难算法,用于自我修改和经常修改的代码的出色语言。换句话说,用于研究代码。

今天,我将lisp用于我的一些研究代码(数学,信号处理),因为它比大多数语言更灵活,功能更强大,同时仍比大多数语言生成更高效的代码。通常,我可以获得的性能大约是c ++速度的+ / 2,但是我可以更快地实现,并且处理复杂性要比使用c ++,java,c#花费更多的时间。

但是,这正在偏离主题。我认为AI代码主要是用普通口吻写了一段时间,因为它是一种强大的研究代码方法。它仍然是;但是随着人们对" AI"算法的更好地理解和探索,它们的某些部分变得更容易教授和使用,因此它们以本科生课程中的年度语言出现。从那里开始,这成为一个问题,人们已经知道了什么,可用的库是什么,以及对于大型团体来说什么运作良好。

Lisp之所以用于AI,是因为它支持非常好的使用符号进行计算的软件的实现。符号,符号表达式以及使用它们的计算是Lisp的核心。

用于计算带符号的AI的典型领域是:计算机代数,定理证明,计划系统,诊断,重写系统,知识表示和推理,逻辑语言,机器翻译,专家系统等等。

因此,用Lisp编写这些领域中的许多著名AI应用程序就不足为奇了:

  • Macsyma作为第一个大型计算机代数系统。
  • ACL2作为广泛使用的定理证明者,例如被AMD使用。
  • DART是美军在第一次海湾战争中使用的后勤计划员。据说仅此Lisp应用程序已偿还了当时美国在AI研究上的所有投资。
  • SPIKE,哈勃太空望远镜的计划和调度应用程序。也被其他几种大型望远镜使用。
  • CYC,编写的最大的软件系统之一。人类常识知识领域中的表示和推理。
  • METAL,第一个商业上使用的自然语言翻译系统之一。
  • 美国运通的授权人助理,负责检查信用卡交易。

用Lisp编写的这些领域中有成千上万的应用程序。对于这些而言,非常普遍的是它们需要符号处理方面的特殊功能。在Lisp之上,这些语言实现了在这些域中具有特殊解释器/编译器的特殊语言。 Lisp允许创建符号数据和程序的表示形式,并且可以实现各种机制来操纵这些表达式(数学公式,逻辑公式,计划等)。

(请注意,人工智能中也使用了许多其他通用编程语言。我试图回答为什么特别在Lisp中使用AI。)