概率編程
来自维基百科,自由的百科全书
概率編程(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]。
概率關係程式語言(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] | ||
MultiVerse[67] | Python | Python |
困難
推理按概率分布的變量給初學編程者帶來困難,但是這些困難可以通過使用嵌入到原始碼編輯器中的變量分布的貝葉斯網絡可視化和圖來解決[68]。
參見
- 統計關係學習
- 歸納編程
- 貝葉斯編程
注釋
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.