Reverse-Mode Automatic Differentiation implementation details
For reverse mode AD we use
System.Mem.StableName.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 :: 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
- derivative2 :: Num a => AD Reverse a -> (a, a)
- class Var t a | t -> a where
Reverse is a
Mode using reverse-mode automatic differentiation that provides fast
grad2 and a fast
jacobian when you have a significantly smaller number of outputs than inputs.
This returns a list of contributions to the partials. The variable ids returned in the list are likely not unique!
Used to mark variables for inspection during the reverse pass