mindquantum.algorithm.nisq.QuantumNeuron
- class mindquantum.algorithm.nisq.QuantumNeuron(weight, gamma=1, bias=0, input_qubits=None, output_qubit=None, ancilla_qubit=None)[源代码]
基于RUS(Repeat-Until-Success)策略的量子神经元实现,通过量子电路模拟经典神经元行为和激活函数。
更多信息请参考 Quantum neuron: an elementary building block for machine learning on quantum computers。
- 工作原理:
使用RUS电路,重复执行量子电路直到获得目标测量结果
测量结果为'0'表示成功应用非线性函数旋转
测量结果为'1'触发恢复操作并重复直到成功
说明
对于处于叠加态的输入量子比特,RUS电路中最终输出态与测量失败次数(测量结果为'1')之间存在函数关系, 详细的数学推导可参见论文 arXiv:1711.11240 的附录部分。
原始论文中的恢复旋转角度为RY(-π/2),但基于实验验证,本实现使用RY(π/2)。建议用户在具体应用中仔细验证其行为。
- 参数:
weight (Union[List[float], np.ndarray]) - 权重列表或numpy数组。长度必须等于输入量子比特数,每个权重对应一个输入量子比特。
gamma (Union[int, float]) - 用于调整权重影响的缩放因子。默认值:
1
。bias (Union[int, float]) - 偏置项。默认值:
0
。input_qubits (Optional[List[int]]) - 用作输入的量子比特索引列表。如果为None,将使用`[0, 1, …, len(weight)-1]`。默认值:
None
。output_qubit (Optional[int]) - 作为神经元输出的量子比特索引。如果为None,将设置为`ancilla_qubit + 1`。默认值:
None
。ancilla_qubit (Optional[int]) - 用于计算的辅助量子比特索引。如果为None,将设置为`len(input_qubits) + 1`。默认值:
None
。
样例:
>>> from mindquantum.simulator import Simulator >>> from mindquantum import Circuit, H,X >>> # Create 2-qubit input state >>> circ = Circuit() >>> circ += H.on(0) >>> circ += H.on(1) >>> sim = Simulator('mqvector', 4) >>> sim.apply_circuit(circ) >>> qn = QuantumNeuron(weight=[1, 1], input_qubits=[0, 1], output_qubit=3, ancilla_qubit=2) >>> # Repeat quantum neuron circuit until success >>> while True: >>> result = sim.apply_circuit(qn.circuit) >>> if next(iter(result.data))[0] == '1': >>> sim.apply_circuit(qn.recovery_circuit) >>> else: >>> print("Non-linear function rotation successfully applied to output qubit") >>> break
- property circuit
量子神经元的量子电路。
- 返回:
Circuit,量子神经元的量子电路。
- property recovery_circuit
测量结果为'1'时的恢复电路。
该电路在输出量子比特上应用π/2的Y轴旋转以从不成功的测量结果中恢复。
说明
原始论文中使用RY(-π/2)旋转,但基于实验验证,本实现使用RY(π/2)。用户应在其具体应用中验证此行为。
- 返回:
Circuit,用于恢复操作的量子电路。