The GradientDescendable interface defines the functionality of an object
that is required in order to apply the gradient descent algorithm to it.
That is, GradientDescendable can differentiate its output with respect to
its parameters for a given input.