JuliaImageRecon / RegularizedLeastSquares.jl

MIT License
20 stars 9 forks source link

FixSplitBregman #68

Closed JakobAsslaender closed 8 months ago

JakobAsslaender commented 9 months ago

Hi, I made the following changes:

Both solvers should work now as expected, but I have two questions:

As always, any feed is more than welcome!

JakobAsslaender commented 9 months ago

Closes #43

JakobAsslaender commented 9 months ago

Just kidding. I matched rho in SplitBregman to the one in ADMM as the tests failed when due to rho/lambda w/ lambda = 0.

tknopp commented 9 months ago

@migrosser

JakobAsslaender commented 8 months ago

@migrosser, @tknopp , a friendly ping if you have any thoughts on this PR and the questions raised above.

Thanks!

tknopp commented 8 months ago

For these algorithms we have a little maintainability issue since I am not deep enough in the proximal algorithms. It's a little bit unclear if @migrosser can have a look, since he finished his PhD and now took on another opportunity.

But I try to summarize a discussion which @nHackel @migrosser and once had. Initially, we thought that it would be sufficient to just have the transform within the regularizer and not in the data discrepancy term. But if I understood it correctly (?), this requires a unitary transform since one needs to apply the inverse (see https://github.com/JuliaImageRecon/RegularizedLeastSquares.jl/blob/master/src/Regularization/TransformedRegularization.jl#L31). For the ConstrainedTransformedRegularizeation, we however, can apply the transform itself. That's the reason why we have both and the the user needs to decide, which to use.

tknopp commented 8 months ago

But to get forward, I am going to merge this now. Tests are apparently passing.

JakobAsslaender commented 8 months ago

Thanks, @tknopp for the explanation. It makes sense that we cannot use TransformedRegularization and the current setup with ConstraintTransformedRegularization works. I wonder if it was more transparent to the user to write the ADMM interface to take a transformation and a naked L1-regularization as arguments and to remove the ConstraintTransformedRegularization concept. It took me several hours of paper reading etc. to figure out that this pseudo-nested regularization type is needed for ADMM to work properly and I believe that exposing the difference to the user might help them use the algorithm correctly. Happy to create a PR if you think this is a good idea.