Warum ist Lisp eine so gute Sprache für AI?


30

Ich habe zuvor von Informatikern und Forschern auf dem Gebiet der KI gehört, dass Lisp eine gute Sprache für Forschung und Entwicklung auf dem Gebiet der künstlichen Intelligenz ist. Gilt dies immer noch mit der Verbreitung neuronaler Netze und des tiefen Lernens? Was war ihre Begründung dafür? In welchen Sprachen sind derzeit Deep-Learning-Systeme eingebaut?

Antworten:


30

Erstens denke ich, dass Sie Common Lisp (eine Standard-Sprachspezifikation, siehe HyperSpec ) mit effizienten Implementierungen (à la SBCL ) meinen . Einige neuere Implementierungen von Scheme könnten jedoch auch relevant sein (mit guten Implementierungen wie Bigloo oder Chicken / Scheme ). Sowohl Common Lisp als auch Scheme (und sogar Clojure ) stammen aus derselben Lisp-Familie. Und als Skriptsprache große Daten oder Maschinenlern - Anwendungen fahren, Guile könnte sein , ein nützlicher Ersatz für Python und ist auch ein Lisp - Dialekt. Übrigens empfehle ich, SICP zu lesen, eine hervorragende Einführung in die Programmierung mit Scheme.

Dann eignet sich Common Lisp (und andere Dialekte von Lisp) hervorragend für die symbolische KI. Viele neuere Bibliotheken für maschinelles Lernen sind jedoch in gängigeren Sprachen codiert, z. B. TensorFlow in C ++ und Python. Deep Learning-Bibliotheken sind meist in C ++ oder Python oder C codiert (und verwenden manchmal OpenCL oder Cuda für GPU-Computing-Teile).

Common Lisp eignet sich hervorragend für symbolische künstliche Intelligenz, weil:

  • Es hat sehr gute Implementierungen (zB SBCL , das kompiliert, um jeden Ausdruck, der der REPL gegeben wird, zu maschinell zu codieren ).
  • es ist homoikonisch , so dass es einfach ist, Programme als Daten zu behandeln, insbesondere ist es einfach, [Unter-] Programme zu generieren, die Meta-Programmiertechniken verwenden.
  • Es verfügt über eine Read-Eval-Print-Schleife , um die interaktive Programmierung zu vereinfachen
  • es bietet eine sehr leistungsfähige Makro Maschinen ( im Wesentlichen, können Sie Ihre eigene Domain Specific Subsprache für Ihr Problem zu definieren), viel mächtiger als in anderen Sprachen wie C
  • es schreibt einen Garbage Collector vor (sogar Code kann mit Garbage Collector gesammelt werden)
  • Es bietet viele abstrakte Containerdatentypen und kann problemlos mit Symbolen umgehen.
  • Sie können sowohl High-Level-Code (dynamisch getippt) als auch Low-Level-Code (mehr oder weniger startisch getippt) durch entsprechende Anmerkungen codieren.

Die meisten Bibliotheken für maschinelles Lernen und neuronale Netze sind jedoch nicht in CL codiert. Beachten Sie, dass sich weder das neuronale Netzwerk noch das Tiefenlernen im Bereich der symbolischen künstlichen Intelligenz befinden. Siehe auch diese Frage .

In CL wurden mehrere symbolische KI-Systeme wie Eurisko oder CyC entwickelt (tatsächlich in einigen DSL- Systemen , die über CL gebaut wurden).

Beachten Sie, dass die Programmiersprache möglicherweise nicht sehr wichtig ist. Im Forschungsthema Künstliche Allgemeine Intelligenz arbeiten einige Leute an der Idee eines KI-Systems, das seinen gesamten Code generiert (also entwerfen sie es mit einem Bootstrapping- Ansatz). Dann kann der Code, der von einem solchen System generiert wird, sogar in einfachen Programmiersprachen wie C generiert werden. Siehe J.Pitrats Blog


1
Ich möchte hier hinzufügen, dass Tensorflow und Theano auf rechnerischen Graphen basieren, was eigentlich symbolische Programmierung ist, aber innerhalb der imperativen Sprache.
Maxim

@Basile: Bitte teilen Sie Common LISP Tutorial oder Referenz
Ved Prakash

@VedPrakash: Ich möchte Sie per E-Mail kontaktieren. Meins ist basile@starynkevitch.net; Ich bin zu alt, um Twitter zu benutzen
Basile Starynkevitch

15

