Sorami Hisamoto
September 03, 2016
720

# Dive into Probabilistic Programming

## Sorami Hisamoto

September 03, 2016

## Transcript

8. ### 1SPHSBNNJOHlQSPCBCJMJTUJDEJTUSJCVUJPOTzʜ ✦ 1SPCBCJMJTUJD1SPHSBNT  4BNQMJOH  ESBXWBMVFTBUSBOEPNGSPNEJTUSJCVUJPOT  \$POEJUJPOJOH  DPOEJUJPOWBMVFTPGWBSJBCMFTJOBQSPHSBNWJBPCTFSWBUJPO 5

‣ [Gordon+ 2014] "Probabilistic Programming", ICSE Future of Software Engineering ‣ What is probabilistic programming? - The PL Enthusiast ‣ The State of Probabilistic Programming « Some Thoughts on a Mysterious Universe
9. ### &YBNQMFqJQQJOHDPJOT ✦ 4BZXFIBWFBDPJO XJUIVOLOPXOCFOEJOFTT ✦ 8FqJQJUBDPVQMFUJNFT ✦ 8FUIFOlHVFTTzJU`TCFOEJOFTT 6 ‣

[Gordon+ 2014] "Probabilistic Programming", ICSE Future of Software Engineering ‣ What is probabilistic programming? - The PL Enthusiast ‣ “Probabilistic Models of Cognition” Chapter 3 : Conditioning
10. ### makeCoin(0.9) #“head”with probability 0.9 makeCoin(0.1) #“tail”with probability 0.9 coin =

makeCoin(0.5) # distribution flip(coin) # sampling => “head” flip(coin) => “head” flip(coin) => “tail” …
11. ### makeCoin(0.9) #“head”with probability 0.9 makeCoin(0.1) #“tail”with probability 0.9 coin =

makeCoin(0.5) # distribution flip(coin) # sampling => “head” flip(coin) => “head” flip(coin) => “tail” …
12. ### makeCoin(0.9) #“head”with probability 0.9 makeCoin(0.1) #“tail”with probability 0.9 coin =

makeCoin(0.5) # distribution flip(coin) # sampling => “head” flip(coin) => “head” flip(coin) => “tail” …
13. ### makeCoin(0.9) #“head”with probability 0.9 makeCoin(0.1) #“tail”with probability 0.9 coin =

makeCoin(0.5) # distribution flip(coin) # sampling => “head” flip(coin) => “head” flip(coin) => “tail” …
14. ### makeCoin(0.9) #“head”with probability 0.9 makeCoin(0.1) #“tail”with probability 0.9 coin =

makeCoin(0.5) # distribution flip(coin) # sampling => “head” flip(coin) => “head” flip(coin) => “tail” …
15. ### coin2 = makeCoin(param) # a coin with unknown parameter result1

= flip(coin2) observe(result1 == head) # conditioning result2 = flip(coin2) observe(result2 == head) result3 = flip(coin2) observe(result3 == head) infer(param) # => probably higher than 0.5
16. ### coin2 = makeCoin(param) # a coin with unknown parameter result1

= flip(coin2) observe(result1 == head) # conditioning result2 = flip(coin2) observe(result2 == head) result3 = flip(coin2) observe(result3 == head) infer(param) # => probably higher than 0.5
17. ### coin2 = makeCoin(param) # a coin with unknown parameter result1

= flip(coin2) observe(result1 == head) # conditioning result2 = flip(coin2) observe(result2 == head) result3 = flip(coin2) observe(result3 == head) infer(param) # => probably higher than 0.5
18. ### coin2 = makeCoin(param) # a coin with unknown parameter result1

= flip(coin2) observe(result1 == head) # conditioning result2 = flip(coin2) observe(result2 == head) result3 = flip(coin2) observe(result3 == head) infer(param) # => probably higher than 0.5
19. ### coin2 = makeCoin(param) # a coin with unknown parameter result1

= flip(coin2) observe(result1 == head) # conditioning result2 = flip(coin2) observe(result2 == head) result3 = flip(coin2) observe(result3 == head) infer(param) # => probably higher than 0.5
20. ### &YBNQMFSBUJOHUIFPOMJOFHBNFQMBZFST ✦ 1MBZFSTIBWFl 5SVF 4LJMMzBOEl1FSGPSNBODFz ✦ 1FSGPSNBODFJTCBTFEPO4LJMMT   BOEJUWBSJFTGSPNHBNFUPHBNF ✦

