Portability | GHC only |
---|---|

Stability | experimental |

Maintainer | ekmett@gmail.com |

Safe Haskell | None |

Reverse-Mode Automatic Differentiation implementation details

For reverse mode AD we use `StableName`

to recover sharing information from
the tape to avoid combinatorial explosion, and thus run asymptotically faster
than it could without such sharing information, but the use of side-effects
contained herein is benign.

- newtype Reverse a = Reverse (Tape a (Reverse a))
- data Tape a t
- partials :: forall a. Num a => AD Reverse a -> [(Int, a)]
- partialArray :: Num a => (Int, Int) -> AD Reverse a -> Array Int a
- partialMap :: Num a => AD Reverse a -> IntMap a
- derivative :: Num a => AD Reverse a -> a
- derivative' :: Num a => AD Reverse a -> (a, a)
- vgrad :: Grad i o o' a => i -> o
- vgrad' :: Grad i o o' a => i -> o'
- class Num a => Grad i o o' a | i -> a o o', o -> a i o', o' -> a i o where

# Documentation

`Reverse`

is a `Mode`

using reverse-mode automatic differentiation that provides fast `diffFU`

, `diff2FU`

, `grad`

, `grad2`

and a fast `jacobian`

when you have a significantly smaller number of outputs than inputs.

Typeable1 Reverse | |

(Mode Reverse, Mode (D Reverse), Lifted Reverse) => Jacobian Reverse | |

Primal Reverse | |

Lifted Reverse => Mode Reverse | |

Lifted Reverse | |

Var Reverse | |

Show a => Show (Reverse a) | |

MuRef (Reverse a) | |

Num a => Grad (AD Reverse a) [a] (a, [a]) a | |

(Num a, Grad i o o' a) => Grad (AD Reverse a -> i) (a -> o) (a -> o') a |

partials :: forall a. Num a => AD Reverse a -> [(Int, a)]Source

This returns a list of contributions to the partials.
The variable ids returned in the list are likely *not* unique!

derivative :: Num a => AD Reverse a -> aSource

derivative' :: Num a => AD Reverse a -> (a, a)Source