Warum wird Lisp für KI verwendet? [geschlossen]

184

Ich habe Lisp gelernt, um meinen Horizont zu erweitern, weil ich gehört habe, dass es in der KI-Programmierung verwendet wird. Nach einigen Erkundungen habe ich noch keine KI-Beispiele oder irgendetwas in der Sprache gefunden, das die Neigung dazu erhöhen würde.

Wurde Lisp in der Vergangenheit verwendet, weil es verfügbar war, oder fehlt mir etwas?

Cristián Romo
quelle
5
>… Bitte nehmen Sie nicht an, dass Lisp nur für Animation und Grafik,> KI, Bioinformatik, B2B und E-Commerce, Data Mining, EDA / Halbleiter> Anwendungen, Expertensysteme, Finanzen, Intelligente Agenten, Wissen> Management, Mechanisches CAD nützlich ist , Modellierung und Simulation, natürliche Sprache,> Optimierung, Forschung, Risikoanalyse, Zeitplanung, Telekommunikation und Web> Authoring, nur weil dies die einzigen Dinge sind, die sie zufällig aufgelistet haben. - Kent Pitman
Avi
2
Ich dachte nicht, dass Lisp nur für KI nützlich ist, ich frage mich nur, warum es dafür verwendet wird.
Cristián Romo
Ich würde die Frage wie folgt umformulieren: "Welche Merkmale einer Sprache sind für eine harte KI erforderlich?" Dies ist eine gültige und nützliche Frage, und das Ergebnis wird sein, dass nur Lisp Forth & Assembler das Zeug dazu haben, harte KI zu machen.
Albert van der Horst

Antworten:

125

Lisp wurde bis Ende der 1980er Jahre in der KI verwendet. In den 80er Jahren wurde Common Lisp jedoch als "KI-Sprache" an die Geschäftswelt verkauft. Die Gegenreaktion zwang die meisten KI-Programmierer für einige Jahre zu C ++. Heutzutage werden Prototypen normalerweise in einer jüngeren dynamischen Sprache (Perl, Python, Ruby usw.) geschrieben, und Implementierungen erfolgreicher Forschung erfolgen normalerweise in C oder C ++ (manchmal Java).

Wenn Sie neugierig auf die 70er Jahre sind ... nun, ich war nicht da. Aber ich denke, Lisp war aus drei Gründen (in der Reihenfolge der Wichtigkeit) in der KI-Forschung erfolgreich:

  1. Lisp ist ein hervorragendes Prototyping-Tool. Es war das Beste für eine sehr lange Zeit. Lisp ist immer noch großartig darin, ein Problem anzugehen, das Sie noch nicht lösen können. Diese Beschreibung charakterisiert AI perfekt.
  2. Lisp unterstützt die symbolische Programmierung gut. Alte KI war auch symbolisch. Es war auch in dieser Hinsicht lange Zeit einzigartig.
  3. Lisp ist sehr mächtig. Die Code- / Datenunterscheidung ist schwächer, sodass sie sich erweiterbarer anfühlt als andere Sprachen, da Ihre Funktionen und Makros wie das integrierte Material aussehen.

Ich habe nicht Peter Norvigs altes KI-Buch , aber es soll eine gute Möglichkeit sein, das Programmieren von KI-Algorithmen in Lisp zu lernen.

Haftungsausschluss: Ich bin ein Student der Computerlinguistik. Ich kenne das Teilfeld der Verarbeitung natürlicher Sprache viel besser als die anderen Felder. Vielleicht wird Lisp eher in anderen Unterfeldern verwendet.

