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

Downhill.Metric

Synopsis

Documentation

class Dual (Tang p) (Grad p) => MetricTensor p g where Source #

MetricTensor converts gradients to vectors.

It is really inverse of a metric tensor, because it maps cotangent space into tangent space. Gradient descent doesn't need metric tensor, it needs inverse.

Minimal complete definition

evalMetric

Methods

evalMetric :: g -> Grad p -> Tang p Source #

m must be symmetric:

evalGrad x (evalMetric m y) = evalGrad y (evalMetric m x)

innerProduct :: g -> Grad p -> Grad p -> MScalar p Source #

innerProduct m x y = evalGrad x (evalMetric m y)

sqrNorm :: g -> Grad p -> MScalar p Source #

sqrNorm m x = innerProduct m x x

Instances

Instances details
MetricTensor Integer Integer Source # 
Instance details

Defined in Downhill.Metric

MetricTensor Double Double Source # 
Instance details

Defined in Downhill.Metric

MetricTensor Float Float Source # 
Instance details

Defined in Downhill.Metric

Num a => MetricTensor (AsNum a) (AsNum a) Source # 
Instance details

Defined in Downhill.BVar.Num

Methods

evalMetric :: AsNum a -> Grad (AsNum a) -> Tang (AsNum a) Source #

innerProduct :: AsNum a -> Grad (AsNum a) -> Grad (AsNum a) -> MScalar (AsNum a) Source #

sqrNorm :: AsNum a -> Grad (AsNum a) -> MScalar (AsNum a) Source #

(MScalar a ~ MScalar b, MetricTensor a ma, MetricTensor b mb) => MetricTensor (a, b) (ma, mb) Source # 
Instance details

Defined in Downhill.Metric

Methods

evalMetric :: (ma, mb) -> Grad (a, b) -> Tang (a, b) Source #

innerProduct :: (ma, mb) -> Grad (a, b) -> Grad (a, b) -> MScalar (a, b) Source #

sqrNorm :: (ma, mb) -> Grad (a, b) -> MScalar (a, b) Source #

(MScalar a ~ MScalar b, MScalar a ~ MScalar c, MetricTensor a ma, MetricTensor b mb, MetricTensor c mc) => MetricTensor (a, b, c) (ma, mb, mc) Source # 
Instance details

Defined in Downhill.Metric

Methods

evalMetric :: (ma, mb, mc) -> Grad (a, b, c) -> Tang (a, b, c) Source #

innerProduct :: (ma, mb, mc) -> Grad (a, b, c) -> Grad (a, b, c) -> MScalar (a, b, c) Source #

sqrNorm :: (ma, mb, mc) -> Grad (a, b, c) -> MScalar (a, b, c) Source #