为什么Lisp对AI如此好用?


Answers:


30

首先,我想你指的Common Lisp(这是一个标准的语言规范,看到它的HyperSpec)与高效的实现(点菜SBCL)。但是最近一些Scheme的实现也可能是有意义的(与BiglooChicken / Scheme之类的良好实现)。Common Lisp和Scheme(甚至Clojure)都来自同一个Lisp家族。作为驱动大数据或机器学习应用程序的脚本语言,Guile可能 Python的有用替代品,并且也是Lisp的方言。顺便说一句,我建议阅读SICP,这是使用Scheme进行编程的绝佳介绍。

然后,Common Lisp(以及Lisp的其他方言)非常适合象征性AI。但是,许多最近的机器学习库都是用更主流的语言编码的,例如TensorFlow是用C ++和Python编码的。深度学习库大多使用C ++或Python或C进行编码(有时使用OpenCL或Cuda进行GPU计算)。

Common Lisp对于符号人工智能非常有用,因为:

  • 它有很好的实现(例如SBCL,它编译给REPL的每个表达式来机器代码)。
  • 它是同质的,因此很容易将程序作为数据处理,特别是易于生成[子]程序,即使用元编程技术。
  • 它具有读评估打印循环以简化交互式编程
  • 它提供了一个非常强大的机制(实际上,您可以为问题定义自己的特定于域的子语言),比C之类的其他语言要强大得多。
  • 它要求一个垃圾收集器(甚至代码也可以被垃圾收集)
  • 它提供了许多容器抽象数据类型,并且可以轻松处理符号。
  • 您可以通过适当的注释对高级(动态类型)和低级(或多或少的初始类型)代码进行编码。

但是,大多数机器学习和神经网络库不是用CL编码的。请注意,神经网络和深度学习都不在符号人工智能领域。另请参阅此问题

CL中已经开发了几种符号AI系统,例如EuriskoCyC(实际上是在CL之上构建的某些DSL中)。

请注意,编程语言可能不是很重要。在“ 人工智能”研究主题中,一些人致力于AI系统的构想,该系统将生成自己的所有代码(因此正在使用自举方法进行设计)。然后,由这样的系统生成的代码甚至可以用低级编程语言(如C)生成。请参阅J.Pitrat的博客


1
我想在这里补充一点,tensorflow和theano是基于计算图的,它实际上是符号编程,但是在命令式语言中。
Maxim

@Basile:请分享Common Lisp的教程或参考
维德·普拉卡什

@VedPrakash:我想通过电子邮件与您联系。我的是basile@starynkevitch.net; 我太老了,不能使用推特
Basile Starynkevitch

15

David Nolen(ClojureClojureScript的撰稿人,Core Logic的创建者,miniKanren的创始人)在一次名为LISP的演讲中说,由于功能过于强大,他说LISP时代比其他编程语言要早几十年。原因很多导致该语言无法保持其名称。

文章的亮点SOM的关键点为何LISP是AI好

  • 轻松定义新语言并处理复杂信息。
  • 定义和处理程序以及数据的完全灵活性。
  • 速度快,程序简洁明了,底层细节少。
  • 良好的编程环境(调试,增量编译器,编辑器)。

我在该领域的大多数朋友通常将Matlab用于人工神经网络和机器学习。尽管它隐藏了底层细节。如果您只是在寻找结果,而不是在寻找结果,那么Matlab将会很好。但是,如果您想学习甚至低级的详细资料,那么我建议您至少要经历一次LISP。
如果您了解各种AI算法和技术,那么语言可能并不那么重要。我建议您阅读“人工智能:一种现代方法(Stuard J. Russell和Peter Norvig撰写)”。我目前正在阅读这本书,这是一本非常好的书。


4

AI是一个广阔的领域,远远超出了机器学习,深度学习,神经网络等领域。在这些领域中,编程语言一点都不重要(速度问题除外),因此LISP肯定不会成为话题。

例如,在搜索或AI计划中,诸如C ++和Java之类的标准语言通常是首选,因为它们速度很快(特别是C ++),而且由于许多软件项目(如计划系统)都是开源的,因此使用标准语言非常重要(或至少是明智的选择,以免有人对您的反馈或扩展表示赞赏。我只知道一个用LISP编写的计划程序。只是为了给人一种选择编程语言在AI领域中的作用的印象,我将列出一些最著名,因此也是最重要的计划者:

Fast-Downward:
说明:可能最著名的古典计划系统
URL: http : //www.fast-downward.org/
语言: C ++,部件(预处理)在Python中

FF:
说明:连同快速向下经典规划系统大家都知道
网址: https://fai.cs.uni-saarland.de/hoffmann/ff.html
语言: Ç

VHPOP:
描述:最著名的偏序因果链接(POCL)计划系统之一
URL: http : //www.tempastic.org/vhpop/
语言: C ++

SHOP和SHOP2:
说明:最著名的HTN(分层)计划系统
URL: https : //www.cs.umd.edu/projects/shop/
语言: //www.cs.umd.edu/projects/shop/ SHOP和SHOP2有两种版本。原始版本已用LISP编写。较新的版本(称为JSHOP和JSHOP2)已用Java编写。Pyshop是另一个用Python编写的SHOP变体。

PANDA:
说明:另一个著名的HTN(和混合)规划系统
URL: http : //www.uni-ulm.de/en/in/ki/research/software/panda/panda-planning-system/
语言:有计划器的版本不同:PANDA1和PANDA2用Java编写,PANDA3主要用Java编写,而某些部分在Scala中。

这些只是我想到的一些最著名的计划系统。可以从每两年举行一次的国际计划竞赛(IPC,http://www.icaps-conference.org/index.php/Main/Competitions)中检索到更多最新的竞赛。竞争者的规划人员代码已公开开源(几年)。

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.