La programmazione probabilistica (PP) è un paradigma di programmazione basato sulla specifica dichiarativa di modelli probabilistici, per i quali l'inferenza viene eseguita automaticamente. La programmazione probabilistica cerca di unificare la modellazione probabilistica e la programmazione tradizionale di utilità generale al fine di rendere la prima più semplice e più largamente applicabile. Essa può essere utilizzata per creare sistemi che aiutano a prendere decisioni in condizioni di incertezza. I linguaggi di programmazione che seguono tale paradigma sono denominati "linguaggi di programmazione probabilistica" (PPL).
Applicazioni Il ragionamento probabilistico è stato utilizzato per risolvere una vasta gamma di problemi come la previsione del mercato azionario, la raccomandazione di film, la diagnostica dei computer, il rilevamento di intrusioni informatiche e il riconoscimento di immagini. Tuttavia, fino a poco tempo fa (in parte a causa della limitata potenza di calcolo), la programmazione probabilistica aveva una portata limitata e la maggior parte degli algoritmi di inferenza doveva essere scritta manualmente per ciascun compito.
Peraltro, nel 2015, è stato utilizzato un programma di visione artificiale probabilistica di 50 righe per generare modelli 3D di volti umani basati su immagini 2D di tali volti. Il programma utilizzava la grafica inversa come base del suo metodo di inferenza ed è stato sviluppato utilizzando il pacchetto Picture in Julia. Ciò ha reso possibile "in 50 righe di codice ciò che prima ne richiedeva migliaia".
La libreria di programmazione probabilistica Gen (anch'essa scritta in Julia) è stata impiegata in attività legate a visione e robotica.
Più recentemente, il sistema di programmazione probabilistica Turing.jl è stato impiegato in diverse applicazioni nei settori della farmaceutica e dell'economia.
La programmazione probabilistica in Julia è stata anche abbinata alla programmazione differenziabile, integrando il pacchetto Julia Zygote.jl con Turing.jl.
I linguaggi di programmazione probabilistica sono comunemente utilizzati anche nell'ambito del cognitivismo bayesiano ai fini di sviluppare e valutare modelli cognitivi.
Linguaggi di programmazione probabilistici I PPL spesso si configurano come estensioni di un linguaggio-base. Ad esempio, Turing.jl è basato su Julia, Infer.NET è basato su .NET Framework, mentre PRISM estende il Prolog. Tuttavia, alcuni PPL, come WinBUGS, offrono un linguaggio autonomo che si adatta strettamente alla rappresentazione matematica dei modelli statistici, senza avere un'origine ovvia in un altro linguaggio di programmazione.
Il linguaggio per WinBUGS è stato implementato per eseguire elaborazioni bayesiane utilizzando il campionamento di Gibbs e altri algoritmi correlati. Sebbene implementato in un linguaggio di programmazione relativamente sconosciuto (Component Pascal), questo linguaggio implementa l'inferenza bayesiana su un'ampia gamma di modelli statistici utilizzando un approccio computazionale flessibile. Lo stesso linguaggio BUGS può essere utilizzato per specificare modelli bayesiani per l'inferenza tramite diverse varianti computazionali ("sampler") e convenzioni o impostazioni predefinite, utilizzando un programma autonomo WinBUGS (o pacchetti correlati in R, come rbugs e r2winbugs) e JAGS (Just Another Gibbs Sampler, un altro programma autonomo con pacchetti R correlati, tra cui rjags, R2jags e runjags). Più recentemente, altri linguaggi a supporto della formulazione e dell'inferenza per modelli bayesiani, come ad esempio Stan, NIMBLE e NUTS, offrono soluzioni diverse o più efficienti per il calcolo bayesiano alla base e sono accessibili dall'ambiente di analisi e programmazione dati R. L'influenza del linguaggio BUGS è evidente in questi linguaggi più recenti, i quali utilizzano addirittura la stessa sintassi per alcuni aspetti della specifica del modello.
Diversi PPL sono in fase di sviluppo attivo, includendo alcuni in beta testing. Due esempi molto popolari sono Stan e PyMC.
Programmazione probabilistica relazionale Un linguaggio di programmazione relazionale probabilistico (PRPL) è un PPL appositamente progettato per descrivere e fare inferenza su modelli probabilistici relazionali (PRM).
Un PRM viene solitamente sviluppato con un insieme di algoritmi per la riduzione, l'inferenza e l'identificazione delle distribuzioni interessate, tutti integrati nel relativo PRPL.
Programmazione logica probabilistica La programmazione logica probabilistica è un paradigma di programmazione che estende la programmazione logica con l'aggiunta della probabilità.
La maggior parte degli approcci alla programmazione logica probabilistica si basa sulla semantica distribuzionale, che suddivide un programma in un insieme di fatti probabilistici e in un programma logico. Un tale programma definisce una distribuzione di probabilità sulle interpretazioni dell'universo di Herbrand del programma.
Elenco dei linguaggi di programmazione probabilistici L'elenco seguente riassume la varietà di PPL attualmente disponibili e ne chiarisce le origini. NomeEstensione daLinguaggio OspiteAnalyticaC++bayesloopPythonPythonBean MachinePyTorchPythonVentureSchemeC++BayesDBSQLite, PythonPRISMB-PrologInfer.NET.NET Framework.NET Frameworkdiff-SATAnswer set programming, SAT (DIMACS CNF)PSQLSQLBUGSComponent PascalDynaPrologFigaroScalaScalaProbLogPrologPythonProBTC++, PythonStanBUGSC++HakaruHaskellHaskellBAli-Phy (software)HaskellC++ProbCogJava, PythonPyMCPythonPythonRainierScalaScalagretaTensorFlowRpomegranatePythonPythonLeaPythonPythonWebPPLJavaScriptJavaScriptPictureJuliaJuliaTuring.jlJuliaJuliaGenJuliaJuliaEdwardTensorFlowPythonTensorFlow ProbabilityTensorFlowPythonEdward2TensorFlow ProbabilityPythonPyroPyTorchPythonNumPyroJAXPythonBirchC++PSIDBlangMultiVersePythonPythonAnglicanClojureClojure
Difficoltà Ragionare su variabili come distribuzioni di probabilità risulta difficile a programmatori alle prime armi, ma queste difficoltà possono essere superate attraverso l'uso di visualizzazioni di reti bayesiane e grafici di distribuzioni di variabili incorporati nell'editor del codice sorgente. Poiché molti PPL si basano sulla specifica di distribuzioni a priori sulle variabili di interesse, la formulazione di distribuzioni informative risulta spesso difficile ai principianti. In alcuni casi, librerie come PyMC forniscono metodi automatizzati per trovare la parametrizzazione di distribuzioni a priori informative.
Note
Voci correlate
Programmazione induttiva Modello probabilistico Modello probabilistico a universo aperto
Collegamenti esterni
Fondamenti della programmazione probabilistica Elenco dei mini toolkit linguistici del modello probabilistico
Categoria:Paradigmi di programmazione Categoria:Ragionamento probabilistico