queens.variational_distributions package#
Variational distributions.
Modules containing probability distributions for variational inference.
Submodules#
queens.variational_distributions.full_rank_normal module#
Full-Rank Normal Variational Distribution.
- class FullRankNormalVariational(dimension)[source]#
Bases:
VariationalDistribution
Full-rank multivariate normal distribution.
Uses the parameterization (as in [1]) \(parameters=[\mu, \lambda]\), where \(\mu\) are the mean values and \(\lambda\) is an array containing the nonzero entries of the lower Cholesky decomposition of the covariance matrix \(L\): \(\lambda=[L_{00},L_{10},L_{11},L_{20},L_{21},L_{22}, ...]\). This allows the parameters \(\lambda\) to be unconstrained.
References
- [1]: Kucukelbir, Alp, et al. “Automatic differentiation variational inference.”
The Journal of Machine Learning Research 18.1 (2017): 430-474.
- n_parameters#
Number of parameters used in the parameterization.
- Type:
int
- conduct_reparameterization(variational_parameters, n_samples)[source]#
Conduct a reparameterization.
- Parameters:
variational_parameters (np.ndarray) – Array with variational parameters
n_samples (int) – Number of samples for current batch
- Returns:
samples_mat (np.ndarray) – Array of actual samples from the variational
distribution
- static construct_variational_parameters(mean, covariance)[source]#
Construct the variational parameters from mean and covariance.
- Parameters:
mean (np.ndarray) – Mean values of the distribution (n_dim x 1)
covariance (np.ndarray) – Covariance matrix of the distribution (n_dim x n_dim)
- Returns:
variational_parameters (np.ndarray) – Variational parameters
- draw(variational_parameters, n_draws=1)[source]#
Draw n_draw samples from the variational distribution.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
n_draws (int) – Number of samples to draw
- Returns:
samples (np.ndarray) – Row-wise samples of the variational distribution
- export_dict(variational_parameters)[source]#
Create a dict of the distribution based on the given parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
export_dict (dictionary) – Dict containing distribution information
- fisher_information_matrix(variational_parameters)[source]#
Compute the Fisher information matrix analytically.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
FIM (np.ndarray) – Matrix (num parameters x num parameters)
- grad_params_logpdf(variational_parameters, x)[source]#
Logpdf gradient w.r.t. to the variational parameters.
Evaluated at samples x. Also known as the score function.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
score (np.ndarray) – Column-wise scores
- grad_params_reparameterization(variational_parameters, standard_normal_sample_batch, upstream_gradient)[source]#
Calculate the gradient of the reparameterization.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
standard_normal_sample_batch (np.ndarray) – Standard normal distributed sample batch
upstream_gradient (np.array) – Upstream gradient
- Returns:
gradient (np.ndarray) – Gradient of the upstream function w.r.t. the variational parameters.
- Note:
We assume that grad_reconstruct_params is a row-vector containing the partial derivatives of the reconstruction mapping of the actual distribution parameters w.r.t. the variational parameters.
The variable jacobi_parameters is the (n_parameters \(\times\) dim_sample) Jacobi matrix of the reparameterization w.r.t. the distribution parameters, with differentiating after the distribution parameters in different rows and different output dimensions of the sample per column.
- grad_sample_logpdf(variational_parameters, sample_batch)[source]#
Computes the gradient of the logpdf w.r.t. to the x.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
sample_batch (np.ndarray) – Row-wise samples
- Returns:
gradients_batch (np.ndarray) – Gradients of the log-pdf w.r.t. the
sample *x*. The first dimension of the
array corresponds to the different samples.
The second dimension to different dimensions
within one sample. (Third dimension is empty
and just added to keep slices two-dimensional.)
- initialize_variational_parameters(random=False)[source]#
Initialize variational parameters.
- Default initialization:
\(\mu=0\) and \(L=diag(1)\) where \(\Sigma=LL^T\)
- Random intialization:
\(\mu=Uniform(-0.1,0.1)\) \(L=diag(Uniform(0.9,1.1))\) where \(\Sigma=LL^T\)
- Parameters:
random (bool, optional) – If True, a random initialization is used. Otherwise the default is selected
- Returns:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
- logpdf(variational_parameters, x)[source]#
Logpdf evaluated using the at samples x.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
logpdf (np.ndarray) – Row vector of the logpdfs
- pdf(variational_parameters, x)[source]#
Pdf of evaluated at given samples x.
First computes the logpdf, which is numerically more stable for exponential distributions.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
pdf (np.ndarray) – Row vector of the pdfs
- reconstruct_distribution_parameters(variational_parameters, return_cholesky=False)[source]#
Reconstruct mean value, covariance and its Cholesky decomposition.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
return_cholesky (bool, optional) – Return the L if desired
- Returns:
mean (np.ndarray) – Mean value of the distribution (n_dim x 1)
cov (np.ndarray) – Covariance of the distribution (n_dim x n_dim)
L (np.ndarray) – Cholesky decomposition of the covariance matrix (n_dim x n_dim)
- total_grad_params_logpdf(variational_parameters, standard_normal_sample_batch)[source]#
Total logpdf reparameterization gradient.
Total logpdf reparameterization gradient w.r.t. the variational parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
standard_normal_sample_batch (np.ndarray) – Standard normal distributed sample batch
- Returns:
total_grad (np.ndarray) – Total Logpdf reparameterization gradient
queens.variational_distributions.joint module#
Joint Variational Distribution.
- class JointVariational(distributions, dimension)[source]#
Bases:
VariationalDistribution
Joint variational distribution class.
This distribution allows to join distributions in an independent fashion: \(q(\theta|\lambda)=\prod_{i=1}^{N}q_i(\theta_i | \lambda_i)\)
NOTE: \(q_i(\theta_i | \lambda_i)\) can be multivariate or of different families. Hence it is a generalization of the mean field distribution
- distributions#
List of variational distribution objects for the different independent distributions.
- Type:
list
- n_parameters#
Total number of parameters used in the parameterization.
- Type:
int
- distributions_n_parameters#
Number of parameters per distribution
- Type:
np.ndarray
- distributions_dimension#
Number of dimension per distribution
- Type:
np.ndarray
- construct_variational_parameters(distributions_parameters_list)[source]#
Construct the variational parameters from the distribution list.
- Parameters:
distributions_parameters_list (list) – List of the parameters of the distributions
- Returns:
variational_parameters (np.ndarray) – Variational parameters
- draw(variational_parameters, n_draws=1)[source]#
Draw n_draw samples from the variational distribution.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
n_draws (int) – Number of samples to draw
- Returns:
samples (np.ndarray) – Row wise samples of the variational distribution
- export_dict(variational_parameters)[source]#
Create a dict of the distribution based on the given parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
export_dict (dictionary) – Dict containing distribution information
- fisher_information_matrix(variational_parameters)[source]#
Approximate the Fisher information matrix using Monte Carlo.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
FIM (np.ndarray) – Matrix (num parameters x num parameters)
- grad_params_logpdf(variational_parameters, x)[source]#
Logpdf gradient w.r.t. the variational parameters.
Evaluated at samples x. Also known as the score function. Is a general implementation using the score functions of the components.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
score (np.ndarray) – Column-wise scores
- initialize_variational_parameters(random=False)[source]#
Initialize variational parameters.
The distribution initialization is handle by the component itself.
- Parameters:
random (bool, optional) – If True, a random initialization is used. Otherwise the default is selected
- Returns:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
- logpdf(variational_parameters, x)[source]#
Logpdf evaluated using the variational parameters at samples x.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
logpdf (np.ndarray) – Row vector of the logpdfs
- pdf(variational_parameters, x)[source]#
Pdf evaluated using the variational parameters at given samples x.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
pdf (np.ndarray) – Row vector of the pdfs
- reconstruct_distribution_parameters(variational_parameters)[source]#
Reconstruct the parameters of distributions.
The list is nested, each entry correspond to the parameters of a distribution.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
distribution_parameters_list (list) – List of the distribution parameters of the components
queens.variational_distributions.mean_field_normal module#
Mean-Field Normal Variational Distribution.
- class MeanFieldNormalVariational(dimension)[source]#
Bases:
VariationalDistribution
Mean field multivariate normal distribution.
Uses the parameterization (as in [1]): \(parameters=[\mu, \lambda]\) where \(\mu\) are the mean values and \(\sigma^2=exp(2 \lambda)\) the variances allowing for \(\lambda\) to be unconstrained.
References
- [1]: Kucukelbir, Alp, et al. “Automatic differentiation variational inference.”
The Journal of Machine Learning Research 18.1 (2017): 430-474.
- n_parameters#
Number of parameters used in the parameterization.
- Type:
int
- conduct_reparameterization(variational_parameters, n_samples)[source]#
Conduct a reparameterization.
- Parameters:
variational_parameters (np.ndarray) – Array with variational parameters
n_samples (int) – Number of samples for current batch
- Returns:
* samples_mat (np.ndarray) – Array of actual samples from the variational distribution
* standard_normal_sample_batch (np.ndarray) – Standard normal distributed sample batch
- static construct_variational_parameters(mean, covariance)[source]#
Construct the variational parameters from mean and covariance.
- Parameters:
mean (np.ndarray) – Mean values of the distribution (n_dim x 1)
covariance (np.ndarray) – Covariance matrix of the distribution (n_dim x n_dim)
- Returns:
variational_parameters (np.ndarray) – Variational parameters
- draw(variational_parameters, n_draws=1)[source]#
Draw n_draw samples from the variational distribution.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
n_draws (int) – Number of samples to draw
- Returns:
samples (np.ndarray) – Row-wise samples of the variational distribution
- export_dict(variational_parameters)[source]#
Create a dict of the distribution based on the given parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
export_dict (dictionary) – Dict containing distribution information
- fisher_information_matrix(variational_parameters)[source]#
Compute the Fisher information matrix analytically.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
FIM (np.ndarray) – Matrix (n_parameters x n_parameters)
- grad_params_logpdf(variational_parameters, x)[source]#
Logpdf gradient w.r.t. the variational parameters.
Evaluated at samples x. Also known as the score function.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
score (np.ndarray) – Column-wise scores
- grad_params_reparameterization(variational_parameters, standard_normal_sample_batch, upstream_gradient)[source]#
Calculate the gradient of the reparameterization.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
standard_normal_sample_batch (np.ndarray) – Standard normal distributed sample batch
upstream_gradient (np.array) – Upstream gradient
- Returns:
gradient (np.ndarray) – Gradient of the upstream function w.r.t. the variational parameters.
Note
We assume that grad_reconstruct_params is a row-vector containing the partial derivatives of the reconstruction mapping of the actual distribution parameters w.r.t. the variational parameters.
The variable jacobi_parameters is the (n_parameters \(\times\) dim_sample) Jacobi matrix of the reparameterization w.r.t. the distribution parameters, with differentiating after the distribution parameters in different rows and different output dimensions of the sample per column.
- grad_sample_logpdf(variational_parameters, sample_batch)[source]#
Computes the gradient of the logpdf w.r.t. to the x.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
sample_batch (np.ndarray) – Row-wise samples
- Returns:
gradients_batch (np.ndarray) – Gradients of the log-pdf w.r.t. the
sample *x*. The first dimension of the array corresponds to
the different samples. The second dimension to different dimensions
within one sample. (Third dimension is empty and just added to
keep slices two dimensional.)
- initialize_variational_parameters(random=False)[source]#
Initialize variational parameters.
- Default initialization:
\(\mu=0\) and \(\sigma^2=1\)
- Random intialization:
\(\mu=Uniform(-0.1,0.1)\) and \(\sigma^2=Uniform(0.9,1.1)\)
- Parameters:
random (bool, optional) – If True, a random initialization is used. Otherwise the default is selected
- Returns:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
- logpdf(variational_parameters, x)[source]#
Logpdf evaluated using the variational parameters at samples x.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
logpdf (np.ndarray) – Row vector of the logpdfs
- pdf(variational_parameters, x)[source]#
Pdf of the variational distribution evaluated at samples x.
First computes the logpdf, which is numerically more stable for exponential distributions.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
pdf (np.ndarray) – Row vector of the pdfs
- reconstruct_distribution_parameters(variational_parameters)[source]#
Reconstruct mean and covariance from the variational parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
mean (np.ndarray) – Mean value of the distribution (n_dim x 1)
cov (np.ndarray) – Covariance matrix of the distribution (n_dim x n_dim)
- total_grad_params_logpdf(variational_parameters, standard_normal_sample_batch)[source]#
Total logpdf reparameterization gradient.
Total logpdf reparameterization gradient w.r.t. the variational parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
standard_normal_sample_batch (np.ndarray) – Standard normal distributed sample batch
- Returns:
total_grad (np.ndarray) – Total Logpdf reparameterization gradient
queens.variational_distributions.mixture_model module#
Mixture Model Variational Distribution.
- class MixtureModelVariational(base_distribution, dimension, n_components)[source]#
Bases:
VariationalDistribution
Mixture model variational distribution class.
Every component is a member of the same distribution family. Uses the parameterization: \(parameters=[\lambda_0,\lambda_1,...,\lambda_{C},\lambda_{weights}]\) where \(C\) is the number of components, \(\\lambda_i\) are the variational parameters of the ith component and \(\\lambda_{weights}\) parameters such that the component weights are obtained by: \(weight_i=\frac{exp(\lambda_{weights,i})}{\sum_{j=1}^{C}exp(\lambda_{weights,j})}\)
This allows the weight parameters \(\lambda_{weights}\) to be unconstrained.
- n_components#
Number of mixture components.
- Type:
int
- base_distribution#
Variational distribution object for the components.
- n_parameters#
Number of parameters used in the parameterization.
- Type:
int
- construct_variational_parameters(component_parameters_list, weights)[source]#
Construct the variational parameters from the probabilities.
- Parameters:
component_parameters_list (list) – List of the component parameters of the components
weights (np.ndarray) – Probabilities of the distribution
- Returns:
variational_parameters (np.ndarray) – Variational parameters
- draw(variational_parameters, n_draws=1)[source]#
Draw n_draw samples from the variational distribution.
- Uses a two-step process:
From a multinomial distribution, based on the weights, select a component
Sample from the selected component
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
n_draws (int) – Number of samples to draw
- Returns:
samples (np.ndarray) – Row wise samples of the variational distribution
- export_dict(variational_parameters)[source]#
Create a dict of the distribution based on the given parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
export_dict (dictionary) – Dict containing distribution information
- fisher_information_matrix(variational_parameters, n_samples=10000)[source]#
Approximate the Fisher information matrix using Monte Carlo.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
n_samples (int, optional) – number of samples for a MC FIM estimation
- Returns:
FIM (np.ndarray) – Matrix (num parameters x num parameters)
- grad_params_logpdf(variational_parameters, x)[source]#
Logpdf gradient w.r.t. the variational parameters.
Evaluated at samples x. Also known as the score function. Is a general implementation using the score functions of the components.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
score (np.ndarray) – Column-wise scores
- initialize_variational_parameters(random=False)[source]#
Initialize variational parameters.
- Default weights initialization:
\(w_i=\frac{1}{N_\text{sample space}}\)
- Random weights intialization:
\(w_i=\frac{s}{N_\text{experiments}}\) where \(s\) is a sample of a multinomial distribution with \(N_\text{experiments}\)
The component initialization is handle by the component itself.
- Parameters:
random (bool, optional) – If True, a random initialization is used. Otherwise the default is selected
- Returns:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
- logpdf(variational_parameters, x)[source]#
Logpdf evaluated using the variational parameters at samples x.
Is a general implementation using the logpdf function of the components. Uses the log-sum-exp trick [1] in order to reduce floating point issues.
References: [1] : David M. Blei, Alp Kucukelbir & Jon D. McAuliffe (2017) Variational Inference: A
Review for Statisticians, Journal of the American Statistical Association, 112:518
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
logpdf (np.ndarray) – Row vector of the logpdfs
- pdf(variational_parameters, x)[source]#
Pdf evaluated using the variational parameters at given samples x.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
x (np.ndarray) – Row-wise samples
- Returns:
pdf (np.ndarray) – Row vector of the pdfs
- reconstruct_distribution_parameters(variational_parameters)[source]#
Reconstruct the weights and parameters of the mixture components.
The list is nested, each entry correspond to the parameters of a component.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
distribution_parameters_list (list) – List of the distribution parameters of the components
weights (np.ndarray) – Weights of the mixture
queens.variational_distributions.particle module#
Particle Variational Distribution.
- class ParticleVariational(sample_space)[source]#
Bases:
VariationalDistribution
Variational distribution for particle distributions.
The probabilities of the distribution are parameterized by softmax: \(p_i=p(\lambda_i)=\frac{\exp(\lambda_i)}{\sum_k exp(\lambda_k)}\)
- particles_obj#
Particle distribution object
- dimension#
Number of random variables
- Type:
int
- construct_variational_parameters(probabilities, sample_space)[source]#
Construct the variational parameters from the probabilities.
- Parameters:
probabilities (np.ndarray) – Probabilities of the distribution
sample_space (np.ndarray) – Sample space of the distribution
- Returns:
variational_parameters (np.ndarray) – Variational parameters
- draw(variational_parameters, n_draws=1)[source]#
Draw n_draws samples from distribution.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters of the distribution
n_draws (int) – Number of samples
- Returns:
samples (np.ndarray) – samples (n_draws x n_dim)
- export_dict(variational_parameters)[source]#
Create a dict of the distribution based on the given parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
export_dict (dictionary) – Dict containing distribution information
- fisher_information_matrix(variational_parameters)[source]#
Compute the fisher information matrix.
For the given parameterization, the Fisher information yields: \(\text{FIM}_{ij}=\delta_{ij} p_i -p_i p_j\)
- Parameters:
variational_parameters (np.ndarray) – Variational parameters of the distribution
- Returns:
fim (np.ndarray) – Fisher information matrix (n_params x n_params)
- grad_params_logpdf(variational_parameters, x)[source]#
Logpdf gradient w.r.t. the variational parameters.
Evaluated at samples x. Also known as the score function.
For the given parameterization, the score function yields: \(\nabla_{\lambda_i}\ln p(\theta_j | \lambda)=\delta_{ij}-p_i\)
- Parameters:
variational_parameters (np.ndarray) – Variational parameters of the distribution
x (np.ndarray) – Locations at which to evaluate the distribution (n_samples x n_dim)
- Returns:
score_function (np.ndarray) – Score functions at the locations x
- initialize_variational_parameters(random=False)[source]#
Initialize variational parameters.
- Default initialization:
\(w_i=\frac{1}{N_\text{sample space}}\)
- Random intialization:
\(w_i=\frac{s}{N_\text{experiments}}\) where \(s\) is a sample of a multinomial distribution with \(N_\text{experiments}\)
- Parameters:
random (bool, optional) – If True, a random initialization is used. Otherwise the default is selected
- Returns:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
- logpdf(variational_parameters, x)[source]#
Evaluate the natural logarithm of the logpdf at sample.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters of the distribution
x (np.ndarray) – Locations at which to evaluate the distribution (n_samples x n_dim)
- Returns:
logpdf (np.ndarray) – Logpdfs at the locations x
- pdf(variational_parameters, x)[source]#
Evaluate the probability density function (pdf) at sample.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters of the distribution
x (np.ndarray) – Locations at which to evaluate the distribution (n_samples x n_dim)
- Returns:
logpdf (np.ndarray) – Pdfs at the locations x
queens.variational_distributions.variational_distribution module#
Variational Distribution.
- class VariationalDistribution(dimension)[source]#
Bases:
object
Base class for probability distributions for variational inference.
- dimension#
dimension of the distribution
- Type:
int
- abstract draw(variational_parameters, n_draws=1)[source]#
Draw n_draws samples from distribution.
- Parameters:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
n_draws (int) – Number of samples
- abstract export_dict(variational_parameters)[source]#
Create a dict of the distribution based on the given parameters.
- Parameters:
variational_parameters (np.ndarray) – Variational parameters
- Returns:
export_dict (dictionary) – Dict containing distribution information
- abstract fisher_information_matrix(variational_parameters)[source]#
Compute the fisher information matrix.
Depends on the variational distribution for the given parameterization.
- Parameters:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
- abstract grad_params_logpdf(variational_parameters, x)[source]#
Logpdf gradient w.r.t. the variational parameters.
Evaluated at samples x. Also known as the score function.
- Parameters:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
x (np.ndarray) – Locations to evaluate (n_samples x n_dim)
- abstract initialize_variational_parameters(random=False)[source]#
Initialize variational parameters.
- Parameters:
random (bool, optional) – If True, a random initialization is used. Otherwise the default is selected
- Returns:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
- abstract logpdf(variational_parameters, x)[source]#
Evaluate the natural logarithm of the logpdf at sample.
- Parameters:
variational_parameters (np.ndarray) – variational parameters (1 x n_params)
x (np.ndarray) – Locations to evaluate (n_samples x n_dim)