Programmation probabiliste - Probabilistic programming

La programmation probabiliste ( PP ) est un paradigme de programmation dans lequel des modèles probabilistes sont spécifiés et l'inférence pour ces modèles est effectuée automatiquement. Il représente une tentative d'unifier la modélisation probabiliste et la programmation traditionnelle à usage général afin de rendre la première plus facile et plus largement applicable. Il peut être utilisé pour créer des systèmes qui aident à prendre des décisions face à l'incertitude.

Les langages de programmation utilisés pour la programmation probabiliste sont appelés « langages de programmation probabilistes » (PPL).

Applications

Le raisonnement probabiliste a été utilisé pour une grande variété de tâches telles que la prévision des cours des actions, la recommandation de films, le diagnostic d'ordinateurs, la détection d'intrusions informatiques et la détection d'images. Cependant, jusqu'à récemment (en partie en raison d'une puissance de calcul limitée), la programmation probabiliste était limitée et la plupart des algorithmes d'inférence devaient être écrits manuellement pour chaque tâche.

Néanmoins, en 2015, un programme de vision par ordinateur probabiliste de 50 lignes a été utilisé pour générer des modèles 3D de visages humains basés sur des images 2D de ces visages. Le programme a utilisé des graphiques inverses comme base de sa méthode d'inférence et a été construit à l'aide du package Picture dans Julia . Cela a rendu possible "en 50 lignes de code ce qui en prenait des milliers".

La bibliothèque de programmation probabiliste Gen (également écrite en Julia) a été appliquée aux tâches de vision et de robotique.

Plus récemment, les systèmes de programmation probabiliste Turing.jl ont été appliqués dans diverses applications pharmaceutiques et économiques.

La programmation probabiliste dans Julia a également été combinée avec la programmation différentiable en combinant le package Julia Zygote.jl avec Turing.jl.

Langages de programmation probabilistes

Les PPL s'étendent souvent à partir d'un langage de base. Le choix du langage de base sous-jacent dépend de la similitude du modèle avec l' ontologie du langage de base , ainsi que des considérations commerciales et des préférences personnelles. Par exemple, Dimple et Chimple sont basés sur Java , Infer.NET est basé sur .NET Framework , tandis que PRISM s'étend de Prolog . Cependant, certains PPL tels que WinBUGS et Stan proposent un langage autonome, sans origine évidente dans un autre langage.

Plusieurs PPL sont en cours de développement, dont certains en bêta-test. Les deux outils les plus populaires sont Stan et PyMC3 .

Relationnel

Un langage de programmation relationnelle probabiliste (PRPL) est un PPL spécialement conçu pour décrire et déduire des modèles relationnels probabilistes (PRM).

Un PRM est généralement développé avec un ensemble d'algorithmes de réduction, d'inférence et de découverte des distributions concernées, qui sont intégrés dans le PRPL correspondant.

Liste des langages de programmation probabilistes

Nom S'étend de Langue de l'hôte
Analytica C++
boucle de baie Python Python
CuPPL NOVA
Entreprise Schème C++
Probabiliste-C C C
anglican Clojuré Clojuré
IBAL OCaml
BayesDB SQLite , Python
PRISME B-Prologue
Déduire.NET .NET Framework .NET Framework
fossette MATLAB , Java
chimpanzé MATLAB, Java
BLOG Java
diff-SAT Programmation de poste de réponse , SAT (DIMACS CNF)
PSQL SQL
BUGS
USINE Scala Scala
PMTK MATLAB MATLAB
Alchimie C++
Dyna Prologue
Figaro Scala Scala
Église Schème Divers : JavaScript, Schéma
ProbLog Prologue Python, Jython
ProBT C++, Python
Stan C++
Hakaru Haskell Haskell
BAli-Phy (logiciel) Haskell C++
ProbCog Java, Python
Pari Raquette
Ppendant que Tandis que Python
Tuffy Java
PyMC3 Python, Théano Python
PyMC4 Python, probabilité TensorFlow Python
Rainier Scala Scala
grand TensorFlow R
Grenade Python Python
Léa Python Python
WebPPL JavaScript JavaScript
La chance Rayure JavaScript
Photo Julia Julia
Turing.jl Julia Julia
Génération Julia Julia
PPL de premier ordre de bas niveau Python, Clojure, Pytorch Divers : Python, Clojure
Troll Moscou ML
Edouard TensorFlow Python
Probabilité TensorFlow TensorFlow Python
Edouard2 Probabilité TensorFlow Python
Pyro PyTorche Python
NumPyro JAX Python
Saül Scala Scala
Stan C++, Python, R
RangPL Java
Bouleau C++
psi

Difficulté

Raisonner sur les variables en tant que distributions de probabilités pose des difficultés aux programmeurs novices, mais ces difficultés peuvent être résolues grâce à l'utilisation de visualisations de réseau bayésiennes et de graphiques de distributions de variables intégrés dans l'éditeur de code source.

Voir également

Remarques

Liens externes