Robust Procrustes using standard (manifold unaware) Levenberg-Marquardt vs "Riemannian" Levenberg-Marquardt #627
Replies: 4 comments 31 replies
-
|
It is an interesting aspect, that you claim that I do not understand box-plus. I said I heavily dislike it. And I mentioned all arguments already, mainly its limited use. Storing gradients is not enough – “moving on the manifold” is the other important part. Plot+project (what box plus does) does not always work, is probably very inexact. For the examples I wrote – Sphere, Robust procrustes, Robust Subspace procrustes. We do not claim to reinvent LM, we generalise the robust case to manifolds. You seem to be very convinced your code is super much better. What do you want to achieve? That I stop developing Manopt? So please stop doing that and also stop to claim things you do just assume. |
Beta Was this translation helpful? Give feedback.
-
Why would we hide the manifold from the solver if it can benefit from it by for example constraining the step size by injectivity radius? What do we get by hiding part of the problem from the solver? Sure, the implementation is slightly more simple but not that much, and some solvers have Euclidean-only tricks but these are quite rare among nonlinear solvers.
For LM it's mostly stepsize limiting and being able to support arbitrarily complex representation of iterates and their updates in a way that is transparent to the solver.
Box-plus is effectively just a retraction. It can't work with off-the-shelf optimizers that are not manifold-aware. Using box-plus interface is a basic example of manifold-awareness.
Robust Procrustes is a simple problem, and LM is a fairly simple algorithm. If two different implementations take different numbers of iterations, it's most likely due to differences in hyperparameters. We don't have a comparison with Ceres because we haven't managed to construct a meaningful examples where both libraries can be easily used and we have a clear advantage: either we roughly match their performance, they have an advantage due to being hyper-focused on a use case, or we have a feature that they don't like the matrix-free solving of linear problems or bounds support. I personally didn't spend time looking for such example because this solver is far enough from my primary research that I didn't need it for anything particular.
Please let me know which library supports all the features our LM does, including matrix-free solves and bounds. I haven't found one, and if there isn't one -- no wheel was reinvented. There are problems for which both features become relevant. The box-plus interface is a subset of Manifolds.jl interface. There is no incompatibility.
We know what that is, it's just that we are already familiar with a much more rich interface and don't see a good reason to restrict ourselves to this subset chosen specifically for one solver. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
It occurred to me that a difference in number of iterations might be due to the way that the update is parameterized. In my code the update is parameterized according to this line of code: NLLSsolver.update(var::Rotation{N, N2, T}, updatevec, start=1) where {N, N2, T} = Rotation(var.R * proj2rot(vec2skew(updatevec, start, N)))The current NxN rotation matrix is How is the update parameterized in your approach? This highlights a benefit of a box-plus approach: It's easy see, and to change, the way an update is parameterized, and this can be done on a per variable block basis. For example, I could choose to retract the state rotation, rather than just the update rotation, as follows: NLLSsolver.update(var::Rotation{N, N2, T}, updatevec, start=1) where {N, N2, T} = Rotation(proj2rot(var.R * vec2skew(updatevec, start, N)))I expect that would perform worse. |
Beta Was this translation helpful? Give feedback.


Uh oh!
There was an error while loading. Please reload this page.
-
@mateuszbaran @kellertuer You recently published a paper on "A MODIFIED RIEMANNIAN LEVENBERG-MARQUARDT ALGORITHM FOR ROBUST OR CONSTRAINT OPTIMIZATION ON MANIFOLDS"
Some optimizers, such as L-BFGS, transport gradient information from one point in the state space to another, so they need to be modified to work on manifolds. However, other optimizers, including Levenberg-Marquardt, do not; they only use gradient information computed at the current state, and use it to update the current state. It's therefore easy to hide the existence of the manifold from the optimizer, using a "box-plus" interface and thus use an off the shelf optimizer. My question is, why wouldn't you do this? How does the optimizer (in this case Levenberg-Marquardt) benefit from knowing about the manifold?
To make the point, I implemented the Robust Procrustes problem from here, in an open-source, manifold agnostic, implementation of Levenberg-Marquardt from the NLLSsolver package. Here are graphs of the result (with code here).
The results show that the two implementations converge to the same result, and that the standard implementation converges in far fewer iterations. I believe these results are equivalent to what Ceres (which you cited but didn't compare against) would have achieved. The runtime isn't so useful, because it mainly depends on the speed of the Jacobian computation, which can of course be improved if necessary. My code uses AD, which transitions from statically to dynamically sized arrays, at the point where my method becomes slower.
I suppose this is about two things. The first is not reinventing the wheel. If standard Levenberg-Marquardt works fine, why claim to have modified it, so it now works? Why not benefit from existing software that already works well. The second is about APIs. Manifolds is a useful package. Why not make it compatible with a "box plus" interface?
I had a not very fruitful discussion with @kellertuer about the box-plus interface. I understood that he doesn't understand exactly what it is, but also thinks it is not very good, and he doesn't want to discuss it further. This struck me as an odd position for an academic working in this area to take, given that it works perfectly well (better even than your solution). I'm happy to talk more about it, but only if people are interested. Otherwise I'll leave it there.
Beta Was this translation helpful? Give feedback.
All reactions