General Linear Group
\(\operatorname{SL}(n)\) is the manifold of matrices of determinant equal to 1.
It is realized via an SVD-like factorization:
where we have identified the vector \(\Sigma\) with a diagonal matrix in \(\mathbb{R}^{n \times n}\). The function \(f\colon \mathbb{R} \to (\varepsilon, \infty)\) is applied element-wise to the diagonal for a small \(\varepsilon > 0\). By default, a combination of the softplus function
composed with the normalization function
to ensure that the product of all the singular values is equal to 1.
- class geotorch.SL(size, f='softplus', triv='expm')[source]
Manifold of special linear matrices
- Parameters
size (torch.size) – Size of the tensor to be parametrized
f (str or callable or pair of callables) –
Optional. Either:
"softplus"
A callable that maps real numbers to the interval \((0, \infty)\)
A pair of callables such that the first maps the real numbers to \((0, \infty)\) and the second is a (right) inverse of the first
Default:
"softplus"
triv (str or callable) – Optional. A map that maps skew-symmetric matrices onto the orthogonal matrices surjectively. This is used to optimize the \(U\) and \(V\) in the SVD. It can be one of
["expm", "cayley"]
or a custom callable. Default:"expm"
- sample(init_=<function xavier_normal_>, eps=5e-06, factorized=False)[source]
Returns a randomly sampled matrix on the manifold by sampling a matrix according to
init_
and projecting it onto the manifold.The output of this method can be used to initialize a parametrized tensor that has been parametrized with this or any other manifold as:
>>> layer = nn.Linear(20, 20) >>> M = SL(layer.weight.size(), rank=6) >>> geotorch.register_parametrization(layer, "weight", M) >>> layer.weight = M.sample()
- Parameters
init_ (callable) – Optional. A function that takes a tensor and fills it in place according to some distribution. See torch.init. Default:
torch.nn.init.xavier_normal_
eps (float) – Optional. Minimum singular value of the sampled matrix. Default:
5e-6