Skip to content

Taking AD seriously #28

@kellertuer

Description

@kellertuer

I think I would like to get into a proper way of handling AD on manifolds. I know we have quite some issues open here (#17, JuliaManifolds/Manifolds.jl#42, #27, JuliaManifolds/Manifolds.jl#88, #29) and we also have some support already. But we have not made much changes recently. Maybe this would be a good topic to tackle next.

In general I see two ways to go

  1. Embedded manifolds and classical AD
  2. “Intrinsic, geometric AD”

The first is, what I think pymanopt does, the second is to some extend done in manopt with finite differences if I understand correctly, and I tried to do something like that for the Hessian here but did not yet find the time to continue that.

The main challenge with the first point, I think, is the conversion of an Euclidean gradient in the embedding to the Riemannian gradient, sometimes that is just a projection, sometimes that requires an adaption/calculation to adapt the metric. I have not yet understood for example all implications we would require to have something like ehess2rhess for the Hessian transform.

The main challenge for the second point is that from the building blocks (several are available in Manopt.jl, i.e. basic differentials, adjoint differentials, and gradients) we have to provide ChainRules.jl? The good thing is that we already have tangent and cotangent vectors.

For me the main questions / open points are

  • what do the current backends support?
  • What is left to do until we have a generic form of egrad2rgrad/ ehess2rhess to complete approach 1?
  • Which backends would we support?
  • for the second approach: Can we use backends for that or would we mainly need to defile new ChainRules?
  • ...and of course we might have to look more into mutating and non-mutating variants

Finally, would we want to do it here (we can start here for sure) or do we want to to a ManifoldsAD.jl package?

Let's keep this topic as an overview for this topic for now. Feel free to add more points to the list of things to do.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions