qml.AdagradOptimizer

class AdagradOptimizer(stepsize=0.01, eps=1e-08)[source]

Bases: pennylane.optimize.gradient_descent.GradientDescentOptimizer

Gradient-descent optimizer with past-gradient-dependent learning rate in each dimension.

Adagrad adjusts the learning rate for each parameter \(x_i\) in \(x\) based on past gradients. We therefore have to consider each parameter update individually,

\[x^{(t+1)}_i = x^{(t)}_i - \eta_i^{(t+1)} \partial_{w_i} f(x^{(t)}),\]

where the gradient is replaced by a (scalar) partial derivative.

The learning rate in step \(t\) is given by

\[\eta_i^{(t+1)} = \frac{ \eta_{\mathrm{init}} }{ \sqrt{a_i^{(t+1)} + \epsilon } }, ~~~ a_i^{(t+1)} = \sum_{k=1}^t (\partial_{x_i} f(x^{(k)}))^2.\]

The offset \(\epsilon\) avoids division by zero.

\(\eta\) is the step size, a user defined parameter.

Parameters
  • stepsize (float) – the user-defined hyperparameter \(\eta\)

  • eps (float) – offset \(\epsilon\) added for numerical stability

apply_grad(grad, args)

Update the variables in args to take a single optimization step.

compute_grad(objective_fn, args, kwargs[, …])

Compute gradient of the objective function at the given point and return it along with the objective function forward pass (if available).

reset()

Reset optimizer by erasing memory of past steps.

step(objective_fn, *args[, grad_fn])

Update trainable arguments with one step of the optimizer.

step_and_cost(objective_fn, *args[, grad_fn])

Update trainable arguments with one step of the optimizer and return the corresponding objective function value prior to the step.

update_stepsize(stepsize)

Update the initialized stepsize value \(\eta\).

apply_grad(grad, args)[source]

Update the variables in args to take a single optimization step. Flattens and unflattens the inputs to maintain nested iterables as the parameters of the optimization.

Parameters
  • grad (tuple[array]) – the gradient of the objective function at point \(x^{(t)}\): \(\nabla f(x^{(t)})\)

  • args (tuple) – the current value of the variables \(x^{(t)}\)

Returns

the new values \(x^{(t+1)}\)

Return type

list

static compute_grad(objective_fn, args, kwargs, grad_fn=None)

Compute gradient of the objective function at the given point and return it along with the objective function forward pass (if available).

Parameters
  • objective_fn (function) – the objective function for optimization

  • args (tuple) – tuple of NumPy arrays containing the current parameters for the objection function

  • kwargs (dict) – keyword arguments for the objective function

  • grad_fn (function) – optional gradient function of the objective function with respect to the variables args. If None, the gradient function is computed automatically. Must return the same shape of tuple [array] as the autograd derivative.

Returns

NumPy array containing the gradient \(\nabla f(x^{(t)})\) and the objective function output. If grad_fn is provided, the objective function will not be evaluted and instead None will be returned.

Return type

tuple (array)

reset()[source]

Reset optimizer by erasing memory of past steps.

step(objective_fn, *args, grad_fn=None, **kwargs)

Update trainable arguments with one step of the optimizer.

Parameters
  • objective_fn (function) – the objective function for optimization

  • *args – Variable length argument list for objective function

  • grad_fn (function) – optional gradient function of the objective function with respect to the variables x. If None, the gradient function is computed automatically. Must return a tuple[array] with the same number of elements as *args. Each array of the tuple should have the same shape as the corresponding argument.

  • **kwargs – variable length of keyword arguments for the objective function

Returns

the new variable values \(x^{(t+1)}\). If single arg is provided, list [array] is replaced by array.

Return type

list [array]

step_and_cost(objective_fn, *args, grad_fn=None, **kwargs)

Update trainable arguments with one step of the optimizer and return the corresponding objective function value prior to the step.

Parameters
  • objective_fn (function) – the objective function for optimization

  • *args – variable length argument list for objective function

  • grad_fn (function) – optional gradient function of the objective function with respect to the variables *args. If None, the gradient function is computed automatically. Must return a tuple[array] with the same number of elements as *args. Each array of the tuple should have the same shape as the corresponding argument.

  • **kwargs – variable length of keyword arguments for the objective function

Returns

the new variable values \(x^{(t+1)}\) and the objective function output prior to the step. If single arg is provided, list [array] is replaced by array.

Return type

tuple[list [array], float]

update_stepsize(stepsize)

Update the initialized stepsize value \(\eta\).

This allows for techniques such as learning rate scheduling.

Parameters

stepsize (float) – the user-defined hyperparameter \(\eta\)

Contents

Using PennyLane

Development

API