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

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

Языки программирования, используемые для вероятностного программирования, называются «вероятностными языками программирования» (PPL).

Приложения

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

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

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

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

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

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

PPL часто выходят из базового языка. Выбор основного базового языка зависит от сходства модели с базовым языком. онтология, а также коммерческие соображения и личные предпочтения. Например, ямочка[10] и шимпанзе[11] основаны на Ява, Infer.NET основан на .NET Framework,[12] в то время как PRISM простирается от Пролог.[13] Однако некоторые PPL, такие как WinBUGS и Стэн предлагают автономный язык без очевидного происхождения на другом языке.[14][15]

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

Реляционный

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

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

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

ИмяПростирается отПринимающий язык
Аналитика[17]C ++
байесовский[18][19]PythonPython
CuPPL[20]НОВАЯ ЗВЕЗДА[21]
Риск[22]СхемаC ++
Вероятностный-C[23]CC
Англиканский[24]ClojureClojure
IBAL[25]OCaml
BayesDB[26]SQLite, Python
ПРИЗМА[13]B-Prolog
Infer.NET[12].NET Framework.NET Framework
ямочка[10]MATLAB, Ява
шимпанзе[11]MATLAB, Java
БЛОГ[27]Ява
delSAT[28]Программирование набора ответов, SAT (DIMACS CNF)
PSQL[29]SQL
ОШИБКИ[14]
ФАБРИКА[30]ScalaScala
ПМТК[31]MATLABMATLAB
Алхимия[32]C ++
Дина[33]Пролог
Фигаро[34]ScalaScala
Церковь[35]СхемаРазное: JavaScript, Схема
ProbLog[36]ПрологPython, Jython
ProBT[37]C ++, Python
Стэн[15]C ++
Хакару[38]HaskellHaskell
Бали-Фы (программного обеспечения)[39]HaskellC ++
ProbCog[40]Java, Python
Азартная игра[41]Ракетка
P пока[42]ПокаPython
Tuffy[43]Ява
PyMC3[44]Python, TheanoPython
PyMC4[45]Python, Вероятность TensorFlowPython
Ренье[46][47]ScalaScala
Грета[48]TensorFlowр
гранат[49]PythonPython
Леа[50]PythonPython
WebPPL[51]JavaScriptJavaScript
Давай шанс[52]ЦарапатьJavaScript
Рисунок[4]ЮляЮля
Turing.jl[53]ЮляЮля
Gen[54]ЮляЮля
Низкоуровневый PPL первого порядка[55]Python, Clojure, PytorchРазное: Python, Clojure
Тролль[56]Москва МЛ
Эдвард[57]TensorFlowPython
Вероятность TensorFlow[58]TensorFlowPython
Эдвард2[59]Вероятность TensorFlowPython
Поджигатель[60]PyTorchPython
Саул[61]ScalaScala
Стэн[62]C ++, Python, R
RankPL[63]Ява
Береза[64]C ++
PSI[65]D

Сложность

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

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

