I think Pyro (and TF Probability) could benefit from a port of Probabilistic Models of Cognition (PMC). I first worked through PMC when it was released many years ago. Although I’d taught some intro material on Bayesian Networks, PMC and Church was my first introduction to PPL. I also found it helpful to read Bayesian Models of Cognition while working through PMC. Most of the statistical and PPL concepts in PMC were new to me (an old symbolic AI researcher, now working in clinical informatics), yet I found it very accessible and eye-opening. I was able to use Church to demonstrate how PPL might help with biomedical informatics applications for clinical decision support and clinical guidelines. Since then, I’ve been monitoring PPL research in hopes of applying PPL to complex real-world problems in biomedical informatics.
In that context, I have begun to explore Pyro and TF probability, however, I am finding the tutorial material and docs for both somewhat impenetrable, despite my comfort with Church. It appears that those who have written the tutorials are so steeped in this area that they assume a newbie to PPL has much more background than I suspect most will have.
After looking at the Pyro intro material and some examples, I decided to take a different tack: I would recreate PMC using Pyro (and possibly later TF probability). I got as far as Chapter 2 of PMC where it introduces the Infer operator from WebPPL. I cannot tell at all if Pyro has a similar operator. The docs didn’t help here all that much, though I’m now suspecting that NUTS plus sample(trace) is the equivalent to Infer + sample in WebPPL.
I suspect that part of my problem is that WebPPL and Pyro are very different in their approaches, or at least are presented differently. WebPPL overall seems like a higher level language that more directly expresses PPL concepts. WebPPL also comes with a nice viz function that greatly simplifies seeing the output of models.
I also think that some of the difficulty I’m having is due to the tutorial material and the selection of inference methods in the material. For instance, I don’t think it’s a good idea to introduce PPL to newbies by using SVI. The MCMC, NUTS approach is a bit more accessible, since it doesn’t need a guide distribution. However, even here, the example for NUTS is not explained at all. For instance, it is going to take some time for me to understand (and find the docs for) what mcmc_run.marginal(‘beta’).empirical(‘beta’) means. This is the sort of line that a tutorial/documentation needs to explain.
My intention right now is to continue to work through PMC in Pyro and make the notebooks, probably with missing sections, available through GitHub so that others can fill in gaps or correct my mistakes. I’ve also started to write a visualization function similar to that in WebPPL.