Nathan Shively-Sanders
quelle
33
Lisp ist definitiv noch am Leben und tritt in die Welt des maschinellen Lernens / ILP ein
HasaniH
13
Ich hatte einen Grundkurs in KI in C. Ich hatte einen Grundkurs in KI in Norvigs Buch. Das Buch in C konzentrierte sich auf KI-Algorithmen und -Strukturen. Norvigs Buch fühlte sich an wie: "Lass uns LISP lernen, während wir über die KI-Geschichte lesen." Meiner Meinung nach eine völlige Zeitverschwendung.
San Jacinto
7
Ein Grund, den jeder zu vermissen scheint, ist, dass John McCarthy Lisp schrieb und ein sehr einflussreicher Informatiker war, insbesondere auf dem Gebiet der KI. Natürlich wurde ein Großteil seiner Arbeit in Lisp umgesetzt, und so hat Lisp Fuß gefasst.
Cha0site
2
Common Lisp war nie als KI-Sprache gedacht , sondern wurde für die Verwendung in der Industrie entwickelt. Für die Forschung wird normalerweise das Schema verwendet. Und beurteilen Sie eine Sprache niemals nach ihrem Alter - sie ist einfach nicht proportional zur Coolness und umgekehrt. C ist alt, aber cool. Warum ist Lisps Alter wichtig?
Luka
1
Ich glaube nicht , dann ist es genau war , dass Lisp WURDE bis zum Ende der 1980er Jahre für AI verwendet. Im Jahr 2016 bleibt das MIT eine ziemlich renommierte Institution auf dem Gebiet der KI. Das empfohlene Lehrbuch für den Bachelor-Robotikkurs des MIT ist Artificial Intelligence by Patrick Henry Winston. In der 2. Auflage verzweigten sich die Programmierkapitel dieses Buches in ein eigenes, synchronisiertes Buch Lisp. Wie der Name schon sagt, ist die Programmierung vollständig in Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R
61

Lisp wird für KI verwendet, da es die Implementierung von Software unterstützt, die sehr gut mit Symbolen berechnet werden kann. Symbole, symbolische Ausdrücke und das Rechnen mit diesen bilden den Kern von Lisp.

Typische KI-Bereiche für das Rechnen mit Symbolen waren / sind: Computeralgebra, Theoremprüfung, Planungssysteme, Diagnose, Umschreibungssysteme, Wissensrepräsentation und Argumentation, Logiksprachen, maschinelle Übersetzung, Expertensysteme und mehr.

Es ist dann keine Überraschung, dass viele berühmte KI-Anwendungen in diesen Bereichen in Lisp geschrieben wurden:

  • Macsyma als erstes großes Computeralgebrasystem.
  • ACL2 als weit verbreiteter Theorembeweiser, beispielsweise von AMD.
  • DART als Logistikplaner, der während des ersten Golfkrieges vom US-Militär eingesetzt wurde. Allein diese Lisp-Anwendung soll sich zu diesem Zeitpunkt für alle US-Investitionen in die KI-Forschung ausgezahlt haben.
  • SPIKE, die Planungs- und Planungsanwendung für das Hubble-Weltraumteleskop. Wird auch von mehreren anderen großen Teleskopen verwendet.
  • CYC, eines der größten geschriebenen Softwaresysteme. Repräsentation und Argumentation im Bereich des menschlichen gesunden Menschenverstandes.
  • METAL, eines der ersten kommerziell verwendeten Übersetzungssysteme für natürliche Sprachen.
  • Authorizer's Assistant von American Express, der Kreditkartentransaktionen überprüft.

In diesen Bereichen gibt es Tausende von Anwendungen, die in Lisp geschrieben sind. Sehr häufig ist, dass sie spezielle Fähigkeiten im Bereich der symbolischen Verarbeitung benötigen. Man implementiert spezielle Sprachen, die spezielle Interpreter / Compiler in diesen Domänen zusätzlich zu Lisp haben. Mit Lisp können Darstellungen für symbolische Daten und Programme erstellt und alle Arten von Maschinen implementiert werden, um diese Ausdrücke zu manipulieren (mathematische Formeln, logische Formeln, Pläne, ...).

(Beachten Sie, dass viele andere Allzweck-Programmiersprachen auch in AI verwendet werden. Ich habe versucht zu beantworten, warum besonders Lisp in AI verwendet wird.)