(BNFPVUDPNFDPOEJUJPO4LJMM 9 ‣ TrueSkill™ Ranking System - Microsoft Research (ﬁgure from this page) ‣ TrueSkill — trueskill 0.4.4 documentation ‣ [Gordon+ 2014] "Probabilistic Programming", ICSE Future of Software Engineering
21. ### skillA = Normal(μ=100, σ=10) skillB = Normal(μ=100, σ=10) skillC =

Normal(μ=100, σ=10) ### 1st game : A vs B # players have probabilistic performance perfA1 = Normal(skillA, 15) perfB1 = Normal(skillB, 15) # A won => condition the skills observe(perfA1 > perfB1)
22. ### skillA = Normal(μ=100, σ=10) skillB = Normal(μ=100, σ=10) skillC =

Normal(μ=100, σ=10) ### 1st game : A vs B # players have probabilistic performance perfA1 = Normal(skillA, 15) perfB1 = Normal(skillB, 15) # A won => condition the skills observe(perfA1 > perfB1)
23. ### skillA = Normal(μ=100, σ=10) skillB = Normal(μ=100, σ=10) skillC =

Normal(μ=100, σ=10) ### 1st game : A vs B # players have probabilistic performance perfA1 = Normal(skillA, 15) perfB1 = Normal(skillB, 15) # A won => condition the skills observe(perfA1 > perfB1)
24. ### skillA = Normal(μ=100, σ=10) skillB = Normal(μ=100, σ=10) skillC =

Normal(μ=100, σ=10) ### 1st game : A vs B # players have probabilistic performance perfA1 = Normal(skillA, 15) perfB1 = Normal(skillB, 15) # A won => condition the skills observe(perfA1 > perfB1)
25. ### ### 2nd game : B vs C perfB2 = Normal(skillB,

15) perfC2 = Normal(skillC, 15) observe(perfB2 > perfC2) ### 3rd game : A vs C perfA3 = Normal(skillA, 15) perfC3 = Normal(skillC, 15) observe(perfA3 > perfC3) infer(skillA) # => Normal(μ=105.7, σ=0.11) infer(skillB) # => Normal(μ=100.0, σ=0.11) infer(skillC) # => Normal(μ=94.3, σ=0.11)
26. ### ### 2nd game : B vs C perfB2 = Normal(skillB,

15) perfC2 = Normal(skillC, 15) observe(perfB2 > perfC2) ### 3rd game : A vs C perfA3 = Normal(skillA, 15) perfC3 = Normal(skillC, 15) observe(perfA3 > perfC3) infer(skillA) # => Normal(μ=105.7, σ=0.11) infer(skillB) # => Normal(μ=100.0, σ=0.11) infer(skillC) # => Normal(μ=94.3, σ=0.11)
27. ### ### 2nd game : B vs C perfB2 = Normal(skillB,

15) perfC2 = Normal(skillC, 15) observe(perfB2 > perfC2) ### 3rd game : A vs C perfA3 = Normal(skillA, 15) perfC3 = Normal(skillC, 15) observe(perfA3 > perfC3) infer(skillA) # => Normal(μ=105.7, σ=0.11) infer(skillB) # => Normal(μ=100.0, σ=0.11) infer(skillC) # => Normal(μ=94.3, σ=0.11)

30. ### )PXEPXFNBLFUIBUQPTTJCMF ✦ 4UBUJD*OGFSFODF ✦ .FTTBHF1BTTJOH ✦ #FMJFG1SPQBHBUJPO ʜ ✦ %ZOBNJD*OGFSFODF

✦ 4BNQMJOH ✦ .\$.\$ ʜ 13 ‣ [Gordon+ 2014] "Probabilistic Programming", ICSE Future of Software Engineering ‣ The Design and Implementation of Probabilistic Programming Languages ‣ “Probabilistic Models of Cognition” Chapter 7. Algorithms for inference
31. ### -BUFOU%JSJDIMFU"MMPDBUJPOJOWBSJPVTGPSNT 14 ‣ [Tang+ 2014] Understanding the Limiting Factors of

