Skip to main content

A PyTorch package for computing KL divergences between normal distributions.

Project description

normalkl: KL divergences between normal distributions, without the stress

A PyTorch package for computing KL divergences between multivariate normal distributions.

Fully unit tested, so you don't have to worry about making sign errors.

How to use?

The function kl can be used to compute regular KL divergence between two normal distributions.

from normalkl import kl

mean1 = torch.tensor([4.0, 5.0])
covariance1 = torch.tensor([[1.0, 1.0], [2.0, 4.0]])
mean2 = torch.tensor([1.0, 2.0])
scalarvar2 = torch.tensor([3.0])

kl_div = kl(mean1, 'covmat', covariance1, mean2, 'scalarvar', scalarvar2)
print(kl_div)

Installation

Package available in pip:

pip install normalkl

Auto KL

The auto_kl computes KL divergence with prior variance automatically chosen such that the KL is minimized.

from normalkl import auto_kl
kl_div2 = auto_kl(mean1, 'cov', covariance1, mean2)

We can also separately compute the optimal prior variance using optimal_covariance,

from normalkl import kl, optimal_covariance, auto_kl

optimal_scalarvar = optimal_covariance(mean1, 'cov', cov1, mean2, 'scalarvar')
kl_div1 = kl(mean1, 'cov', covariance1, mean2, 'scalarvar', optimal_scalarvar)

kl_div2 = auto_kl(mean1, 'cov', covariance1, mean2)

print(kl_div1 == kl_div2) # True

Covariance types

For the first distribution (e.g. variational posterior), we support regular normal and Cholesky Kronecker Covariance (= matrix normal) parameterizations. For the second distribution (e.g. prior distribution), the following full, Kronecker and isotropic priors are supported.

Covariance Type Abbreviation Mathematical Formula Expected Type (Shape) cov1 cov2
Full Covariance Matrix covmat $\Sigma$ Full matrix (PSD), shape: $(D, D)$
Full Precision Matrix precmat $\Sigma^{-1}$ Full matrix (PSD), shape: $(D, D)$
Diagonal Covariance Matrix (Vector) diagvar $\text{diag}(\mathbf{d})$, where $\mathbf{d}$ is a vector Vector, shape: $(D,)$
Diagonal Precision Matrix (Vector) diagprec $\text{diag}(\mathbf{d})^{-1}$, where $\mathbf{d}$ is a vector Vector, shape: $(D,)$
Scalar Variance scalarvar $\sigma^2 \mathbf{I}$, where $\sigma^2$ is a scalar Scalar, shape: $(1,)$
Scalar Precision scalarprec $\tau^{-1} \mathbf{I}$, where $\tau^{-1}$ is a scalar Scalar, shape: $(1,)$
Identity Matrix identity $\mathbf{I}$, the identity matrix Flag or Boolean, shape: $(D, D)$
Cholesky of Covariance Matrix cholcov $\mathbf{L}$, where $\Sigma = \mathbf{L}\mathbf{L}^\top$ Lower triangular matrix, shape: $(D, D)$
Cholesky of Precision Matrix cholprec $\mathbf{L}$, where $\Sigma^{-1} = \mathbf{L}\mathbf{L}^\top$ Lower triangular matrix, shape: $(D, D)$
Kronecker-Factored Covariance Matrix kroncov $\Sigma = \mathbf{A} \otimes \mathbf{B}$ Pair of matrices, shapes: $(D_1, D_1)$, $(D_2, D_2)$
Kronecker-Factored Precision Matrix kronprec $\Sigma^{-1} = \mathbf{A} \otimes \mathbf{B}$ Pair of matrices, shapes: $(D_1, D_1)$, $(D_2, D_2)$
Matrix normal cholesky covariance cholkroncov $\Sigma = (\mathbf{L}_A \mathbf{L}_A^\top \otimes \mathbf{L}_B \mathbf{L}_B^\top)$ Pair of lower triangular matrices, shapes: $(D_1, D_1)$, $(D_2, D_2)$
Tensor normal cholesky covariance choltrikroncov $\Sigma = (\mathbf{L}_A \mathbf{L}_A^\top \otimes \mathbf{L}_B \mathbf{L}_B^\top \otimes \mathbf{L}_C \mathbf{L}_C^\top)$ Pair of lower triangular matrices, shapes: $(D_1, D_1)$, $(D_2, D_2)$
Diagonal row+column variances diagvarkron $\text{diag}(\text{vec}(\mathbf{b} \mathbf{a}^T))$ Pair of vectors, shapes: $(D_1,)$, $(D_2,)$
Diagonal row variances diagvarrow $\text{diag}(\text{vec}(\mathbf{1} \mathbf{a}^T))$ Vector, shape: $(D_1,)$
Diagonal column variances diagvarcol $\text{diag}(\text{vec}(\mathbf{b} \mathbf{1}^T))$ Vector, shape: $(D_2,)$

Optimal prior variances

Analytically optimal cov2 variances are available for the following types:

Type of cov1 \ Type of optimized cov2 covmat precmat diagvar diagprec scalarvar scalarprec identity cholcov cholprec kroncov kronprec cholkroncov diagcovkron diagcovrow diagcovcol
covmat
precmat
diagvar
diagprec
scalarvar
scalarprec
identity
cholcov
cholprec
kroncov
kronprec
cholkroncov
choltrikroncov
diagvarkron
diagvarrow
diagvarcol

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

normalkl-0.1.14.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

normalkl-0.1.14-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file normalkl-0.1.14.tar.gz.

File metadata

  • Download URL: normalkl-0.1.14.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.7

File hashes

Hashes for normalkl-0.1.14.tar.gz
Algorithm Hash digest
SHA256 4059b590c680f8d387667d82e8edd419ce2737c3d8a51cc0e2704847f2560dc7
MD5 d8fe129146c3e8179e0dc9dfb0fb29e7
BLAKE2b-256 1934a8b3be5ed14e71f38c09c9d4d65eca3319833b0cbf2b47e912e6ad134eb3

See more details on using hashes here.

File details

Details for the file normalkl-0.1.14-py3-none-any.whl.

File metadata

  • Download URL: normalkl-0.1.14-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.7

File hashes

Hashes for normalkl-0.1.14-py3-none-any.whl
Algorithm Hash digest
SHA256 8fcf9c01133512db73ad4e976d8ffdcb0039976d750d6a34911df8a9e328cc46
MD5 e98c8760a62bdf3706a223f6369b0c1c
BLAKE2b-256 8a435d9462c029150edc9bee805323aad5c67cffa2f2336517de82925cbe438c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page