【问题标题】:Why is Lisp used for AI? [closed]为什么将 Lisp 用于 AI? [关闭]
【发布时间】:2010-09-12 22:17:10
【问题描述】:

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

过去使用 Lisp 是因为它可用,还是我缺少某些东西?

【问题讨论】:

  • > …请不要假设 Lisp 只对动画和图形有用,> 人工智能、生物信息学、B2B 和电子商务、数据挖掘、EDA/半导体 > 应用程序、专家系统、金融、智能代理、知识 > 管理、机械 CAD、建模和模拟、自然语言、> 优化、研究、风险分析、调度、电信和 Web > 创作只是因为这些是他们发生的唯一事情 > 列出。 ——肯特·皮特曼
  • 我没想到 Lisp 只对 AI 有用,我只是想知道为什么要用它。
  • 我会将这个问题改写为“语言的哪些特征对于硬 AI 来说是必需的?”这是一个有效且有用的问题,其结果将是只有 Lisp Forth 和汇编程序具备执行硬 AI 所需的条件。

标签: lisp artificial-intelligence


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 那不是因为它的功能。 Prolog 具有相同的属性 - 一切都是“术语”,术语是数据和代码。 (Prolog 是一种逻辑编程语言,在 AI 中也被大量使用)
    • 这方面的花哨术语称为 Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
    【解决方案3】:

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

    但是 lisp 对人类来说非常难以阅读,它的大括号和数据和程序之间没有区别。今天,我不会将 lisp 用于任何生产 AI 代码(甚至可能是原型设计),但更喜欢 python 来编写脚本。

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

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

    【讨论】:

    • 我个人觉得 Lisp 比大多数语言更容易阅读,而且我是几周前才学会的。与大多数语言相比,Python 特别干净,是的,但是如果将 lisp 与 C++ 之类的语言进行比较,它会更干净,更易于阅读。无论如何,根据我的经验。
    【解决方案4】:

    直到 1980 年代末,Lisp 一直用于 AI。然而,在 80 年代,Common Lisp 被商业界过度吹捧为“人工智能语言”。这种强烈反对迫使大多数 AI 程序员使用 C++ 几年。如今,原型通常是用较年轻的动态语言(Perl、Python、Ruby 等)编写的,而成功研究的实现通常是用 C 或 C++(有时是 Java)。

    如果您对 70 年代感兴趣……好吧,我当时不在。但我认为 Lisp 在 AI 研究中的成功有以下三个原因(按重要性排序):

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

    我没有Peter Norvig's old AI book,但它应该是学习用 Lisp 编写 AI 算法的好方法。

    免责声明:我是计算语言学的研究生。我比其他领域更了解自然语言处理的子领域。也许 Lisp 更多地用于其他子领域。

    【讨论】:

    • Lisp 在机器学习/ILP 世界中绝对还活着并继续前进
    • 我有一个用 C 语言教授的 AI 本科课程。我有一个用 Norvig 的书教授的 AI 研究生课程。这本 C 语言的书侧重于 AI 算法和结构。 Norvig 的书感觉就像:“让我们在阅读 AI 历史的同时学习 LISP。”在我看来,这完全是浪费时间。
    • 每个人似乎都想念的一个原因是 John McCarthy 编写了 Lisp,并且是一位非常有影响力的计算机科学家,特别是在 AI 领域。自然,他的很多工作都是在 Lisp 中实现的,Lisp 也因此站稳了脚跟。
    • Common Lisp 从来没有打算成为 AI 语言,它的创建是为了在行业中使用。对于研究,通常使用 Scheme。永远,永远不要根据它的年龄来判断一种语言——它与酷度不成比例,反之亦然。 C 很老但很酷,那么为什么 Lisp 的年龄很重要?
    • 直到 1980 年代末,Lisp WAS 才用于 AI,这不准确。 在 2016 年,麻省理工学院仍然是人工智能领域相当知名的机构。 麻省理工学院本科机器人课程推荐的教科书是Artificial Intelligence by Patrick Henry Winston。到第 2 版时,该书的编程章节分支成他们自己的同步书——Lisp。顾名思义,编程完全Lisp中。 people.csail.mit.edu/phw/Books/LISPBACK.HTML
    【解决方案5】:

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

    为什么会这样:宏、泛型函数和丰富的自省允许简洁的代码和轻松引入域抽象——这是一种可以让语言变得更强大的语言。对于很多不必要的问题,它会带来自己的成本,但对于其他问题,需要电力才能取得进展。

    【讨论】:

      【解决方案6】:

      一个原因是它允许您使用特定于您的领域的结构来扩展语言,使其有效地成为一种领域特定的语言。这种技术非常强大,因为它可以让您推理您正在解决的问题,而不是关于洗牌。

      【讨论】:

      • 你能提供或链接到这个例子吗?
      • @DuckMaestro:在这周大约 30 分钟的宏工作中,我实现了 SQL Select 的临时错误版本。它是这样的:(查询 SELECT * FROM dataset WHERE expr)。
      • 在 Lisp 中嵌入代数求解器 youtube.com/… 在 Lisp 中嵌入电路语言 youtube.com/… 在 Lisp 中嵌入 Lisp youtube.com/… 在 Lisp 中嵌入 Prolog - 观看整个系列
      【解决方案7】:

      我记得听说,作为一种函数式语言,Lisp 是实现递归算法的一个非常好的选择。在考虑决策过程(遍历)和最终结果(叶节点)时,能够追踪一棵树并按原路返回至关重要。

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

      【讨论】:

      • Lisp 中的宏比其他任何东西都更强大,只需 50 行 Lisp 代码即可实现 OOP,而 REPL 可让您在程序仍在运行时编辑程序......只有 Lisp 可以编辑自己的程序源代码轻松...
      【解决方案8】:

      我认为仅从人工智能的角度来考虑这一点是错误的。如果你问的是为什么它被用于 AI,而不是为什么它现在不经常使用,那么像 AI-winter 和对 common lisp 的商业影响之类的事情会分散注意力......

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

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

      不过,这有点跑题了。我认为 AI 代码有一段时间主要是用 common lisp 编写的,因为它是研究代码的强大方法。它仍然是;但随着“人工智能”算法得到更好的理解和探索,其中一部分更容易教授和使用,因此它们出现在本科课程中的年度语言中。从那里开始,问题就变成了人们已经知道什么、哪些库可用以及哪些对大型团体有效。

      【讨论】:

        【解决方案9】:

        Lisp 用于 AI 是因为它非常支持使用符号计算的软件的实现。符号、符号表达式和计算是 Lisp 的核心。

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

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

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

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

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

        【讨论】:

        • 是的,从历史上看,AI 更多的是关于符号计算。 80 年代的“AI 寒冬”可能更像是一场 symbolic AI 的危机——当时人们对亚符号方法(神经网络、机器学习等)。 Lisp 实现在数值计算方面通常很弱。我不知道他们是否在这方面有所改进。
        • @MaD70:80 年代的 AI 寒冬是关于 AI 的。军方停止了大部分资金,人工智能在商业市场上大多失败。甚至当时存在的神经网络的东西。如果有人将人工智能视为“新的软件开发方法”(使用规则、逻辑、神经网络、垃圾收集……)——那也失败了。其中大部分在今天甚至都没有被广泛使用/喜欢。
        • 我当时和回想起来的印象是不同的:我清楚地记得在研究和市场上(甚至有专门的神经处理器)对80 年代后半期/90 年代初,经过几十年的排斥(见我的回答,我提到了 Minsky&Papert 对感知器的批评的影响:stackoverflow.com/questions/683124/neural-networks-obsolete/…)。
        • Symbolic AI 失败了,IMO,因为当时的硬件(不够强大/不够便宜)以及因为符号阵营与子符号阵营之间如此强烈的对比排除了任何协同作用。 W.r.t. “今天甚至被广泛使用/喜欢”:我怀疑在 AI 中开发的一些技术(在两个阵营中)的使用比人们想象的要多得多(幸运的是,没有被炒作)。
        • 举个例子:90 年代末,我的一些熟人问我纺织领域质量控制项目的可行性。在我的脑海中,我提到神经网络是解决此类歧视问题(本质上是图像分类)的一种有前途的方法。只有这样的建议,他们在几周内找到了一个已经开发的软件,使用了神经网络,并获得了它的发行权——这比开始一个涉及研发的项目要明智得多。
        【解决方案10】:

        一个更愤世嫉俗的答案可能是“因为它在 1980 年代日本和美国之间的政治人工智能战争中失败了”。有一个有趣的blog post that speculates about the impact of the Fifth-Generation Computer System demise on the Prolog

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-22
          • 2011-01-08
          • 2011-01-08
          • 2012-02-18
          • 2013-04-29
          • 2012-01-16
          • 1970-01-01
          • 2013-07-12
          相关资源
          最近更新 更多