Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LogLikelihood Hessian methods return data with incorrect sign #911

Closed
robbietuk opened this issue Jul 20, 2021 · 1 comment
Closed

LogLikelihood Hessian methods return data with incorrect sign #911

robbietuk opened this issue Jul 20, 2021 · 1 comment

Comments

@robbietuk
Copy link
Collaborator

Current implementation of the log-likelihood Hessian in STIR is

H_{jk} = \sum_i P_{ij}(y_i / ((P \lambda)_i + a_i)^2) P_{ik}

This is incorrect and should be negative this equation as the log-likelihood is a concave function.

H_{jk} = (-) \sum_i P_{ij}(y_i / ((P \lambda)_i + a_i)^2) P_{ik}

Two loglikelihood methods that compute the Hessian (vector product) are accumulate_sub_Hessian_times_input and add_multiplication_with_approximate_sub_Hessian_without_penalty

Two classes utilise these Hessian methods in STIR:

  • SqrtHessianRowSum -> compute_Hessian_row_sum and compute_approximate_Hessian_row_sum, and
  • OSSPS -> precompute_denominator_of_conditioner_without_penalty

These implementations of the Hessian methods expect the voxel values to be non-negative for other implementations. The suggestion is to correct the computation of the Hessian to include the minus sign and then flip signs of the voxel values output of the Hessian method.

Changes will impact backwards compatability regarding the Hessian methods outside of STIR.

@robbietuk
Copy link
Collaborator Author

Resolved by #902

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant