확률론적 프로그래밍
Probabilistic programming프로그래밍 패러다임 |
---|
확률론적 프로그래밍(PP)은 확률론적 모델이 지정되고 이러한 모델에 대한 추론이 [1]자동으로 수행되는 프로그래밍 패러다임이다.이는 확률론적 모델링과 전통적인 범용 프로그래밍을 통합하여 전자를 보다 쉽고 광범위하게 적용할 [2][3]수 있도록 하려는 시도를 나타낸다.불확실성에 직면하여 의사결정을 지원하는 시스템을 만드는 데 사용할 수 있습니다.
확률적 프로그래밍에 사용되는 프로그래밍 언어를 "확률적 프로그래밍 언어"(PPL)라고 합니다.
적용들
확률론적 추론은 주가 예측, 영화 추천, 컴퓨터 진단, 사이버 침입 탐지 및 이미지 [4]검출과 같은 광범위한 작업에 사용되어 왔다.그러나 최근까지(부분적으로 제한된 계산 능력으로 인해) 확률론적 프로그래밍은 범위가 제한되었고 대부분의 추론 알고리즘은 각 작업에 대해 수동으로 작성되어야 했다.
그럼에도 불구하고, 2015년에는 50줄 확률론적 컴퓨터 비전 프로그램을 사용하여 얼굴의 2D 이미지를 기반으로 얼굴의 3D 모델을 생성했다.이 프로그램은 역그래픽을 추론 방법의 기반으로 사용했으며 [4]Julia의 Picture 패키지를 사용하여 구축되었습니다.이것은 "수천이 [5][6]걸리던 50줄의 코드"를 가능하게 했다.
Gen 확률론적 프로그래밍 라이브러리(Julia에서도 작성)는 시각 [7]및 로봇 작업에 적용되었다.
최근에는 확률론적 프로그래밍 시스템 Turing.jl이 다양한 제약[8] [9]및 경제 애플리케이션에 적용되고 있습니다.
Julia의 확률론적 프로그래밍은 Julia 패키지 Zygote를 결합함으로써 차별화 가능한 프로그래밍과도 결합되었습니다.turing.jl을 사용합니다.[10]
확률론적 프로그래밍 언어
PPL은 기본 언어에서 확장되는 경우가 많습니다.기본 언어의 선택은 기본 언어의 온톨로지와의 모델의 유사성 및 상업적 고려사항과 개인적 선호도에 따라 달라집니다.예를[11] 들어, Dimple과[12] Chimple은 Java를 기반으로 합니다.NET은 을 기반으로 합니다.NET Framework,[13] [14]PRISM은 Prolog에서 확장됩니다.단, WinB 등의 PPL은UGS는 통계 모델의 수학적 표현에 밀접하게 매핑되는 자기포함형 언어를 제공하며, 다른 프로그래밍 [15][16]언어에서 명확한 기원은 없다.
WinnBUGS용 언어는 Gibbs 샘플링(및 관련 알고리즘)을 사용하여 베이지안 계산을 수행하기 위해 구현되었습니다.비교적 오래된 프로그래밍 언어(Pascal)로 구현되었지만, 이 언어는 유연한 계산 접근법을 사용하여 다양한 통계 모델에 대한 베이시안 추론을 허용합니다.동일한 BUGS 언어를 사용하여 다른 계산 선택("샘플러") 및 규칙 또는 기본값을 통해 추론을 위한 베이지안 모델을 지정할 수 있으며, 독립형 패키지 WinBUGS(또는 관련 R 패키지, rbugs 및 r2winbugs) 및 JAGS(Just another Gibs Sampler, 다른 R 패키지)를 사용할 수 있습니다.보다 최근에는 베이지안 모델 사양 및 추론을 지원하는 다른 언어들은 기본 베이지안 연산을 위해 서로 다르거나 더 효율적인 선택을 허용하며, R 데이터 분석 및 프로그래밍 환경에서 접근할 수 있다. 예:스탠, 님블, 너츠.BUGS 언어의 영향은 모델 사양의 일부 측면에서도 동일한 구문을 사용하는 이러한 후기 언어에서 뚜렷하게 나타납니다.
베타 테스트를 포함한 여러 PPL이 현재 개발 중입니다.두 가지 인기 있는 도구는 Stan과 PyMC입니다.[17]
관계형
확률론적 관계형 프로그래밍 언어(PRPL)는 확률론적 관계형 모델(PRM)로 기술 및 추론하기 위해 특별히 설계된 PPL이다.
PRM은 일반적으로 관련된 분포의 축소, 추론 및 발견을 위한 알고리즘 세트를 사용하여 개발되며, 이러한 알고리즘은 대응하는 PRPL에 포함되어 있습니다.
확률론적 프로그래밍 언어 목록
이 목록에는 현재 사용 가능한 다양한 PPL이 정리되어 있으며, 그 출처를 명확히 하고 있습니다.
이 기사에는 특정 사용자만 관심을 가질 수 있는 지나치게 복잡한 세부 정보가 포함될 수 있습니다.2019년 10월 (이 메시지 및 에 대해 ) 또는 하고 의 수 있는 한 세부 하여 을 주십시오. ( |
이름. | ~부터 확장원 | 호스트 언어 |
---|---|---|
Analytica[18] | C++ | |
베이루프[19][20] | 파이썬 | 파이썬 |
CuPPL[21] | 노바[22] | |
벤처[23] | 스킴 | C++ |
확률론적-C[24] | C | C |
성공회[25] | 클로쥬르 | 클로쥬르 |
IBAL[26] | OCaml | |
베이즈DB[27] | SQLite, Python | |
프리즘[14] | B 프롤로그 | |
추론.NET[13] | .NET 프레임워크 | .NET 프레임워크 |
보조개[11] | MATLAB, Java | |
삐걱삐걱정하다[12] | MATLAB, Java | |
블로그[28] | 자바 | |
diff-[29] | 응답 세트 프로그래밍, SAT(DIMACS CNF) | |
PSQL[30] | SQL | |
버그[15] | 파스칼 | |
요인[31] | 스칼라 | 스칼라 |
PMTK[32] | 매트랩 | 매트랩 |
연금술[33] | C++ | |
다이나[34] | 프롤로그 | |
피가로[35] | 스칼라 | 스칼라 |
교회[36] | 스킴 | 각종: JavaScript, Scheme |
ProbLog[37] | 프롤로그 | 파이썬 |
프로BT[38] | C++, Python | |
스탠.[16] | 버그 | C++ |
하카루[39] | 하스켈 | 하스켈 |
BAli-Phy(소프트웨어)[40] | 하스켈 | C++ |
플라스틱[41] 톱니바퀴 | Java, Python | |
갬블[42] | 라켓 | |
PWile[43] | 하는 동안에 | 파이썬 |
터피[44] | 자바 | |
PyMC[45] | 파이썬 | 파이썬 |
레이니어[46][47] | 스칼라 | 스칼라 |
그레타[48] | 텐서플로우 | R |
석류[49] | 파이썬 | 파이썬 |
리아[50] | 파이썬 | 파이썬 |
웹[51] PPL | 자바스크립트 | 자바스크립트 |
렛츠[52] 찬스 | 긁다 | 자바스크립트 |
그림[4] | 줄리아. | 줄리아. |
Turing.jl[53] | 줄리아. | 줄리아. |
제너레이션[54] | 줄리아. | 줄리아. |
하위 1차 PPL[55] | 파이썬, 클로주르, 파이토르치 | 다양성:파이썬, 클로저 |
트롤[56] | 모스크바 ML | |
에드워드[57] | 텐서플로우 | 파이썬 |
TensorFlow 확률[58] | 텐서플로우 | 파이썬 |
에드워드2[59] | TensorFlow 확률 | 파이썬 |
파이로[60] | 파이토치 | 파이썬 |
NumPyro[61] | JAX | 파이썬 |
사울[62] | 스칼라 | 스칼라 |
스탠[63] | C++, Python, R | |
랭크[64] PL | 자바 | |
자작나무[65] | C++ | |
PSI[66] | D | |
블랑[67] |
어려움
변수를 확률 분포로 추론하는 것은 초보 프로그래머에게 어려움을 야기하지만, 이러한 어려움은 베이지안 네트워크 시각화와 소스 코드 [68]편집기에 내장된 변수 분포 그래프를 사용하여 해결할 수 있다.
「 」를 참조해 주세요.
메모들
- ^ "Probabilistic programming does in 50 lines of code what used to take thousands". phys.org. April 13, 2015. Retrieved April 13, 2015.
- ^ "Probabilistic Programming". probabilistic-programming.org. Archived from the original on January 10, 2016. Retrieved December 24, 2013.
- ^ Pfeffer, Avrom(2014), 실용 확률론적 프로그래밍, Manning 출판물. 페이지 28.ISBN 978-1 6172-9233-0
- ^ a b c "Short probabilistic programming machine-learning code replaces complex programs for computer-vision tasks". KurzweilAI. April 13, 2015. Retrieved November 27, 2017.
- ^ Hardesty, Larry (April 13, 2015). "Graphics in reverse".
- ^ "MIT shows off machine-learning script to make CREEPY HEADS". The Register.
- ^ "MIT's Gen programming system flattens the learning curve for AI projects". VentureBeat. June 27, 2019. Retrieved June 27, 2019.
- ^ Semenova, Elizaveta; Williams, Dominic P.; Afzal, Avid M.; Lazic, Stanley E. (November 1, 2020). "A Bayesian neural network for toxicity prediction". Computational Toxicology. 16: 100133. doi:10.1016/j.comtox.2020.100133. ISSN 2468-1113. S2CID 225362130.
- ^ Williams, Dominic P.; Lazic, Stanley E.; Foster, Alison J.; Semenova, Elizaveta; Morgan, Paul (2020), "Predicting Drug-Induced Liver Injury with Bayesian Machine Learning", Chemical Research in Toxicology, 33 (1): 239–248, doi:10.1021/acs.chemrestox.9b00264, PMID 31535850, S2CID 202689667
- ^ Innes, Mike; Edelman, Alan; Fischer, Keno; Rackauckas, Chris; Saba, Elliot; Viral B Shah; Tebbutt, Will (2019), ∂P: A Differentiable Programming System to Bridge Machine Learning and Scientific Computing, arXiv:1907.07587
- ^ a b "Dimple Home Page". analog.com. July 2, 2021.
- ^ a b "Chimple Home Page". analog.com. April 16, 2021.
- ^ a b "Infer.NET". microsoft.com. Microsoft.
- ^ a b "PRISM: PRogramming In Statistical Modeling". rjida.meijo-u.ac.jp. Archived from the original on March 1, 2015. Retrieved July 8, 2015.
- ^ a b "The BUGS Project - MRC Biostatistics Unit". cam.ac.uk. Archived from the original on March 14, 2014. Retrieved January 12, 2011.
- ^ a b "Stan". mc-stan.org. Archived from the original on September 3, 2012.
- ^ "The Algorithms Behind Probabilistic Programming". Retrieved March 10, 2017.
- ^ "Analytica-- A Probabilistic Modeling Language". lumina.com.
- ^ "bayesloop: Probabilistic programming framework that facilitates objective model selection for time-varying parameter models".
- ^ "GitHub -- bayesloop". GitHub. December 7, 2021.
- ^ "Probabilistic Programming with CuPPL". popl19.sigplan.org.
- ^ NOVA: A Functional Language for Data Parallelism. acm.org. Array'14. June 9, 2014. pp. 8–13. doi:10.1145/2627373.2627375. ISBN 9781450329378. S2CID 6748967.
- ^ "Venture -- a general-purpose probabilistic programming platform". mit.edu. Archived from the original on January 25, 2016. Retrieved September 20, 2014.
- ^ "Probabilistic C". ox.ac.uk. Archived from the original on January 4, 2016. Retrieved March 24, 2015.
- ^ "The Anglican Probabilistic Programming System". ox.ac.uk. January 6, 2021.
- ^ "IBAL Home Page". Archived from the original on December 26, 2010.
- ^ "BayesDB on SQLite. A Bayesian database table for querying the probable implications of data as easily as SQL databases query the data itself". GitHub. December 26, 2021.
- ^ "Bayesian Logic (BLOG)". mit.edu. Archived from the original on June 16, 2011.
- ^ "diff-SAT (probabilistic SAT/ASP)". GitHub. October 8, 2021.
- ^ Dey, Debabrata; Sarkar, Sumit (1998). "PSQL: A query language for probabilistic relational data". Data & Knowledge Engineering. 28: 107–120. doi:10.1016/S0169-023X(98)00015-9.
- ^ "Factorie - Probabilistic programming with imperatively-defined factor graphs - Google Project Hosting". google.com.
- ^ "PMTK3 - probabilistic modeling toolkit for Matlab/Octave, version 3 - Google Project Hosting". google.com.
- ^ "Alchemy - Open Source AI". washington.edu.
- ^ "Dyna". www.dyna.org. Archived from the original on January 17, 2016. Retrieved January 12, 2011.
- ^ "Charles River Analytics - Probabilistic Modeling Services". cra.com. February 9, 2017.
- ^ "Church". mit.edu. Archived from the original on January 14, 2016. Retrieved April 8, 2013.
- ^ "ProbLog: Probabilistic Programming". dtai.cs.kuleuven.be.
- ^ ProbaYes. "ProbaYes - Ensemble, nous valorisations vos données". probayes.com. Archived from the original on March 5, 2016. Retrieved November 26, 2013.
- ^ "Hakaru Home Page". hakaru-dev.github.io/.
- ^ "BAli-Phy Home Page". bali-phy.org.
- ^ "ProbCog". GitHub.
- ^ Culpepper, Ryan (January 17, 2017). "gamble: Probabilistic Programming" – via GitHub.
- ^ "PWhile Compiler". GitHub. May 25, 2020.
- ^ "Tuffy: A Scalable Markov Logic Inference Engine". stanford.edu.
- ^ PyMC devs. "PyMC". pymc-devs.github.io.
- ^ stripe/rainier, Stripe, August 19, 2020, retrieved August 26, 2020
- ^ "Rainier · Bayesian inference for Scala". samplerainier.com. Retrieved August 26, 2020.
- ^ "greta: simple and scalable statistical modelling in R". GitHub. Retrieved October 2, 2018.
- ^ "Home — pomegranate 0.10.0 documentation". pomegranate.readthedocs.io. Retrieved October 2, 2018.
- ^ "Lea Home Page". bitbucket.org.
- ^ "WebPPL Home Page". github.com/probmods/webppl.
- ^ Let's Chance: Playful Probabilistic Programming for Children Extended Abstracts of the 2020 CHI Conference on Human Factors in Computing Systems. dl.acm.org. Chi Ea '20. April 25, 2020. pp. 1–7. doi:10.1145/3334480.3383071. ISBN 9781450368193. S2CID 216079395. Retrieved August 1, 2020.
- ^ "The Turing language for probabilistic programming". GitHub. December 28, 2021.
- ^ "Gen: A General Purpose Probabilistic Programming Language with Programmable Inference". Retrieved June 17, 2019.
- ^ "LF-PPL: A Low-Level First Order Probabilistic Programming Language for Non-Differentiable Models". ox.ac.uk. November 2, 2019.
- ^ "Troll dice roller and probability calculator".
- ^ "Edward – Home". edwardlib.org. Retrieved January 17, 2017.
- ^ TensorFlow (April 11, 2018). "Introducing TensorFlow Probability". TensorFlow. Retrieved October 2, 2018.
- ^ "'Edward2' TensorFlow Probability module". GitHub. Retrieved October 2, 2018.
- ^ "Pyro". pyro.ai. Retrieved February 9, 2018.
- ^ "NumPyro". pyro.ai. Retrieved July 23, 2021.
- ^ "CogComp - Home".
- ^ https://mc-stan.org/.
{{cite web}}
:누락 또는 비어 있음title=
(도움말) - ^ Rienstra, Tjitze (January 18, 2018), RankPL: A qualitative probabilistic programming language based on ranking theory, retrieved January 18, 2018
- ^ "Probabilistic Programming in Birch". birch-lang.org. Retrieved April 20, 2018.
- ^ "PSI Solver - Exact inference for probabilistic programs". psisolver.org. Retrieved August 18, 2019.
- ^ "Blang Homepage".
- ^ Gorinova, Maria I.; Sarkar, Advait; Blackwell, Alan F.; Syme, Don (January 1, 2016). A Live, Multiple-Representation Probabilistic Programming Environment for Novices. Proceedings of the 2016 CHI Conference on Human Factors in Computing Systems. CHI '16. New York, NY, USA: ACM. pp. 2533–2537. doi:10.1145/2858036.2858221. ISBN 9781450333627. S2CID 3201542.