Lisp为什么用于AI?[关闭]


184

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

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


5
>…请不要假设Lisp仅适用于动画和图形,>人工智能,生物信息学,B2B和电子商务,数据挖掘,EDA /半导体>应用程序,专家系统,财务,智能代理,知识>管理,机械CAD ,建模和仿真,自然语言>优化,研究,风险分析,计划,电信和Web>编写,仅因为它们是它们碰到的唯一事情>列表。-肯特·皮特曼
阿维(Avi)

2
我不认为Lisp仅对AI有用,我只是想知道为什么将Lisp用于AI。
克里斯蒂安罗莫

我将问题改写为“硬AI需要语言的哪些功能?” 这是一个有效且有用的问题,其结果将是只有Lisp Forth&汇编程序才有能力进行硬AI。
阿尔伯特·范德霍斯特

Answers:


125

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

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

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

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

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


33
Lisp在机器学习/ ILP世界中肯定还活着并处于活跃状态
HasaniH,2009年

13
我曾用C教授过AI的本科课程。我从Norvig的书中获得了AI的研究生课程。C语言的书着重于AI算法和结构。Norvig的书感觉像是:“让我们在学习AI历史的同时学习LISP。” 我认为这完全是浪费时间。
圣哈辛托

7
每个人似乎都想念的一个原因是约翰·麦卡锡(John McCarthy)撰写了Lisp,并且是一位很有影响力的计算机科学家,特别是在AI领域。自然,他的许多工作都是在Lisp中实现的,因此Lisp立足了。
cha0site 2012年

2
Common Lisp从来都不是AI语言,它是为在行业中使用而创建的。为了进行研究,通常使用Scheme。而且永远也不会根据语言的年龄来判断它-它与冷静并不成比例,反之亦然。C很老但很酷,那么为什么Lisp的年龄很重要?
卢卡·拉米什维利

1
我不认为Lisp WAS一直用于AI直到1980年代末。在2016年,麻省理工学院在AI领域仍然是一个相当知名的机构。麻省理工学院本科机器人课程的推荐教科书是Artificial Intelligence by Patrick Henry Winston。到第二版时,该书的编程章节又分支成自己的同步书籍Lisp。顾名思义,编程完全在中Lisppeople.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R

61

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

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

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

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

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

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


10
是的,从历史上看,人工智能比符号计算更重要。80年代的“ AI冬季 ”可能更多是象征性 AI 的危机-那时,人们对亚符号方法(神经网络,机器学习等)的兴趣重新兴起。Lisp的实现通常在数值计算方面非常薄弱。我不知道他们在这方面是否有所改善。
MaD70

2
@ MaD70:80年代的AI冬季通常是关于AI的。军方停止了很多资金投入,而AI在商业市场上大多失败了。甚至当时存在的神经网络资料。如果有人将AI视为“新软件开发方法”(使用规则,逻辑,神经网络,垃圾收集等),那也将失败。今天,其中很多甚至没有得到广泛使用/喜欢。
Rainer Joswig 2010年

我当时和回顾的印象是不同的:我清楚地记得在80年代后半叶,对研究和市场(甚至有专门的神经处理器)的兴趣都在亚符号化方法中重新兴起。在数十年的排斥之后,在90年代初(请参阅我的回答,其中我提到了明斯基和帕珀特对感知器的批评的影响:stackoverflow.com/questions/683124/neural-networks-obsolete/…)。
MaD70

1
IMO,由于当时的硬件(功能不够强大/不够便宜),而且符号与次符号阵营之间如此严酷的对比使得任何协同作用都无法实现,因此符号AI失败了。Wrt“今天甚至被广泛使用/喜欢”:我怀疑(在两个阵营中)在AI中开发的某些技术的使用远远超出了人们的想象(幸运的是,没有更多的炒作)。
MaD70

只是一个例子:在90年代末,我的一些熟人问我关于纺织领域质量控制项目的可行性。在我的头顶上,我提到了神经网络是解决此类歧视问题(基本上是图像分类)的一种有前途的方法。仅凭这样的建议,他们在几周内找到了一个已经使用神经网络开发的软件,并且获得了发行权-比着手进行涉及研发的项目更为明智。
MaD70

22

原因之一是,它允许您使用针对您的域的特定结构来扩展语言,从而有效地使其成为特定于域的语言。这种技术是非常强大的,因为它可以让你的原因有关的问题你要解决,而不是约洗牌位。


您可以提供或链接到此示例吗?
DuckMaestro '10

9
@DuckMaestro:在本周大约30分钟的宏工作中,我实现了SQL Select的临时bug版本。它是这样的:(查询SELECT * FROM数据集WHERE expr)。
保罗·内森

嵌入在Lisp语言的代数求解youtube.com/...嵌入电路语言Lisp中youtube.com/...嵌入到Lisp语言Lisp的youtube.com/...嵌入Prolog的Lisp的-只是看全系列
aoeu256


12

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

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


10
那不是因为它起作用。Prolog具有相同的属性-一切都是“术语”,术语既是数据又是代码。(Prolog是一种逻辑编程语言,并且在AI中也使用了很多)
Hugh Allen

这样做的花哨术语叫做同像性- en.wikipedia.org/wiki/Homoiconicity
莫滕延森

9

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

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


7

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

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

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

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


6

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

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


4

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

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

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

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


2
我个人觉得Lisp比大多数语言都更易于阅读,而且我是几周前才学会的。与大多数语言相比,Python尤其干净,是的,但是如果将lisp与C ++之类的东西进行比较,它会更加整洁且易于阅读。无论如何,以我的经验。
Zeusoflightning125

4

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

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


1
Lisp中的宏功能比其他任何功能都强大,它使您仅可以在50行Lisp代码中实现OOP,而REPL使您可以在程序仍在运行时对其进行编辑...只有Lisp可以轻松地编辑其自己的源代码...
aoeu256

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.