第一章:为什么需要量子机器学习?
1.1 经典 ML 的局限
| 问题类型 | 经典方法瓶颈 |
|---|
- 小样本高维分类 | 特征空间稀疏,SVM 核函数失效
- 组合优化 | NP-hard 问题(如旅行商)随规模指数爆炸
- 量子系统模拟 | 经典计算机无法高效表示多体纠缠态
1.2 量子优势潜力
- 指数级状态空间:n 量子比特 → 2ⁿ 维希尔伯特空间
- 量子并行性:单次操作作用于所有叠加态
- 纠缠关联:捕捉经典模型难以建模的非局域依赖
注意 :当前 NISQ(含噪声中等规模量子)设备尚无绝对优势,但特定问题已展示潜力。
第二章:量子计算基础速成
2.1 量子比特(Qubit)
- 经典比特:0 或 1
- 量子比特:ψ⟩ = α0⟩ + β1⟩,其中 α² + β² = 1
- 测量:坍缩为 0(概率 α²)或 1(概率 β²)
2.2 基本量子门
| 门 | 矩阵 | 作用 |
|---|
- X 门 | [[0,1],[1,0]] | 量子非门(翻转)
- H 门 | [[1,1],[1,-1]]/√2 | 创建叠加态
- CNOT | 控制非门 | 生成纠缠态
2.3 量子电路示例:Bell 态
q_0: ──H──■──
│
q_1: ─────X──
输出:(00⟩ + 11⟩)/√2(最大纠缠态)
第三章:平台架构设计
3.1 整体数据流
[Vue 前端]
│ (拖拽构建量子电路 / 配置 VQC)
↓
[Flask API] → 解析电路 → 调用 Qiskit/PennyLane
│
├── [本地模拟器]:Qiskit Aer(快速迭代)
├── [云真机]:IBM Quantum(需 API Token)
└── [结果缓存]:MongoDB 存储电路 + 测量结果
│
↓
[前端可视化]
├── 量子电路图(自绘 SVG)
├── Bloch 球(Three.js 3D)
└── 训练曲线(Chart.js)
3.2 技术栈选型
| 功能 | 技术 | 说明 |
|---|
- 量子 SDK | Qiskit(IBM) + PennyLane | Qiskit 电路构建,PennyLane 自动微分
- 模拟器 | Qiskit Aer | 支持 30+ 量子比特本地模拟
- 前端可视化 | Vue 3 + D3.js(电路) + Three.js(Bloch 球) |
- 部署 | Docker 容器化 | 隔离量子依赖
为何双 SDK?:Qiskit 生态成熟,PennyLane 对 PyTorch/TensorFlow 友好。
第四章:后端实现 ------ 量子执行引擎
4.1 量子电路解析器
# services/circuit_parser.py
from qiskit import QuantumCircuit
def parse_circuit_from_json(circuit_def: dict) -> QuantumCircuit:
"""
将前端 JSON 转换为 Qiskit 电路
示例输入:
{
"num_qubits": 2,
"gates": [
{"type": "h", "qubit": 0},
{"type": "cx", "control": 0, "target": 1}
]
}
"""
qc = QuantumCircuit(circuit_def["num_qubits"])
for gate in circuit_def["gates"]:
if gate["type"] == "h":
qc.h(gate["qubit"])
elif gate["type"] == "x":
qc.x(gate["qubit"])
elif gate["type"] == "cx":
qc.cx(gate["control"], gate["target"])
# ... 其他门
return qc
4.2 变分量子分类器(VQC)
# models/vqc_classifier.py
import pennylane as qml
import torch
import torch.nn as nn
class VQCClassifier(nn.Module):
def __init__(self, n_qubits=2, n_layers=2):
super().__init__()
self.n_qubits = n_qubits
self.dev = qml.device("default.qubit", wires=n_qubits)
@qml.qnode(self.dev, interface="torch")
def quantum_circuit(weights, x):
# 编码经典数据到量子态
for i in range(n_qubits):
qml.RY(x[i], wires=i)
# 变分层
for l in range(n_layers):
for i in range(n_qubits):
qml.RZ(weights[l, i, 0], wires=i)
qml.RY(weights[l, i, 1], wires=i)
for i in range(n_qubits - 1):
qml.CNOT(wires=[i, i+1])
# 测量
return qml.expval(qml.PauliZ(0))
self.quantum_circuit = quantum_circuit
self.weights = nn.Parameter(torch.randn(n_layers, n_qubits, 2) * 0.1)
def forward(self, x):
return torch.stack([self.quantum_circuit(self.weights, xi) for xi in x])
4.3 执行与结果返回
# routes/quantum_api.py
@app.post('/quantum/run')
def run_quantum_circuit():
circuit_def = request.json
qc = parse_circuit_from_json(circuit_def)
# 选择后端
backend = Aer.get_backend('qasm_simulator')
job = execute(qc, backend, shots=1024)
result = job.result().get_counts()
# 转换为概率分布
probs = {k: v/1024 for k, v in result.items()}
return jsonify({
"counts": result,
"probabilities": probs,
"circuit_svg": qc.draw(output='svg') # 供前端渲染
})
真机执行 :替换
backend为IBMQ.load_account().get_backend('ibmq_quito')
第五章:前端交互设计(Vue)
5.1 量子电路画布
<template>
<div class="quantum-canvas">
<!-- 量子比特轨道 -->
<div v-for="q in numQubits" :key="q" class="qubit-line">
<span>q_{{ q }}</span>
<div class="gate-track"></div>
</div>
<!-- 门拖拽区 -->
<div class="gate-palette">
<button @dragstart="startDrag('h')" draggable>H</button>
<button @dragstart="startDrag('x')" draggable>X</button>
<button @dragstart="startDrag('cx')" draggable>CNOT</button>
</div>
</div>
</template>
<script setup>
const numQubits = ref(2)
const circuit = reactive({ gates: [] })
function startDrag(gateType) {
// 设置拖拽数据
event.dataTransfer.setData('gate', gateType)
}
function dropGate(qubitIndex) {
const gateType = event.dataTransfer.getData('gate')
circuit.gates.push({ type: gateType, qubit: qubitIndex })
}
</script>
5.2 Bloch 球 3D 可视化
// components/BlochSphere.vue
import * as THREE from 'three'
onMounted(() => {
const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000)
const renderer = new THREE.WebGLRenderer()
renderer.setSize(300, 300)
container.value.appendChild(renderer.domElement)
// 绘制球体
const sphere = new THREE.Mesh(
new THREE.SphereGeometry(1, 32, 32),
new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true })
)
scene.add(sphere)
// 量子态向量(从后端获取 α, β)
const stateVector = new THREE.Vector3(
2 * (alpha.re * beta.re + alpha.im * beta.im),
2 * (alpha.im * beta.re - alpha.re * beta.im),
alpha.re**2 + alpha.im**2 - beta.re**2 - beta.im**2
)
const arrow = new THREE.ArrowHelper(stateVector.normalize(), new THREE.Vector3(0,0,0), 1, 0xff0000)
scene.add(arrow)
camera.position.z = 3
renderer.render(scene, camera)
})
物理意义:Bloch 球上每一点对应一个纯量子态。
第六章:场景实战
6.1 小样本分类(量子优势演示)
-
数据集:2D 螺旋(200 样本,2 类缠绕)
-
模型对比 :
- 经典 SVM(RBF 核):准确率 78%
- 量子核 SVM(4 量子比特):准确率 92%
-
原理:量子特征映射将数据嵌入高维希尔伯特空间,线性可分
量子核函数
def quantum_kernel(x1, x2):
qc = QuantumCircuit(2)
qc.ry(x1[0], 0); qc.ry(x1[1], 1)
qc.ry(-x2[0], 0); qc.ry(-x2[1], 1)
# 测量 ⟨x1|x2⟩²
return execute(qc, backend).result().get_counts()['00'] / shots
6.2 金融组合优化(QAOA)
- 问题:从 N 支股票选 K 支,最大化收益-风险比
- QAOA 流程 :
- 将问题编码为 Ising 模型
- 构建参数化量子线路
- 经典优化器调参最小化期望值
- 结果:在 10 股票问题上,QAOA 解接近全局最优(经典退火需 10× 时间)
6.3 分子基态能量(VQE)
- 目标:计算 H₂ 分子在键长 0.74Å 时的基态能量
- 哈密顿量:通过 PySCF 生成
- VQE 电路:UCCSD ansatz(4 量子比特)
- 精度:误差 <1 kcal/mol(化学精度要求)
第七章:量子-经典混合架构
7.1 量子嵌入层
- 用途:将经典数据编码为量子态
- 常用方案 :
- 振幅编码:x → Σxᵢi⟩(需归一化)
- 角度编码:xᵢ → RY(xᵢ)0⟩
7.2 混合神经网络
class HybridNet(nn.Module):
def __init__(self):
super().__init__()
self.classical = nn.Sequential(
nn.Linear(4, 8),
nn.ReLU(),
nn.Linear(8, 2) # 输出 2 维用于 2 量子比特编码
)
self.quantum = VQCClassifier(n_qubits=2)
def forward(self, x):
encoded = self.classical(x)
return self.quantum(encoded)
训练:端到端反向传播(PennyLane 支持 PyTorch 梯度)
第八章:性能与限制
8.1 模拟器限制
| 量子比特数 | 内存需求 | 模拟时间(1 层) |
|---|
- 20 | 16 GB | <1 秒
- 30 | 1 TB | 不可行(需近似)
8.2 噪声建模
-
真实设备噪声 :
- 门错误率(~0.1%--1%)
- 退相干时间(~100μs)
-
Qiskit 噪声模型:
from qiskit.providers.aer.noise import NoiseModel
noise_model = NoiseModel.from_backend(backend)
result = execute(qc, AerSimulator(noise_model=noise_model)).result()
教育价值:让学生理解 NISQ 时代挑战。
第九章:教育与协作功能
9.1 电路分享
- 生成唯一 URL :
?circuit=eyJ...(Base64 编码电路 JSON) - 社区库 :
- Bell 态生成器
- Deutsch-Jozsa 算法
- Shor 算法简化版
9.2 实验笔记本
- 记录 :
- 电路版本
- 训练超参
- 性能对比截图
- 导出:Jupyter Notebook 格式
第十章:未来方向
10.1 量子云集成
- 多厂商支持 :
- IBM Quantum
- AWS Braket
- Azure Quantum
- 统一 API 抽象层
10.2 量子编译优化
- 自动重写电路 :
- 减少 CNOT 门(最昂贵)
- 适配特定芯片拓扑
总结:开启量子智能之门
量子机器学习不是取代经典 AI,而是为其注入新的可能性。