Seit einem Jahr höre ich viel über PP-Frameworks ( Probabilistic Programming ) wie PyMC3 und Stan und wie großartig PP ist. Und heute hat mir jemand diesen Link mitgeteilt: Pyro: eine Deep Probabilistic Programming Language
Ich verfolge jedoch nicht wirklich das Besondere daran, da es sich so anfühlt, als ob Sie alles, was Sie in PP tun können, in jeder anderen Allzwecksprache tun können. Ich bin sicher, dass es technische Aspekte bei PP gibt, die es attraktiv machen (z. B. paralleles Rechnen), aber abgesehen davon unterscheidet sich PP wirklich von jeder anderen Sprache?
Frage: Ich habe mich gefragt, ob es einen Konsens darüber gibt, was PP ist und wie es sich von anderen statistisch fokussierten Programmen wie R, Matlab, Mathematica unterscheidet. Es sollte beachtet werden, dass PyMC3
und Stan
konzentrieren sich auf mehr Bayes'sche Analyse.
Bei ein wenig Recherche bei Google bin ich auf die folgenden zwei Definitionen gestoßen. Das erste abstrakter und das zweite mehr über die technischen Eigenschaften von PP.
1.2. Probabilistische Programmierung ist
Stattdessen ist die probabilistische Programmierung ein Werkzeug für die statistische Modellierung. Die Idee ist, Lektionen aus der Welt der Programmiersprachen auszuleihen und sie auf die Probleme beim Entwerfen und Verwenden statistischer Modelle anzuwenden. Experten konstruieren bereits statistische Modelle - von Hand in mathematischer Notation auf Papier -, aber es ist ein Prozess nur für Experten, der mit mechanischem Denken nur schwer zu unterstützen ist. Die wichtigste Erkenntnis in PP ist, dass statistische Modellierung, wenn Sie es genug tun, sich wie Programmieren anfühlt. Wenn wir den Sprung machen und tatsächlich eine echte Sprache für unsere Modellierung verwenden, werden viele neue Werkzeuge möglich. Wir können damit beginnen, die Aufgaben zu automatisieren, die das Schreiben eines Papiers für jede Instanz rechtfertigten.
Hier ist eine zweite Definition : Eine probabilistische Programmiersprache ist eine gewöhnliche Programmiersprache mit
rand
einem großen Stapel verwandter Tools, die Ihnen helfen, das statistische Verhalten des Programms zu verstehen.Beide Definitionen sind korrekt. Sie betonen nur unterschiedliche Blickwinkel auf dieselbe Kernidee. Welches für Sie sinnvoll ist, hängt davon ab, wofür Sie PP verwenden möchten. Lassen Sie sich jedoch nicht von der Tatsache ablenken, dass PPL-Programme wie normale Software-Implementierungen aussehen, bei denen das Ziel darin besteht, das Programm auszuführen und eine Ausgabe zu erhalten. Das Ziel in PP ist die Analyse, nicht die Ausführung (zusätzliche Betonung).
- Probabilistische Programmierung
Ich würde gerne wissen, ob die allgemeine statistische Gemeinschaft diesen beiden Definitionen von PP zustimmt und ob es andere Merkmale gibt, die möglicherweise fehlen.
Antworten:
Die probabilistische Programmierung ist eine Technik zur Definition eines statistischen Modells. Im Gegensatz zum Definieren eines Modells anhand seiner Wahrscheinlichkeitsverteilungsfunktion oder zum Zeichnen eines Diagramms drücken Sie das Modell in einer Programmiersprache aus, normalerweise als Forward-Sampler.
Die automatische Inferenz aus einer Modellspezifikation ist ein typisches Merkmal probabilistischer Programmierwerkzeuge, jedoch nicht unbedingt erforderlich und muss nicht Bayesianisch sein. Es gibt eine Vielzahl nützlicher Dinge, die Sie mit einem Modell tun können, das als Wahrscheinlichkeitsprogramm angegeben ist. In der Arbeit Ableiten von Wahrscheinlichkeitsdichtefunktionen aus probabilistischen Funktionsprogrammen wird beispielsweise ein Tool beschrieben, das ein probabilistisches Programm analysiert und dessen Wahrscheinlichkeitsverteilungsfunktion berechnet. Die Arbeit Detektieren von Parametersymmetrien in probabilistischen Modellen analysiert ein probabilistisches Programm für Parametersymmetrien. Diese Art von Arbeit fällt auch unter probabilistische Programmierung.
quelle