Wavefunction RBM

class qucumber.rbm.BinaryRBM(num_visible, num_hidden=None, zero_weights=False, gpu=True)[source]

Bases: torch.nn.Module

effective_energy(v)[source]

The effective energies of the given visible states.

\mathcal{E}(\bm{v}) &= -\sum_{j}b_j v_j
            - \sum_{i}\log
                \left\lbrack 1 +
                      \exp\left(c_{i} + \sum_{j} W_{ij} v_j\right)
                \right\rbrack

Parameters

v (torch.Tensor) – The visible states.

Returns

The effective energies of the given visible states.

Return type

torch.Tensor

effective_energy_gradient(v, reduce=True)[source]

The gradients of the effective energies for the given visible states.

Parameters
  • v (torch.Tensor) – The visible states.

  • reduce (bool) – If True, will sum over the gradients resulting from each visible state. Otherwise will return a batch of gradient vectors.

Returns

Will return a vector (or matrix if reduce=False and multiple visible states were given as a matrix) containing the gradients for all parameters (computed on the given visible states v).

Return type

torch.Tensor

gibbs_steps(k, initial_state, overwrite=False)[source]

Performs k steps of Block Gibbs sampling. One step consists of sampling the hidden state \bm{h} from the conditional distribution p(\bm{h}\:|\:\bm{v}), and sampling the visible state \bm{v} from the conditional distribution p(\bm{v}\:|\:\bm{h}).

Parameters
  • k (int) – Number of Block Gibbs steps.

  • initial_state (torch.Tensor) – The initial state of the Markov Chains.

  • overwrite (bool) – Whether to overwrite the initial_state tensor. Exception: If initial_state is not on the same device as the RBM, it will NOT be overwritten.

Returns

Returns the visible states after k steps of Block Gibbs sampling

Return type

torch.Tensor

initialize_parameters(zero_weights=False)[source]

Randomize the parameters of the RBM

partition(space)[source]

Compute the partition function of the RBM.

Parameters

space (torch.Tensor) – A rank 2 tensor of the visible space.

Returns

The value of the partition function evaluated at the current state of the RBM.

Return type

torch.Tensor

prob_h_given_v(v, out=None)[source]

Given a visible unit configuration, compute the probability vector of the hidden units being on.

Parameters
Returns

The probability of hidden units being active given the visible state.

Return type

torch.Tensor

prob_v_given_h(h, out=None)[source]

Given a hidden unit configuration, compute the probability vector of the visible units being on.

Parameters
Returns

The probability of visible units being active given the hidden state.

Return type

torch.Tensor

sample_h_given_v(v, out=None)[source]

Sample/generate a hidden state given a visible state.

Parameters
Returns

The sampled hidden state.

Return type

torch.Tensor

sample_v_given_h(h, out=None)[source]

Sample/generate a visible state given a hidden state.

Parameters
Returns

The sampled visible state.

Return type

torch.Tensor

Density Matrix RBM

class qucumber.rbm.PurificationRBM(num_visible, num_hidden=None, num_aux=None, zero_weights=False, gpu=False)[source]

Bases: torch.nn.Module

An RBM with a hidden and “auxiliary” layer, each separately connected to the visible units

Parameters
  • num_visible (int) – The number of visible units, i.e. the size of the system

  • num_hidden (int) – The number of units in the hidden layer

  • num_aux (int) – The number of units in the auxiliary purification layer

  • zero_weights (bool) – Whether or not to initialize the weights to zero

  • gpu (bool) – Whether to perform computations on the default gpu.

effective_energy(v, a=None)[source]

Computes the equivalent of the “effective energy” for the RBM. If a is None, will analytically trace out the auxiliary units.

Parameters
  • v (torch.Tensor) – The current state of the visible units. Shape (b, n_v) or (n_v,).

  • a (torch.Tensor or None) – The current state of the auxiliary units. Shape (b, n_a) or (n_a,).

Returns

The “effective energy” of the RBM. Shape (b,) or (1,).

Return type

torch.Tensor

effective_energy_gradient(v, reduce=True)[source]

The gradients of the effective energies for the given visible states.

Parameters
  • v (torch.Tensor) – The visible states.

  • reduce (bool) – If True, will sum over the gradients resulting from each visible state. Otherwise will return a batch of gradient vectors.

