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?