braket.experimental.algorithms.quantum_circuit_born_machine.qcbm module
- class braket.experimental.algorithms.quantum_circuit_born_machine.qcbm.QCBM(device: Device, n_qubits: int, n_layers: int, target_probabilities: ndarray, shots: int = 10000)[source]
Bases:
objectQuantum circuit Born machine.
Example: n_layers = 1, n_qubits = 2
T : | 0 | 1 | 2 |3|4|Result Types| q0 : -Rx(0.667)-Rz(0.783)-Rx(0.257)-C-X-Probability-- | | | q1 : -Rx(0.549)-Rz(0.878)-Rx(0.913)-X-C-Probability-- T : | 0 | 1 | 2 |3|4|Result Types|
Quantum circuit Born machine.
Consists of
n_layers, where each layer is a rotation layer (rx, rz, rx) followed by an entangling layer of cnot gates.- Parameters:
device (Device) – Amazon Braket device to use
n_qubits (int) – Number of qubits
n_layers (int) – Number of layers
target_probabilities (ndarray) – Target probabilities.
shots (int) – Number of shots. Defaults to 10_000.
- get_probabilities(values: ndarray) ndarray[source]
Run and get probability results.
- Parameters:
values (np.ndarray) – Values for free parameters.
- Returns:
np.ndarray – Probabilities vector.
- bound_circuit(values: ndarray) ndarray[source]
Get probabilities from the current parameters.
- Parameters:
values (ndarray) – Parameters for QCBM.
- Returns:
ndarray – Probabilities.
- gradient(params: ndarray) ndarray[source]
Gradient for QCBM via:
Liu, Jin-Guo, and Lei Wang. “Differentiable Learning of Quantum Circuit Born Machine.” Physical Review A 98, no. 6 (December 19, 2018): 062324. https://doi.org/10.1103/PhysRevA.98.062324.
- Parameters:
params (ndarray) – Parameters for the rotation gates in the QCBM
- Returns:
ndarray – Gradient vector
- braket.experimental.algorithms.quantum_circuit_born_machine.qcbm.mmd_loss(px: ndarray, py: ndarray, sigma_list: List[float] = [0.1, 1]) float[source]
Maximum Mean Discrepancy loss (MMD).
MMD determines if two distributions are equal by looking at the difference between their means in feature space.
\[MMD(x, y) = | \sum_{j=1}^N \phi(y_j) - \sum_{i=1}^N \phi(x_i) |_2^2\]With a RBF kernel, we apply the kernel trick to expand MMD to
\[MMD(x, y) = \sum_{j=1}^N \sum_{j'=1}^N k(y_j, y_{j'}) + \sum_{i=1}^N \sum_{i'=1}^N k(x_i, x_{i'}) - 2 \sum_{j=1}^N \sum_{i=1}^N k(y_j, x_i)\]For the RBF kernel, MMD is zero if and only if the distributions are identical.
- Parameters:
px (ndarray) – Probability distribution
py (ndarray) – Target probability distribution
sigma_list (List[float]) – Standard deviations of distribution. Defaults to [0.1, 1].
- Returns:
float – Value of the MMD loss
- braket.experimental.algorithms.quantum_circuit_born_machine.qcbm.qcbm_layers(neighbors: List[Tuple[int, int]], parameters: List[List[List[FreeParameter]]]) Circuit[source]
QCBM layers.
- Parameters:
neighbors (List[Tuple[int,int]]) – List of qubit pairs.
parameters (List[List[List[FreeParameter]]]) – List of FreeParameters. First index is n_layers, second is n_qubits, and third is [0,1,2]
- Returns:
Circuit – QCBM circuit.