David Nolen (Mitwirkender von Clojure und ClojureScript ; Entwickler von Core Logic, einer Portierung von miniKanren) gab in einem Vortrag mit dem Titel LISP als zu mächtig an, dass LISP in seinen Tagen anderen Programmiersprachen um Jahrzehnte voraus war. Es gibt eine Reihe von Gründen, warum die Sprache ihren Namen nicht beibehalten konnte.

Dieser Artikel hebt einige wichtige Punkte hervor, warum LISP gut für die KI ist

  • Einfache Definition einer neuen Sprache und Bearbeitung komplexer Informationen.
  • Volle Flexibilität bei der Definition und Bearbeitung von Programmen und Daten.
  • Schnell, da das Programm präzise und detailarm ist.
  • Gute Programmierumgebung (Debugging, inkrementelle Compiler, Editoren).

Die meisten meiner Freunde in diesem Bereich verwenden Matlab normalerweise für künstliche neuronale Netze und maschinelles Lernen. Es verbirgt jedoch die Details auf niedriger Ebene. Wenn Sie nur Ergebnisse suchen und nicht wissen, wie Sie dorthin gelangen, ist Matlab eine gute Wahl. Aber wenn Sie auch kleine Details lernen möchten, dann schlage ich vor, dass Sie LISP mindestens einmal durchlaufen.
Die Sprache ist möglicherweise nicht so wichtig, wenn Sie mit verschiedenen AI-Algorithmen und -Techniken vertraut sind. Ich empfehle Ihnen, "Künstliche Intelligenz: Ein moderner Ansatz (von Stuard J. Russell und Peter Norvig)" zu lesen . Ich lese gerade dieses Buch und es ist ein sehr gutes Buch.


4

KI ist ein weites Feld, das weit über maschinelles Lernen, tiefes Lernen, neuronale Netze usw. hinausgeht. In einigen dieser Bereiche spielt die Programmiersprache keine Rolle (mit Ausnahme von Geschwindigkeitsproblemen), daher wäre LISP dort sicherlich kein Thema .

Zum Beispiel bei der Suche oder KI-Planung sind Standardsprachen wie C ++ und Java häufig die erste Wahl, da sie schnell sind (insbesondere C ++) und weil viele Softwareprojekte wie Planungssysteme Open Source sind. Daher ist die Verwendung einer Standardsprache wichtig ( oder zumindest weise, wenn man Feedback oder Erweiterungen schätzt). Mir ist nur ein einziger Planer bekannt, der in LISP geschrieben ist. Um einen Eindruck über die Rolle der Wahl der Programmiersprache in diesem Bereich der KI zu gewinnen, werde ich einige der bekanntesten und daher wichtigsten Planer auflisten:

Fast-Downward:
Beschreibung: Die wohl bekannteste klassische Planungssystem-
URL: http://www.fast-downward.org/
Sprache: C ++, Teile (Vorverarbeitung) sind in Python

FF:
Beschreibung: zusammen mit Fast-Downward das klassische Planungssystem, das jeder kennt
URL: https://fai.cs.uni-saarland.de/hoffmann/ff.html
Sprache: C

VHPOP:
Beschreibung: Eines der bekanntesten POCL-Planungssysteme (Partial Order Causal Link).
URL: http://www.tempastic.org/vhpop/
Sprache: C ++

SHOP und SHOP2:
Beschreibung: Die bekannteste HTN (hierarchische) Planungssystem-
URL: https://www.cs.umd.edu/projects/shop/
Sprache: Es gibt zwei Versionen von SHOP und SHOP2. Die Originalversionen wurden in LISP geschrieben. Neuere Versionen (JSHOP und JSHOP2 genannt) wurden in Java geschrieben. Pyshop ist eine weitere SHOP-Variante, die in Python geschrieben wurde.

PANDA:
Beschreibung: Eine weitere bekannte
URL des HTN- (und Hybrid-) Planungssystems : http://www.uni-ulm.de/de/in/ki/research/software/panda/panda-planning-system/
language: there gibt verschiedene Versionen des Planers: PANDA1 und PANDA2 sind in Java geschrieben, PANDA3 ist hauptsächlich in Java geschrieben, einige Teile befinden sich in Scala.

Dies waren nur einige der bekanntesten Planungssysteme, die mir in den Sinn kamen. Neuere können von den Internationalen Planungswettbewerben (IPCs, http://www.icaps-conference.org/index.php/Main/Competitions ) abgerufen werden , die alle zwei Jahre stattfinden. Die Codes der konkurrierenden Planer werden (für einige Jahre) als Open Source veröffentlicht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.