확률론적 프로그래밍

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이 정리되어 있으며, 그 출처를 명확히 하고 있습니다.

이름. ~부터 확장원 호스트 언어
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]편집기에 내장된 변수 분포 그래프를 사용하여 해결할 수 있다.

「 」를 참조해 주세요.

메모들

  1. ^ "Probabilistic programming does in 50 lines of code what used to take thousands". phys.org. April 13, 2015. Retrieved April 13, 2015.
  2. ^ "Probabilistic Programming". probabilistic-programming.org. Archived from the original on January 10, 2016. Retrieved December 24, 2013.
  3. ^ Pfeffer, Avrom(2014), 실용 확률론적 프로그래밍, Manning 출판물. 페이지 28.ISBN 978-1 6172-9233-0
  4. ^ a b c "Short probabilistic programming machine-learning code replaces complex programs for computer-vision tasks". KurzweilAI. April 13, 2015. Retrieved November 27, 2017.
  5. ^ Hardesty, Larry (April 13, 2015). "Graphics in reverse".
  6. ^ "MIT shows off machine-learning script to make CREEPY HEADS". The Register.
  7. ^ "MIT's Gen programming system flattens the learning curve for AI projects". VentureBeat. June 27, 2019. Retrieved June 27, 2019.
  8. ^ 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.
  9. ^ 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
  10. ^ 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
  11. ^ a b "Dimple Home Page". analog.com. July 2, 2021.
  12. ^ a b "Chimple Home Page". analog.com. April 16, 2021.
  13. ^ a b "Infer.NET". microsoft.com. Microsoft.
  14. ^ a b "PRISM: PRogramming In Statistical Modeling". rjida.meijo-u.ac.jp. Archived from the original on March 1, 2015. Retrieved July 8, 2015.
  15. ^ a b "The BUGS Project - MRC Biostatistics Unit". cam.ac.uk. Archived from the original on March 14, 2014. Retrieved January 12, 2011.
  16. ^ a b "Stan". mc-stan.org. Archived from the original on September 3, 2012.
  17. ^ "The Algorithms Behind Probabilistic Programming". Retrieved March 10, 2017.
  18. ^ "Analytica-- A Probabilistic Modeling Language". lumina.com.
  19. ^ "bayesloop: Probabilistic programming framework that facilitates objective model selection for time-varying parameter models".
  20. ^ "GitHub -- bayesloop". GitHub. December 7, 2021.
  21. ^ "Probabilistic Programming with CuPPL". popl19.sigplan.org.
  22. ^ 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.
  23. ^ "Venture -- a general-purpose probabilistic programming platform". mit.edu. Archived from the original on January 25, 2016. Retrieved September 20, 2014.
  24. ^ "Probabilistic C". ox.ac.uk. Archived from the original on January 4, 2016. Retrieved March 24, 2015.
  25. ^ "The Anglican Probabilistic Programming System". ox.ac.uk. January 6, 2021.
  26. ^ "IBAL Home Page". Archived from the original on December 26, 2010.
  27. ^ "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.
  28. ^ "Bayesian Logic (BLOG)". mit.edu. Archived from the original on June 16, 2011.
  29. ^ "diff-SAT (probabilistic SAT/ASP)". GitHub. October 8, 2021.
  30. ^ 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.
  31. ^ "Factorie - Probabilistic programming with imperatively-defined factor graphs - Google Project Hosting". google.com.
  32. ^ "PMTK3 - probabilistic modeling toolkit for Matlab/Octave, version 3 - Google Project Hosting". google.com.
  33. ^ "Alchemy - Open Source AI". washington.edu.
  34. ^ "Dyna". www.dyna.org. Archived from the original on January 17, 2016. Retrieved January 12, 2011.
  35. ^ "Charles River Analytics - Probabilistic Modeling Services". cra.com. February 9, 2017.
  36. ^ "Church". mit.edu. Archived from the original on January 14, 2016. Retrieved April 8, 2013.
  37. ^ "ProbLog: Probabilistic Programming". dtai.cs.kuleuven.be.
  38. ^ ProbaYes. "ProbaYes - Ensemble, nous valorisations vos données". probayes.com. Archived from the original on March 5, 2016. Retrieved November 26, 2013.
  39. ^ "Hakaru Home Page". hakaru-dev.github.io/.
  40. ^ "BAli-Phy Home Page". bali-phy.org.
  41. ^ "ProbCog". GitHub.
  42. ^ Culpepper, Ryan (January 17, 2017). "gamble: Probabilistic Programming" – via GitHub.
  43. ^ "PWhile Compiler". GitHub. May 25, 2020.
  44. ^ "Tuffy: A Scalable Markov Logic Inference Engine". stanford.edu.
  45. ^ PyMC devs. "PyMC". pymc-devs.github.io.
  46. ^ stripe/rainier, Stripe, August 19, 2020, retrieved August 26, 2020
  47. ^ "Rainier · Bayesian inference for Scala". samplerainier.com. Retrieved August 26, 2020.
  48. ^ "greta: simple and scalable statistical modelling in R". GitHub. Retrieved October 2, 2018.
  49. ^ "Home — pomegranate 0.10.0 documentation". pomegranate.readthedocs.io. Retrieved October 2, 2018.
  50. ^ "Lea Home Page". bitbucket.org.
  51. ^ "WebPPL Home Page". github.com/probmods/webppl.
  52. ^ 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.
  53. ^ "The Turing language for probabilistic programming". GitHub. December 28, 2021.
  54. ^ "Gen: A General Purpose Probabilistic Programming Language with Programmable Inference". Retrieved June 17, 2019.
  55. ^ "LF-PPL: A Low-Level First Order Probabilistic Programming Language for Non-Differentiable Models". ox.ac.uk. November 2, 2019.
  56. ^ "Troll dice roller and probability calculator".
  57. ^ "Edward – Home". edwardlib.org. Retrieved January 17, 2017.
  58. ^ TensorFlow (April 11, 2018). "Introducing TensorFlow Probability". TensorFlow. Retrieved October 2, 2018.
  59. ^ "'Edward2' TensorFlow Probability module". GitHub. Retrieved October 2, 2018.
  60. ^ "Pyro". pyro.ai. Retrieved February 9, 2018.
  61. ^ "NumPyro". pyro.ai. Retrieved July 23, 2021.
  62. ^ "CogComp - Home".
  63. ^ https://mc-stan.org/. {{cite web}}:누락 또는 비어 있음 title=(도움말)
  64. ^ Rienstra, Tjitze (January 18, 2018), RankPL: A qualitative probabilistic programming language based on ranking theory, retrieved January 18, 2018
  65. ^ "Probabilistic Programming in Birch". birch-lang.org. Retrieved April 20, 2018.
  66. ^ "PSI Solver - Exact inference for probabilistic programs". psisolver.org. Retrieved August 18, 2019.
  67. ^ "Blang Homepage".
  68. ^ 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.

외부 링크