我知道在处理人工智能问题时,很早就使用了 Lisp 语言。它今天仍然用于重要的工作吗?如果没有,是否有一种新语言已取代其成为当今人工智能工作中最常用的语言?
Lisp 是否仍被用于解决 AI 问题?
总的来说,答案是否定的,但当前的范式很大程度上归功于 LISP。今天最常用的语言是python。
相关答案:
- 堆栈溢出线程解释了为什么 LISP 被认为是 AI 语言:为什么将 Lisp 用于 AI
- 彼得·诺维格(Peter Norvig)的 Quora 回答,他写了一本关于这个主题的流行教科书,目前是谷歌的研究总监:Lisp 真的是人工智能中高度使用的编程语言吗?
LISP 在我们现在所说的函数式编程中开创了许多重要概念,其中一个关键的吸引力在于程序与数学的接近程度。其中许多功能已被纳入现代语言(参见维基百科页面)。LISP 非常有表现力:它的语法很少(只有列表和一些基本操作),但你可以编写简短的程序来表达复杂的想法。这让新手感到惊讶,并将其作为人工智能的语言出售。但是,这是一般程序的属性。短节目可以代表复杂的概念。虽然您可以在 LISP 中编写强大的代码,但任何初学者都会告诉您,阅读其他人的 LISP 代码或调试您自己的 LISP 代码也非常困难。最初,函数式编程也有性能考虑,并且不喜欢被 C 等低级命令式语言取代。(例如,函数式编程要求永远不会更改(“变异”)对象,因此每个操作都需要一个要创建的新对象。没有良好的垃圾收集,这可能会变得笨拙)。今天,我们了解到,编写好的代码需要函数式编程和命令式编程的混合,而现代语言(如 python、ruby 和 scala)都支持这两者。在这一点上,这只是我的观点,没有理由更喜欢 LISP 而不是 python。
目前最受关注的人工智能范式是机器学习,我们从数据中学习,而不是以前的方法,如专家系统(80 年代),专家编写规则让人工智能遵循。Python 是目前使用最广泛的机器学习语言,拥有许多库,例如 Tensorflow 和 Pytorch,以及一个活跃的社区。为了处理海量数据,我们需要像 Hadoop、Hive 或 Spark 这样的系统。这些代码是用 python、java 或 scala 编写的。通常,核心时间密集型子例程是用 C 编写的。
80 年代的 AI 寒冬不是因为我们没有合适的语言,而是因为我们没有合适的算法、足够的计算能力和足够的数据。如果您正在尝试学习 AI,请花时间学习算法而不是语言。
在研究 AI 模型时,我肯定会继续经常使用 Lisp。
你问它是否被用于大量工作。对于我自己的工作,这对我来说太主观了,但我询问了我的一个 AI 模型是否认为自己是实质性的,它的回答是肯定的。当然,它的反应自然也是有偏差的。
总的来说,大量的人工智能研究和开发是在 Lisp 中进行的。此外,即使对于非 AI 问题,有时也会使用 Lisp。为了展示 Lisp 的强大功能,我在 25 年前设计了第一个完全用 Lisp 编写的神经网络模拟系统。
LISP 仍然被大量使用,但越来越少。由于过去有很多人使用它,仍然有动力,他们仍然活跃在行业或研究中(轶事:最后一个 VCR 是 2016 年 7 月由一家日本制造商生产的,是的)。然而,该语言(据我所知)用于不利用机器学习的那种人工智能,通常作为 Russell 和 Norvig 的参考书。这些应用程序仍然非常有用,但机器学习如今得到了所有的关注。
下降的另一个原因是 LISP 从业者已经部分转向 Clojure 和其他最近的语言。
如果您正在学习 AI 技术,LISP(或 Scheme 或 Prolog)是了解整个“AI”正在发生的事情的不错选择。但如果你希望或必须非常务实,Python 或 R 是社区的选择
注意:以上缺乏具体的例子和参考。我知道一些大学的工作,以及一些受 LISP 启发或直接使用 LISP 的公司。
为了补充@Harsh 的答案,LISP(以及 Scheme 和 Prolog)具有使其看起来更适合创建智能机制的特性——使 AI 成为 60 年代所感知的。
其中一个特点是语言设计引导开发人员以一种非常优雅的方式思考,将一个大问题分解为小问题等等。如果你愿意的话,它非常“聪明”或“智能”。与其他一些语言相比,几乎别无选择,只能这样开发。LISP 是一种列表处理语言,并且“纯粹是功能性的”。
但是,在与 LISP 相关的工作中可以看到一个问题。AI 领域中一个值得注意的工作是Situation Calculus,其中(简而言之)描述了“世界”中的对象和规则,并可以让它演变为计算情况——世界的状态。因此,它是一种根据情况进行推理的模型。主要问题被称为框架问题,这意味着这个微积分不能分辨什么不能。改变——只是改变了什么。世界上没有定义的任何东西都不能被处理(注意这里与 ML 的区别)。第一个实现使用 LISP,因为那是当时的 AI 语言。并且受到框架问题的约束。但是,正如@Harsh 所提到的,这不是 LISP 的错:任何语言都会面临同样的框架问题(情境演算的概念问题)。
所以从 AI / AGI / ASI 的角度来看,语言真的无关紧要。概念(算法等)确实很重要。
即使在机器学习中,语言也只是一种实用的选择。Python 和 R 今天很流行,主要是由于它们的库生态系统和关键公司的关注。但是尝试使用 Python 或 R 为基于 RaspberryPI 的应用程序运行模型,您将面临一些严重的限制(但仍有可能,我正在这样做:-))。所以语言选择归结为实用主义。