Topic Modelling via Posterior Contraction Analysis // Speaker Deck ‣ example-models/lda.stan at master · stan-dev/example-models ‣ Latent Dirichlet Allocation - Forest
32. ### 8IZTIPVMEXFDBSF ✦ 8FDPNNVOJDBUFBCPVUUIFNPEFMTJO  OBUVSBMMBOHVBHFT NBUIT QMBUFOPUBUJPOT QSPHSBNT ʜ ✦ lVOJGZJOHHFOFSBMQVSQPTFQSPHSBNNJOH

XJUIQSPCBCJMJTUJDNPEFMJOHz ✦ .BDIJOF-FBSOJOHGPS%PNBJO&YQFSUT  TDJLJUMFBSOJTDPPM CVUZPVDBO`UDPOTUSVDUOPWFMNPEFMTXJUIJUEJGGFSFOUVTFDBTFT 15 ‣ PROBABILISTIC-PROGRAMMING.org ‣ Why Probabilistic Programming Matters, Beau Cronin, March 2013, (Japanese translation) ‣ The State of Probabilistic Programming « Some Thoughts on a Mysterious Universe
33. ### %"31"11".- ✦ l5IF1SPCBCJMJTUJD1SPHSBNNJOHGPS"EWBODJOH.BDIJOF-FBSOJOHz   l4IPSUFS3FEVDF-0\$CZYGPS.-BQQMJDBUJPOTz  l'BTUFS3FEVDFEFWFMPQNFOUUJNFCZYz  l.PSF*OGPSNBUJWF%FWFMPQNPEFMTUIBUBSFYNPSFTPQIJTUJDBUFEz

 l8JUI-FTT&YQFSUJTF&OBCMFYNPSFQSPHSBNNFSTz ✦ 4VNNFS4DIPPMT 16 ‣ Probabilistic Programming for Advancing Machine Learning (PPAML), Dr. Suresh Jagannathan ‣ PPAML Wiki ‣ PPAML Kickoff Overview Slides (pdf), November 2013
34. ### 14 • Application • Code Libraries • Programming Language •

Compiler • Hardware The Probabilistic Programming Revolution • Model • Model Libraries • Probabilistic Programming Language • Inference Engine • Hardware Traditional Programming Probabilistic Programming Code models capture how the data was generated using random variables to represent uncertainty Libraries contain common model components: Markov chains, deep belief networks, etc. PPL provides probabilistic primitives & traditional PL constructs so users can express model, queries, and data Inference engine analyzes probabilistic program and chooses appropriate solver(s) for available hardware Hardware can include multi-core, GPU, cloud-based resources, GraphLab, UPSIDE/Analog Logic results, etc. High-level programming languages facilitate building complex systems Probabilistic programming languages facilitate building rich ML applications Approved for Public Release; Distribution Unlimited From PPAML Kickoff Overview Slides (pdf), November 2013

36. ### #6(4GBNJMZ ✦ #6(4l#BZFTJBOJOGFSFODF6TJOH(JCCT4BNQMJOHz d ✦ 8JO#6(4d 0QFO#6(4d ✦ +"(4l+VTUBOPUIFS(JCCTTBNQMFSz d

✦ HPFENBO+BHTKM ✦ PMPGTFO+"(4KM 19 ‣ [Lunn+ 2009] “The BUGS project: Evolution, critique and future directions” ‣ (ja) ୈ1ճBUGS/StanษڧձΛ։࠵͠·ͨ͠ - Analyze IT., September 2013 ‣ (ja) “ؠ೾σʔλαΠΤϯε Vol.1” [ಛू] ϕΠζਪ࿦ͱMCMCͷϑϦʔιϑτ
37. ### 45"/ ✦ *NQFSBUJWFQSPCBCJMJTUJDQSPHSBNNJOHMBOHVBHF ✦ /VN'PDVTQSPKFDU ✦ *OUFSGBDFT3 1ZUIPO TIFMM ."5-"#

4UBUB +VMJB 20 ‣ Stan, ofﬁcial website (logo from this page) ‣ Bob Carpenter: Stan.jl - Statistical Modeling and Inference Made Easy - YouTube, JuliaCon 2015 ‣ Stan is Turing Complete. So what? - Statistical Modeling, Causal Inference, and Social Science
38. ### 1Z.\$ ✦ 1ZUIPO ✦ 1Z.\$ 1Z.\$ ✦ l#BZFTJBO.FUIPETGPS)BDLFSTz 21 ‣

pymc-devs/pymc: PyMC: Bayesian Stochastic Modelling in Python ‣ Probabilistic Programming & Bayesian Methods for Hackers (ﬁgure from this page) ‣ (ja) “ؠ೾σʔλαΠΤϯε Vol.1” [ಛू] ϕΠζਪ࿦ͱMCMCͷϑϦʔιϑτ

40. ### \$IVSDI ✦ 4DIFNFCBTFE/BNFEBGUFS"MPO[P\$IVSDI ✦ (SFBUSFTPVSDFT ✦ l1SPCBCJMJTUJD.PEFMTPG\$PHOJUJPOz˒ ✦ l'PSFTUBSFQPTJUPSZGPSHFOFSBUJWFNPEFMTz ✦

0OMJOFQMBZTQBDF ✦ \$PHOJUJWF4DJFODF ✦ \$PNQVUBUJPOBOE\$PHOJUJPOUIF1SPCBCJMJTUJD"QQSPBDI 1TZDI\$4 'BMM 4UBOGPSE\$P\$P-BC ✦ KB ࢲͷϒοΫϚʔΫܭࢉ࿦తೝ஌Պֶcਓ޻஌ೳֶձ7PM/P  ߴڮୡೋ 23 ‣ Church Wiki ‣ Probabilistic Models of Cognition ‣ Forest - A Repository for Generative Models

43. ### 8FC11- QSPOPVODFEbXFCQFPQMF` ✦ +BWB4DSJQUCBTFE QVSFMZGVODUJPOBM ✦ (SFBUSFTPVSDFT ✦ 5IF%FTJHOBOE*NQMFNFOUBUJPOPG1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFT ✦

11".-4VNNFS4DIPPM ✦ 8FC11-%PDVNFOUBUJPOXFCQQMEPDVNFOUBUJPO ✦ .PEFMJOH"HFOUTXJUI1SPCBCJMJTUJD1SPHSBNT 26
44. ### #BZFT%#7FOUVSF ✦ 5IF.*51SPCBCJMJTUJD\$PNQVUJOH1SPKFDU ✦ #BZFT%# ✦ #2- #BZFTJBO2VFSZ-BOVBHF FYUFOTJPOPG42-&45*."5& 4*.6-"5&

ʜ ✦ 7FOUVSF ✦ QSPCBCJMJTUJDDPNQVUJOHQMBUGPSN  )PTUTBQQMJDBUJPOTMJLF#BZFT%#1SPHSBNNFEQSJNBSJMZJOl7FOUVSF4DSJQUz 27 ‣ The MIT Probabilistic Computing Project ‣ "An Overview of Probabilistic Programming" by Vikash K. Mansinghka - YouTube, Strange Loop 2015 ‣ MIT Media Lab | Vikash Mansinghka on Probabilistic Programming for Augmented Intelligence, 2016
45. ### *OGFS/&5'VO5BCVMBS ✦ .JDSPTPGU3TFBSDI ✦ *OGFS/&5'VO ✦ 'QSPCBCJMJTUJDNPEFMJOHMBOHVBHF ✦ 5BCVMBSTDIFNBESJWFOBQQSPBDI ✦

