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?