Вероятностное программирование - 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

Сложность

Рассмотрение переменных как вероятностных распределений вызывает трудности у начинающих программистов, но эти трудности могут быть устранены путем использования байесовских сетевых визуализаций и графиков распределений переменных, встроенных в редактор исходного кода.

Смотрите также

Примечания

внешние ссылки