BWBJMBCMFBTBO&YDFMBEEJO 28 ‣ ETAPS 2016 - Structure and Interpretation of Probabilistic Programs - Andrew D. Gordon - YouTube ‣ Infer.NET Fun - Microsoft Research ‣ [Gordon+ 2014] "Probabilistic Programming", ICSE Future of Software Engineering (ﬁgure from this paper)
46. ### 'JHBSP ✦ 4DBMBCBTFE0CKFDU0SJFOUFE ✦ 5IFSF`TBCPPL  29 ‣ Avi Pfeffer

“Practical Probabilistic Programming” (Manning, 2016) (ﬁgure from this page) ‣ Probabilistic Programming Language | Probabilistic Modeling ‣ Avi Pfeffer - Practical Probabilistic Programming with Figaro - MLconf SEA 2016 - YouTube, slide
47. ### "OHMJDBOJOUFHSBUFEXJUI\$MPKVSF .-445VUPSJBM1SPCBCJMJTUJD\$ &EXBSEl"MJCSBSZGPSQSPCBCJMJTUJDNPEFMJOH JOGFSFODF BOEDSJUJDJTNz 1ZUIPO5FOTPS'MPX 4UBO 1Z.\$ ✦ l&YJTUJOHQSPCBCJMJTUJDQSPHSBNNJOHTZTUFNTz130#"#*-*45*\$130(3"..*/(PSH