Примечания

  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. ^ а б c «Короткий вероятностный программный код машинного обучения заменяет сложные программы для задач компьютерного зрения». KurzweilAI. 13 апреля 2015 г.. Получено 27 ноября, 2017.
  5. ^ Хардести, Ларри (13 апреля 2015 г.). «Графика наоборот».
  6. ^ "Массачусетский технологический институт демонстрирует сценарий машинного обучения, чтобы сделать ЖУТКИЕ ГОЛОВЫ".
  7. ^ «Система программирования Gen, разработанная MIT, сглаживает кривую обучения для проектов ИИ». VentureBeat. 27 июня 2019 г.,. Получено 27 июня, 2019.
  8. ^ Прогнозирование травмы печени, вызванной приемом лекарств, с помощью байесовского машинного обучения, 2019
  9. ^ ∂P: дифференцируемая система программирования для объединения машинного обучения и научных вычислений, 2019, arXiv:1907.07587
  10. ^ а б "Домашняя страница Dimple". analog.com.
  11. ^ а б "Домашняя страница Chimple". analog.com.
  12. ^ а б "Infer.NET". microsoft.com. Microsoft.
  13. ^ а б «ПРИЗМА: Программирование в статистическом моделировании». rjida.meijo-u.ac.jp. Архивировано из оригинал 1 марта 2015 г.. Получено 8 июля, 2015.
  14. ^ а б «Проект BUGS - Отдел биостатистики MRC». cam.ac.uk. Архивировано из оригинал 14 марта 2014 г.. Получено 12 января, 2011.
  15. ^ а б "Стэн". mc-stan.org. Архивировано из оригинал 3 сентября 2012 г.
  16. ^ "Алгоритмы вероятностного программирования". Получено 10 марта, 2017.
  17. ^ «Аналитика - вероятностный язык моделирования». lumina.com.
  18. ^ "Bayesloop: структура вероятностного программирования, которая облегчает выбор объективной модели для моделей с изменяющимися во времени параметрами".
  19. ^ "GitHub - bayesloop".
  20. ^ «Вероятностное программирование с помощью CuPPL». popl19.sigplan.org.
  21. ^ «NOVA: функциональный язык для параллелизма данных». acm.org.
  22. ^ «Венчур - универсальная платформа вероятностного программирования». mit.edu. Архивировано из оригинал 25 января 2016 г.. Получено 20 сентября, 2014.
  23. ^ «Вероятностное С». ox.ac.uk. Архивировано из оригинал 4 января 2016 г.. Получено 24 марта, 2015.
  24. ^ "Англиканская вероятностная система программирования". ox.ac.uk.
  25. ^ "Домашняя страница IBAL". Архивировано из оригинал 26 декабря 2010 г.
  26. ^ "BayesDB на SQLite. Байесовская таблица базы данных для запроса возможных последствий данных так же легко, как базы данных SQL запрашивают сами данные". GitHub.
  27. ^ «Байесовская логика (БЛОГ)». mit.edu. Архивировано из оригинал 16 июня 2011 г.
  28. ^ «delSAT (вероятностный SAT / ASP)».
  29. ^ Дей, Дебабрата; Саркар, Сумит (1998). «PSQL: язык запросов для вероятностных реляционных данных». Инженерия данных и знаний. 28: 107–120. Дои:10.1016 / S0169-023X (98) 00015-9.
  30. ^ "Factorie - вероятностное программирование с императивно заданными факторными графами - Google Project Hosting". google.com.
  31. ^ «PMTK3 - набор инструментов вероятностного моделирования для Matlab / Octave, версия 3 - хостинг проектов Google». google.com.
  32. ^ «Алхимия - ИИ с открытым исходным кодом». Washington.edu.
  33. ^ "Дина". www.dyna.org. Архивировано из оригинал 17 января 2016 г.. Получено 12 января, 2011.
  34. ^ "Charles River Analytics - услуги вероятностного моделирования". cra.com.
  35. ^ "Церковь". mit.edu. Архивировано из оригинал 14 января 2016 г.. Получено 8 апреля, 2013.
  36. ^ «ProbLog: вероятностное программирование». dtai.cs.kuleuven.be.
  37. ^ Проба Да. "ProbaYes - Ensemble, nous valorisations vos données". probayes.com. Архивировано из оригинал 5 марта 2016 г.. Получено 26 ноября, 2013.
  38. ^ "Домашняя страница Хакару". hakaru-dev.github.io/.
  39. ^ "Домашняя страница Бали-Пхи". bali-phy.org.
  40. ^ «ПробКог». GitHub.
  41. ^ Калпеппер, Райан (17 января 2017 г.). "Азартная игра: вероятностное программирование" - через GitHub.
  42. ^ "Компилятор PWhile". GitHub.
  43. ^ "Tuffy: масштабируемая машина логического вывода Маркова". stanford.edu.
  44. ^ Разработчики PyMC. «PyMC3». pymc-devs.github.io.
  45. ^ Разработчики, PyMC (17 мая 2018 г.). «Theano, TensorFlow и будущее PyMC». Разработчики PyMC. Получено 25 января, 2019.
  46. ^ полоса / дождевик, Stripe, 19 августа 2020 г., получено 26 августа, 2020
  47. ^ «Байесовский вывод Ренье для Scala». samplerainier.com. Получено 26 августа, 2020.
  48. ^ "greta: простое и масштабируемое статистическое моделирование в R". GitHub. Получено Второе октября, 2018.
  49. ^ "Главная - документация pomegranate 0.10.0". гранат.readthedocs.io. Получено Второе октября, 2018.
  50. ^ "Домашняя страница Lea". bitbucket.org.
  51. ^ «Домашняя страница WebPPL». github.com/probmods/webppl.
  52. ^ «Давайте шанс: игровое вероятностное программирование для детей | Расширенные тезисы конференции CHI 2020 года по человеческому фактору в вычислительных системах». dl.acm.org. Дои:10.1145/3334480.3383071. Получено 1 августа, 2020.
  53. ^ «Язык Тьюринга для вероятностного программирования».
  54. ^ "Gen: универсальный вероятностный язык программирования с программируемым логическим выводом". Получено 17 июня, 2019.
  55. ^ "LF-PPL: низкоуровневый вероятностный язык программирования первого порядка для недифференцируемых моделей". ox.ac.uk.
  56. ^ "Тролль-роллер и калькулятор вероятностей".
  57. ^ «Эдвард - Дом». edwardlib.org. Получено 17 января, 2017.
  58. ^ TensorFlow (11 апреля 2018 г.). «Представляем TensorFlow Probability». TensorFlow. Получено Второе октября, 2018.
  59. ^ "'Edward2 'Модуль вероятности TensorFlow ". GitHub. Получено Второе октября, 2018.
  60. ^ "Поджигатель". pyro.ai. Получено 9 февраля, 2018.
  61. ^ «CogComp - Главная».
  62. ^ https://mc-stan.org/. Отсутствует или пусто | название = (помощь)
  63. ^ Риенстра, Тджитце (18 января 2018 г.), RankPL: качественный вероятностный язык программирования, основанный на теории ранжирования., получено 18 января, 2018
  64. ^ "Вероятностное программирование в Березе". birch-lang.org. Получено 20 апреля, 2018.
  65. ^ «PSI Solver - Точный вывод для вероятностных программ». psisolver.org. Получено 18 августа, 2019.
  66. ^ Горинова Мария И .; Саркар, Адвайт; Блэквелл, Алан Ф .; Сайм, Дон (1 января 2016 г.). Живая среда вероятностного программирования с множественными представлениями для новичков. Материалы конференции CHI по человеческому фактору в вычислительных системах 2016 г.. ЧИ '16. Нью-Йорк, Нью-Йорк, США: ACM. С. 2533–2537. Дои:10.1145/2858036.2858221. ISBN  9781450333627.

внешняя ссылка