1. 课程导入与学习地图
量子机器学习(Quantum Machine Learning,QML)是一个交叉领域,它研究如何利用量子计算的信息处理特性来支撑机器学习任务,也研究如何用机器学习方法去分析、优化量子系统。要真正理解它,需要先厘清一个常见误解:QML 并不等于"把经典神经网络搬到量子计算机上跑"。它的核心价值在于两类资源的重新分配——数据表示与计算过程。经典机器学习把数据编码为浮点向量,在比特上做矩阵运算;QML 则可能把数据编码为量子态(振幅编码、角度编码、基编码等),在希尔伯特空间中通过酉变换与测量完成推断。
因此,本课程的第一条主线是"表示—线路—测量"。以最典型的变分量子分类器为例:输入样本 x 先经过特征映射线路 U(x) 变成量子态 |φ(x)⟩,再经过含可训练参数 θ 的变分线路 W(θ),最后对指定可观测量做测量得到期望值 ⟨Z⟩,把它映射为分类分数。训练时用经典优化器调整 θ,使损失函数下降。这个"量子前向 + 经典反向"的混合结构,是当前 NISQ(含噪中等规模量子)时代最现实的技术形态,也是本课程后续大量案例的骨架。
上图把课程的两条线索并置:左侧是自底向上的技术全景,右侧是一次训练迭代的数据流。请注意右侧那条橙色虚线——参数 θ 从经典优化器回传到量子线路,这正是"混合"二字的落点。理解这条回路,比记住任何单个算法名称都重要。
技术全景:四个层次与三类方法
从全景看,QML 建立在量子计算基础之上,向下依赖量子比特、叠加、纠缠与测量这些原语,向上分化出三类主流方法。第一类是量子核方法:用特征映射线路把样本送入量子态,以量子态之间的保真度或内积作为核函数 K(x, x'),再交给经典支持向量机完成分类。它的优点是训练阶段完全经典,量子线路只负责"算核",对当前硬件较友好。第二类是变分量子模型:即前文所述的参数化线路,通过经典优化器训练,代表工作是变分量子分类器与量子近似优化算法(QAOA)。第三类是量子生成模型:如量子电路 Born 机,用测量概率分布建模数据分布。
与之相对,还有一类"用经典机器学习研究量子系统"的方向,例如用神经网络拟合量子态或预测量子门误差。它严格说属于"量子 + 机器学习"的另一侧,本课程会在选型章节中把它与前三类放在同一张决策表里比较,避免学习者把两条路线混为一谈。
课程目标:三种能力,一个判断力
学完本课程,你应当具备三种可检验的能力。其一是读图能力:看到一段量子线路或一个 QML 论文插图,能说出数据在哪里编码、参数在哪里、测量什么、梯度怎么来。其二是动手能力:能用 PennyLane 或 Qiskit 搭出一个可运行的小型变分分类器,在含噪模拟器上完成训练并读懂损失曲线。其三是选型能力:面对一个具体业务问题,能判断它到底该用经典方法、量子核方法还是变分模型,并说清理由与风险。
第三种能力最容易被忽视,却最影响实际价值。举个具体例子:假设你要做一个 8 维特征、样本量 500 的二分类任务。经典逻辑回归可能已经达到 92% 准确率;此时若强行上马 8 量子比特的变分分类器,在含噪模拟器上训练 100 轮后准确率可能只有 85%,且单轮耗时是经典方案的数十倍。这个对比不是要否定 QML,而是提醒你:选型的第一问永远是"经典基线是什么"。课程后续会给出可复用的基线对照表与判断阈值。
学习路径与节奏建议
30 章按四个阶段推进。第一阶段(第 1–8 章)打基础:量子比特与门、线路与测量、特征映射的几种编码方式,以及为什么编码方式会显著影响模型表达能力。第二阶段(第 9–18 章)进入核心算法:量子核方法、变分分类器、QAOA、量子生成模型,每类都配一个可运行的最小示例。第三阶段(第 19–25 章)转向工程:用 PennyLane 构建线路、用参数移位规则求梯度、在噪声模型下评估性能、处理 barren plateau(贫瘠高原)这类训练难题。第四阶段(第 26–30 章)做选型与落地:建立决策表、估算资源、设计对照实验、撰写技术方案。
一个可立即执行的热身任务
在进入第 2 章之前,建议先完成一个 20 行以内的小任务,建立对"量子前向 + 经典反向"的肌肉记忆。用 PennyLane 搭一个单量子比特线路:对输入 x 施加 RX(x) 作为特征映射,再施加 RY(θ) 作为可训练层,测量 ⟨Z⟩。损失函数取 (⟨Z⟩ − y)²,用梯度下降更新 θ。示例参数可设为 x = 0.7、y = 1、初始 θ = 0.1、学习率 0.1,迭代 30 次。你会观察到 ⟨Z⟩ 从约 0.76 逐步向 1 靠近,损失单调下降——这就是最小可用的 QML 训练闭环。注意这些数值是教学示例设定,实际运行结果会因随机初始化与模拟器版本略有差异,判断标准应看趋势而非单点数值。
import pennylane as qml
from pennylane import numpy as np
dev = qml.device("default.qubit", wires=1)
@qml.qnode(dev)
def circuit(x, theta):
qml.RX(x, wires=0) # 特征映射
qml.RY(theta, wires=0) # 可训练层
return qml.expval(qml.PauliZ(0))
x, y, theta = 0.7, 1.0, np.array(0.1, requires_grad=True)
lr = 0.1
for step in range(30):
loss = (circuit(x, theta) - y) ** 2
theta = theta - lr * qml.grad(lambda t: (circuit(x, t) - y) ** 2)(theta)
if step % 10 == 0:
print(step, float(loss), float(theta))
跑通这段代码后,你已经接触了本课程几乎所有后续内容的种子:编码、参数化线路、测量、损失、梯度、优化。接下来的章节,本质上是在不同维度上把这颗种子放大——更多的量子比特、更复杂的编码、更难的优化地形、更真实的噪声。带着"这条回路为什么能工作、什么时候会失效"的问题往下读,学习效率会明显不同。