mrmustard.training
The optimizer module contains all logic for parameter and circuit optimization
in Mr Mustard.
The Optimizer
uses Adam underneath the hood for Euclidean parameters and
a custom Symplectic optimizer for Gaussian gates and states and an Orthogonal
optimizer for interferometers.
We can turn any simulation in Mr Mustard into an optimization by marking which
parameters we wish to be trainable. Let’s take a simple example:
Finding the optimal beamsplitter transmission to get Hong-Ou-Mandel dip on the
many-photon setting.
import numpy as np
from mrmustard.lab.gates import S2gate, BSgate
from mrmustard.lab.states import Vacuum
from mrmustard.lab.circuit import Circuit
from mrmustard.training import Optimizer
from mrmustard.math import Math
math = Math()
r = np.arcsinh(1.0)
s2_0 = S2gate(r=r, phi=0.0, phi_trainable=True)[0, 1]
s2_1 = S2gate(r=r, phi=0.0, phi_trainable=True)[2, 3]
bs = BSgate(
theta=np.arccos(np.sqrt(k / (i + k))) + 0.1 * np.random.normal(),
phi=np.random.normal(),
theta_trainable=True,
phi_trainable=True,
)[1, 2]
circ = Circuit([s2_0, s2_1, bs])
state_in = Vacuum(num_modes=4)
i, k = 2, 2
cutoff = 1 + i + k
def cost_fn():
return math.abs((state_in >> circ).ket(cutoffs=[cutoff] * 4)[i, 1, i + k - 1, k]) ** 2
opt = Optimizer(euclidean_lr=0.01)
opt.minimize(cost_fn, by_optimizing=[circ], max_steps=300)
Then, we can see the optimized value of the parameters, for example
np.cos(bs.theta.value) ** 2
Classes
Optimizer ([symplectic_lr, unitary_lr, ...])
|
An optimizer for any parametrized object: it can optimize euclidean, orthogonal and symplectic parameters. |
Parametrized (**kwargs)
|
A class representing all parametrized objects (gates, detectors, etc.). |
TensorboardCallback ([tag, steps_per_call, ...])
|
Callback for enabling Tensorboard tracking of optimization progresses. |
Class Inheritance Diagram
digraph inheritancecb1b2d917f {
bgcolor=transparent;
rankdir=LR;
size="8.0, 12.0";
"Callback" [URL="api/mrmustard.training.callbacks.Callback.html#mrmustard.training.callbacks.Callback",color=lightskyblue1,fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style=filled,target="_top",tooltip="Base callback class for optimizers. Users can inherit from this class and define the"];
"Optimizer" [URL="api/mrmustard.training.optimizer.Optimizer.html#mrmustard.training.optimizer.Optimizer",color=lightskyblue1,fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style=filled,target="_top",tooltip="An optimizer for any parametrized object: it can optimize euclidean, orthogonal and symplectic parameters."];
"Parametrized" [URL="api/mrmustard.training.parametrized.Parametrized.html#mrmustard.training.parametrized.Parametrized",color=lightskyblue1,fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style=filled,target="_top",tooltip="A class representing all parametrized objects (gates, detectors, etc.). This class"];
"TensorboardCallback" [URL="api/mrmustard.training.callbacks.TensorboardCallback.html#mrmustard.training.callbacks.TensorboardCallback",color=lightskyblue1,fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style=filled,target="_top",tooltip="Callback for enabling Tensorboard tracking of optimization progresses."];
"Callback" -> "TensorboardCallback" [arrowsize=0.5,style="setlinewidth(0.5)"];
}