概率編程

来自维基百科,自由的百科全书

概率編程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中。

概率程式語言列表

更多資訊 名字, 擴展自 ...
名字 擴展自 宿主語言
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]
MultiVerse[67] Python Python
關閉

困難

推理按概率分布的變量給初學編程者帶來困難,但是這些困難可以通過使用嵌入到原始碼編輯器中的變量分布的貝葉斯網絡可視化和圖來解決[68]

參見

注釋

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.