Clear[d]; d[Log[x_], a[k_]] := 1/x d[x, a[k]] d[Sum[x_, y__], a[k_]] := Sum[d[x, a[k]], y] d[ a[k_] b_., a[k_]] := b /; FreeQ[b, a] d[ a[q_] b_., a[k_]] := b Subscript[δ, k, q] /; FreeQ[b, a] d[ c_ b_, a[k_]] := d[c, a[k]] b + d[b, a[k]] c d[ b_ + c_, a[k_]] := d[c, a[k]] + d[b, a[k]] d[Subscript[δ, r_, q_], a[k_]] := 0 d[x_, a[k_]] := 0 /; FreeQ[x, a] d[G_^n_, a[k_]] := n G^(n - 1) d[G , a[k]] /; ! FreeQ[G, a] d[Exp[G_], a[q_]] := Exp[G] d[G , a[q]] /; ! FreeQ[G, a] Unprotect[Sum]; Attributes[Sum] = {ReadProtected};Protect[Sum];
As a finalother example, let us look at a parametrized entropy distance,

As a final example, consider a Poisson likelihood
Q = Sum[Log[Exp[-a[k]] a[k]^Subscript[y, k]/Subscript[y, k]!], {k, 1, n}]

so that
grad = d[Q, a[k]] // Simplify

and
hess =d[d[Q, a[k]], a[s]] /. ds // Simplify
