synapse-0.1.0.0: src/Synapse/NN/Layers/Regularizers.hs
{- | Provides collection of functions that impose penalties on parameters which is done by adding result to loss value.
-}
module Synapse.NN.Layers.Regularizers
( -- * 'RegularizerFn' type alias and 'Regularizer' newtype
RegularizerFn
, Regularizer (Regularizer, unRegularizer)
-- * Regularizers
, l1
, l2
) where
import Synapse.Tensors (ElementwiseScalarOps((*.)), SingletonOps(elementsSum))
import Synapse.Autograd (SymbolMat, Symbolic)
-- | 'RegularizerFn' type alias represents functions that impose penalties on parameters which is done by adding result of regularization to loss value.
type RegularizerFn a = SymbolMat a -> SymbolMat a
{- | 'Regularizer' newtype wraps 'RegularizerFn's - functions that impose penalties on parameters.
Every regularization function must return symbol of singleton matrix.
-}
newtype Regularizer a = Regularizer
{ unRegularizer :: RegularizerFn a -- ^ Unwraps 'Regularizer' newtype.
}
-- Regularizers
-- | Applies a L1 regularization penalty (sum of absolute values of parameter multiplied by a coefficient).
l1 :: (Symbolic a, Num a) => a -> RegularizerFn a
l1 k mat = elementsSum (abs mat) *. k
-- | Applies a L1 regularization penalty (sum of squared values of parameter multiplied by a coefficient).
l2 :: (Symbolic a, Num a) => a -> RegularizerFn a
l2 k mat = elementsSum (mat * mat) *. k