✦ l-JTUPGQSPCBCJMJTUJDQSPHSBNNJOHMBOHVBHFTz1SPCBCJMJTUJDQSPHSBNNJOHMBOHVBHF8JLJQFEJB UIFGSFFFODZDMPQFEJB l7FOUVSF .*5 'JHBSP \$IBSMFT3JWFS"OBMZUJDT BOE#-0( #FSLFMFZ XFSFHJWFOUIFMJPO`TTIBSFPGBUUFOUJPOEVFUPUIFJS SFMBUJWF  NBUVSJUZ CVUPUIFSMBOHVBHFTQSFTFOUJODMVEFE\$IVSDI 4UBOGPSE )BSBLV 6OJWFSTJUZPG*OEJBOB BOE\$IJNQMF%JNQMF (BNBMPO 5IJT JTCZOPNFBOTBGVMMBDDPVOUJOHPGUIFTQBDFPG114T XIJDIJODMVEFT4UBO \$PMVNCJB *OGFS/&5 .JDSPTPGU BOEWFSZNBOZPUIFSTz  RVPUFGSPN5IF4UBUFPG1SPCBCJMJTUJD1SPHSBNNJOHm4PNF5IPVHIUTPOB.ZTUFSJPVT6OJWFSTF FNQIBTJTBEEFE BOENPSFʜ 30 ‣ http://www.robots.ox.ac.uk/~fwood/anglican/ (ﬁgure from this page) ‣ http://edwardlib.org/ (ﬁgure from this page)

49. ### +VMJB4UBUT ✦ 4FUPGQBDLBHFT\$PNNVOJUZ ✦ l4UBUJTUJDTBOE.BDIJOF-FBSOJOHNBEFFBTZJO+VMJBz ✦ %JTUSJCVUJPOTKMTBNQMJOH ʜ ✦ "UISFBEPO+VMJB4UBUTNBJMJOHMJTU

