Probabilistisk programmering - Probabilistic programming
Probabilistisk programmering ( PP ) er et programmeringsparadigme , hvor probabilistiske modeller er specificeret, og inferens for disse modeller udføres automatisk. Det repræsenterer et forsøg på at forene probabilistisk modellering og traditionel generel programmering for at gøre den tidligere lettere og mere bredt anvendelig. Det kan bruges til at oprette systemer, der hjælper med at træffe beslutninger i lyset af usikkerhed.
Programmeringssprog, der bruges til probabilistisk programmering, kaldes "probabilistiske programmeringssprog" (PPL'er).
Ansøgninger
Probabilistisk ræsonnement er blevet brugt til en lang række opgaver, såsom forudsigelse af aktiekurser, anbefaling af film, diagnosticering af computere, registrering af cyberindtrængen og billeddetektering. Indtil for nylig (delvis på grund af begrænset computerkraft) var probabilistisk programmering imidlertid begrænset i omfang, og de fleste slutningsalgoritmer skulle skrives manuelt for hver opgave.
Ikke desto mindre blev der i 2015 brugt et 50-line probabilistisk computer vision- program til at generere 3D-modeller af menneskelige ansigter baseret på 2D-billeder af disse ansigter. Programmet brugte omvendt grafik som grundlag for sin slutningsmetode og blev bygget ved hjælp af billedpakken i Julia . Dette muliggjorde "i 50 linjer kode, hvad der plejede at tage tusinder".
Den Gen probabilistisk programmering bibliotek (også skrevet i Julia) er anvendt til vision og robotteknologi opgaver.
For nylig er de sandsynlige programmeringssystemer Turing.jl blevet anvendt i forskellige farmaceutiske og økonomiske applikationer.
Probabilistisk programmering i Julia er også blevet kombineret med differentierbar programmering ved at kombinere Julia -pakken Zygote.jl med Turing.jl.
Sandsynlige programmeringssprog
PPL'er strækker sig ofte fra et grundlæggende sprog. Valget af underliggende grundsprog afhænger af modellens lighed med grundsprogets ontologi samt kommercielle overvejelser og personlige præferencer. For eksempel er Dimple og Chimple baseret på Java , Infer.NET er baseret på .NET Framework , mens PRISM strækker sig fra Prolog . Nogle PPL'er som WinBUGS og Stan tilbyder imidlertid et selvstændigt sprog uden nogen indlysende oprindelse på et andet sprog.
Flere PPL'er er i aktiv udvikling, herunder nogle i betatest. De to mest populære værktøjer er Stan og PyMC3 .
Relationelle
Et probabilistisk relationelt programmeringssprog (PRPL) er et PPL, der er specielt designet til at beskrive og udlede sandsynlige relationelle modeller (PRM'er).
En PRM er normalt udviklet med et sæt algoritmer til reducering, slutning om og opdagelse af berørte distributioner, som er integreret i den tilsvarende PRPL.
Liste over sandsynlige programmeringssprog
Navn | Strækker sig fra | Værtsprog |
---|---|---|
Analytica | C ++ | |
bayesloop | Python | Python |
CuPPL | NOVA | |
Venture | Skema | C ++ |
Probabilistisk-C | C | C |
Anglikansk | Clojure | Clojure |
IBAL | OCaml | |
BayesDB | SQLite , Python | |
PRISM | B-Prolog | |
Infer.NET | .NET Framework | .NET Framework |
hul | MATLAB , Java | |
bums | MATLAB, Java | |
BLOG | Java | |
diff-SAT | Svar indstillede programmering , SAT (DIMACS CNF) | |
PSQL | SQL | |
BUGS | ||
FAKTORI | Scala | Scala |
PMTK | MATLAB | MATLAB |
Alkymi | C ++ | |
Dyna | Prolog | |
Figaro | Scala | Scala |
Kirke | Skema | Forskellige: JavaScript, Skema |
ProbLog | Prolog | Python, Jython |
ProBT | C ++, Python | |
Stan | C ++ | |
Hakaru | Haskell | Haskell |
BAli-Phy (software) | Haskell | C ++ |
ProbCog | Java, Python | |
Spille | Ketcher | |
PMens | Mens | Python |
Tuffy | Java | |
PyMC3 | Python, Theano | Python |
PyMC4 | Python, TensorFlow sandsynlighed | Python |
Rainier | Scala | Scala |
greta | TensorFlow | R |
granatæble | Python | Python |
Lea | Python | Python |
WebPPL | JavaScript | JavaScript |
Lad os Chance | Kradse | JavaScript |
Billede | Julia | Julia |
Turing.jl | Julia | Julia |
Gen | Julia | Julia |
Førsteordens PPL på lavt niveau | Python, Clojure, Pytorch | Forskellige: Python, Clojure |
Trold | Moskva ML | |
Edward | TensorFlow | Python |
TensorFlow Sandsynlighed | TensorFlow | Python |
Edward 2 | TensorFlow Sandsynlighed | Python |
Pyro | PyTorch | Python |
NumPyro | JAX | Python |
Saul | Scala | Scala |
Stan | C ++, Python, R | |
Rang PL | Java | |
Birk | C ++ | |
PSI | D |
Vanskelighed
Begrundelse om variabler som sandsynlighedsfordeling forårsager vanskeligheder for nybegyndere, men disse vanskeligheder kan afhjælpes ved brug af bayesiske netværksvisualiseringer og grafer over variable distributioner, der er integreret i kildekode -editoren.