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.

Se også

Noter

eksterne links