1SPCBCJMJTUJD1SPHSBNNJOHJO+VMJB(PPHMF(SPVQT 32 ‣ https://github.com/JuliaStats (ﬁgure from this page) ‣ JuliaStats.org ‣ mailing list : julia-stats - Google Groups
50. ### .\$.\$ ✦ +VMJB4UBUT.\$.\$KMDVSSFOUMZBQMBDFIPMEFSSFQPTJUPSZ ✦ +VMJB4UBUT-PSBKM ✦ CSJBOKTNJUI.BNCBKM ✦ HPFENBO4UBOKM ✦

HPFENBO+BHTKM ✦ PMPGTFO+"(4KM ✦ -BVSFODF"TEpPVTEGKM QSFWJPVTMZLOPXOBT5VSJOHKM 33 ‣ scidom (Theodore Papamarkou) (ﬁgure from this page), Lora User Guide — Lora 0.5.3 documentation ‣ Names of Existing MCMC Packages · Issue #1 · JuliaStats/MCMC.jl ‣ JuliaTokyo #2 ͰϞϯςΧϧϩ๏ʹ͍ͭͯ࿩͖ͯ͠·ͨ͠ - ΓΜ͕͝Ͱ͍ͯΔ
51. ### 4JHNBKM ✦ 1SPCBCJMJTUJDQSPHSBNNJOHFOWJSPONFOUJO+VMJB ✦ 5BMLTJO+VMJB\$PO 4USBOHF-PPQ ✦ l+VMJBBTB1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFzCZ;FOOB5BWBSFT OPWJEFP 

✦ l1SPCBCJMJTUJD1SPHSBNT8IJDI.BLF \$PNNPO 4FOTFzCZ;FOOB5BWBSFT :PV5VCF 34 ‣ https://github.com/zenna/Sigma.jl ‣ Sigma.jl’s documentation — Sigma 0.0.1 documentation ‣ "Probabilistic Programs Which Make (Common) Sense" by Zenna Tavares - YouTube, Strange Loop 2015
52. ### TPNFNPSF ✦ ZFCBJ5VSJOHKM ✦ l3FKVWFOBUJOHQSPCBCJMJTUJDQSPHSBNNJOHJO+VMJBz ✦ 4UJMMZPVOHJOJUJBMDPNNJUJO"QSJM ✦ (F )POH

"EBN4DJCJPS BOE;PVCJO(IBISBNBOJ5VSJOHSFKVWFOBUJOHQSPCBCJMJTUJDQSPHSBNNJOHJO+VMJB *OTVCNJTTJPO  ✦ OVMMB4UPDIZKMzOPMPOHFSVOEFSEFWFMPQNFOUz ✦ -BVSFODF"\$IVSDIKMPCTPMFUF  ✦ ʜ 35 ‣ The Turing Language — Turing.jl 0.0.1 documentation ‣ Julia.jl/Statistics.md at master · svaksha/Julia.jl
53. ### 1JDUVSF ✦ "1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFGPS4DFOF1FSDFQUJPO ✦ #BTFEPO+VMJB ✦ .*51SPC\$PNQ1SPKFDU 7FOUVSF #BZFT%# ʜ

 ✦ <,VMLBSOJ >l1JDUVSFBQSPCBCJMJTUJDQSPHSBNNJOHMBOHVBHFGPSTDFOFQFSDFQUJPOz  \$713 #FTU1BQFS)POPSBCMF.FOUJPO  ✦ l1SPCBCJMJTUJDQSPHSBNNJOHEPFTJOMJOFTPGDPEFXIBUVTFEUPUBLFUIPVTBOETz 36 ‣ Picture: A Probabilistic Programming Language for Scene Perception (ﬁgure from this page) ‣ Short probabilistic programming machine-learning code replaces complex programs for computer-vision tasks | KurzweilAI ‣ Picture: A Probabilistic Programming Language for Scene Perception - TechTalks.tv, prezi slide
54. ### 0QFO11-  "1SPQPTBMGPS1SPCBCJMJTUJD1SPHSBNNJOHJO+VMJB 37 ‣ OpenPPL: A Proposal for Probabilistic Programming

in Julia — OpenPPL 0.1.0 documentation ‣ JuliaStats/PGM.jl: A Julia framework for probabilistic graphical models. ‣ Probabilistic Programming in Julia - Google Groups

56. ### 8IFSFUPTUBSU ✦ 3FBEJOHT ✦ 8IBUJTQSPCBCJMJTUJDQSPHSBNNJOH 5IF1-&OUIVTJBTU ✦ 5IF4UBUFPG1SPCBCJMJTUJD1SPHSBNNJOHm4PNF5IPVHIUTPOB.ZTUFSJPVT6OJWFSTF ✦ *OUFSBDUJWF5VUPSJBMT

✦ 1SPCBCJMJTUJD.PEFMTPG\$PHOJUJPO \$IVSDI  ✦ 5IF%FTJHOBOE*NQMFNFOUBUJPOPG1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFT 8FC11- 39 ‣ PROBABILISTIC-PROGRAMMING.org ‣ Resources – PPAML
57. ### 4PNFQBQFST ✦ <(PSEPO >1SPCBCJMJTUJD1SPHSBNNJOHz  *\$4&'VUVSFPG4PGUXBSF&OHJOFFSJOH ✦ <(PPENBO >l\$IVSDIBMBOHVBHFGPSHFOFSBUJWFNPEFMTz  6ODFSUBJOUZJO"SUJpDJBM*OUFMMJHFODF 6"*

 ✦ 1I%5IFTFT ✦ "OESFBT4UVIMNÛMMFS l.PEFMJOH\$PHOJUJPOXJUI1SPCBCJMJTUJD1SPHSBNT3FQSFTFOUBUJPOTBOE"MHPSJUINTz ✦ %BOJFM.3PZ l\$PNQVUBCJMJUZ JOGFSFODFBOENPEFMJOHJOQSPCBCJMJTUJDQSPHSBNNJOHz ✦ 7JLBTI.BOTJOHILB l/BUJWFMZ1SPCBCJMJTUJD\$PNQVUBUJPOz 40 ‣ Research articles on probabilistic programming: PROBABILISTIC-PROGRAMMING.org