概率编程PPProbabilistic 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]基于了JavaInfer.NET英语Infer.NET基于了.NET框架[12],而PRISM扩展自Prolog[13]。但是,一些PPL比如WinBUGS英语WinBUGSStan英语Stan (software),提供了独立的语言,没有明显起源自另一种语言[14][15]

一些PPL正在活跃开发中,包括在beta测试中的那些。两个最流行的工具是Stan和PyMC[16]

关系

概率关系编程语言(PRPL)专门设计来描述和推论概率关系模型英语Statistical relational learning#Representation formalisms(PRM)的概率编程语言(PPL)。

PRM的开发通常具有一组算法,用于关注的分布的归约、推理和发现,它们被嵌入到对应的PRPL中。

概率编程语言列表

More information 名字, 扩展自 ...
名字 扩展自 宿主语言
Analytica英语Analytica (software)[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英语B-Prolog
Infer.NET英语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英语Church (programming language)[35] Scheme 各种: JavaScript, Scheme
ProbLog英语ProbLog[36] Prolog Python
ProBT[37] C++, Python
Stan英语Stan (software)[15] BUGS C++
Hakaru[38] Haskell Haskell
BAli-Phy英语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]
Close

困难

推理按概率分布的变量给初学编程者带来困难,但是这些困难可以通过使用嵌入到源代码编辑器中的变量分布的贝叶斯网络可视化和图来解决[67]

参见

注释

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.