量子机器学习
概述
unitarylab_algorithms.quantum_machine_learning 包提供适用于近期量子设备(NISQ 时代)的变分和生成量子算法。这些算法使用经典-量子混合优化循环来训练参数化量子线路。
| 算法 | 类 | 任务 |
|---|---|---|
| VQE | VQEAlgorithm | 基态能量估计 |
| VQC | VQCAlgorithm | 量子分类器(鸢尾花数据集) |
| QAOA | QAOAAlgorithm | 组合优化(最大割问题) |
| QCBM | QCBMAlgorithm | 概率分布生成建模 |
| CVQNN | CVQNNAlgorithm | 连续变量量子神经网络 |
变分量子特征求解器(VQE)
背景
VQE 通过在参数化拟设态上最小化期望值 来估计厄米哈密顿量 的基态能量。该算法在量子化学和材料模拟中被广泛使用。
算法交替执行:
- 在量子线路上计算
- 使用经典优化器更新参数
导入
from unitarylab_algorithms.quantum_machine_learning.vqe.algorithm import VQEAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
n | int | 2 | 量子比特数 |
layers | int | 2 | 拟设中的变分层数 |
max_iter | int | 150 | 最大优化迭代次数 |
seed | int | 7 | 可复现性随机种子 |
hamiltonian | np.ndarray | None | None | 自定义厄米哈密顿量(为 None 时使用随机矩阵) |
normalize | bool | True | 是否对哈密顿量进行归一化 |
示例
import numpy as np
from unitarylab_algorithms.quantum_machine_learning.vqe.algorithm import VQEAlgorithm
# 使用自定义哈密顿量
H = np.array([[1, 0.5], [0.5, -1]])
algo = VQEAlgorithm()
result = algo.run(n=2, layers=2, max_iter=150, hamiltonian=H)
print(result['status'])快速演示
from unitarylab_algorithms.quantum_machine_learning.vqe.algorithm import test
test(n=2, layers=2, max_iter=150)变分量子分类器(VQC)
背景
VQC 通过特征映射将经典数据编码到量子态中,然后使用可训练拟设加测量进行分类。本实现将算法应用于鸢尾花数据集(4 个特征、3 个类别),使用 softmax 交叉熵损失进行训练。
导入
from unitarylab_algorithms.quantum_machine_learning.vqc.algorithm import VQCAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
layers | int | 3 | 变分层数 |
epochs | int | 20 | 训练轮数 |
lr | float | 0.05 | Adam 优化器学习率 |
batch_size | int | 16 | 小批量大小 |
示例
from unitarylab_algorithms.quantum_machine_learning.vqc.algorithm import VQCAlgorithm
algo = VQCAlgorithm()
result = algo.run(layers=3, epochs=20, lr=0.05, batch_size=16)
print(result['status'])快速演示
from unitarylab_algorithms.quantum_machine_learning.vqc.algorithm import test
test(layers=3, epochs=20, lr=0.05, batch_size=16)量子近似优化算法(QAOA)
背景
QAOA 是一种用于组合优化问题的变分算法。它交替应用编码目标函数的问题哈密顿量 和混合哈密顿量 ,共执行 layers 轮。本实现求解由边列表定义的图上的最大割问题。
最大割问题要求将图的顶点分为两个集合,使得两集合之间的边数最多。
导入
from unitarylab_algorithms.quantum_machine_learning.qaoa.algorithm import QAOAAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
edges | List[List[int]] | None | None | 定义图的边列表(如 [[0,1],[1,2]]) |
n | int | 6 | 量子比特数(图的顶点数) |
layers | int | 4 | QAOA 演化层数 |
max_iter | int | 100 | 最大优化迭代次数 |
示例
from unitarylab_algorithms.quantum_machine_learning.qaoa.algorithm import QAOAAlgorithm
edges = [[0, 1], [1, 2], [2, 3], [3, 0], [0, 4], [1, 5]]
algo = QAOAAlgorithm()
result = algo.run(edges=edges, n=6, layers=4, max_iter=100)
print(result['status'])快速演示
from unitarylab_algorithms.quantum_machine_learning.qaoa.algorithm import test
test()量子线路玻恩机(QCBM)
背景
QCBM 将参数化量子线路用作生成模型:通过最小化模型样本与目标样本之间的最大均值差异(MMD)损失,训练 Born 概率分布 来匹配目标分布。
导入
from unitarylab_algorithms.quantum_machine_learning.qcbm.algorithm import QCBMAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
n | int | 4 | 量子比特数 |
layers | int | 4 | 变分线路深度 |
epochs | int | 40 | 训练迭代次数 |
lr | float | 0.1 | Adam 优化器学习率 |
示例
from unitarylab_algorithms.quantum_machine_learning.qcbm.algorithm import QCBMAlgorithm
algo = QCBMAlgorithm()
result = algo.run(n=4, layers=4, epochs=40, lr=0.1)
print(result['status'])快速演示
from unitarylab_algorithms.quantum_machine_learning.qcbm.algorithm import test
test(n=4, layers=4, epochs=40, lr=0.1)连续变量量子神经网络(CVQNN)
背景
CVQNN 在**连续变量(CV)**量子计算范式下工作,使用光学模式而非量子比特。计算在截断 Fock 空间(维数为 cutoff)中进行。模型使用位移、压缩、分束器和旋转等变分门,并被训练用于对二维数据集进行分类。
导入
from unitarylab_algorithms.quantum_machine_learning.cvqnn.algorithm import CVQNNAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
x_train | np.ndarray | — | 输入特征数组 |
y_train | np.ndarray | — | 标签数组 |
n_layers | int | 2 | 变分 CV 层数 |
cutoff | int | 6 | Fock 空间截断维数 |
epochs | int | 40 | 训练轮数 |
lr | float | 0.05 | 学习率 |
示例
import numpy as np
from unitarylab_algorithms.quantum_machine_learning.cvqnn.algorithm import CVQNNAlgorithm
# 生成简单的二维数据集
x_train = np.random.randn(50, 2)
y_train = (x_train[:, 0] + x_train[:, 1] > 0).astype(int)
algo = CVQNNAlgorithm()
result = algo.run(x_train=x_train, y_train=y_train, n_layers=2, cutoff=6, epochs=30)
print(result['status'])快速演示
from unitarylab_algorithms.quantum_machine_learning.cvqnn.algorithm import test
test(n_layers=2, cutoff=6, epochs=30, lr=0.05)注意事项
- 增大
cutoff可以提升近似精度,但内存占用以指数级增长。标准硬件上不建议超过8。 - CV 框架对光学量子系统建模,与基于量子比特的线路在本质上不同。
最后更新于