Hi I am almost done figuring out the entire EP-stan code. there is this last lingering question in the Worker.tilted() code. I understand how you can obtain the new tilted distribution Q and r using stan sampling. But in the process of deriving dQi and dri to pass back to the master, I am lost on two points
-
why is both dgeqrf_routine and invert_normal_params called? my understanding is they both do conversion between normalized and unnormalized precision and location parameters.
-
The sampling process should be creating the new Qi and ri. But I am not sure how the code ends up with dQi, and dri. I don’t see a subtraction taking place against the original Qi and ri.
Hello,
Thank you for the questions. I’ll gladly explain.
-
samp
contains collection of samples of phi for the tilted distribution. We need to invert the scatter matrix. We do that with QR decomposition.
dgeqrf_routine
is used to obtain QR-decomposition of the samples (in-place) of which we only need the R matrix. invert_normal_params
then computes the inverse and precision mean vector estimate given R. See appendix A.2 in https://arxiv.org/abs/1412.4869
-
There is the following code block which calculates the difference. Before this block, dQi
, dri
contains estimated tilted distribution natural parameters. After this block, they contain the change in the site distribution parameters.
# Calculate the difference into the output arrays
np.subtract(dQi, self.Q, out=dQi)
np.subtract(dri, self.r, out=dri)
Regards,
Tuomas Sivula
Ah, now I see those subtract lines. Thank you.