Вероятностное программирование
Вероятностное программирование ( ПП ) — это парадигма программирования , в которой задаются вероятностные модели и вывод для этих моделей выполняется автоматически. [1] Он представляет собой попытку объединить вероятностное моделирование и традиционное программирование общего назначения, чтобы сделать первое более простым и более широко применимым. [2] [3] Его можно использовать для создания систем, помогающих принимать решения в условиях неопределенности.
Языки программирования, используемые для вероятностного программирования, называются «вероятностными языками программирования» (PPL).
Приложения
[ редактировать ]Вероятностные рассуждения использовались для решения самых разных задач, таких как прогнозирование цен на акции, рекомендация фильмов, диагностика компьютеров, обнаружение кибер-вторжений и обнаружение изображений. [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 является продолжением Пролога . [14] Однако некоторые PPL, такие как WinBUGS , предлагают автономный язык, который близко соответствует математическому представлению статистических моделей и не имеет очевидного происхождения из другого языка программирования. [15] [16]
Язык WinBUGS был реализован для выполнения байесовских вычислений с использованием выборки Гиббса и связанных с ней алгоритмов. Хотя этот язык реализован на относительно неизвестном языке программирования (Component Pascal), он допускает байесовский вывод для широкого спектра статистических моделей с использованием гибкого вычислительного подхода. Один и тот же язык BUGS можно использовать для определения байесовских моделей для вывода с помощью различных вычислительных вариантов («сэмплеров») и соглашений или значений по умолчанию, используя автономную программу WinBUGS (или связанные пакеты R, rbugs и r2winbugs) и JAGS (просто еще один сэмплер Гиббса, еще одна отдельная программа со связанными пакетами R, включая rjags, R2jags и runjags). Совсем недавно другие языки для поддержки спецификации и вывода байесовской модели допускают другой или более эффективный выбор для базовых байесовских вычислений и доступны из среды анализа данных и программирования R, например: Stan , NIMBLE и NUTS. Влияние языка BUGS очевидно в этих более поздних языках, которые даже используют один и тот же синтаксис для некоторых аспектов спецификации модели.
Несколько PPL находятся в активной разработке, в том числе некоторые находятся в стадии бета-тестирования. Два популярных инструмента — Stan и PyMC . [17]
Реляционный
[ редактировать ]Вероятностный реляционный язык программирования (PRPL) — это PPL, специально разработанный для описания и вывода с помощью вероятностных реляционных моделей (PRM).
PRM обычно разрабатывается с набором алгоритмов для сокращения, вывода и обнаружения соответствующих распределений, которые встроены в соответствующий PRPL.
Вероятностно-логическое программирование
[ редактировать ]Вероятностное логическое программирование — это парадигма программирования , которая расширяет логическое программирование вероятностями.
Большинство подходов к вероятностному логическому программированию основаны на семантике распределения, которая разбивает программу на набор вероятностных фактов и логическую программу. Он определяет распределение вероятностей интерпретаций вселенной Эрбрана программы. [18]
Список вероятностных языков программирования
[ редактировать ]В этом списке обобщаются различные ЗГЗ, доступные в настоящее время, и поясняется их происхождение.
Эта статья может содержать чрезмерное количество сложных деталей, которые могут заинтересовать только определенную аудиторию . ( Октябрь 2019 г. ) |
Имя | Распространяется от | Принимающий язык |
---|---|---|
Аналитика [19] | С++ | |
Байесовская петля [20] [21] | Питон | Питон |
Бобовая машина [22] | PyTorch | Питон |
Риск [23] | Схема | С++ |
БайесБД [24] | SQLite , Питон | |
ПРИЗМА [14] | Б-Пролог | |
Infer.NET [13] | .NET Framework | .NET Framework |
дифф-SAT [25] | Программирование набора ответов , SAT (DIMACS CNF) | |
PSQL [26] | SQL | |
ОШИБКИ [15] | Компонентный Паскаль | |
Вот и все [27] | Пролог | |
Фигаро [28] | Скала | Скала |
Проблог [29] | Пролог | Питон |
ПроБТ [30] | С++, Питон | |
Стэн [16] | ОШИБКИ | С++ |
Хакару [31] | Хаскелл | Хаскелл |
BAli-Phy (программное обеспечение) [32] | Хаскелл | С++ |
ПробКог [33] | Ява, Питон | |
ПиМК [34] | Питон | Питон |
Ренье [35] [36] | Скала | Скала |
Грета [37] | ТензорФлоу | Р |
гранат [38] | Питон | Питон |
Здесь [39] | Питон | Питон |
WebPPL [40] | JavaScript | JavaScript |
Картина [4] | Юлия | Юлия |
Тьюринг.jl [12] | Юлия | Юлия |
Gen [41] | Юлия | Юлия |
Эдвард [42] | ТензорФлоу | Питон |
Вероятность тензорного потока [43] | ТензорФлоу | Питон |
Эдвард2 [44] | Вероятность тензорного потока | Питон |
Поджигатель [45] | PyTorch | Питон |
NumPyro [46] | ДЖАКС | Питон |
Береза [47] | С++ | |
пси [48] | Д | |
Бланг [49] | ||
Мультиверсия [50] | Питон | Питон |
Сложность
[ редактировать ]Рассуждения о переменных как о распределениях вероятностей вызывают трудности у начинающих программистов, но эти трудности можно решить с помощью визуализации байесовских сетей и графиков распределения переменных, встроенных в редактор исходного кода. [51]
См. также
[ редактировать ]- Статистическое реляционное обучение
- Индуктивное программирование
- Байесовское программирование
- Обозначение таблички
Примечания
[ редактировать ]- ^ «Вероятностное программирование позволяет с помощью 50 строк кода сделать то, что раньше требовало тысяч» . физ.орг . 13 апреля 2015 года . Проверено 13 апреля 2015 г.
- ^ «Вероятностное программирование» . Вероятностное программирование.org . Архивировано из оригинала 10 января 2016 года . Проверено 24 декабря 2013 г.
- ^ Пфеффер, Авром (2014), Практическое вероятностное программирование , Manning Publications. стр.28. ISBN 978-1 6172-9233-0
- ^ Перейти обратно: а б с «Краткий код вероятностного программирования машинного обучения заменяет сложные программы для задач компьютерного зрения» . КурцвейлАИ . 13 апреля 2015 года . Проверено 27 ноября 2017 г.
- ^ Хардести, Ларри (13 апреля 2015 г.). «Графика наоборот» .
- ^ «MIT демонстрирует сценарий машинного обучения для создания CREEPY HEADS» . Регистр .
- ^ «Система программирования Gen MIT упрощает кривую обучения проектам искусственного интеллекта» . ВенчурБит . 27 июня 2019 г. Проверено 27 июня 2019 г.
- ^ Семенова, Елизавета; Уильямс, Доминик П.; Афзал, Авид М.; Лазич, Стэнли Э. (1 ноября 2020 г.). «Байесовская нейронная сеть для прогнозирования токсичности» . Вычислительная токсикология . 16 : 100133. дои : 10.1016/j.comtox.2020.100133 . ISSN 2468-1113 . S2CID 225362130 .
- ^ Уильямс, Доминик П.; Лазич, Стэнли Э.; Фостер, Элисон Дж.; Семенова, Елизавета; Морган, Пол (2020), «Прогнозирование лекарственного повреждения печени с помощью байесовского машинного обучения» , Chemical Research in Toxicology , 33 (1): 239–248, doi : 10.1021/acs.chemrestox.9b00264 , PMID 31535850 , S2CID 202689667
- ^ Иннес, Майк; Эдельман, Алан; Фишер, Кено; Ракаукас, Крис; Саба, Эллиот; Вирал Б. Шах; Теббутт, Уилл (2019). «∂P: система дифференцируемого программирования, соединяющая машинное обучение и научные вычисления». arXiv : 1907.07587 [ cs.PL ].
- ^ Гудман, Ной Д.; Тененбаум, Джошуа Б; Бухсбаум, Дафна; Хартшорн, Джошуа; Хокинс, Роберт; О'Доннелл, Тимоти Дж; Тесслер, Майкл Генри. «Вероятностные модели познания» . Вероятностные модели познания. 2-е издание . Проверено 27 мая 2023 г.
- ^ Перейти обратно: а б «Язык Тьюринга для вероятностного программирования» . Гитхаб . 28 декабря 2021 г.
- ^ Перейти обратно: а б «Инфер.НЕТ» . microsoft.com . Майкрософт.
- ^ Перейти обратно: а б «ПРИЗМА: Программирование в статистическом моделировании» . rjida.meijo-u.ac.jp . Архивировано из оригинала 1 марта 2015 года . Проверено 8 июля 2015 г.
- ^ Перейти обратно: а б «Проект BUGS - Отдел биостатистики MRC» . cam.ac.uk. Архивировано из оригинала 14 марта 2014 года . Проверено 12 января 2011 г.
- ^ Перейти обратно: а б «Стэн» . mc-stan.org . Архивировано из оригинала 3 сентября 2012 года.
- ^ «Алгоритмы вероятностного программирования» . Проверено 10 марта 2017 г.
- ^ Де Рэдт, Люк; Киммиг, Анжелика (1 июля 2015 г.). «Концепции вероятностного (логического) программирования» . Машинное обучение . 100 (1): 5–47. дои : 10.1007/s10994-015-5494-z . ISSN 1573-0565 .
- ^ «Аналитика — язык вероятностного моделирования» . lumina.com .
- ^ «bayesloop — среда вероятностного программирования» . bayesloop.com .
- ^ «GitHub — байеслуп» . Гитхаб . 7 декабря 2021 г.
- ^ «Bean Machine — универсальный вероятностный язык программирования, обеспечивающий быстрый и точный байесовский анализ» . beanmachine.org .
- ^ «Венчурное — универсальная платформа вероятностного программирования» . mit.edu . Архивировано из оригинала 25 января 2016 года . Проверено 20 сентября 2014 г.
- ^ «BayesDB на SQLite. Байесовская таблица базы данных для запроса вероятного значения данных так же легко, как базы данных SQL запрашивают сами данные» . Гитхаб . 26 декабря 2021 г.
- ^ «diff-SAT (вероятностный SAT/ASP)» . Гитхаб . 8 октября 2021 г.
- ^ Дей, Дебабрата; Саркар, Сумит (1998). «PSQL: язык запросов для вероятностных реляционных данных». Инженерия данных и знаний . 28 : 107–120. дои : 10.1016/S0169-023X(98)00015-9 .
- ^ «Дина» . www.dyna.org . Архивировано из оригинала 17 января 2016 года . Проверено 12 января 2011 г.
- ^ «Чарльз Ривер Аналитика — услуги вероятностного моделирования» . cra.com . 9 февраля 2017 г.
- ^ «ProbLog: Вероятностное программирование» . dtai.cs.kuleuven.be .
- ^ ПробаДа. «ПробаДа — Вместе мы улучшаем ваши данные» . probayes.com . Архивировано из оригинала 5 марта 2016 года . Проверено 26 ноября 2013 г.
- ^ «Домашняя страница Хакару» . хакару-dev.github.io /.
- ^ «Домашняя страница BAli-Phy» . bali-phy.org .
- ^ «ПробКог» . Гитхаб .
- ^ Разработчики PyMC. «ПиМК» . pymc-devs.github.io .
- ^ Stripe/rainier , Stripe, 19 августа 2020 г. , получено 26 августа 2020 г.
- ^ «Ренье · Байесовский вывод для Scala» . www.samplerainier.com . Проверено 26 августа 2020 г.
- ^ «Грета: простое и масштабируемое статистическое моделирование в R» . Гитхаб . Проверено 2 октября 2018 г.
- ^ «Главная — документация граната 0.10.0» . гранат.readthedocs.io . Проверено 2 октября 2018 г.
- ^ «Домашняя страница Леи» . bitbucket.org .
- ^ «Домашняя страница WebPPL» . github.com/probmods/webppl .
- ^ «Gen: язык вероятностного программирования общего назначения с программируемым выводом» . Проверено 11 июня 2024 г.
- ^ «Эдвард – Дом» . edwardlib.org . Проверено 17 января 2017 г.
- ^ TensorFlow (11 апреля 2018 г.). «Представляем вероятность TensorFlow» . ТензорФлоу . Проверено 2 октября 2018 г.
- ^ « Модуль вероятности TensorFlow 'Edward2'» . Гитхаб . Проверено 11 июня 2024 г.
- ^ «Пиро» . пиро.ай . Проверено 9 февраля 2018 г.
- ^ «НумПиро» . пиро.ай . Проверено 23 июля 2021 г.
- ^ «Вероятностное программирование в Birch» . birch-lang.org . Проверено 20 апреля 2018 г.
- ^ «PSI Solver — Точный вывод для вероятностных программ» . psisolver.org . Проверено 18 августа 2019 г.
- ^ "Дом" . www.stat.ubc.ca.
- ^ Перов Юра; Грэм, Логан; Гугулиас, Костис; Риченс, Джонатан Г.; Ли, Чиаран М.; Бейкер, Адам; Джохри, Саураб (28 января 2020 г.), MultiVerse: причинно-следственные рассуждения с использованием выборки по важности в вероятностном программировании , arXiv : 1910.08091
- ^ Горинова Мария Ивановна; Саркар, Адвайт; Блэквелл, Алан Ф.; Сайм, Дон (1 января 2016 г.). «Живая среда вероятностного программирования с множественным представлением для новичков». Материалы конференции CHI 2016 г. по человеческому фактору в вычислительных системах . ЧИ '16. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 2533–2537. дои : 10.1145/2858036.2858221 . ISBN 9781450333627 . S2CID 3201542 .