downhill-0.4.0.0: Reverse mode automatic differentiation
Safe HaskellSafe-Inferred
LanguageHaskell2010

Downhill.BVar.Traversable

Description

Easy backpropagation when all variables have the same type.

data MyRecord a = ...
  deriving (Functor, Foldable, Traversable)

deriving via (TraversableVar MyRecord a) instance HasGrad a => HasGrad (MyRecord a)

Gradient type

One might excect gradient type to be type Grad (MyRecord a) = MyRecord (Grad a), but it's not the case, because record could contain additional members apart from as, for example:

data MyPoint a = MyPoint
{
,  pointLabel :: String
,  pointX :: a
,  pointY :: a
}

and MyPoint (Grad a) can't be made VectorSpace. Gradient type Grad (MyRecord a) is a newtype wrapper over IntMap that is not exported.

Synopsis

Backpropagate

backpropTraversable :: forall f a b p. (Traversable f, Grad (f a) ~ Grad (TraversableVar f a), HasGrad a, HasGrad p) => Grad p -> (a -> Grad a -> b) -> (forall r. f (BVar r a) -> BVar r p) -> f a -> f b Source #

backpropTraversable one combine fun

one is a value to be backpropagated. In case of p being scalar, set one to 1 to compute unscaled gradient.

combine is given value of a parameter and its gradient to construct result, just like zipWith.

fun is the function to be differentiated.

backpropTraversable_GradOnly :: forall f a p. (Traversable f, Grad (f a) ~ Grad (TraversableVar f a), HasGrad a, HasGrad p) => Grad p -> (forall r. f (BVar r a) -> BVar r p) -> f a -> f (Grad a) Source #

Like backpropTraversable, but returns gradient only.

backpropTraversable_ValueAndGrad :: forall f a p. (Traversable f, Grad (f a) ~ Grad (TraversableVar f a), HasGrad a, HasGrad p) => Grad p -> (forall r. f (BVar r a) -> BVar r p) -> f a -> f (a, Grad a) Source #

backpropTraversable specialized to return a pair of value and gradient.

Split

splitTraversable :: forall f r a. (Traversable f, Grad (f a) ~ Grad (TraversableVar f a), HasGrad a) => BVar r (f a) -> f (BVar r a) Source #

Note that splitTraversable won't be useful for top level BVar, because the type Grad (f a) is not exposed.

TraversableVar

newtype TraversableVar f a Source #

Provides HasGrad instance for use in deriving via

Constructors

TraversableVar 

Fields

Instances

Instances details
Foldable f => Foldable (TraversableVar f) Source # 
Instance details

Defined in Downhill.BVar.Traversable

Methods

fold :: Monoid m => TraversableVar f m -> m #

foldMap :: Monoid m => (a -> m) -> TraversableVar f a -> m #

foldMap' :: Monoid m => (a -> m) -> TraversableVar f a -> m #

foldr :: (a -> b -> b) -> b -> TraversableVar f a -> b #

foldr' :: (a -> b -> b) -> b -> TraversableVar f a -> b #

foldl :: (b -> a -> b) -> b -> TraversableVar f a -> b #

foldl' :: (b -> a -> b) -> b -> TraversableVar f a -> b #

foldr1 :: (a -> a -> a) -> TraversableVar f a -> a #

foldl1 :: (a -> a -> a) -> TraversableVar f a -> a #

toList :: TraversableVar f a -> [a] #

null :: TraversableVar f a -> Bool #

length :: TraversableVar f a -> Int #

elem :: Eq a => a -> TraversableVar f a -> Bool #

maximum :: Ord a => TraversableVar f a -> a #

minimum :: Ord a => TraversableVar f a -> a #

sum :: Num a => TraversableVar f a -> a #

product :: Num a => TraversableVar f a -> a #

Traversable f => Traversable (TraversableVar f) Source # 
Instance details

Defined in Downhill.BVar.Traversable

Methods

traverse :: Applicative f0 => (a -> f0 b) -> TraversableVar f a -> f0 (TraversableVar f b) #

sequenceA :: Applicative f0 => TraversableVar f (f0 a) -> f0 (TraversableVar f a) #

mapM :: Monad m => (a -> m b) -> TraversableVar f a -> m (TraversableVar f b) #

sequence :: Monad m => TraversableVar f (m a) -> m (TraversableVar f a) #

Functor f => Functor (TraversableVar f) Source # 
Instance details

Defined in Downhill.BVar.Traversable

Methods

fmap :: (a -> b) -> TraversableVar f a -> TraversableVar f b #

(<$) :: a -> TraversableVar f b -> TraversableVar f a #

Manifold a => Manifold (TraversableVar f a) Source # 
Instance details

Defined in Downhill.BVar.Traversable

Associated Types

type Tang (TraversableVar f a) Source #

type Grad (TraversableVar f a) Source #

type Grad (TraversableVar f a) Source # 
Instance details

Defined in Downhill.BVar.Traversable

type Grad (TraversableVar f a)
type Tang (TraversableVar f a) Source # 
Instance details

Defined in Downhill.BVar.Traversable

type Tang (TraversableVar f a)