Rainer Joswig
quelle
10
Ja, historisch gesehen ging es bei AI mehr um symbolische Berechnungen als um irgendetwas anderes. Der " KI-Winter " in den 80er Jahren war wahrscheinlich eher eine Krise der symbolischen KI - in dieser Zeit nahm das Interesse an sub-symbolischen Methoden (neuronale Netze, maschinelles Lernen usw.) wieder zu. Lisp-Implementierungen waren beim numerischen Rechnen normalerweise ziemlich schwach. Ich weiß nicht, ob sie sich an dieser Front verbessert haben.
MaD70
2
@ MaD70: Der KI-Winter in den 80ern drehte sich allgemein um KI. Das Militär stoppte einen Großteil der Finanzierung und die KI scheiterte größtenteils auf dem kommerziellen Markt. Sogar das neuronale Netzwerk, das zu dieser Zeit existierte. Wenn man diese KI als "neuartige Softwareentwicklungsmethoden" ansieht (unter Verwendung von Regeln, Logik, neuronalen Netzen, Speicherbereinigung, ...), ist dies ebenfalls fehlgeschlagen. Vieles davon ist heute noch nicht einmal weit verbreitet / beliebt.
Rainer Joswig
Mein damaliger und rückblickender Eindruck war / ist anders: Ich erinnere mich deutlich an die Wiederbelebung des Interesses sowohl an der Forschung als auch am Markt (es gab sogar dedizierte neuronale Prozessoren) für sub-symbolische Methoden in der zweiten Hälfte der 80er Jahre / Anfang der 90er Jahre, nach Jahrzehnten der Ausgrenzung (siehe meine Antwort, in der ich den Einfluss der Kritik von Minsky & Papert an Perzeptronen erwähne : stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70
1
Die symbolische KI ist gescheitert, IMO, aufgrund der Hardware der Zeit (nicht leistungsfähig / billig genug) UND weil solch ein harter Kontrast zwischen symbolischen und sub-symbolischen Lagern jegliche Synergie ausschloss. Wrt "sogar heute weit verbreitet / beliebt": Ich vermute, dass einige der in der KI entwickelten Techniken (in beiden Lagern) viel häufiger eingesetzt werden, als man denken kann (zum Glück nicht mehr gehypt).
MaD70
Nur ein Beispiel: Ende der 90er Jahre fragten mich einige meiner Bekannten nach der Machbarkeit eines Projekts zur Qualitätskontrolle im Textilbereich. Auf den ersten Blick erwähnte ich neuronale Netze als vielversprechenden Ansatz für ein solches Diskriminierungsproblem (im Wesentlichen Bildklassifizierung). Mit nur einem solchen Vorschlag fanden sie in einigen Wochen eine bereits entwickelte Software, die neuronale Netze verwendete, und erwarben deren Vertriebsrechte - viel sinnvoller als ein Projekt im Bereich Forschung und Entwicklung in Angriff zu nehmen.
MaD70
22

Ein Grund dafür ist, dass Sie die Sprache mit für Ihre Domain spezifischen Konstrukten erweitern können, sodass sie effektiv zu einer domänenspezifischen Sprache wird. Diese Technik ist unglaublich leistungsfähig, da Sie über das Problem, das Sie lösen, nachdenken können, anstatt über das Mischen von Bits.

dsm
quelle
Können Sie ein Beispiel dafür bereitstellen oder verlinken?
DuckMaestro
9
@DuckMaestro: In ungefähr 30 Minuten Makroarbeit in dieser Woche habe ich eine Ad-hoc-Buggy-Version von SQL Select implementiert. Es geht so: (Abfrage SELECT * FROM Datensatz WHERE Ausdruck).
Paul Nathan
Einbetten eines Algebra-Lösers in Lisp youtube.com/… Einbetten einer Schaltungssprache in Lisp youtube.com/… Einbetten von Lisp in Lisp youtube.com/… Einbetten von Prolog in Lisp
Sehen Sie sich
youtube.com/watch?v=SLcZXbyGC3E <- Dieser ist gut
aoeu256
12

Ich habe immer vermutet, dass es als funktionale Sprache nicht zwischen Code und Daten unterscheidet. Alles, einschließlich Funktionsdefinitionen und Funktionsaufrufe, kann als Liste behandelt und wie jedes andere Datenelement geändert werden.

So kann selbstinspektierender, selbstmodifizierender Code leicht geschrieben werden.

aib
quelle
10
Das liegt nicht daran, dass es funktioniert. Prolog hat die gleiche Eigenschaft - alles ist ein "Begriff" und Begriffe sind Daten sowie Code. (Prolog ist eine logische Programmiersprache und wird auch häufig für KI verwendet)
Hugh Allen
Der schicke Begriff dafür heißt Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen
9

Eine mögliche Antwort ist, dass KI eine Sammlung sehr schwieriger Probleme ist und Lisp eine gute Sprache zur Lösung schwieriger Probleme ist, nicht nur KI.

Warum das so ist: Makros, generische Funktionen und eine umfassende Selbstbeobachtung ermöglichen präzisen Code und die einfache Einführung von Domänenabstraktionen - eine Sprache, die Sie leistungsfähiger machen können. Für viele Probleme ist das unnötig und mit eigenen Kosten verbunden, aber für andere Probleme wird diese Leistung benötigt, um Fortschritte zu erzielen.

Reich
quelle
7

Ich denke, es ist falsch, nur in Bezug auf KI darüber nachzudenken. Dinge wie der KI-Winter und kommerzielle Effekte auf gewöhnliches Lispeln lenken ab, wenn Sie fragen, warum es für KI verwendet wurde, nicht warum es jetzt nicht oft verwendet wird ...

Wie auch immer, ich denke, das liegt daran, dass der größte Teil des KI-Codes im Wesentlichen Forschungscode war. Lisp ist eine großartige Sprache für explorative Programmierung, für die Implementierung schwieriger Algorithmen, für selbstmodifizierenden und häufig modifizierten Code. Mit anderen Worten, für Forschungscode.

Ich verwende Lisp heute für einige meiner Forschungscodes (Mathematik, Signalverarbeitung), weil es flexibler und leistungsfähiger als die meisten Sprachen ist und dennoch effizienteren Code als die meisten Sprachen generiert. Normalerweise kann ich eine Leistung innerhalb eines Faktors von +/- 2 der C ++ - Geschwindigkeit erzielen, aber ich kann Dinge viel schneller implementieren und mit Komplexität umgehen, die viel mehr Zeit in Anspruch nimmt als bei Verwendung von C ++, Java, C #.

Das ist allerdings kein Thema. Ich denke, AI-Code wurde für eine Weile hauptsächlich in Common Lisp geschrieben, weil er ein leistungsfähiger Ansatz für die Erforschung von Code ist. Es ist immer noch; Aber als KI-Algorithmen besser verstanden und erforscht wurden, waren Teile von ihnen viel einfacher zu unterrichten und zu verwenden, so dass sie in Grundstudiengängen in den Sprachen des Jahres auftauchten. Von dort aus wird es zu einer Frage, was die Leute bereits wissen, welche Bibliotheken verfügbar sind und was für große Gruppen gut funktioniert.

Simon
quelle
6

Ich würde vermuten, dass ein großer Grund die Flexibilität von Listen als grundlegende Datenstruktur war.

Zu dieser Zeit war es die Sprache der Wahl, sie in alle Arten von zusammengesetzten Objekten und neue Dinge wie Nachrichtenübermittlung und Polimorphismus verwandeln zu können. Nicht speziell für KI, sondern für große, komplexe Aufgaben. vor allem, wenn sie mit Konzepten experimentierten.

Javier
quelle
4

Ich denke, Sie haben Recht: Lisp war ein praktisches Werkzeug, um Dinge zu hacken. Dies liegt daran, dass nicht viel zwischen Programm und Daten unterschieden wurde. Dadurch konnten Hacker Funktionen wie Daten sehr einfach manipulieren.

Aber Lisp ist für Menschen mit seinen Klammern und der Nichtunterscheidung zwischen Daten und Programm ziemlich schwer zu lesen. Heute werde ich lisp nicht für Produktions-KI-Code (oder vielleicht sogar für Prototyping) verwenden, würde aber Python für die Skripterstellung bevorzugen.

Eine andere zu berücksichtigende Sache sind die vorhandenen Bibliotheken / Werkzeuge in / in Bezug auf die Sprache. Ich bin nicht in der Lage, Lisp-Bibliotheken mit Python-Bibliotheken zu vergleichen, aber ich denke, Bibliotheken und Open Source sind jetzt viel wichtiger als zuvor.

Diese Antwort wurde durch den folgenden Vergleich zwischen Lisp und Python inspiriert: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

amit
quelle
2
Ich persönlich finde Lisp leichter zu lesen als die meisten anderen Sprachen und habe es erst vor einigen Wochen gelernt. Python ist im Vergleich zu den meisten Sprachen besonders sauber, aber wenn Sie lisp mit etwas wie C ++ vergleichen, ist es viel sauberer und leichter zu lesen. Nach meiner Erfahrung sowieso.
Zeusoflightning125
4

Ich erinnere mich, dass Lisp als funktionale Sprache eine sehr gute Wahl für die Implementierung rekursiver Algorithmen war. Die Fähigkeit, einen Baum aufzuspüren und sich zurück zu arbeiten, ist wichtig, wenn man die Entscheidungsprozesse (Durchquerung) und das Endergebnis (Blattknoten) berücksichtigt.

Dies wurde mir während eines KI-Kurses an der Universität erzählt, an dem wir Lisp studiert haben.

mlambie
quelle
1
Makros in Lisp sind leistungsfähiger als alles andere. Sie können OOP in nur 50 Zeilen Lisp-Code implementieren und mit REPL können Sie Ihr Programm bearbeiten, während es noch ausgeführt wird ... Nur Lisp kann seinen eigenen Quellcode problemlos bearbeiten ...
aoeu256