Pyro

Leyendo sobre si dizque PyTorch le siega la hierba debajo de los pies a TensorFlow, averigué la existencia de Pyro.

Pyro se autopresenta como Deep Universal Probabilistic Programming, pero aplicando métodos porfirianos (ya sabéis: género próximo y diferencia específica), es, o pretende ser, Stan en Python y a escala.

Aquí van mis dos primeras impresiones, basadas en una inspección superficial de los tutoriales.

En primer lugar, aunque Pyro permite usar (distintas versiones de) MCMC, parece que su especialidad es la inferencia variacional estocástica. Que parece funcionar de la siguiente manera. En el MCMC tradicional uno obtiene una muestra de la distribución (a posteriori, para los amigos) de los parámetros de interés. Eso es todo: vectores de puntos. En la inferencia variacional estocástica, uno preespecifica la forma paramétrica de la posteriori y el algoritmo calcula sus parámetros a partir de los valores simulados. Por ejemplo, uno va y dice: me da que la distribución del término independiente de mi regresión lineal va a ser normal. Entonces, Pyro responde: si es normal, la mejor media y desviación estándar que encuentro son tal y cual.

La segunda observación que me permito hacer es que la forma que adquiere la implementación de modelos en Pyro está muy alejada de la forma en que los plantearía un estadístico. Uno lee código en Stan o Jags y entiende lo que está ocurriendo: las servidumbres al lenguaje subyacente son mínimas y existe un DSL conciso que permite expresar los modelos de una manera natural. Pero no pasa así con Pyro.

De todos modos, es un gran aporte y espero que en no mucho tiempo podamos construir modelos de verdad (no, XGBoost no es de verdad) en condiciones y a escala.

2 comentarios sobre “Pyro

  1. José Luis Hidalgo 14 octubre, 2019 13:20

    Pyro, desde luego, no es una herramienta ni para estadísticos ni hecha para estadísticos (si aceptamos una definición de «estadística» restrictiva y obsoleta), es una herramienta de machine learning (que, para mí, es estadística pura y dura, aunque parece que para otros no). Pero tiene cosas mucho más interesantes de las que comentas: permite, de manera bastante conveniente y extremadamente flexible, generar modelos que mezclen el rigor matemático de los métodos bayesianos con la potencia de las redes neuronales profundas, y hacer que esos modelos sean escalables. Y a estas alturas está claro que ese es un camino de investigación muy fructífero: muchos de los papers de machine learning más interesantes de los últimos dos años o así usan PyTorch, y cada vez más usan también Pyro.
    Por cierto, una característica exclusiva de Pyro (hasta donde yo sé), muy interesante y con la que se pueden hacer cosas que de otro modo son casi imposibles, es la existencia del «do-operator» (en el sentido del do-calculus de Judea Pearl), que, entre otras cosas, permite incluir correctamente condiciones de causalidad en modelos de inferencia bayesiana. Es un tema complicadillo del que en mi opinión se habla mucho menos de lo que se debería, quizá precisamente porque es complicadillo 😉

    P.D: Entiendo que cada uno está cómodo con las herramientas que conoce hace tiempo, pero lo de llamar a Stan «un DSL conciso y natural»… uff 🙂

  2. Javier G. 15 octubre, 2019 10:44

    Ya que mencionas Stan, existe (está ya algo obsoleta) un proyecto llamado Edward, http://edwardlib.org/, (donde hay mucha gente de Stan detrás) con el mismo fin. De hecho tan «exitosa» ha sido esta librera que ha sido integrada como un modelo de tensorflow probability donde ha perdido cierta claridad en la sintaxis y modo de expresar las cosas.

Comenta

Your email address will not be published.

Puedes usar estas etiquetas y atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.