I know, I can aid the automatic differentiation of theano operations by supplying the grad
operation. In the context of a pymc3 model, this works nicely if I sample from a closed-form likelihood function and grad
is the derivative with respect to the samples/observations. Say myLikelihood
is a theano operation with a custom grad
then I can define
with pm.Model() as model:
mydist = pm.DensityDist('likelihood', myLikelihood,
testval=x0, shape=x0.shape)
However, when I define a hierarchical model with an implicit likelihood function defined through given observations ob_data
, e.g., like so:
with pm.Model() as model:
par = pm.Normal('parameter', mu = 0, sd = 1, shape = 1)
obs = pm.DensityDist('observations', parLikelihood,
par = par, observed = ob_data)
Such a likelihood needs to take in the parameters par
and its derivative needs to be defined with respect to these parameters instead of the observations.
Can I define such a parametrized parLikelihood
with a closed form derivative with respect to par
in pymc3 and how so?