stringtranslate.com

Programación probabilística

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] Puede utilizarse para crear sistemas que ayuden a tomar decisiones ante la incertidumbre.

Los lenguajes de programación utilizados para la programación probabilística se denominan "lenguajes de programación probabilística" (PPL).

Aplicaciones

El razonamiento probabilístico se ha utilizado para una amplia variedad de tareas, como predecir precios de 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 debían escribirse manualmente para cada tarea.

Sin embargo, en 2015, se utilizó un programa de visión por computadora probabilística de 50 líneas para generar modelos 3D de rostros humanos basados ​​en imágenes 2D de esos rostros. El programa utilizó gráficos inversos como base de su método de inferencia y se creó utilizando el paquete Picture en Julia . [4] Esto hizo posible "en 50 líneas de código lo que antes tomaba 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, el sistema de programación probabilística Turing.jl se ha aplicado en diversas aplicaciones farmacéuticas [8] y económicas. [9]

La programación probabilística en Julia también se ha combinado con la programación diferenciable combinando el paquete Julia Zygote.jl con Turing.jl. [10]

Los lenguajes de programación probabilísticos también se utilizan comúnmente en la ciencia cognitiva bayesiana para desarrollar y evaluar modelos de cognición. [11]

Lenguajes de programación probabilísticos

Los PPL a menudo se extienden a partir de un lenguaje 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 [12] y Chimple [13] se basan en Java , Infer.NET se basa en .NET Framework , [14] mientras que PRISM se extiende desde Prolog . [15] Sin embargo, algunos PPL como WinBUGS ofrecen un lenguaje autónomo, que se corresponde estrechamente con la representación matemática de los modelos estadísticos, sin un origen obvio en otro lenguaje de programación. [16] [17]

El lenguaje para winBUGS se implementó para realizar cálculos bayesianos utilizando Gibbs Sampling (y algoritmos relacionados). Aunque implementado en un lenguaje de programación relativamente desconocido (Component Pascal), este lenguaje permite la inferencia bayesiana para una amplia variedad de modelos estadísticos utilizando un enfoque computacional flexible. Se puede usar el mismo lenguaje BUGS para especificar modelos bayesianos para inferencia a través de diferentes opciones computacionales ("samplers") y convenciones o valores predeterminados, usando un programa independiente winBUGS (o paquetes R relacionados, rbugs y r2winbugs) y JAGS (Just Another Gibbs Sampler, otro programa independiente con paquetes R relacionados, incluidos rjags, R2jags y runjags). Más recientemente, otros lenguajes que admiten la especificación e inferencia del modelo bayesiano permiten opciones diferentes o más eficientes para el cálculo bayesiano subyacente y son accesibles desde el entorno de programación y análisis de datos de R, por ejemplo: Stan , NIMBLE y NUTS. La influencia del lenguaje BUGS es evidente en estos lenguajes posteriores, que incluso utilizan la misma sintaxis para algunos aspectos de la especificación del modelo.

Varias PPL se encuentran en desarrollo activo, incluidas algunas en prueba beta. Dos herramientas populares son Stan y PyMC . [18]

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, inferir y descubrir las distribuciones en cuestión, que están integrados en el PRPL correspondiente.

Programación lógica probabilística

La programación lógica probabilística es un paradigma de programación que amplía la programación lógica con probabilidades.

La mayoría de los enfoques de la programación lógica probabilística se basan en la semántica de distribución, que divide un programa en un conjunto de hechos probabilísticos y un programa lógico. Define una distribución de probabilidad sobre las interpretaciones del universo Herbrand del programa. [19]

Lista de lenguajes de programación probabilísticos

Esta lista resume la variedad de PPL que están disponibles actualmente y aclara sus orígenes.

Dificultad

Razonar sobre las variables como distribuciones de probabilidad causa dificultades a los programadores novatos, pero estas dificultades pueden abordarse mediante el uso de visualizaciones de redes bayesianas y gráficos de distribuciones de variables integrados en el editor de código fuente. [71]

Ver también

