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
Antwort
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).
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
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
Wahrscheinlich sollte der Artikel am Aprilscherz veröffentlicht werden. Hier ist ein weiterer Artikel vom späten März des letzten Jahres. http://dspace.mit.edu/handle/1721.1/44963
Wissen Sie, was es besser macht, die Kirche zu beschreiben als das, was ich gesagt habe? Dieser MIT-Artikel: http://web.mit.edu/newsoffice/2010/ai-unification.html
Es ist etwas hyperbolischer, aber dann bin ich nicht immun gegen den Optimismus in diesem Artikel.
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:
- Infer.NET, in C# geschrieben von den Microsoft Research lab in Cambridge, UK
- stan, geschrieben in C++ durch die Statistik Abteilung an der Columbia
- 1. Beste Programmiersprache für die Berechnung
- 2. Right Programmiersprache für die Entwicklung von Anwendung für Mac
- 3. Programmiersprache für die automatische Navigation der Website?
- 4. Lineare Algebra-Bibliothek für die Programmiersprache D
- 5. Was ist die beste Programmiersprache für Selen?
- 6. UML für C-Programmiersprache
- 7. Programmiersprache für Grafik, Halbleiterlayout
- 8. Programmiersprache für Internet Startup
- 9. Programmiersprache Auswahl für Hochintegritätssysteme
- 10. Die saubere Programmiersprache in der realen Welt?
- 11. Gibt es Anwendungen in der Programmiersprache Io? (Oder, Io-Anwendungen verteilen.)
- 12. Die modernen Anwendungen für Imagemaps
- 13. Was ist die prägnanteste Programmiersprache?
- 14. High-Level-Programmiersprache für Musikkomposition
- 15. Kirche Codierung von boolean und STLC
- 16. Was ist die beste Programmiersprache für die Videoverarbeitung?
- 17. Effizienterer Schwanz der Kirche codierte Liste
- 18. Computergrafik-Programmiersprache
- 19. Programmiersprache Grammatik
- 20. Automata Programmiersprache
- 21. Was ist die beste Programmiersprache für maschinelles Lernen?
- 22. Woher bekomme ich eine vim-Syntaxdatei für die Falcon-Programmiersprache?
- 23. Wofür steht BEAM in iex für die Programmiersprache Elixir?
- 24. Ist die Geschwindigkeit einer Programmiersprache für Webanwendungen wichtig?
- 25. Gibt es Spiele/Grafik-Engines für die Programmiersprache D?
- 26. Welche Programmiersprache, welchen Algorithmus sollte ich für die Wörterbuchübersetzung verwenden?
- 27. Beeinflusst das Dateisystem die Portabilität von Anwendungen?
- 28. Mysteriöse Programmiersprache
- 29. OpenID für Android-Anwendungen, die SignIn benötigen
- 30. Modelle für die Entwicklung von WCF-Anwendungen
Slashdot, denke ich? – Jacob
Im besten Fall sollten Diskussionsfragen als Community Wiki markiert werden. Meistens sind sie nicht das richtige Format für Stack Overflow. – danben
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