Es scheint eine lange Überzeugung zu geben (hauptsächlich von Nicht-Lispern), dass Lispeln besser ist als die meisten Sprachen bei AI.
Woher stammt dieser Glaube? Und gibt es tatsächlich eine Grundlage dafür?
Es scheint eine lange Überzeugung zu geben (hauptsächlich von Nicht-Lispern), dass Lispeln besser ist als die meisten Sprachen bei AI.
Woher stammt dieser Glaube? Und gibt es tatsächlich eine Grundlage dafür?
Antworten:
Einer der Hauptunterschiede zwischen LISP-ähnlichen Sprachen und anderen Sprachen besteht darin, dass Code und Daten in LISPs dasselbe sind. Auf diese Weise kann ein Programm beispielsweise einige seiner Algorithmen zur Laufzeit ändern, wenn es als nativer Teil der Sprache neue Dinge "lernt".
Ein weiterer, wenn auch nicht so wichtiger Aspekt ist die Fähigkeit von LISP, neue Sprachsemantiken einfach über Makros hinzuzufügen. Auf diese Weise können Sie eine DSL definieren, mit der Ihre KI arbeitet und in der sie sich entwickeln kann. Diese Sprache kann wachsen, sich selbst korrigieren und sich entwickeln, während die KI ausgeführt wird.
In Übereinstimmung mit Quadrescence trägt die Nutzungsgeschichte von LISP wesentlich zum Image von LISP bei, das für die KI gut ist. Warum LISP für AI verwendet wird , umfasst die Geschichte viel detaillierter.
Einige der allerersten Programme in lisp waren Theoremprüfer, symbolische Mathematik, der Klassiker ELIZA usw. Zusätzlich zu Büchern wie Peter Norvigs PAIP und der Tatsache, dass lisp aus dem MIT AI-Labor stammt, hat es dieses Bild erhalten Dieses Lispeln ist gut für die KI.
DARPA finanzierte auch Universitäten für die AI-Forschung und kaufte bedeutende Mengen an Hardware von Symbolics. Der Geldmangel führte schließlich zum sogenannten "AI-Winter".
Schließlich wurden die ursprünglichen Sprachen wie Fortran (oder "Sprachen" wie ASM) primär für das numerische Rechnen verwendet. Sie haben mit Zahlen und Arrays von ihnen gearbeitet. Heutzutage haben wir Symbole oder die Möglichkeit, fast jedes gewünschte Objekt in den meisten modernen Sprachen zu erstellen.
Daher ist der Grund, warum Lispeln für die KI auf einmal besser war, nicht mehr der Fall. Die Idee, dass "Lispeln gut für die KI ist", ist jedoch nach wie vor ungebrochen.
Ob lisp aufgrund seiner Merkmale und seiner Struktur eine bessere Sprache ist oder nicht, ist ein ganz anderer Fall (da dies in Wirklichkeit für viele andere Bereiche als nur die KI gilt und normalerweise zu einem alten Flammenkrieg führen wird).
Sehen wir uns einige aktuelle KI-Programme an: (1) Roboter, z. B. selbstfahrende Autos. Bei der großen DARPA-Herausforderung war die überlegene Software für das Autofahren nicht Lisp. Es war vielmehr eine prozedurale Sprache wie C ++ oder Java. (2) Maschinelle Übersetzung der natürlichen Sprache. Lisp wird für diesen Zweck von weit verbreiteten Produktionssystemen nicht verwendet. (3) Spielen, zB Schachprogramme. Lisp wird für diesen Zweck von weit verbreiteten, überlegenen Schachprogrammen wie Fritz nicht verwendet.
Lisp wurde in den 1960er Jahren von US AI Labs erfunden und entwickelt, um schnell symbolische Logikprogramme zu erstellen, bei denen die nativen Lisp-Datenstrukturen der erforderlichen Ebene der symbolischen Abstraktion entsprechen - z. B. können englische Wörter Symbole in einer Liste sein, logische Formeln können leicht sein dargestellt als Listen von Operatoren und Operanden.
Aber für Produktionsprogramme bedeutet die Softwareentwicklung, dass die Vorteile statischer typisierter Sprachen und einer Vielzahl von Bibliotheken von Drittanbietern dazu führen, dass Lisp nicht einmal für große moderne Systeme in Betracht gezogen wird, die AI-Aufgaben ausführen.
@ Stephen Reed sagte es sehr gut. Ich kann nur hinzufügen, dass ich in den 70ern im MIT AI Lab war. Ich habe damals eine Geschichte über den Ursprung von Lisp gehört. Ich kann nicht schwören, dass es wahr ist, aber es geht so:
John McCarthy war in den 50er Jahren am MIT und hatte daran gearbeitet, Eigenschaften von Programmen zu beweisen. Dafür hatte er eine einfache Syntax verwendet, die der von Lambda Calculus ähnelte.
Die Geschichte war, dass einer der Studenten ein Projekt machen wollte (Analogie oder Theorembeweis oder symbolische Mathematik, ich weiß nicht mehr, welche) und McCarthy fragte, welche Sprache er verwenden sollte. Die Antwort - natürlich Fortran. (Es gab nicht viel anderes, und die Listenverarbeitung selbst war damals ziemlich bekannt, aber nur als Unterprogrammpakete, nicht als Sprachen.) Nun, irgendwie führte das zu einem Programm, das Symbole in verschachtelten Listenstrukturen verarbeitete. Zusammen mit einer Möglichkeit, sie zu lesen und zu drucken, und dann einer eval
Funktion und Voila '- einer Sprache. Eine LISt-Verarbeitungssprache. Von dort ging es los.
Für die Art von Algorithmen, die wir damals machten (und die immer noch sehr wenige Leute machen), wurde eine Sprache benötigt, die leicht symbolische Ausdrücke manipulieren konnte. Darin war Lisp gut. Es gab viele Variationen des Grundkonzepts, die unterschiedliche Namen hatten, wie Prolog, Schema usw. usw.
AI bedeutet also für viele Menschen eine Menge Dinge, und verschiedene Sprachen sind gut für verschiedene Dinge, aber für Probleme, die als Symbolmanipulation bezeichnet werden können, ist es schwierig, eine nützliche Sprache zu finden, die nicht irgendwie von Lisp abstammt.
Lisp hat Vorteile für die Arten von Dingen, die AI genannt wurden - zumindest für die logischen, such- und syntaktischen Aspekte, die bis um die 90er Jahre die meisten AI-Aktivitäten ausmachten.
Ein großer Vorteil von Lisp ist die Unterstützung von Makros - Code als Daten, Metaprogrammierung.
Standard ML (SML) ist eine weitere Sprache, die beispielsweise seit den 80er Jahren in der KI weit verbreitet ist. Objective CAML und F # sind Entwicklungen von SML.
Ein Hauptvorteil der ML-Familie (und von Haskell usw.) ist die Mustererkennung. Dies ist wahrscheinlich auch in Lisp verfügbar, jedoch nicht in die Sprache integriert, sondern über eine Metaprogrammbibliothek. Es ist auch in Haskell verfügbar, aber zumindest im Moment ist der Mustervergleich außerhalb funktionaler Programmiersprachen nicht üblich.
Ich habe Behauptungen gesehen, dass LISP im Grunde ein erweiterter Lambda-Kalkül ohne Typ ist, und ML ist im Grunde ein erweiterter Lambda-Kalkül mit Typ. Ich kenne mich mit typisierter Lambda-Rechnung nicht aus.
Die KI hat sich im Laufe der Jahre zu einem viel umfassenderen Thema entwickelt - bis zu dem Punkt, dass sie fast vollständig verschwunden ist. Data Mining könnte als ein Unterfeld der KI betrachtet werden. Viele AI-Dinge (OCR, Spracherkennung) sind beinahe keine AI mehr - sie sind nur noch Anwendungen, genau wie alle anderen. Und KI hängt viel mehr von der Signalverarbeitung und anderen Arten der Zahlenverarbeitung ab als früher.
Für die OCR- und Spracherkennung war AI natürlich immer von der Signalverarbeitung und der Zahlenverarbeitung abhängig. Ja, da gibt es ein paar Widersprüche ;-) Ich kann die Gewichte für Dinge nicht angeben, da ich es nicht wirklich weiß.
Infolgedessen gibt es wahrscheinlich nicht einmal eine einzige Sprache, die für die gesamte moderne KI-Anwendung geeignet ist - ich würde vermuten (keine Kenntnisse aus erster Hand), dass es in der modernen KI eine Menge mehrsprachiger Entwicklungen gibt. Und ich kann fast garantieren, dass Sie C und C ++ in einigen Projekten finden werden, um die Performance bei der Zahlenkalkulation zu erreichen. Es würde mich nicht überraschen, wenn es aus ähnlichen Gründen eine Menge Python gibt - mit einer guten numerischen Bibliothek kann Python problemlos Aufgaben erledigen, bei denen Zahlen eingegeben werden müssen.
Ich stelle mir vor, dass in einem dieser selbstfahrenden Autos das Bildverarbeitungssystem in einer anderen Sprache (und auf einer anderen Hardware) als das Routenplanungssystem geschrieben ist.