pyro-ppl / pyro

Deep universal probabilistic programming with Python and PyTorch
http://pyro.ai
Apache License 2.0
8.49k stars 982 forks source link

[FR] Online (streaming) VI support #2882

Open h1pstah opened 3 years ago

h1pstah commented 3 years ago

It would be nice to have native support for online VI (its main 3 flavors are listed here: https://arxiv.org/abs/1904.03920 ).

Currently, the only tool applicable to the online learning scenario would be the SMCFilter, but it often performs poorly in high-dimensional situations.

SMCFilter itself could also benefit from particle MCMC rejuvenation as discussed here: https://www.springer.com/gp/book/9783030478445 and implemented in the particles package: https://github.com/nchopin/particles

eb8680 commented 3 years ago

Hi @h1psta, thanks for the feature request. Do you have a specific use case in mind that you could explain to give some context? Are you interested in contributing some version of this yourself?

Also, if you're more interested in having rejuvenation in SMCFilter and you think that would be easier to implement or better suited to your use case, could you create a separate feature request issue specifically for that with some additional details?

h1pstah commented 3 years ago

I am currently playing with Bayesian active learning where, ideally, you want to have good posteriors even when feeding labeled datums one by one, because your posterior governs your optimal query datum in the next time step. Here the online aspect is primary of computational concern, but you could have instances where you operate on large data streams that you cannot keep in memory.

I will be happy to contribute at some point but I am still getting to know the ins and outs of the package!

eb8680 commented 3 years ago

I will be happy to contribute at some point but I am still getting to know the ins and outs of the package!

Sounds great! We're here to help, so feel free to ask any questions as they come up or to request input on design decisions, reviewing draft code or finding a good starting point.