Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dive into Probabilistic Programming

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Dive into Probabilistic Programming

Avatar for Sorami Hisamoto

Sorami Hisamoto

September 03, 2016
Tweet

More Decks by Sorami Hisamoto

Other Decks in Programming

Transcript

  1. 1SPHSBNNJOHlQSPCBCJMJTUJDEJTUSJCVUJPOTzʜ ✦ 1SPCBCJMJTUJD1SPHSBNT  4BNQMJOH
 ESBXWBMVFTBUSBOEPNGSPNEJTUSJCVUJPOT  $POEJUJPOJOH
 DPOEJUJPOWBMVFTPGWBSJBCMFTJOBQSPHSBNWJBPCTFSWBUJPO 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
  2. &YBNQMFqJQQJOHDPJOT ✦ 4BZXFIBWFBDPJO XJUIVOLOPXOCFOEJOFTT ✦ 8FqJQJUBDPVQMFUJNFT ✦ 8FUIFOlHVFTTzJU`TCFOEJOFTT 6 ‣

    [Gordon+ 2014] "Probabilistic Programming", ICSE Future of Software Engineering ‣ What is probabilistic programming? - The PL Enthusiast ‣ “Probabilistic Models of Cognition” Chapter 3 : Conditioning
  3. 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” …
  4. 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” …
  5. 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” …
  6. 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” …
  7. 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” …
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. &YBNQMFSBUJOHUIFPOMJOFHBNFQMBZFST ✦ 1MBZFSTIBWFl 5SVF 4LJMMzBOEl1FSGPSNBODFz ✦ 1FSGPSNBODFJTCBTFEPO4LJMMT 
 BOEJUWBSJFTGSPNHBNFUPHBNF ✦

    (BNFPVUDPNFDPOEJUJPO4LJMM 9 ‣ TrueSkill™ Ranking System - Microsoft Research (figure from this page) ‣ TrueSkill — trueskill 0.4.4 documentation ‣ [Gordon+ 2014] "Probabilistic Programming", ICSE Future of Software Engineering
  14. 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)
  15. 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)
  16. 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)
  17. 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)
  18. ### 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)
  19. ### 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)
  20. ### 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)
  21. )PXEPXFNBLFUIBUQPTTJCMF ✦ 4UBUJD*OGFSFODF ✦ .FTTBHF1BTTJOH ✦ #FMJFG1SPQBHBUJPO ʜ ✦ %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
  22. -BUFOU%JSJDIMFU"MMPDBUJPOJOWBSJPVTGPSNT 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
  23. 8IZTIPVMEXFDBSF ✦ 8FDPNNVOJDBUFBCPVUUIFNPEFMTJO
 OBUVSBMMBOHVBHFT NBUIT QMBUFOPUBUJPOT QSPHSBNT ʜ ✦ lVOJGZJOHHFOFSBMQVSQPTFQSPHSBNNJOH


    XJUIQSPCBCJMJTUJDNPEFMJOHz ✦ .BDIJOF-FBSOJOHGPS%PNBJO&YQFSUT
 TDJLJUMFBSOJTDPPM CVUZPVDBO`UDPOTUSVDUOPWFMNPEFMTXJUIJUEJGGFSFOUVTFDBTFT 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
  24. %"31"11".- ✦ l5IF1SPCBCJMJTUJD1SPHSBNNJOHGPS"EWBODJOH.BDIJOF-FBSOJOHz   l4IPSUFS3FEVDF-0$CZYGPS.-BQQMJDBUJPOTz  l'BTUFS3FEVDFEFWFMPQNFOUUJNFCZYz  l.PSF*OGPSNBUJWF%FWFMPQNPEFMTUIBUBSFYNPSFTPQIJTUJDBUFEz

     l8JUI-FTT&YQFSUJTF&OBCMFYNPSFQSPHSBNNFSTz ✦ 4VNNFS4DIPPMT 16 ‣ Probabilistic Programming for Advancing Machine Learning (PPAML), Dr. Suresh Jagannathan ‣ PPAML Wiki ‣ PPAML Kickoff Overview Slides (pdf), November 2013
  25. 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
  26. #6(4GBNJMZ ✦ #6(4l#BZFTJBOJOGFSFODF6TJOH(JCCT4BNQMJOHz d ✦ 8JO#6(4d 0QFO#6(4d ✦ +"(4l+VTUBOPUIFS(JCCTTBNQMFSz d

    ✦ HPFENBO+BHTKM ✦ PMPGTFO+"(4KM 19 ‣ [Lunn+ 2009] “The BUGS project: Evolution, critique and future directions” ‣ (ja) ୈ1ճBUGS/StanษڧձΛ։࠵͠·ͨ͠ - Analyze IT., September 2013 ‣ (ja) “ؠ೾σʔλαΠΤϯε Vol.1” [ಛू] ϕΠζਪ࿦ͱMCMCͷϑϦʔιϑτ
  27. 45"/ ✦ *NQFSBUJWFQSPCBCJMJTUJDQSPHSBNNJOHMBOHVBHF ✦ /VN'PDVTQSPKFDU ✦ *OUFSGBDFT3 1ZUIPO TIFMM ."5-"#

    4UBUB +VMJB 20 ‣ Stan, official 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
  28. 1Z.$ ✦ 1ZUIPO ✦ 1Z.$ 1Z.$ ✦ l#BZFTJBO.FUIPETGPS)BDLFSTz 21 ‣

    pymc-devs/pymc: PyMC: Bayesian Stochastic Modelling in Python ‣ Probabilistic Programming & Bayesian Methods for Hackers (figure from this page) ‣ (ja) “ؠ೾σʔλαΠΤϯε Vol.1” [ಛू] ϕΠζਪ࿦ͱMCMCͷϑϦʔιϑτ
  29. $IVSDI ✦ 4DIFNFCBTFE/BNFEBGUFS"MPO[P$IVSDI ✦ (SFBUSFTPVSDFT ✦ l1SPCBCJMJTUJD.PEFMTPG$PHOJUJPOz˒ ✦ l'PSFTUBSFQPTJUPSZGPSHFOFSBUJWFNPEFMTz ✦

    0OMJOFQMBZTQBDF ✦ $PHOJUJWF4DJFODF ✦ $PNQVUBUJPOBOE$PHOJUJPOUIF1SPCBCJMJTUJD"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
  30. 8FC11- QSPOPVODFEbXFCQFPQMF` ✦ +BWB4DSJQUCBTFE QVSFMZGVODUJPOBM ✦ (SFBUSFTPVSDFT ✦ 5IF%FTJHOBOE*NQMFNFOUBUJPOPG1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFT ✦

    11".-4VNNFS4DIPPM ✦ 8FC11-%PDVNFOUBUJPOŠXFCQQMEPDVNFOUBUJPO ✦ .PEFMJOH"HFOUTXJUI1SPCBCJMJTUJD1SPHSBNT 26
  31. #BZFT%#7FOUVSF ✦ 5IF.*51SPCBCJMJTUJD$PNQVUJOH1SPKFDU ✦ #BZFT%# ✦ #2- #BZFTJBO2VFSZ-BOVBHF FYUFOTJPOPG42-&45*."5& 4*.6-"5&

    ʜ ✦ 7FOUVSF ✦ QSPCBCJMJTUJDDPNQVUJOHQMBUGPSN
 )PTUTBQQMJDBUJPOTMJLF#BZFT%#1SPHSBNNFEQSJNBSJMZJOl7FOUVSF4DSJQUz 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
  32. *OGFS/&5'VO5BCVMBS ✦ .JDSPTPGU3TFBSDI ✦ *OGFS/&5'VO ✦ 'QSPCBCJMJTUJDNPEFMJOHMBOHVBHF ✦ 5BCVMBSTDIFNBESJWFOBQQSPBDI ✦

    BWBJMBCMFBTBO&YDFMBEEJO 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 (figure from this paper)
  33. 'JHBSP ✦ 4DBMBCBTFE0CKFDU0SJFOUFE ✦ 5IFSF`TBCPPL  29 ‣ Avi Pfeffer

    “Practical Probabilistic Programming” (Manning, 2016) (figure from this page) ‣ Probabilistic Programming Language | Probabilistic Modeling ‣ Avi Pfeffer - Practical Probabilistic Programming with Figaro - MLconf SEA 2016 - YouTube, slide
  34. "OHMJDBOJOUFHSBUFEXJUI$MPKVSF .-445VUPSJBM1SPCBCJMJTUJD$ &EXBSEl"MJCSBSZGPSQSPCBCJMJTUJDNPEFMJOH JOGFSFODF BOEDSJUJDJTNz 1ZUIPO5FOTPS'MPX 4UBO 1Z.$ ✦ l&YJTUJOHQSPCBCJMJTUJDQSPHSBNNJOHTZTUFNTz130#"#*-*45*$130(3"..*/(PSH

    ✦ l-JTUPGQSPCBCJMJTUJDQSPHSBNNJOHMBOHVBHFTz1SPCBCJMJTUJDQSPHSBNNJOHMBOHVBHF8JLJQFEJB UIFGSFFFODZDMPQFEJB l7FOUVSF .*5 'JHBSP $IBSMFT3JWFS"OBMZUJDT BOE#-0( #FSLFMFZ XFSFHJWFOUIFMJPO`TTIBSFPGBUUFOUJPOEVFUPUIFJS SFMBUJWF  NBUVSJUZ CVUPUIFSMBOHVBHFTQSFTFOUJODMVEFE$IVSDI 4UBOGPSE )BSBLV 6OJWFSTJUZPG*OEJBOB BOE$IJNQMF%JNQMF (BNBMPO 5IJT JTCZOPNFBOTBGVMMBDDPVOUJOHPGUIFTQBDFPG114T XIJDIJODMVEFT4UBO $PMVNCJB *OGFS/&5 .JDSPTPGU BOEWFSZNBOZPUIFSTz
 RVPUFGSPN5IF4UBUFPG1SPCBCJMJTUJD1SPHSBNNJOHm4PNF5IPVHIUTPOB.ZTUFSJPVT6OJWFSTF FNQIBTJTBEEFE BOENPSFʜ 30 ‣ http://www.robots.ox.ac.uk/~fwood/anglican/ (figure from this page) ‣ http://edwardlib.org/ (figure from this page)
  35. +VMJB4UBUT ✦ 4FUPGQBDLBHFT$PNNVOJUZ ✦ l4UBUJTUJDTBOE.BDIJOF-FBSOJOHNBEFFBTZJO+VMJBz ✦ %JTUSJCVUJPOTKMTBNQMJOH ʜ ✦ "UISFBEPO+VMJB4UBUTNBJMJOHMJTU


    1SPCBCJMJTUJD1SPHSBNNJOHJO+VMJB(PPHMF(SPVQT 32 ‣ https://github.com/JuliaStats (figure from this page) ‣ JuliaStats.org ‣ mailing list : julia-stats - Google Groups
  36. .$.$ ✦ +VMJB4UBUT.$.$KMDVSSFOUMZBQMBDFIPMEFSSFQPTJUPSZ ✦ +VMJB4UBUT-PSBKM ✦ CSJBOKTNJUI.BNCBKM ✦ HPFENBO4UBOKM ✦

    HPFENBO+BHTKM ✦ PMPGTFO+"(4KM ✦ -BVSFODF"TEpPVTEGKM QSFWJPVTMZLOPXOBT5VSJOHKM 33 ‣ scidom (Theodore Papamarkou) (figure from this page), Lora User Guide — Lora 0.5.3 documentation ‣ Names of Existing MCMC Packages · Issue #1 · JuliaStats/MCMC.jl ‣ JuliaTokyo #2 ͰϞϯςΧϧϩ๏ʹ͍ͭͯ࿩͖ͯ͠·ͨ͠ - ΓΜ͕͝Ͱ͍ͯΔ
  37. 4JHNBKM ✦ 1SPCBCJMJTUJDQSPHSBNNJOHFOWJSPONFOUJO+VMJB ✦ 5BMLTJO+VMJB$PO 4USBOHF-PPQ ✦ l+VMJBBTB1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFzCZ;FOOB5BWBSFT OPWJEFP 

    ✦ l1SPCBCJMJTUJD1SPHSBNT8IJDI.BLF $PNNPO 4FOTFzCZ;FOOB5BWBSFT :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
  38. TPNFNPSF ✦ ZFCBJ5VSJOHKM ✦ l3FKVWFOBUJOHQSPCBCJMJTUJDQSPHSBNNJOHJO+VMJBz ✦ 4UJMMZPVOHJOJUJBMDPNNJUJO"QSJM ✦ (F )POH

    "EBN4DJCJPS BOE;PVCJO(IBISBNBOJ5VSJOHSFKVWFOBUJOHQSPCBCJMJTUJDQSPHSBNNJOHJO+VMJB *OTVCNJTTJPO  ✦ OVMMB4UPDIZKMzOPMPOHFSVOEFSEFWFMPQNFOUz ✦ -BVSFODF"$IVSDIKMPCTPMFUF  ✦ ʜ 35 ‣ The Turing Language — Turing.jl 0.0.1 documentation ‣ Julia.jl/Statistics.md at master · svaksha/Julia.jl
  39. 1JDUVSF ✦ "1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFGPS4DFOF1FSDFQUJPO ✦ #BTFEPO+VMJB ✦ .*51SPC$PNQ1SPKFDU 7FOUVSF #BZFT%# ʜ

     ✦ <,VMLBSOJ >l1JDUVSFBQSPCBCJMJTUJDQSPHSBNNJOHMBOHVBHFGPSTDFOFQFSDFQUJPOz
 $713 #FTU1BQFS)POPSBCMF.FOUJPO  ✦ l1SPCBCJMJTUJDQSPHSBNNJOHEPFTJOMJOFTPGDPEFXIBUVTFEUPUBLFUIPVTBOETz 36 ‣ Picture: A Probabilistic Programming Language for Scene Perception (figure 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
  40. 0QFO11-
 "1SPQPTBMGPS1SPCBCJMJTUJD1SPHSBNNJOHJO+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
  41. 8IFSFUPTUBSU ✦ 3FBEJOHT ✦ 8IBUJTQSPCBCJMJTUJDQSPHSBNNJOH 5IF1-&OUIVTJBTU ✦ 5IF4UBUFPG1SPCBCJMJTUJD1SPHSBNNJOHm4PNF5IPVHIUTPOB.ZTUFSJPVT6OJWFSTF ✦ *OUFSBDUJWF5VUPSJBMT

    ✦ 1SPCBCJMJTUJD.PEFMTPG$PHOJUJPO $IVSDI  ✦ 5IF%FTJHOBOE*NQMFNFOUBUJPOPG1SPCBCJMJTUJD1SPHSBNNJOH-BOHVBHFT 8FC11- 39 ‣ PROBABILISTIC-PROGRAMMING.org ‣ Resources – PPAML
  42. 4PNFQBQFST ✦ <(PSEPO >1SPCBCJMJTUJD1SPHSBNNJOHz
 *$4&'VUVSFPG4PGUXBSF&OHJOFFSJOH ✦ <(PPENBO >l$IVSDIBMBOHVBHFGPSHFOFSBUJWFNPEFMTz
 6ODFSUBJOUZJO"SUJpDJBM*OUFMMJHFODF 6"*

     ✦ 1I%5IFTFT ✦ "OESFBT4UVIMNÛMMFS l.PEFMJOH$PHOJUJPOXJUI1SPCBCJMJTUJD1SPHSBNT3FQSFTFOUBUJPOTBOE"MHPSJUINTz ✦ %BOJFM.3PZ l$PNQVUBCJMJUZ JOGFSFODFBOENPEFMJOHJOQSPCBCJMJTUJDQSPHSBNNJOHz ✦ 7JLBTI.BOTJOHILB l/BUJWFMZ1SPCBCJMJTUJD$PNQVUBUJPOz 40 ‣ Research articles on probabilistic programming: PROBABILISTIC-PROGRAMMING.org