Returns

Will return a vector (or matrix if reduce=False and multiple visible states were given as a matrix) containing the gradients for all parameters (computed on the given visible states v).

Return type

torch.Tensor

gamma(v, vp, eta=1, expand=True)[source]

Calculates elements of the \Gamma^{(\eta)} matrix, where \eta = \pm. If expand is True, will return a complex matrix A_{ij} = \langle\sigma_i|\Gamma^{(\eta)}|\sigma'_j\rangle. Otherwise will return a complex vector A_{i} = \langle\sigma_i|\Gamma^{(\eta)}|\sigma'_i\rangle.

Parameters
  • v (torch.Tensor) – A batch of visible states, \sigma.

  • vp (torch.Tensor) – The other batch of visible states, \sigma'.

  • eta (int) – Determines which gamma matrix elements to compute.

  • expand (bool) – Whether to return a matrix (True) or a vector (False). Ignored if both inputs are vectors, in which case, a scalar is returned.

Returns

The matrix element given by \langle\sigma|\Gamma^{(\eta)}|\sigma'\rangle

Return type

torch.Tensor

gamma_grad(v, vp, eta=1, expand=False)[source]
Calculates elements of the gradient of

the \Gamma^{(\eta)} matrix, where \eta = \pm.

Parameters
  • v (torch.Tensor) – A batch of visible states, \sigma

  • vp (torch.Tensor) – The other batch of visible states, \sigma'

  • eta (int) – Determines which gamma matrix elements to compute.

  • expand (bool) – Whether to return a rank-3 tensor (True) or a matrix (False).

Returns

The matrix element given by \langle\sigma|\nabla_\lambda\Gamma^{(\eta)}|\sigma'\rangle

Return type

torch.Tensor

gibbs_steps(k, initial_state, overwrite=False)[source]

Perform k steps of Block Gibbs sampling. One step consists of sampling the hidden and auxiliary states from the visible state, and then sampling the visible state from the hidden and auxiliary states

Parameters
  • k (int) – The number of Block Gibbs steps

  • initial_state (torch.Tensor) – The initial visible state

  • overwrite (bool) – Whether to overwrite the initial_state tensor. Exception: If initial_state is not on the same device as the RBM, it will NOT be overwritten.

Returns

Returns the visible states after k steps of Block Gibbs sampling

Return type

torch.Tensor

initialize_parameters(zero_weights=False)[source]

Initialize the parameters of the RBM

Parameters

zero_weights (bool) – Whether or not to initialize the weights to zero

mixing_term(v)[source]
Describes the extent of mixing in the system,

V_\theta = \frac{1}{2}U_\theta \bm{\sigma} + d_\theta

Parameters

v (torch.Tensor) – The visible state of the system

Returns

The term describing the mixing of the system

Return type

torch.Tensor

partition(space)[source]

Computes the partition function

Parameters

space (torch.Tensor) – The Hilbert space of the visible units

Returns

The partition function

Return type

torch.Tensor

prob_a_given_v(v, out=None)[source]

Given a visible unit configuration, compute the probability vector of the auxiliary units being on

Parameters
Returns

The probability of the auxiliary units being active given the visible state

Rtype torch.Tensor

prob_h_given_v(v, out=None)[source]

Given a visible unit configuration, compute the probability vector of the hidden units being on

Parameters
Returns

The probability of the hidden units being active given the visible state

Rtype torch.Tensor

prob_v_given_ha(h, a, out=None)[source]

Given a hidden and auxiliary unit configuration, compute the probability vector of the hidden units being on

Parameters
Returns

The probability of the visible units being active given the hidden and auxiliary states

Rtype torch.Tensor

sample_a_given_v(v, out=None)[source]

Sample/generate an auxiliary state given a visible state

Parameters
Returns

The sampled auxiliary state

Return type

torch.Tensor

sample_h_given_v(v, out=None)[source]

Sample/generate a hidden state given a visible state

Parameters
Returns

The sampled hidden state

Return type

torch.Tensor

sample_v_given_ha(h, a, out=None)[source]

Sample/generate a visible state given the hidden and auxiliary states

Parameters
Returns

The sampled visible state

Return type

torch.Tensor