概率编程
概率编程(PP:Probabilistic programming)是一种编程范型,在其中指定了概率模型并自动进行这些模型的推断[1]。它代表了统一概率模型和传统通用编程的一种尝试,使前者更加容易并更广泛的应用[2][3]。它可以用于建立系统帮助在面对不确定时作出决定。
用于概率编程的编程语言被称为“概率编程语言”(PPL)。
应用
概率推理已经广泛用于各种任务,比如预测股价、推荐电影、诊断计算机、检测网络入侵和图像检查[4]。但是直到最近(部份由于计算能力的限制),概率编程范围有限,并且多数推断算法对每个任务都必须手工编写。
尽管如此,在2015年一个50行的概率计算机视觉程序被用于基于人脸的2D图像来生成这些人脸的3D模型。这个程序使用反向(inverse)图作为推断方法的基础,并使用Julia的Picture包来建造[4]。这使得“用50行代码写出过去千行代码的程序”成为可能[5][6]。Gen概率编程库(也用Julia写成)已经被用于视觉和机器人任务[7]。
最近,概率编程系统Turing.jl已经被用于各种制药和经济应用[8]。Julia中的概率编程已经结合于可微分编程,通过组合Julia包Zygote.jl和Turing.jl[9]。
概率编程语言
概率编程语言(PPL)经常从基础语言扩展而来。底层基础语言的选择依赖于模型与基础语言本体的类似性,还有商业考虑和个人偏好。例如Dimple[10]和Chimple[11]基于了Java,Infer.NET基于了.NET框架[12],而PRISM扩展自Prolog[13]。但是,一些PPL比如WinBUGS和Stan,提供了独立的语言,没有明显起源自另一种语言[14][15]。
一些PPL正在活跃开发中,包括在beta测试中的那些。两个最流行的工具是Stan和PyMC[16]。
关系
概率关系编程语言(PRPL)专门设计来描述和推论概率关系模型(PRM)的概率编程语言(PPL)。
PRM的开发通常具有一组算法,用于关注的分布的归约、推理和发现,它们被嵌入到对应的PRPL中。
概率编程语言列表
名字 | 扩展自 | 宿主语言 |
---|---|---|
Analytica[17] | C++ | |
bayesloop[18][19] | Python | Python |
CuPPL[20] | NOVA[21] | |
Venture[22] | Scheme | C++ |
Probabilistic-C[23] | C | C |
Anglican[24] | Clojure | Clojure |
IBAL[25] | OCaml | |
BayesDB[26] | SQLite, Python | |
PRISM[13] | B-Prolog | |
Infer.NET[12] | .NET Framework | .NET Framework |
dimple[10] | MATLAB, Java | |
chimple[11] | MATLAB, Java | |
BLOG[27] | Java | |
diff-SAT[28] | 回答集编程, SAT (DIMACS CNF) | |
PSQL[29] | SQL | |
BUGS[14] | Pascal | |
FACTORIE[30] | Scala | Scala |
PMTK[31] | MATLAB | MATLAB |
Alchemy[32] | C++ | |
Dyna[33] | Prolog | |
Figaro[34] | Scala | Scala |
Church[35] | Scheme | 各种: JavaScript, Scheme |
ProbLog[36] | Prolog | Python |
ProBT[37] | C++, Python | |
Stan[15] | BUGS | C++ |
Hakaru[38] | Haskell | Haskell |
BAli-Phy (软件)[39] | Haskell | C++ |
ProbCog[40] | Java, Python | |
Gamble[41] | Racket | |
PWhile[42] | While | Python |
Tuffy[43] | Java | |
PyMC[44] | Python | Python |
Rainier[45][46] | Scala | Scala |
greta[47] | TensorFlow | R |
pomegranate[48] | Python | Python |
Lea[49] | Python | Python |
WebPPL[50] | JavaScript | JavaScript |
Let's Chance[51] | Scratch | JavaScript |
Picture[4] | Julia | Julia |
Turing.jl[52] | Julia | Julia |
Gen[53] | Julia | Julia |
Low-level First-order PPL[54] | Python, Clojure, Pytorch | 各种: Python, Clojure |
Troll[55] | Moscow ML | |
Edward[56] | TensorFlow | Python |
TensorFlow Probability[57] | TensorFlow | Python |
Edward2[58] | TensorFlow Probability | Python |
Pyro[59] | PyTorch | Python |
NumPyro[60] | JAX | Python |
Saul[61] | Scala | Scala |
Stan[62] | C++, Python, R | |
RankPL[63] | Java | |
Birch[64] | C++ | |
PSI[65] | D | |
Blang[66] |
参见
- 统计关系学习
- 归纳编程
- 贝叶斯编程
注释
- . phys.org. April 13, 2015 [2015-04-13]. (原始内容存档于2021-01-28).
- . probabilistic-programming.org. [December 24, 2013]. (原始内容存档于January 10, 2016).
- Pfeffer, Avrom (2014), Practical Probabilistic Programming, Manning Publications. p.28. ISBN 978-1 6172-9233-0
- . KurzweilAI. April 13, 2015 [27 Nov 2017]. (原始内容存档于2021-02-12).
- Hardesty, Larry. . April 13, 2015 [2021-01-16]. (原始内容存档于2021-01-22).
- . [2021-01-16]. (原始内容存档于2019-09-20).
- . VentureBeat. 2019-06-27 [2019-06-27]. (原始内容存档于2021-01-24) (美国英语).
- , 2019 [2021-01-16], (原始内容存档于2020-08-06)
- , 2019, arXiv:1907.07587
- . analog.com. July 2, 2021 [2021-01-16]. (原始内容存档于2020-10-14).
- . analog.com. April 16, 2021 [2021-01-16]. (原始内容存档于2020-11-07).
- . microsoft.com. Microsoft. [2021-01-16]. (原始内容存档于2016-12-06).
- . rjida.meijo-u.ac.jp. [July 8, 2015]. (原始内容存档于March 1, 2015).
- . cam.ac.uk. [January 12, 2011]. (原始内容存档于March 14, 2014).
- . mc-stan.org. (原始内容存档于2012-09-03).
- . [2017-03-10]. (原始内容存档于2021-01-29).
- . lumina.com. [2021-01-16]. (原始内容存档于2021-01-28).
- . [2021-01-16]. (原始内容存档于2020-12-01).
- . GitHub. December 7, 2021 [2021-01-16]. (原始内容存档于2020-09-28).
- . popl19.sigplan.org. [2021-01-16]. (原始内容存档于2019-01-21).
- . acm.org. Array'14. June 9, 2014: 8–13. ISBN 9781450329378. S2CID 6748967. doi:10.1145/2627373.2627375.
- . mit.edu. [September 20, 2014]. (原始内容存档于January 25, 2016).
- . ox.ac.uk. [March 24, 2015]. (原始内容存档于January 4, 2016).
- . ox.ac.uk. January 6, 2021 [2021-01-16]. (原始内容存档于2020-10-26).
- . (原始内容存档于December 26, 2010).
- . GitHub. December 26, 2021 [2021-01-16]. (原始内容存档于2020-09-21).
- . mit.edu. (原始内容存档于June 16, 2011).
- . GitHub. October 8, 2021 [2022-08-31]. (原始内容存档于2023-04-25).
- Dey, Debabrata; Sarkar, Sumit. . Data & Knowledge Engineering. 1998, 28: 107–120. doi:10.1016/S0169-023X(98)00015-9.
- . google.com. [2021-01-16]. (原始内容存档于2012-04-14).
- . google.com. [2021-01-16]. (原始内容存档于2011-04-10).
- . washington.edu. [2021-01-16]. (原始内容存档于2008-06-16).
- . www.dyna.org. [January 12, 2011]. (原始内容存档于January 17, 2016).
- . cra.com. February 9, 2017.
- . mit.edu. [April 8, 2013]. (原始内容存档于January 14, 2016).
- . dtai.cs.kuleuven.be. [2021-01-16]. (原始内容存档于2020-11-08).
- ProbaYes. . probayes.com. [November 26, 2013]. (原始内容存档于March 5, 2016).
- . hakaru-dev.github.io/. [2021-01-16]. (原始内容存档于2020-11-08).
- . bali-phy.org. [2021-01-16]. (原始内容存档于2021-03-22).
- . GitHub. [2021-01-16]. (原始内容存档于2020-11-29).
- Culpepper, Ryan. . January 17, 2017 [2021-01-16]. (原始内容存档于2020-11-06) –GitHub.
- . GitHub. May 25, 2020 [2021-01-16]. (原始内容存档于2020-10-17).
- . stanford.edu. [2021-01-16]. (原始内容存档于2020-07-22).
- PyMC devs. . pymc-devs.github.io. [2022-08-31]. (原始内容存档于2022-05-16).
- , Stripe, 2020-08-19 [2020-08-26], (原始内容存档于2021-02-19)
- . samplerainier.com. [2020-08-26].
- . GitHub. [2018-10-02]. (原始内容存档于2018-10-03).
- . pomegranate.readthedocs.io. [2018-10-02]. (原始内容存档于2021-01-22) (英语).
- . bitbucket.org. [2021-01-16]. (原始内容存档于2021-01-21).
- . github.com/probmods/webppl. [2021-01-16]. (原始内容存档于2020-12-29).
- . dl.acm.org. Chi Ea '20. April 25, 2020: 1–7 [2020-08-01]. ISBN 9781450368193. S2CID 216079395. doi:10.1145/3334480.3383071. (原始内容存档于2021-01-22) (英语).
- . GitHub. December 28, 2021.
- . [2019-06-17]. (原始内容存档于2020-11-12).
- . ox.ac.uk. November 2, 2019.
- . [2021-01-16]. (原始内容存档于2021-01-25).
- . edwardlib.org. [2017-01-17]. (原始内容存档于2020-11-08).
- TensorFlow. . TensorFlow. 2018-04-11 [2018-10-02]. (原始内容存档于2021-01-22).
- . GitHub. [2018-10-02]. (原始内容存档于2020-01-08) (英语).
- . pyro.ai. [2018-02-09]. (原始内容存档于2021-01-19) (英语).
- . pyro.ai. [2021-07-23]. (原始内容存档于2022-10-31) (英语).
- . [2021-01-16]. (原始内容存档于2018-01-16).
- . [2021-01-16]. (原始内容存档于2021-04-02).
- Rienstra, Tjitze, , 2018-01-18 [2018-01-18], (原始内容存档于2020-11-09)
- . birch-lang.org. [2018-04-20]. (原始内容存档于2021-01-29).
- . psisolver.org. [2019-08-18]. (原始内容存档于2021-01-23).
- . [2022-08-31]. (原始内容存档于2021-05-10).
- Gorinova, Maria I.; Sarkar, Advait; Blackwell, Alan F.; Syme, Don. . Proceedings of the 2016 CHI Conference on Human Factors in Computing Systems. CHI '16 (New York, NY, USA: ACM). 2016-01-01: 2533–2537. ISBN 9781450333627. doi:10.1145/2858036.2858221.