Notas

  1. ^ "La programación probabilística hace en 50 líneas de código lo que antes requería miles". phys.org . 13 de abril de 2015 . Consultado el 13 de abril de 2015 .
  2. ^ "Programación probabilística". programación-probabilística.org . Archivado desde el original el 10 de enero de 2016 . Consultado el 24 de diciembre de 2013 .
  3. ^ Pfeffer, Avrom (2014), Programación probabilística práctica , Publicaciones Manning. pág.28. ISBN 978-1 6172-9233-0 
  4. ^ abc "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 .
  5. ^ Hardesty, Larry (13 de abril de 2015). "Gráficos al revés".
  6. ^ "El MIT muestra un script de aprendizaje automático para crear CREEPY HEADS". El registro .
  7. ^ "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 .
  8. ^ Semenova, Elizaveta; Williams, Dominic P.; Afzal, Avid M.; Lazic, Stanley E. (1 de noviembre de 2020). "Una red neuronal bayesiana para la predicción de la toxicidad". Toxicología Computacional . 16 : 100133. doi : 10.1016/j.comtox.2020.100133. ISSN  2468-1113. S2CID  225362130.
  9. ^ Williams, Dominic P.; Lazic, Stanley E.; Foster, Alison J.; Semenova, Elizaveta; Morgan, Paul (2020), "Predicción de la lesión hepática inducida 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, S2CID  202689667
  10. ^ Innes, Mike; Edelman, Alan; Fischer, Keno; Rackauckas, Chris; Saba, Elliot; Viral B Shah; Tebbutt, voluntad (2019). "∂P: un sistema de programación diferenciable para unir el aprendizaje automático y la computación científica". arXiv : 1907.07587 [cs.PL].
  11. ^ Buen hombre, Noah D; Tenenbaum, Josué B; Buchsbaum, Dafna; Hartshorne, Josué; Hawkins, Robert; O'Donnell, Timothy J; Tessler, Michael Henry. "Modelos probabilísticos de cognición". Modelos probabilísticos de cognición - 2.ª edición . Consultado el 27 de mayo de 2023 .
  12. ^ ab "Página de inicio de hoyuelos". analógico.com . 2 de julio de 2021.
  13. ^ ab "Página de inicio de Chimple". analógico.com . 16 de abril de 2021.
  14. ^ ab "Infer.NET". microsoft.com . Microsoft.
  15. ^ ab "PRISMA: 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 .
  16. ^ ab "El Proyecto BUGS - Unidad de Bioestadística del MRC". cam.ac.uk. ​Archivado desde el original el 14 de marzo de 2014 . Consultado el 12 de enero de 2011 .
  17. ^ ab "Stan". mc-stan.org . Archivado desde el original el 3 de septiembre de 2012.
  18. ^ "Los algoritmos detrás de la programación probabilística" . Consultado el 10 de marzo de 2017 .
  19. ^ De Raedt, Luc; Kimmig, Angelika (1 de julio de 2015). "Conceptos de programación probabilística (lógica)". Aprendizaje automático . 100 (1): 5–47. doi :10.1007/s10994-015-5494-z. ISSN  1573-0565.
  20. ^ "Analytica: un lenguaje de modelado probabilístico". lumina.com .
  21. ^ "bayesloop - Marco de programación probabilística". bayesloop.com .
  22. ^ "GitHub - bayesloop". GitHub . 7 de diciembre de 2021.
  23. ^ "Bean Machine: un lenguaje de programación probabilístico universal que permite un análisis bayesiano rápido y preciso". beanmachine.org .
  24. ^ "Programación probabilística con CuPPL". popl19.sigplan.org .
  25. ^ Collins, Alejandro; Grewe, Dominik; Grover, Vinod; Lee, Sean; Susnea, Adriana (9 de junio de 2014). "NOVA: un lenguaje funcional para el paralelismo de datos". Actas del taller internacional ACM SIGPLAN sobre bibliotecas, lenguajes y compiladores para programación de matrices. Matriz'14. págs. 8-13. doi :10.1145/2627373.2627375. ISBN 9781450329378. S2CID  6748967. {{cite book}}: |work=ignorado ( ayuda )
  26. ^ "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 .
  27. ^ "C probabilística". ox.ac.uk. ​Archivado desde el original el 4 de enero de 2016 . Consultado el 24 de marzo de 2015 .
  28. ^ "El sistema de programación probabilística anglicano". ox.ac.uk. ​6 de enero de 2021.
  29. ^ "Página de inicio de IBAL". Archivado desde el original el 26 de diciembre de 2010.
  30. ^ "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 mismos". GitHub . 26 de diciembre de 2021.
  31. ^ "Lógica bayesiana (BLOG)". mit.edu . Archivado desde el original el 16 de junio de 2011.
  32. ^ "diff-SAT (SAT/ASP probabilístico)". GitHub . 8 de octubre de 2021.
  33. ^ 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.
  34. ^ "Factorie - Programación probabilística con gráficos de factores definidos imperativamente - Google Project Hosting". google.com .
  35. ^ "PMTK3 - kit de herramientas de modelado probabilístico para Matlab/Octave, versión 3 - Google Project Hosting". google.com .
  36. ^ "Alquimia: IA de código abierto". washington.edu .
  37. ^ "Dina". www.dyna.org . Archivado desde el original el 17 de enero de 2016 . Consultado el 12 de enero de 2011 .
  38. ^ "Charles River Analytics: servicios de modelado probabilístico". cra.com . 9 de febrero de 2017.
  39. ^ "Iglesia". mit.edu . Archivado desde el original el 14 de enero de 2016 . Consultado el 8 de abril de 2013 .
  40. ^ "ProbLog: programación probabilística". dtai.cs.kuleuven.be .
  41. ^ 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 .
  42. ^ "Página de inicio de Hakaru". hakaru-dev.github.io/ .
  43. ^ "Página de inicio de BAli-Phy". bali-phy.org .
  44. ^ "Problema". GitHub .
  45. ^ Culpepper, Ryan (17 de enero de 2017). "apuesta: programación probabilística" - a través de GitHub.
  46. ^ "PWhile Compilador". GitHub . 25 de mayo de 2020.
  47. ^ "Tuffy: un motor de inferencia de lógica de Markov escalable". stanford.edu .
  48. ^ Desarrolladores de PyMC. "PyMC". pymc-devs.github.io .
  49. ^ stripe/rainier, Stripe, 19 de agosto de 2020 , consultado el 26 de agosto de 2020
  50. ^ "Rainier · Inferencia bayesiana para Scala". samplerainier.com . Consultado el 26 de agosto de 2020 .
  51. ^ "greta: modelado estadístico simple y escalable en R". GitHub . Consultado el 2 de octubre de 2018 .
  52. ^ "Inicio - documentación de granada 0.10.0". granada.readthedocs.io . Consultado el 2 de octubre de 2018 .
  53. ^ "Página de inicio de Lea". bitbucket.org .
  54. ^ "Página de inicio de WebPPL". github.com/probmods/webppl .
  55. ^ Let's Chance: programación probabilística lúdica para niños | Resúmenes ampliados de la Conferencia CHI 2020 sobre factores humanos en sistemas informáticos. Chi Ea '20. 25 de abril de 2020. págs. 1–7. doi :10.1145/3334480.3383071. ISBN 9781450368193. S2CID  216079395 . Consultado el 1 de agosto de 2020 . {{cite book}}: |website=ignorado ( ayuda )
  56. ^ "El lenguaje de Turing para programación probabilística". GitHub . 28 de diciembre de 2021.
  57. ^ "Gen: un lenguaje de programación probabilística de propósito general con inferencia programable" . Consultado el 17 de junio de 2019 .
  58. ^ "LF-PPL: un lenguaje de programación probabilística de primer orden de bajo nivel para modelos no diferenciables". ox.ac.uk. ​2 de noviembre de 2019.
  59. ^ "Rodillo de dados troll y calculadora de probabilidad". topps.diku.dk .
  60. ^ "Eduardo - Inicio". edwardlib.org . Consultado el 17 de enero de 2017 .
  61. ^ TensorFlow (11 de abril de 2018). "Presentación de la probabilidad de TensorFlow". TensorFlow . Consultado el 2 de octubre de 2018 .
  62. ^ "'Módulo de probabilidad TensorFlow de Edward2 ". GitHub . Consultado el 2 de octubre de 2018 .
  63. ^ "Piro". piro.ai. ​Consultado el 9 de febrero de 2018 .
  64. ^ "NumPyro". piro.ai. ​Consultado el 23 de julio de 2021 .
  65. ^ "CogComp - Inicio".
  66. ^ Rienstra, Tjitze (18 de enero de 2018), RankPL: un lenguaje de programación probabilístico cualitativo basado en la teoría de clasificación , consultado el 18 de enero de 2018
  67. ^ "Programación probabilística en Birch". birch-lang.org . Consultado el 20 de abril de 2018 .
  68. ^ "PSI Solver: inferencia exacta para programas probabilísticos". psisolver.org . Consultado el 18 de agosto de 2019 .
  69. ^ "Inicio". www.stat.ubc.ca.
  70. ^ Perov, Yura; Graham, Logan; Gourgoulias, Kostis; Richens, Jonathan G.; Lee, Ciarán M.; Panadero, Adán; Johri, Saurabh (28 de enero de 2020), MultiVerse: razonamiento causal utilizando muestreo de importancia en programación probabilística , arXiv : 1910.08091
  71. ^ Gorinova, María I.; Sarkar, Advait; Blackwell, Alan F.; Syme, Don (1 de enero de 2016). "Un entorno de programación probabilística 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, Estados Unidos: ACM. págs. 2533–2537. doi :10.1145/2858036.2858221. ISBN 9781450333627. S2CID  3201542.

enlaces externos