La programación probabilística ( PP ) es un paradigma de programación en el que se especifican modelos probabilísticos y la inferencia de estos modelos se realiza automáticamente. [1] Representa un intento de unificar el modelado probabilístico y la programación tradicional de propósito general para hacer que el primero sea más fácil y más ampliamente aplicable. [2] [3] Se puede utilizar para crear sistemas que ayuden a tomar decisiones frente a la incertidumbre.
Los lenguajes de programación utilizados para la programación probabilística se denominan "lenguajes de programación probabilísticos" (PPL).
Aplicaciones
El razonamiento probabilístico se ha utilizado para una amplia variedad de tareas, como predecir los precios de las acciones, recomendar películas, diagnosticar computadoras, detectar intrusiones cibernéticas y detección de imágenes. [4] Sin embargo, hasta hace poco (en parte debido a la potencia informática limitada), la programación probabilística tenía un alcance limitado y la mayoría de los algoritmos de inferencia tenían que escribirse manualmente para cada tarea.
Sin embargo, en 2015, se utilizó un programa de visión probabilística por computadora de 50 líneas para generar modelos 3D de rostros humanos basados en imágenes 2D de esos rostros. El programa usó gráficos inversos como base de su método de inferencia y fue construido usando el paquete Picture en Julia . [4] Esto hizo posible "en 50 líneas de código lo que solía tomar miles". [5] [6]
La biblioteca de programación probabilística Gen (también escrita en Julia) se ha aplicado a tareas de visión y robótica. [7]
Más recientemente, los sistemas de programación probabilística Turing.jl se han aplicado en diversas aplicaciones farmacéuticas y económicas. [8]
La programación probabilística en Julia también se ha combinado con la programación diferenciable mediante la combinación del paquete Julia Zygote.jl con Turing.jl. [9]
Lenguajes de programación probabilísticos
Los PPL a menudo se extienden desde un idioma básico. La elección del lenguaje básico subyacente depende de la similitud del modelo con la ontología del lenguaje básico , así como de consideraciones comerciales y preferencias personales. Por ejemplo, Dimple [10] y Chimple [11] se basan en Java , Infer.NET se basa en .NET Framework , [12] mientras que PRISM se extiende desde Prolog . [13] Sin embargo, algunos PPL como WinBUGS y Stan ofrecen un lenguaje autónomo, sin un origen obvio en otro idioma. [14] [15]
Varios PPL están en desarrollo activo, incluidos algunos en prueba beta. Las dos herramientas más populares son Stan y PyMC3 . [dieciséis]
Relacional
Un lenguaje de programación relacional probabilístico (PRPL) es un PPL especialmente diseñado para describir e inferir con modelos relacionales probabilísticos (PRM).
Un PRM generalmente se desarrolla con un conjunto de algoritmos para reducir, inferencia y descubrimiento de distribuciones en cuestión, que están integrados en el PRPL correspondiente.
Lista de lenguajes de programación probabilísticos
Nombre | Se extiende desde | Idioma anfitrión |
---|---|---|
Analytica [17] | C ++ | |
bayesloop [18] [19] | Pitón | Pitón |
CuPPL [20] | NOVA [21] | |
Venture [22] | Esquema | C ++ |
Probabilístico-C [23] | C | C |
Anglicano [24] | Clojure | Clojure |
IBAL [25] | OCaml | |
BayesDB [26] | SQLite , Python | |
PRISM [13] | B-Prolog | |
Infer.NET [12] | .NET Framework | .NET Framework |
hoyuelo [10] | MATLAB , Java | |
chimple [11] | MATLAB, Java | |
BLOG [27] | Java | |
diff-SAT [28] | Programación del conjunto de respuestas , SAT (DIMACS CNF) | |
PSQL [29] | SQL | |
ERRORES [14] | ||
FÁBRICA [30] | Scala | Scala |
PMTK [31] | MATLAB | MATLAB |
Alquimia [32] | C ++ | |
Dyna [33] | Prólogo | |
Figaro [34] | Scala | Scala |
Iglesia [35] | Esquema | Varios: JavaScript, esquema |
ProbLog [36] | Prólogo | Python, Jython |
ProBT [37] | C ++, Python | |
Stan [15] | C ++ | |
Hakaru [38] | Haskell | Haskell |
BAli-Phy (software) [39] | Haskell | C ++ |
ProbCog [40] | Java, Python | |
Apuesta [41] | Raqueta | |
P Mientras [42] | Tiempo | Pitón |
Tuffy [43] | Java | |
PyMC3 [44] | Python, Theano | Pitón |
PyMC4 [45] | Python, probabilidad de TensorFlow | Pitón |
Rainier [46] [47] | Scala | Scala |
greta [48] | TensorFlow | R |
granada [49] | Pitón | Pitón |
Lea [50] | Pitón | Pitón |
WebPPL [51] | JavaScript | JavaScript |
Vamos al azar [52] | Rasga | JavaScript |
Imagen [4] | Julia | Julia |
Turing.jl [53] | Julia | Julia |
Gen [54] | Julia | Julia |
PPL de primer orden de bajo nivel [55] | Python, Clojure, Pytorch | Varios: Python, Clojure |
Troll [56] | Moscú ML | |
Edward [57] | TensorFlow | Pitón |
Probabilidad de TensorFlow [58] | TensorFlow | Pitón |
Edward2 [59] | Probabilidad de TensorFlow | Pitón |
Pyro [60] | PyTorch | Pitón |
Saulo [61] | Scala | Scala |
Stan [62] | C ++, Python, R | |
RankPL [63] | Java | |
Abedul [64] | C ++ | |
PSI [65] | D |
Dificultad
Razonar sobre las variables como distribuciones de probabilidad causa dificultades a los programadores novatos, pero estas dificultades se pueden abordar mediante el uso de visualizaciones de redes bayesianas y gráficos de distribuciones de variables incrustados en el editor de código fuente. [66]
Ver también
- Aprendizaje relacional estadístico
- Programación inductiva
- Programación bayesiana
Notas
- ^ "La programación probabilística hace en 50 líneas de código lo que solía llevar miles" . phys.org . 13 de abril de 2015 . Consultado el 13 de abril de 2015 .
- ^ "Programación probabilística" . probabilistic-programming.org . Archivado desde el original el 10 de enero de 2016 . Consultado el 24 de diciembre de 2013 .
- ^ Pfeffer, Avrom (2014), Programación probabilística práctica , Publicaciones Manning. p.28. ISBN 978-1 6172-9233-0
- ^ a b c "El código de aprendizaje automático de programación probabilística corta reemplaza programas complejos para tareas de visión por computadora" . KurzweilAI . 13 de abril de 2015 . Consultado el 27 de noviembre de 2017 .
- ^ Hardesty, Larry (13 de abril de 2015). "Gráficos al revés" .
- ^ "MIT muestra un script de aprendizaje automático para hacer CABEZAS CREEPY" .
- ^ "El sistema de programación Gen del MIT aplana la curva de aprendizaje para proyectos de IA" . VentureBeat . 27 de junio de 2019 . Consultado el 27 de junio de 2019 .
- ^ Williams, Dominic P .; Lazic, Stanley E .; Foster, Alison J .; Semenova, Elizaveta; Morgan, Paul (2020), "Predicción de lesiones hepáticas inducidas por fármacos con aprendizaje automático bayesiano" , Investigación química en toxicología , 33 (1): 239–248, doi : 10.1021 / acs.chemrestox.9b00264 , PMID 31535850
- ^ Innes, Mike; Edelman, Alan; Fischer, Keno; Rackauckas, Chris; Saba, Elliot; Viral B Shah; Tebbutt, Will (2019), ∂P: Un sistema de programación diferenciable para unir el aprendizaje automático y la informática científica , arXiv : 1907.07587
- ^ a b "Página de inicio de hoyuelos" . analog.com .
- ^ a b "Página de inicio de Chimple" . analog.com .
- ^ a b "Infer.NET" . microsoft.com . Microsoft.
- ^ a b "PRISM: Programación en modelado estadístico" . rjida.meijo-u.ac.jp . Archivado desde el original el 1 de marzo de 2015 . Consultado el 8 de julio de 2015 .
- ^ a b "El Proyecto BUGS - Unidad de Bioestadística MRC" . cam.ac.uk . Archivado desde el original el 14 de marzo de 2014 . Consultado el 12 de enero de 2011 .
- ^ a b "Stan" . mc-stan.org . Archivado desde el original el 3 de septiembre de 2012.
- ^ "Los algoritmos detrás de la programación probabilística" . Consultado el 10 de marzo de 2017 .
- ^ "Analytica: un lenguaje de modelado probabilístico" . lumina.com .
- ^ "bayesloop: marco de programación probabilística que facilita la selección del modelo objetivo para modelos de parámetros variables en el tiempo" .
- ^ "GitHub - bayesloop" .
- ^ "Programación probabilística con CuPPL" . popl19.sigplan.org .
- ^ "NOVA: un lenguaje funcional para el paralelismo de datos" . acm.org .
- ^ "Venture - una plataforma de programación probabilística de propósito general" . mit.edu . Archivado desde el original el 25 de enero de 2016 . Consultado el 20 de septiembre de 2014 .
- ^ "Probabilistic C" . ox.ac.uk . Archivado desde el original el 4 de enero de 2016 . Consultado el 24 de marzo de 2015 .
- ^ "El sistema de programación probabilística anglicana" . ox.ac.uk .
- ^ "Página de inicio de IBAL" . Archivado desde el original el 26 de diciembre de 2010.
- ^ "BayesDB en SQLite. Una tabla de base de datos Bayesiana para consultar las probables implicaciones de los datos tan fácilmente como las bases de datos SQL consultan los datos en sí" . GitHub .
- ^ "Lógica Bayesiana (BLOG)" . mit.edu . Archivado desde el original el 16 de junio de 2011.
- ^ "diff-SAT (probabilístico SAT / ASP)" .
- ^ Dey, Debabrata; Sarkar, Sumit (1998). "PSQL: un lenguaje de consulta para datos relacionales probabilísticos". Ingeniería de datos y conocimiento . 28 : 107-120. doi : 10.1016 / S0169-023X (98) 00015-9 .
- ^ "Factorie - Programación probabilística con gráficos de factores definidos imperativamente - Google Project Hosting" . google.com .
- ^ "PMTK3 - kit de herramientas de modelado probabilístico para Matlab / Octave, versión 3 - Alojamiento de proyectos de Google" . google.com .
- ^ "Alquimia - AI de código abierto" . washington.edu .
- ^ "Dyna" . www.dyna.org . Archivado desde el original el 17 de enero de 2016 . Consultado el 12 de enero de 2011 .
- ^ "Charles River Analytics - servicios de modelado probabilístico" . cra.com .
- ^ "Iglesia" . mit.edu . Archivado desde el original el 14 de enero de 2016 . Consultado el 8 de abril de 2013 .
- ^ "ProbLog: programación probabilística" . dtai.cs.kuleuven.be .
- ^ Probablemente Sí. "ProbaYes - Ensemble, nous valorisations vos données" . probayes.com . Archivado desde el original el 5 de marzo de 2016 . Consultado el 26 de noviembre de 2013 .
- ^ "Página de inicio de Hakaru" . hakaru-dev.github.io/ .
- ^ "Página de inicio de BAli-Phy" . bali-phy.org .
- ^ "ProbCog" . GitHub .
- ^ Culpepper, Ryan (17 de enero de 2017). "apuesta: Programación probabilística" - a través de GitHub.
- ^ "Compilador PWhile" . GitHub .
- ^ "Tuffy: un motor de inferencia lógica de Markov escalable" . stanford.edu .
- ^ Desarrolladores de PyMC. "PyMC3" . pymc-devs.github.io .
- ^ Desarrolladores, PyMC (17 de mayo de 2018). "Theano, TensorFlow y el futuro de PyMC" . Desarrolladores PyMC . Consultado el 25 de enero de 2019 .
- ^ stripe / rainier , Stripe, 19 de agosto de 2020 , consultado el 26 de agosto de 2020
- ^ "Rainier · Inferencia bayesiana para Scala" . samplerainier.com . Consultado el 26 de agosto de 2020 .
- ^ "greta: modelado estadístico simple y escalable en R" . GitHub . Consultado el 2 de octubre de 2018 .
- ^ "Inicio - documentación de granada 0.10.0" . granada.readthedocs.io . Consultado el 2 de octubre de 2018 .
- ^ "Página de inicio de Lea" . bitbucket.org .
- ^ "Página de inicio de WebPPL" . github.com/probmods/webppl .
- ^ "Let's Chance: Programación probabilística lúdica para niños | Resúmenes extendidos de la Conferencia CHI 2020 sobre factores humanos en sistemas informáticos" . dl.acm.org . doi : 10.1145 / 3334480.3383071 . S2CID 216079395 . Consultado el 1 de agosto de 2020 .
- ^ "El lenguaje de Turing para programación probabilística" .
- ^ "Gen: un lenguaje de programación probabilístico de propósito general con inferencia programable" . Consultado el 17 de junio de 2019 .
- ^ "LF-PPL: un lenguaje de programación probabilístico de primer orden de bajo nivel para modelos no diferenciables" . ox.ac.uk .
- ^ "Calculadora de probabilidad y rodillo de dados de trolls" .
- ^ "Edward - Casa" . edwardlib.org . Consultado el 17 de enero de 2017 .
- ^ TensorFlow (11 de abril de 2018). "Presentación de TensorFlow Probability" . TensorFlow . Consultado el 2 de octubre de 2018 .
- ^ " Módulo de probabilidad de TensorFlow ' Edward2'" . GitHub . Consultado el 2 de octubre de 2018 .
- ^ "Pyro" . pyro.ai . Consultado el 9 de febrero de 2018 .
- ^ "CogComp - Inicio" .
- ^ https://mc-stan.org/ . Falta o vacío
|title=
( ayuda ) - ^ Rienstra, Tjitze (18 de enero de 2018), RankPL: Un lenguaje de programación probabilístico cualitativo basado en la teoría de clasificación , recuperado el 18 de enero de 2018
- ^ "Programación probabilística en abedul" . birch-lang.org . Consultado el 20 de abril de 2018 .
- ^ "PSI Solver - inferencia exacta para programas probabilísticos" . psisolver.org . Consultado el 18 de agosto de 2019 .
- ^ Gorinova, Maria I .; Sarkar, Advait; Blackwell, Alan F .; Syme, Don (1 de enero de 2016). Un entorno de programación probabilístico de representación múltiple en vivo para principiantes . Actas de la Conferencia CHI de 2016 sobre factores humanos en sistemas informáticos . CHI '16. Nueva York, NY, EE.UU .: ACM. págs. 2533-2537. doi : 10.1145 / 2858036.2858221 . ISBN 9781450333627. S2CID 3201542 .
enlaces externos
- Lista de kits de herramientas de mini lenguaje de modelos probabilísticos
- Wiki de programación probabilística