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