Вероятностное программирование

Программный комплекс для статистических моделей

Вероятностное программирование ( ПП ) — это парадигма программирования, основанная на декларативной спецификации вероятностных моделей , для которых вывод выполняется автоматически. [1] Вероятностное программирование пытается объединить вероятностное моделирование и традиционное программирование общего назначения, чтобы сделать первое более простым и широко применимым. [2] [3] Его можно использовать для создания систем, которые помогают принимать решения в условиях неопределенности. Языки программирования, следующие парадигме вероятностного программирования, называются «языками вероятностного программирования» (ППЛ).

Приложения

Вероятностное рассуждение использовалось для самых разных задач, таких как прогнозирование цен на акции, рекомендация фильмов, диагностика компьютеров, обнаружение кибервторжений и обнаружение изображений. [4] Однако до недавнего времени (отчасти из-за ограниченной вычислительной мощности) вероятностное программирование имело ограниченные возможности, и большинство алгоритмов вывода приходилось писать вручную для каждой задачи.

Тем не менее, в 2015 году 50-строчная вероятностная программа компьютерного зрения была использована для создания 3D-моделей человеческих лиц на основе 2D-изображений этих лиц. Программа использовала обратную графику в качестве основы своего метода вывода и была построена с использованием пакета Picture в Julia . [4] Это сделало возможным «в 50 строках кода то, что раньше занимало тысячи». [5] [6]

Библиотека вероятностного программирования Gen (также написанная на Julia) применялась для задач зрения и робототехники. [7]

Совсем недавно вероятностная система программирования Turing.jl применялась в различных фармацевтических [8] и экономических приложениях. [9]

Вероятностное программирование в Julia также было объединено с дифференцируемым программированием путем объединения пакета Julia Zygote.jl с Turing.jl. [10]

Вероятностные языки программирования также широко используются в байесовской когнитивной науке для разработки и оценки моделей познания. [11]

Вероятностные языки программирования

PPL часто расширяются от базового языка. Например, Turing.jl [12] основан на Julia , Infer.NET основан на .NET Framework , [13] в то время как PRISM расширяется от Prolog . [14] Однако некоторые PPL, такие как WinBUGS , предлагают самодостаточный язык, который тесно связан с математическим представлением статистических моделей, без очевидного происхождения от другого языка программирования. [15] [16]

Язык для WinBUGS был реализован для выполнения байесовских вычислений с использованием выборки Гиббса и связанных алгоритмов. Хотя он реализован на относительно неизвестном языке программирования (Component Pascal), этот язык допускает байесовский вывод для широкого спектра статистических моделей с использованием гибкого вычислительного подхода. Тот же язык BUGS может использоваться для указания байесовских моделей для вывода с помощью различных вычислительных выборов («выборщиков») и соглашений или значений по умолчанию с использованием отдельной программы WinBUGS (или связанных пакетов R, rbugs и r2winbugs) и JAGS (Just Another Gibbs Sampler, еще одна отдельная программа с соответствующими пакетами R, включая rjags, R2jags и runjags). Совсем недавно другие языки для поддержки спецификации и вывода байесовской модели допускают различные или более эффективные варианты для базового байесовского вычисления и доступны из среды анализа и программирования данных R, например: Stan , NIMBLE и NUTS. Влияние языка BUGS очевидно в этих более поздних языках, которые даже используют тот же синтаксис для некоторых аспектов спецификации модели.

Несколько PPL находятся в активной разработке, включая некоторые в бета-тестировании. Два популярных инструмента — Stan и PyMC . [17]

Относительный

Вероятностно -реляционный язык программирования (PRPL) — это PPL, специально разработанный для описания и вывода вероятностных реляционных моделей (PRM).

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

Вероятностно-логическое программирование

Вероятностное логическое программирование — это парадигма программирования , которая расширяет логическое программирование с помощью вероятностей.

Большинство подходов к вероятностному логическому программированию основаны на семантике распределения, которая разделяет программу на набор вероятностных фактов и логическую программу. Она определяет распределение вероятностей по интерпретациям вселенной Эрбрана программы. [18]

Список вероятностных языков программирования

В этом списке обобщены все виды PPL, доступные в настоящее время, и разъясняется их происхождение.

ИмяПростирается отЯзык хоста
Аналитика [19]С++
байеслуп [20] [21]ПитонПитон
Машина для приготовления бобов [22]PyTorchПитон
Предприятие [23]СхемаС++
БайесБД [24]SQLite , Питон
ПРИЗМА [14]B-Пролог
Infer.NET [13].NET Framework.NET Framework
diff-SAT [25]Программирование набора ответов , SAT (DIMACS CNF)
PSQL-язык [26]SQL
ОШИБКИ [15]Компонент Паскаль
Дайна [27]Пролог
Фигаро [28]СкалаСкала
ПробЛог [29]ПрологПитон
ПроБТ [30]С++, Питон
Стэн [16]ОШИБКИС++
Хакару [31]ХаскеллХаскелл
BAli-Phy (программное обеспечение) [32]ХаскеллС++
ПробКог [33]Ява, Питон
PyMC [34]ПитонПитон
Ренье [35] [36]СкалаСкала
грета [37]TensorFlowР
гранат [38]ПитонПитон
Леа [39]ПитонПитон
WebPPL [40]JavaScriptJavaScript
Картинка [4]ДжулияДжулия
Тьюринг.jl [12]ДжулияДжулия
Ген [41]ДжулияДжулия
Эдвард [42]TensorFlowПитон
Вероятность Тензорного Потока [43]TensorFlowПитон
Эдвард2 [44]Вероятность Тензорного ПотокаПитон
Пиро [45]PyTorchПитон
НумПиро [46]ДЖАКСПитон
Береза ​​[47]С++
ПСИ [48]Д
Бланг [49]
Мультиверс [50]ПитонПитон
Англиканская [51]КложурКложур

