In order to implement the final reverse-mode pass with \eta, based on the conversation here and here, it seems like the right thing to do is to use adj_jac_apply()
. Unfortunately, the file stan/math/rev/functor/adj_jac_apply.hpp
no longer seems to exist. Based on this PR, it was merged into develop
at some point, but I haven’t been able to determine whether it was moved or removed.
@bbbales2 — Is that still the right way to calculate the sensitivities of f relative to u given the initial cotangent \eta (i.e., \eta^T \tfrac {\partial f} {\partial u})? I think I understand how to accomplish this explicitly, but ideally, I’d like to avoid calculating the whole Jacobian of f, and there doesn’t seem to be any way of avoiding calculating \tfrac {\partial f} {\partial v}, since it has to be inverted.
Thanks!
Edit:
So I found in the 3.4.0
release notes that adj_jac_apply()
has been replaced by reverse_pass_callback()
, although I’m still a little confused about how to replicate the functionality of adj_jac_apply()
with reverse_pass_callback()
. My understanding was that with adj_jac_apply
one could do something like adj_jac_apply(Function f, RowVectorXd s)
, where f
is the function whose sensitivities we want to calculate and s
is the initial cotangent, and it would return the sensitivities. I’ve been looking at this blog post, but I still haven’t really figured out how to accomplish the former with the latter.