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)$
Cholesky Kronecker Covariance (recommended) 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)$
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 (recommended)
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.6.tar.gz (14.6 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.6-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: normalkl-0.1.6.tar.gz
  • Upload date:
  • Size: 14.6 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.6.tar.gz
Algorithm Hash digest
SHA256 721e8ec42da166c94b6c3950c259887c533648713077068992e38eb8194d1b1e
MD5 ed7152038430e1fc15bb5f0b14b60c29
BLAKE2b-256 4114c34c58a2074cb55e98a56f6eaef12f411e9afe00bf69628ee9e75a4b15d8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: normalkl-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 10.4 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.6-py3-none-any.whl
Algorithm Hash digest
SHA256 fdea9a366a4b5fc6ca942b28877ca037030953d9582239ff92ce89d9adbbb165
MD5 5605fe81d322066c563ec81c1884c6e1
BLAKE2b-256 e50d574fcf65846a2008d50cdc9b343bc8071ff54180af8a18cd22c1460b9387

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