Сложность

  • Рассуждения о переменных как о вероятностных распределениях вызывают трудности у начинающих программистов, но эти трудности можно преодолеть с помощью визуализации байесовской сети и графиков распределений переменных, встроенных в редактор исходного кода. [52]
  • Поскольку многие PPL полагаются на спецификацию априорных значений для интересующих переменных, спецификация информированных априорных значений часто бывает сложной для новичков. В некоторых случаях библиотеки, такие как PyMC, предоставляют автоматизированные методы для поиска параметризации информированных априорных значений. [53]

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

Примечания

  1. ^ "Вероятностное программирование делает в 50 строк кода то, на что раньше уходили тысячи". phys.org . 13 апреля 2015 г. . Получено 13 апреля 2015 г. .
  2. ^ "Вероятностное программирование". probabilistic-programming.org . Архивировано из оригинала 10 января 2016 года . Получено 24 декабря 2013 года .
  3. ^ Пфеффер, Авром (2014), Практическое вероятностное программирование , Manning Publications. стр. 28. ISBN 978-1 6172-9233-0 
  4. ^ abc "Короткий вероятностный программный машинный обучающий код заменяет сложные программы для задач компьютерного зрения". KurzweilAI . 13 апреля 2015 г. Получено 27 ноября 2017 г.
  5. Хардести, Ларри (13 апреля 2015 г.). «Графика наоборот».
  6. ^ "MIT демонстрирует сценарий машинного обучения для создания СТРАШНЫХ ГОЛОВ". The Register .
  7. ^ «Система программирования Gen от MIT выравнивает кривую обучения для проектов ИИ». VentureBeat . 27 июня 2019 г. Получено 27 июня 2019 г.
  8. ^ Семенова, Елизавета; Уильямс, Доминик П.; Афзал, Авид М.; Лазич, Стэнли Э. (1 ноября 2020 г.). «Байесовская нейронная сеть для прогнозирования токсичности». Computational Toxicology . 16 : 100133. doi : 10.1016/j.comtox.2020.100133. ISSN  2468-1113. S2CID  225362130.
  9. ^ Уильямс, Доминик П.; Лазич, Стэнли Э.; Фостер, Элисон Дж.; Семенова, Елизавета; Морган, Пол (2020), «Прогнозирование лекарственно-индуцированного поражения печени с помощью байесовского машинного обучения», Химические исследования в токсикологии , 33 (1): 239–248 , doi :10.1021/acs.chemrestox.9b00264, PMID  31535850, S2CID  202689667
  10. ^ Иннес, Майк; Эдельман, Алан; Фишер, Кено; Ракаукас, Крис; Саба, Эллиот; Вирал Б. Шах; Теббатт, Уилл (2019). «∂P: Дифференцируемая система программирования для соединения машинного обучения и научных вычислений». arXiv : 1907.07587 [cs.PL].
  11. ^ Гудман, Ноа Д.; Тененбаум, Джошуа Б.; Буксбаум, Дафна; Хартшорн, Джошуа; Хокинс, Роберт; О'Доннелл, Тимоти Дж.; Тесслер, Майкл Генри. «Вероятностные модели познания». Вероятностные модели познания — 2-е издание . Получено 27 мая 2023 г.
  12. ^ ab "Язык Тьюринга для вероятностного программирования". GitHub . 28 декабря 2021 г.
  13. ^ ab "Infer.NET". microsoft.com . Microsoft.
  14. ^ ab "PRISM: Программирование в статистическом моделировании". rjida.meijo-u.ac.jp . Архивировано из оригинала 1 марта 2015 г. Получено 8 июля 2015 г.
  15. ^ ab "The BUGS Project - MRC Biostatistics Unit". cam.ac.uk . Архивировано из оригинала 14 марта 2014 г. Получено 12 января 2011 г.
  16. ^ ab "Stan". mc-stan.org . Архивировано из оригинала 3 сентября 2012 года.
  17. ^ "Алгоритмы, лежащие в основе вероятностного программирования" . Получено 10 марта 2017 г.
  18. ^ De Raedt, Luc; Kimmig, Angelika (1 июля 2015 г.). «Концепции вероятностного (логического) программирования». Machine Learning . 100 (1): 5– 47. doi :10.1007/s10994-015-5494-z. ISSN  1573-0565.
  19. ^ "Analytica — язык вероятностного моделирования". lumina.com .
  20. ^ "bayesloop - Вероятностная среда программирования". bayesloop.com .
  21. ^ "GitHub -- bayesloop". GitHub . 7 декабря 2021 г.
  22. ^ «Bean Machine — универсальный вероятностный язык программирования, позволяющий проводить быстрый и точный байесовский анализ». beanmachine.org .
  23. ^ "Venture -- a general-purpose probabilistic programming platform". mit.edu . Архивировано из оригинала 25 января 2016 года . Получено 20 сентября 2014 года .
  24. ^ "BayesDB на SQLite. Байесовская таблица базы данных для запроса вероятных последствий данных так же легко, как базы данных SQL запрашивают сами данные". GitHub . 26 декабря 2021 г.
  25. ^ "diff-SAT (вероятностный SAT/ASP)". GitHub . 8 октября 2021 г.
  26. ^ Дей, Дебабрата; Саркар, Сумит (1998). «PSQL: язык запросов для вероятностных реляционных данных». Data & Knowledge Engineering . 28 : 107– 120. doi :10.1016/S0169-023X(98)00015-9.
  27. ^ "Dyna". www.dyna.org . Архивировано из оригинала 17 января 2016 г. Получено 12 января 2011 г.
  28. ^ "Charles River Analytics - Услуги вероятностного моделирования". cra.com . 9 февраля 2017 г.
  29. ^ "ProbLog: Вероятностное программирование". dtai.cs.kuleuven.be .
  30. ^ ПробаДа. «ПробаДа - Ансамбль, мы повышаем ценность для вас». probayes.com . Архивировано из оригинала 5 марта 2016 года . Проверено 26 ноября 2013 г.
  31. ^ "Домашняя страница Хакару" . хакару-dev.github.io /.
  32. ^ "Домашняя страница BAli-Phy". bali-phy.org .
  33. ^ "ProbCog". GitHub .
  34. ^ Разработчики PyMC. "PyMC". pymc-devs.github.io .
  35. ^ stripe/rainier, Stripe, 19 августа 2020 г. , получено 26 августа 2020 г.
  36. ^ "Рейньер · Байесовский вывод для Scala". samplerainier.com . Получено 26 августа 2020 г. .
  37. ^ "greta: простое и масштабируемое статистическое моделирование в R". GitHub . Получено 2 октября 2018 г. .
  38. ^ "Главная — документация pomegranate 0.10.0". pomegranate.readthedocs.io . Получено 2 октября 2018 г. .
  39. ^ "Домашняя страница Леи". bitbucket.org .
  40. ^ "Домашняя страница WebPPL". github.com/probmods/webppl .
  41. ^ "Gen: Вероятностный язык программирования общего назначения с программируемым выводом" . Получено 11 июня 2024 г.
  42. ^ "Эдвард – Дом". edwardlib.org . Получено 17 января 2017 г. .
  43. ^ TensorFlow (11 апреля 2018 г.). «Введение в TensorFlow Probability». TensorFlow . Получено 2 октября 2018 г. .
  44. ^ "Модуль вероятности TensorFlow 'Edward2'". GitHub . Получено 11 июня 2024 г.
  45. ^ "Pyro". pyro.ai . Получено 9 февраля 2018 г. .
  46. ^ "NumPyro". pyro.ai . Получено 23 июля 2021 г. .
  47. ^ "Вероятностное программирование в Birch". birch-lang.org . Получено 20 апреля 2018 г.
  48. ^ "PSI Solver - Точный вывод для вероятностных программ". psisolver.org . Получено 18 августа 2019 г. .
  49. ^ "Главная". www.stat.ubc.ca .
  50. ^ Перов, Юра; Грэм, Логан; Гургулиас, Костис; Риченс, Джонатан Г.; Ли, Сиаран М.; Бейкер, Адам; Джохри, Саурабх (28 января 2020 г.), MultiVerse: причинно-следственное рассуждение с использованием выборки по важности в вероятностном программировании , arXiv : 1910.08091
  51. ^ "Англиканская вероятностная система программирования". probprog.github.io . Получено 7 октября 2024 г. .
  52. ^ Горинова, Мария И.; Саркар, Адвайт; Блэквелл, Алан Ф.; Сайм, Дон (1 января 2016 г.). «Живая среда вероятностного программирования с множественным представлением для новичков». Труды конференции CHI 2016 года по человеческому фактору в вычислительных системах . CHI '16. Нью-Йорк, штат Нью-Йорк, США: ACM. стр.  2533– 2537. doi :10.1145/2858036.2858221. ISBN 9781450333627. S2CID  3201542.
  53. ^ "pymc.find_constrained_prior — документация разработчика PyMC". www.pymc.io . Получено 23 октября 2024 г. .
  • Список наборов инструментов для мини-языка вероятностных моделей
  • Вероятностное программирование вики
Retrieved from "https://en.wikipedia.org/w/index.php?title=Probabilistic_programming&oldid=1265322895#Applications"