2010-03-31 8 views
12

Hat jemand mit der Programmiersprache Church gearbeitet? Kann jemand praktische Anwendungen empfehlen? Ich habe es gerade entdeckt, und obwohl es sich anhört, als ob es einige lange bestehende Probleme in AI und maschinellem Lernen angeht, bin ich skeptisch. Ich hatte noch nie davon gehört und war überrascht zu sehen, dass es schon seit ein paar Jahren in der Zeitung Church: a language for generative models angekündigt wurde.Anwendungen für die Kirche Programmiersprache

+0

Slashdot, denke ich? – Jacob

+0

Im besten Fall sollten Diskussionsfragen als Community Wiki markiert werden. Meistens sind sie nicht das richtige Format für Stack Overflow. – danben

+1

Nach dem Durchlesen des Wikis und der Dokumentation des Projekts ist klar, dass dies nur eine weitere Spielzeugsprache ohne ernsthafte Zukunft ist. Keines der Beispiele war spezifisch für die Kirche und konnte leicht in fast jeder Sprache dupliziert werden. Die Artikel, die mich darauf aufmerksam machten, haben den Umfang des Projekts deutlich überschätzt und falsch dargestellt. Wählen Sie, um zu schließen. – Cerin

Antwort

6

Ich weiß nicht, was ich über praktische Anwendungen sagen soll. Stellt die Modellierung kognitiver Fähigkeiten mit generativen Modellen eine "praktische Anwendung" in Ihrem Kopf dar? Die Schlüsselbedeutung von Church (zumindest gerade jetzt) ​​ist, dass es uns, die wir mit probabilistischen Inferenzlösungen für AI-Probleme arbeiten, eine einfachere Art des Modellierens ermöglicht. Es ist im Wesentlichen eine Teilmenge von Lisp.

Ich stimme Chris S nicht zu, dass es überhaupt eine Spielzeugsprache ist. Während einige dieser Inferenzprobleme in anderen Sprachen repliziert werden können (ich habe mehrere in Matlab gebaut), sind sie im Allgemeinen nicht sehr wiederverwendbar und Sie müssen wirklich in 4 und 5 für tiefe Schleifen arbeiten (ich hasse es).

Anstatt das Problem auf diese Weise anzugehen, nutzt Church die rekursiven Vorteile von Lamda Calaculus und erlaubt auch etwas namens Memoization, das für generative Modelle wirklich nützlich ist, da Ihr generatives Modell oft nicht dasselbe ist zum Testen brauchst du das wirklich.

Ich würde sagen, wenn Sie etwas mit Bayes'schen Netzwerken, hierarchischen Bayesianischen Modellen, probabilistischen Lösungen für POMDPs oder dynamische Bayesianische Netzwerke zu tun haben, dann denke ich, dass Church eine große Hilfe ist. Für das, was es wert ist, habe ich sowohl mit Noah als auch mit Josh (zwei von Churchs Autoren) gearbeitet, und niemand hat jetzt einen besseren Zugang zu probabilistischen Schlussfolgerungen (IMHO).

+0

Lamda calaculus wurde in Dutzenden von Bibliotheken für mehrere Sprachen implementiert. Und Memoisierung ist ein Designmuster, das so alt ist wie die Zeit. Es gibt nichts Neues hier. Ich weiß immer noch nicht, warum sie das Gefühl hatten, dass sie "Yet Another Lisp Dialect" erfinden mussten, anstatt nur Common Lisp oder Scheme zu verwenden. – Cerin

+1

Cerin, der Punkt der Sprache ist weder Lambda-Kalkül per se noch Memoisierung, sondern die Fähigkeit, ein probabilistisches Modell der "Welt" darzustellen, indem man ein Programm schreibt, das es simuliert, und danach fragt, wie wahrscheinlich spezifische Ereignisse sind Wenn Sie beispielsweise ein Programm schreiben, das beschreibt, wie 3D-Objekte in ein 2D-Bild projiziert werden, könnten Sie fragen: Was sind die 3D-Objekte, die dieses Bild erzeugt haben? Das heißt, Sie gehen automatisch von einem relativ einfachen Bildprojektionsproblem zum viel schwierigeren * vision * -Problem über. Sie geben * output * und erhalten * input * mit Wahrscheinlichkeiten. – user118967

2

Kirche ist Teil der Familie der probabilistischen Programmiersprachen, die die Trennung der Schätzung eines Modells von seiner Definition ermöglicht. Dies macht die probabilistische Modellierung und Inferenz viel zugänglicher für Menschen, die maschinelles Lernen anwenden wollen, aber selbst keine Hardcore-Machine-Learning-Forscher sind.

Probabilistisches Programmieren bedeutet lange Zeit, dass Sie ein Modell für Ihre Daten erstellen und die Schätzung des Modells selbst ableiten müssen: Sie haben einige beobachtete Werte und möchten die Parameter lernen. Die Struktur des Modells hängt eng damit zusammen, wie Sie die Parameter schätzen, und Sie müssen ziemlich fortgeschrittenes Wissen über maschinelles Lernen besitzen, um die Berechnungen korrekt durchzuführen. Die jüngsten probabilistischen Programmiersprachen sind ein Versuch, dies zu adressieren und die Dinge für Datenwissenschaftler oder Menschen, die arbeiten, die maschinelles Lernen anwenden, zugänglicher zu machen.

Als Analogie ist Folgendes zu beachten:

Sie ein Programmierer sind und Sie auf einem Computer einen Code auszuführen. In den 1970er Jahren musste man Assembler-Sprache auf Lochkarten schreiben und diese in einen Mainframe (für den man Zeit buchen musste) einspeisen, um das Programm zu starten.Es ist jetzt 2014, und es gibt hochstufige, einfach zu erlernende Sprachen, in die Sie Code schreiben können, selbst wenn Sie nicht wissen, wie die Computerarchitektur funktioniert. Es ist immer noch hilfreich zu verstehen, wie Computer arbeiten, um in diesen Sprachen zu schreiben, aber Sie haben nicht haben, und viele mehr Menschen schreiben Code als wenn Sie mit Lochkarten programmieren mussten.

Probabilistische Programmiersprachen machen das gleiche für maschinelles Lernen mit statistischen Modellen. Auch die Kirche ist nicht die einzige Wahl dafür. Wenn Sie noch keine funktionale Programmierung Fanatiker sind, können Sie auch folgende Rahmenbedingungen für die Bayes-Inferenz in grafischen Modellen finden Sie unter:

Verwandte Themen