JuliaStats / Klara.jl

MCMC inference in Julia
Other
167 stars 38 forks source link

Logging thoughts on BlockedGibbsJob vs GibbsJob #124

Closed papamarkou closed 7 years ago

papamarkou commented 8 years ago

I open this issue for future reference. The main job for running Gibbs sampling will be GibbsJob. It will implement the basic Gibbs scheme, which updates one graph node (variable) per step.

It may be decided in the future to add an alternative job for Gibbs sampling, namely BlockedGibbsJob. This would enable to group two or more variables and update them jointly in a single step. Mathematically, ordinary and blocked Gibbs sampling are equivalent. The only reason one may decide to define the latter blocked version would be to encode more information. For example, instead of operating on a vector of variables one would operate on a vector of blocked variables. To do so, it would be needed to defined types such as VariableBlock and ParameterBlock, along the lines

type ParameterBlock
  parameters::Vector{Parameter}
  pdf::Distribution
  logtarget::Function
end

The above proposal for ParameterBlock is sketchy rather than prescriptive.

To start with, the ordinary GibbsJob will be defined. In fact, GibbsJob should in principle be able to accommodate models that could be hosted by a BlockedGibbsJob. If however it is found out on a per-use basis that BlockedGibbsJob could be a useful alternative, it will be defined (without dropping the simpler GibbsJob).

papamarkou commented 7 years ago

A different approach will be taken, see #155.