我之前从计算机科学家和人工智能领域的研究人员那里听说 Lisp 是一种很好的人工智能研究和开发语言。
- 随着神经网络和深度学习的普及,这仍然适用吗?
- 他们这样做的理由是什么?
- 当前的深度学习系统目前内置了哪些语言?
我之前从计算机科学家和人工智能领域的研究人员那里听说 Lisp 是一种很好的人工智能研究和开发语言。
首先,我猜你的意思是Common Lisp(这是一个标准的语言规范,请参阅它的HyperSpec)和高效的实现(à la SBCL)。但是最近一些Scheme的实现也可能是相关的(有很好的实现,例如Bigloo或Chicken/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 非常适合符号人工智能,因为:
然而,大多数机器学习和神经网络库都不是用 CL 编码的。请注意,神经网络和深度学习都不属于符号人工智能领域。另请参阅此问题。
在 CL 中开发了几个符号 AI 系统,如Eurisko或CyC(实际上,在一些构建在 CL 之上的 DSL 中)。
请注意,编程语言可能不是很重要。在通用人工智能研究主题中,一些人研究了一个人工智能系统的想法,该系统将生成所有自己的代码(因此使用自举方法进行设计)。然后,这种系统生成的代码甚至可以用 C 等低级编程语言生成。请参阅J.Pitrat 的博客,该博客启发了RefPerSys项目。
David Nolen(Clojure和ClojureScript的贡献者;Core Logic 的创建者,miniKanren 的一个端口)在一个名为LISP的演讲中表示,在他的时代,LISP 比其他编程语言领先数十年。该语言无法保持其最初声誉的原因有很多。
这篇文章重点介绍了为什么 LISP 对 AI 有好处的一些关键点
我在这个领域的大多数朋友通常使用 Matlab 进行人工神经网络和机器学习。但它隐藏了低级细节。如果您只在寻找结果而不是如何到达那里,那么 Matlab 会很好。但是如果你想学习低级的详细知识,那么我建议你至少学习一次 LISP。
如果您了解各种 AI 算法和技术,该语言可能并不那么重要。我建议您阅读“人工智能:一种现代方法(Stuard J. Russell 和 Peter Norvig 着)。我目前正在阅读这本书,这是一本非常好的书。
AI 是一个广泛的领域,远远超出了机器学习、深度学习、神经网络等。在其中一些领域,编程语言根本不重要(除了速度问题),所以 LISP 肯定不会是那里的话题.
例如,在搜索或 AI 规划中,标准语言(如 C++ 和 Java)通常是首选,因为它们速度很快(尤其是 C++),并且因为许多软件项目(如规划系统)都是开源的,所以使用标准语言是重要的(或者至少在有人欣赏反馈或扩展的情况下是明智的)。
我只知道一个用 LISP 编写的计划器。只是为了对选择编程语言在这个 AI 领域中的作用留下一些印象,我将列出一些最知名的,因此也是最重要的规划者:
这可能是最著名的经典规划系统,它是用 C++ 编写的,部分部分(预处理)是用 Python 编写的。
与 Fast-Downward 一起,这是众所周知的经典计划系统。它是用 C 编写的。
这是最著名的偏序因果链接 (POCL) 规划系统之一。它是用 C++ 编写的。
这是最著名的 HTN(分层)规划系统。有两个版本:SHOP 和 SHOP2。原始版本是用 LISP 编写的。较新的版本(称为 JSHOP 和 JSHOP2)是用 Java 编写的。Pyshop 是用 Python 编写的进一步的 SHOP 变体。
这是另一个著名的 HTN(和混合)规划系统。规划器有不同版本的 PANDA1 和 PANDA2,它们是用 Java 编写的。PANDA3 主要是用 Java 编写的,有些部分是用 Scala 编写的。
这些只是我想到的一些最著名的规划系统。可以从每两年举行一次的国际规划竞赛 (IPC)中检索到最近的竞赛。竞争的规划者的代码是开源的(几年)。