为什么 Lisp 对 AI 来说是一种如此出色的语言?

人工智能 神经网络 机器学习 深度学习 研究 编程语言
2021-11-02 19:38:36

我之前从计算机科学家和人工智能领域的研究人员那里听说 Lisp 是一种很好的人工智能研究和开发语言。

  • 随着神经网络和深度学习的普及,这仍然适用吗?
  • 他们这样做的理由是什么?
  • 当前的深度学习系统目前内置了哪些语言?
3个回答

首先,我猜你的意思是Common Lisp(这是一个标准的语言规范,请参阅它的HyperSpec)和高效的实现(à la 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的每个表达式)
  • 它是形的,因此很容易将程序作为数据处理,特别是容易生成[子]程序,即使用元编程技术。
  • 它有一个Read-Eval-Print Loop来简化交互式编程
  • 它提供了一个非常强大的机制(本质上,您可以为您的问题定义自己的领域特定子语言),比其他语言(如 C)强大得多。
  • 它要求垃圾收集器(甚至代码也可以被垃圾收集)
  • 它提供了许多容器抽象数据类型,并且可以轻松处理符号。
  • 您可以通过适当的注释编写高级(动态类型)和低级(或多或少开始类型)代码。

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

在 CL 中开发了几个符号 AI 系统,如EuriskoCyC(实际上,在一些构建在 CL 之上的 DSL 中)。

请注意,编程语言可能不是很重要。通用人工智能研究主题中,一些人研究了一个人工智能系统的想法,该系统将生成所有自己的代码(因此使用自举方法进行设计)。然后,这种系统生成的代码甚至可以用 C 等低级编程语言生成。请参阅J.Pitrat 的博客,该博客启发了RefPerSys项目。

David Nolen(ClojureClojureScript的贡献者;Core Logic 的创建者,miniKanren 的一个端口)在一个名为LISP的演讲中表示,在他的时代,LISP 比其他编程语言领先数十年。该语言无法保持其最初声誉的原因有很多。

这篇文章重点介绍了为什么 LISP 对 AI 有好处的一些关键点

  • 易于定义新语言和操作复杂信息。
  • 在定义和操作程序以及数据方面具有完全的灵活性。
  • 快速,因为程序简洁且细节低。
  • 良好的编程环境(调试、增量编译器、编辑器)。

我在这个领域的大多数朋友通常使用 Matlab 进行人工神经网络和机器学习。但它隐藏了低级细节。如果您只在寻找结果而不是如何到达那里,那么 Matlab 会很好。但是如果你想学习低级的详细知识,那么我建议你至少学习一次 LISP。

如果您了解各种 AI 算法和技术,该语言可能并不那么重要。我建议您阅读“人工智能:一种现代方法(Stuard J. Russell 和 Peter Norvig 着)。我目前正在阅读这本书,这是一本非常好的书。

AI是一个广阔的领域

AI 是一个广泛的领域,远远超出了机器学习、深度学习、神经网络等。在其中一些领域,编程语言根本不重要(除了速度问题),所以 LISP 肯定不会是那里的话题.

规划系统

例如,在搜索或 AI 规划中,标准语言(如 C++ 和 Java)通常是首选,因为它们速度很快(尤其是 C++),并且因为许多软件项目(如规划系统)都是开源的,所以使用标准语言是重要的(或者至少在有人欣赏反馈或扩展的情况下是明智的)。

我只知道一个用 LISP 编写的计划器。只是为了对选择编程语言在这个 AI 领域中的作用留下一些印象,我将列出一些最知名的,因此也是最重要的规划者:

快降

这可能是最著名的经典规划系统,它是用 C++ 编写的,部分部分(预处理)是用 Python 编写的。

快进

与 Fast-Downward 一起,这是众所周知的经典计划系统。它是用 C 编写的。

VHPOP

这是最著名的偏序因果链接 (POCL) 规划系统之一。它是用 C++ 编写的。

商店和商店2

这是最著名的 HTN(分层)规划系统。有两个版本:SHOP 和 SHOP2。原始版本是用 LISP 编写的。较新的版本(称为 JSHOP 和 JSHOP2)是用 Java 编写的。Pyshop 是用 Python 编写的进一步的 SHOP 变体。

熊猫

这是另一个著名的 HTN(和混合)规划系统。规划器有不同版本的 PANDA1 和 PANDA2,它们是用 Java 编写的。PANDA3 主要是用 Java 编写的,有些部分是用 Scala 编写的。

这些只是我想到的一些最著名的规划系统。可以从每两年举行一次的国际规划竞赛 (IPC)中检索到最近的竞赛。竞争的规划者的代码是开源的(几年)。