Вероятностное программирование (PP) - это парадигма программирования , в котором указаны вероятностные модели, и вывод для этих моделей выполняется автоматически. Он представляет собой попытку объединить вероятностное моделирование и традиционное программирование общего назначения, чтобы сделать первое проще и более широко применимым. Его можно использовать для создания систем, которые помогают принимать решения в условиях неопределенности.
Языки программирования, используемые для вероятностного программирования, называются «вероятностными языками программирования» (PPL).
Вероятностные рассуждения использовались для широкого круга задач, таких как прогнозирование цен на акции, рекомендации фильмов, диагностика компьютеров, обнаружение кибер-вторжений и обнаружение изображений. Однако до недавнего времени (частично из-за ограниченной вычислительной мощности) вероятностное программирование было ограничено по объему, и большинство алгоритмов вывода приходилось писать вручную для каждой задачи.
Тем не менее, в 2015 году 50-строчная вероятностная программа компьютерного зрения была использована для создания 3D-моделей человеческих лиц на основе 2D-изображений этих лиц. Программа использовала инверсную графику в качестве основы для метода вывода и была построена с использованием пакета Picture в Julia. Это сделало возможным «50 строк кода, которые раньше занимали тысячи».
Библиотека вероятностного программирования (также написанная на Джулии) была применена для задач видения и робототехники.
Совсем недавно, системы вероятностного программирования применялись в различных фармацевтических и экономических приложениях.
Вероятностное программирование в Julia также было объединено с дифференцируемым программированием путем объединения пакета Julia Zygote.jl с Turing.jl.
PPL часто являются производными от базового языка. Выбор основного базового языка зависит от сходства модели с онтологией основного языка, а также коммерческих соображений и личных предпочтений. Например, Dimple и Chimple основаны на Java, Infer.NET основан на .NET Framework, а PRISM расширяется от Prolog. Однако некоторые PPL, такие как WinBUGS и Stan, предлагают автономный язык без очевидного происхождения на другом языке.
Некоторые PPL находятся в активной разработке, в том числе некоторые в бета-тестировании. Двумя наиболее популярными инструментами являются Stan и PyMC3.
A вероятностный реляционный язык программирования (PRPL) - это PPL, специально разработанный для описания и вывода с помощью вероятностных реляционных моделей (PRMs).
PRM обычно разрабатывается с набором алгоритмов сокращения, вывода и обнаружения соответствующих распределений, которые встроены в соответствующий PRPL.
Имя | Расширяется от | Основной язык |
---|---|---|
Analytica | C ++ | |
bayesloop | Python | Python |
CuPPL | NOVA | |
Venture | Схема | C ++ |
Probabilistic-C | C | C |
Англиканский | Clojure | Clojure |
IBAL | OCaml | |
BayesDB | SQLite, Python | |
PRISM | B-Prolog | |
Infer.NET | .NET Framework | .NET Framework |
углубление | MATLAB, Java | |
chimple | MATLAB, Java | |
BLOG | Java | |
delSAT | Программирование набора ответов, SAT (DIMACS CNF) | |
SQL | ||
ОШИБКИ | ||
FACTORIE | Scala | Scala |
PMTK | MATLAB | MATLAB |
Alchemy | C++ | |
Dyna | Prolog | |
Figaro | Scala | Scala |
Church | Scheme | Разное: JavaScript, схема |
ProbLog | Prolog | Python, Jython |
ProBT | C ++, Python | |
Stan | C ++ | |
Hakaru | Haskell | Haskell |
BAli-Phy (software) | Haskell | C ++ |
ProbCog | Java, Python | |
Gamble | Racket | |
PWhile | While | Python |
Tuffy | Java | |
PyMC3 | Python, Theano | Python |
PyMC4 | Python, TensorFlow Probability | Python |
Rainier | Scala | Scala |
greta | TensorFlow | R |
pomegranate | Python | Python |
Lea | Python | Python |
WebPPL | JavaScript | JavaScript |
Let's Chance | Scratch | JavaScript |
Picture | Julia | Julia |
Turing.jl | Джулия | Джулия |
Gen | Джулия | Джулия |
Низкоуровневый PPL первого порядка | Python, Clojure, Pytorch | Разное: Python, Clojure |
Troll | Moscow ML | |
Эдвард | TensorFlow | Python |
TensorFlow Probability | TensorFlow | Python |
Edward2 | Вероятность TensorFlow | Python |
Pyro | PyTorch | Python |
Saul | Scala | Scala |
RankPL | Java | |
Берч | C ++ | |
PSI | D |
Рассуждения о вариабельности Так как вероятностные распределения вызывают трудности у начинающих программистов, но эти трудности можно решить с помощью визуализации байесовской сети и графиков распределения переменных, встроенных в редактор исходного кода.