paddle_quantum.fisher

Fisher 信息的功能实现。

class QuantumFisher(cir)

量子费舍信息及相关量的计算器。

参数:

cir (Circuit) – 需要计算量子费舍信息的参数化量子电路。

备注

该类利用了二阶参数平移规则计算量子费舍信息矩阵,因此不能直接适用于单比特旋转门的参数间有依赖关系的情况,例如受控旋转门等。

get_qfisher_matrix()
返回:

量子费舍信息矩阵

返回类型:

np.ndarray

import paddle
from paddle_quantum.ansatz import Circuit
from paddle_quantum.fisher import QuantumFisher

cir = Circuit(1)
zero = paddle.zeros([1], dtype="float64")
cir.ry(param=zero)
cir.rz(param=zero)

qf = QuantumFisher(cir)
qfim = qf.get_qfisher_matrix()
print(f'The QFIM at {cir.param.tolist()} is \n {qfim}.')
The QFIM at [0.0, 0.0] is
[[1. 0.]
[0. 0.]].
get_qfisher_norm(direction, step_size=0.01)
参数:
  • direction (np.ndarray) – 要计算量子费舍信息投影的方向。

  • step_size (float) – 有限差分的步长,默认为 0.01

返回:

沿给定方向的量子费舍信息的投影

返回类型:

float

import paddle
from paddle_quantum.ansatz import Circuit
from paddle_quantum.fisher import QuantumFisher

cir = Circuit(2)
zero = paddle.zeros([1], dtype="float64")
cir.ry(0, param=zero)
cir.ry(1, param=zero)
cir.cnot(qubits_idx=[0, 1])
cir.ry(0, param=zero)
cir.ry(1, param=zero)

qf = QuantumFisher(cir)
v = [1,1,1,1]
qfi_norm = qf.get_qfisher_norm(direction=v)
print(f'The QFI norm along {v} at {cir.param.tolist()} is {qfi_norm:.7f}')
The QFI norm along [1, 1, 1, 1] at [0.0, 0.0, 0.0, 0.0] is 6.0031546
get_eff_qdim(num_param_samples=4, tol=None)
参数:
  • num_param_samples (int) – 用来估计有效量子维数时所用的参数样本量,默认为 4。

  • tol (float) – 奇异值的最小容差,低于此容差的奇异值认为是 0, 默认为 None, 其含义同 numpy.linalg.matrix_rank()

返回:

给定量子电路对应的有效量子维数。

返回类型:

int

import paddle
from paddle_quantum.ansatz import Circuit
from paddle_quantum.fisher import QuantumFisher

cir = Circuit(1)
cir.rz(theta=paddle.to_tensor(0., dtype="float64", stop_gradient=False), which_qubit=0)
cir.ry(theta=paddle.to_tensor(0., dtype="float64", stop_gradient=False), which_qubit=0)

qf = QuantumFisher(cir)
print(cir)
print(f'The number of parameters of -Rz-Ry- is {len(cir.get_param().tolist())}')
print(f'The effective quantum dimension -Rz-Ry- is {qf.get_eff_qdim()}')
--Rz(0.000)----Ry(0.000)--

The number of parameters of -Rz-Ry- is 2
The effective quantum dimension -Rz-Ry- is 1
get_qfisher_rank(tol)
参数:

tol (float) – 奇异值的最小容差,低于此容差的奇异值认为是 0, 默认为 None, 其含义同 numpy.linalg.matrix_rank()

返回:

量子费舍信息矩阵的秩

返回类型:

int

class ClassicalFisher(model, num_thetas, num_inputs, model_type='quantum', **kwargs)
参数:
  • model (paddle.nn.Layer) – 经典或量子神经网络模型的实例

  • num_thetas (int) – 参数集合的数量

  • num_inputs (int) – 输入的样本数量

  • model_type (str) – 模型是经典 classical 的还是量子 quantum 的,默认是量子的

  • **kwargs (Union[List[int], int, str]) –

    神经网络参数, 包含如下选项:

    • size (list): 经典神经网络各层神经元的数量

    • num_qubits (int): 量子神经网络量子比特的数量

    • depth (int): 量子神经网络的深度

    • encoding (str): 量子神经网络中经典数据的编码方式,目前支持 IQPre-uploading

get_gradient(x)

计算输出层关于变分参数的梯度

参数:

x (Union[np.ndarray, paddle.Tensor]) – 输入样本

返回:

输出层关于变分参数的梯度,数组形状为(输入样本数量, 输出层维数, 变分参数数量)

返回类型:

np.ndarray

get_cfisher(gradients)

利用雅可比矩阵计算经典费舍信息矩阵

参数:

gradients (np.ndarray) – 输出层关于变分参数的梯度, 数组形状为(输入样本数量, 输出层维数, 变分参数数量)

返回:

经典费舍信息矩阵,数组形状为(输入样本数量, 变分参数数量, 变分参数数量)

返回类型:

np.ndarray

get_normalized_cfisher()

计算归一化的经典费舍信息矩阵

返回:

包含如下元素:

  • 归一化的经典费舍信息矩阵,数组形状为(输入样本数量, 变分参数数量, 变分参数数量)

  • 其迹

返回类型:

Tuple[np.ndarray, float]

get_eff_dim(normalized_cfisher, list_num_samples, gamma=1)

计算经典的有效维数

参数:
  • normalized_cfisher (np.ndarray) – 归一化的经典费舍信息矩阵

  • list_num_samples (List[int]) – 不同样本量构成的列表

  • gamma (int) – 有效维数定义中包含的一个人为可调参数,默认为 1.

返回:

对于不同样本量的有效维数构成的列表

返回类型:

List[int]