Predictive Coding Utilities — PredFlow documentation

# Predictive Coding Utilities

Utilities for predictive coding specifically.

- Energy computation and autodifferentiated gradients of energy wrt to representations and learnable parameters

- Explicit computation of gradients expressed with prediction errors in the nonlinear fully-connected strictly hierarchical case

- Stochastic gradient descent steps on representations and learnable parameters

- Representations initializers (first pass)

pc_utils.backward_initialize_representations(model, target, data=None)

  Initial representations with a backward sweep through the model

  Parameters

    - model (list of `tf_utils.Dense` or `tf_utils.BiasedDense`) – description of a sequential network by a list of layers, can be generated e.g. using `tf_utils.mlp()`

    - target (3d tf.Tensor of float32) – output target batch

    - data (3d tf.Tensor of float32, optional) – inuput data batch, defaults to None

  Returns

    representations

  Return type

    list of 3d tf.Tensor of float32

pc_utils.energy_and_error(model, r, theta=[], predictions_flow_upward=False)

  Energy (total squared L2 norm of errors) computation and autodifferentiation with respect to representations and learnable parameters

  Parameters

    - model (list of `tf_utils.Dense` or `tf_utils.BiasedDense`) – description of a sequential network by a list of layers, can be generated e.g. using `tf_utils.mlp()`

    - r (list of 3d tf.Tensor of float32) – representations

    - theta (list of variable tf.Tensor of float32, optional) – learnable parameters, defaults to []

    - predictions_flow_upward (bool, optional) – direction of prediction flow, defaults to False

  Returns

    energy, autodiff gradient tape

  Return type

    float32, tf.GradientTape

pc_utils.forward_initialize_representations(model, data, target=None)

  Initial representations with a forward sweep through the model

  Parameters

    - model (list of `tf_utils.Dense` or `tf_utils.BiasedDense`) – description of a sequential network by a list of layers, can be generated e.g. using `tf_utils.mlp()`

    - data (3d tf.Tensor of float32) – inuput data batch

    - target (3d tf.Tensor of float32, optional) – output target batch, defaults to None

  Returns

    representations

  Return type

    list of 3d tf.Tensor of float32

pc_utils.inference_SGD_step(r, ir, g, update_last=True)

  Stochastic gradient descent step on represnetations (inference) using autodifferentiated gradients

  Parameters

    - r (list of 3d tf.Tensor of float32) – representations

    - ir (float32) – inference rate

    - g (tf.GradientTape) – autodiff gradient tape

    - update_last (bool, optional) – controls weither representations in the last layer are updated, defaults to True

pc_utils.inference_step_backward_predictions(e, r, w, ir, f, df, update_last=True)

  Representations update using stochastic gradient descent with analytic expressions of the gradients of energy wrt representations, only applicable to an unbiased MLP with reversed flow (predictions come from higher layer)

  Parameters

    - e (list of 3d tf.Tensor of float32) – prediction errors

    - r (list of 3d tf.Tensor of float32) – representations

    - w (list of 2d tf.Tensor of float32) – list of weight matrices, can be generated e.g. using `tf_utils.mlp()`

    - ir (float32) – inference rate

    - f (function) – activation function

    - df (function) – derivate of the activation function

    - update_last (bool, optional) – controls weither representations in the last layer are updated, defaults to True

pc_utils.inference_step_forward_predictions(e, r, w, ir, f, df, update_last=True)

  Representations update using stochastic gradient descent with analytic expressions of the gradients of energy wrt representations, only applicable to an unbiased MLP (predictions come from lower layer)

  Parameters

    - e (list of 3d tf.Tensor of float32) – prediction errors

    - r (list of 3d tf.Tensor of float32) – representations

    - w (list of 2d tf.Tensor of float32) – list of weight matrices, can be generated e.g. using `tf_utils.mlp()`

    - ir (float32) – inference rate

    - f (float32) – activation function

    - df (function) – derivate of the activation function

    - update_last (bool, optional) – controls weither representations in the last layer are updated, defaults to True

pc_utils.parameters_SGD_step(theta, lr, g)

  Stochastic gradient descent step on learnable parameters (learning) using autodifferentiated gradients

  Parameters

    - theta (list of variable tf.Tensor of float32) – learnable parameters

    - lr (float32) – learning rate

    - g (tf.GradientTape) – autodiff gradient tape

pc_utils.random_initialize_representations(model, data, stddev=0.001, predictions_flow_upward=False, target_shape=None)

  Randomly initialize latent representations

  Parameters

    - model (list of `tf_utils.Dense` or `tf_utils.BiasedDense`) – description of a sequential network by a list of layers, can be generated e.g. using `tf_utils.mlp()`

    - data (3d tf.Tensor of float32) – inuput data batch

    - stddev (float, optional) – standard deviation of the normal initialization, defaults to 0.001

    - predictions_flow_upward (bool, optional) – direction of prediction flow, defaults to False

    - target_shape (1d tf.Tensor of int32, optional) – shape of target minibatch, defaults to None

  Returns

    representations

  Return type

    list of 3d tf.Tensor of float32

pc_utils.weight_update_backward_predictions(w, e, r, lr, f)

  Weight update using stochastic gradient descent with analytic expressions of the gradients of energy wrt weights, only applicable to an unbiased MLP with reversed flow (predictions come from higher layer)

  Parameters

    - w (list of 2d tf.Tensor of float32) – list of weight matrices, can be generated e.g. using `tf_utils.mlp()`

    - e (list of 3d tf.Tensor of float32) – prediction errors

    - r (list of 3d tf.Tensor of float32) – representations

    - lr (float32) – learning rate

    - f (function) – activation function

pc_utils.weight_update_forward_predictions(w, e, r, lr, f)

  Weight update using stochastic gradient descent with analytic expressions of the gradients of energy wrt weights, only applicable to an unbiased MLP (predictions come from lower layer)

  Parameters

    - w (list of 2d tf.Tensor of float32) – list of weight matrices, can be generated e.g. using `tf_utils.mlp()`

    - e (list of 3d tf.Tensor of float32) – prediction errors

    - r (list of 3d tf.Tensor of float32) – representations

    - lr (float32) – learning rate

    - f (function) – activation function

pc_utils.zero_initialize_representations(model, data, predictions_flow_upward=False, target_shape=None, bias=<tf.Tensor: shape=(), dtype=float32, numpy=0.0>)

  Initialize representations at zero (or a constant)

  Parameters

    - model (list of `tf_utils.Dense` or `tf_utils.BiasedDense`) – description of a sequential network by a list of layers, can be generated e.g. using `tf_utils.mlp()`

    - data (3d tf.Tensor of float32) – inuput data batch

    - predictions_flow_upward (bool, optional) – direction of prediction flow, defaults to False

    - target_shape (1d tf.Tensor of int32, optional) – shape of target minibatch, defaults to None

    - bias (float32, optional) – initialize representation with bias rather than 0., defaults to tf.constant(0.)

  Returns

    representations

  Return type

    list of 3d tf.Tensor of float32