Вероятностное программирование - Probabilistic programming
Вероятностное программирование ( PP ) - это парадигма программирования, в которой задаются вероятностные модели , и вывод для этих моделей выполняется автоматически. Он представляет собой попытку объединить вероятностное моделирование и традиционное программирование общего назначения, чтобы сделать первое проще и более широко применимым. Его можно использовать для создания систем, которые помогают принимать решения в условиях неопределенности.
Языки программирования, используемые для вероятностного программирования, называются «вероятностными языками программирования» (PPL).
Приложения
Вероятностные рассуждения использовались для широкого круга задач, таких как прогнозирование цен на акции, рекомендации фильмов, диагностика компьютеров, обнаружение кибер-вторжений и обнаружение изображений. Однако до недавнего времени (частично из-за ограниченной вычислительной мощности) вероятностное программирование было ограничено по объему, и большинство алгоритмов вывода приходилось писать вручную для каждой задачи.
Тем не менее, в 2015 году программа вероятностного компьютерного зрения с 50 строками использовалась для создания трехмерных моделей человеческих лиц на основе двухмерных изображений этих лиц. Программа использовала инверсную графику как основу метода вывода и была построена с использованием пакета Picture в Julia . Это стало возможным «в 50 строках кода, на которые раньше уходили тысячи».
Библиотека вероятностного программирования Gen (также написанная на Julia) была применена для задач машинного зрения и робототехники.
В последнее время системы вероятностного программирования Turing.jl применялись в различных фармацевтических и экономических приложениях.
Вероятностное программирование в Julia также было объединено с дифференцируемым программированием путем объединения пакета Julia Zygote.jl с Turing.jl.
Вероятностные языки программирования
PPL часто происходят от базового языка. Выбор базового базового языка зависит от сходства модели с онтологией базового языка , а также коммерческих соображений и личных предпочтений. Например, Dimple и Chimple основаны на Java , Infer.NET основан на .NET Framework , а PRISM расширяется от Prolog . Однако некоторые PPL, такие как WinBUGS и Stan, предлагают автономный язык без очевидного происхождения на другом языке.
Несколько PPL находятся в активной разработке, в том числе некоторые находятся в стадии бета-тестирования. Два самых популярных инструмента - это Stan и PyMC3 .
Реляционный
Вероятностный реляционный язык программирования (НРПЛ) является PPL , специально разработанным для описания и заключить с вероятностными реляционными моделями (PRMS).
PRM обычно разрабатывается с набором алгоритмов сокращения, вывода и обнаружения соответствующих распределений, которые встроены в соответствующий PRPL.
Список вероятностных языков программирования
Имя | Простирается от | Принимающий язык |
---|---|---|
Аналитика | C ++ | |
байесовский | Python | Python |
CuPPL | НОВАЯ ЗВЕЗДА | |
Риск | Схема | C ++ |
Вероятностный-C | C | C |
Англиканский | Clojure | Clojure |
IBAL | OCaml | |
BayesDB | SQLite , Python | |
ПРИЗМА | B-Prolog | |
Infer.NET | .NET Framework | .NET Framework |
ямочка | MATLAB , Java | |
шимпанзе | MATLAB, Java | |
БЛОГ | Джава | |
diff-SAT | Программирование набора ответов , SAT (DIMACS CNF) | |
PSQL | SQL | |
ОШИБКИ | ||
ФАБРИКА | Скала | Скала |
ПМТК | MATLAB | MATLAB |
Алхимия | C ++ | |
Дина | Пролог | |
Фигаро | Скала | Скала |
Церковь | Схема | Разное: JavaScript, Схема |
ProbLog | Пролог | Python, Jython |
ProBT | C ++, Python | |
Стэн | C ++ | |
Хакару | Haskell | Haskell |
BAli-Phy (программное обеспечение) | Haskell | C ++ |
ProbCog | Java, Python | |
Азартная игра | Ракетка | |
P пока | В то время как | Python |
Tuffy | Джава | |
PyMC3 | Python, Theano | Python |
PyMC4 | Python, вероятность TensorFlow | Python |
Ренье | Скала | Скала |
Грета | TensorFlow | р |
гранат | Python | Python |
Леа | Python | Python |
WebPPL | JavaScript | JavaScript |
Давай шанс | Царапать | JavaScript |
Рисунок | Юлия | Юлия |
Turing.jl | Юлия | Юлия |
Gen | Юлия | Юлия |
Низкоуровневый PPL первого порядка | Python, Clojure, Pytorch | Разное: Python, Clojure |
Тролль | Москва МЛ | |
Эдвард | TensorFlow | Python |
Вероятность TensorFlow | TensorFlow | Python |
Эдвард2 | Вероятность TensorFlow | Python |
Поджигатель | PyTorch | Python |
NumPyro | JAX | Python |
Саул | Скала | Скала |
Стэн | C ++, Python, R | |
RankPL | Джава | |
Береза | C ++ | |
PSI | D |
Сложность
Рассмотрение переменных как вероятностных распределений вызывает трудности у начинающих программистов, но эти трудности могут быть устранены путем использования байесовских сетевых визуализаций и графиков распределений переменных, встроенных в редактор исходного кода.