3. 量子线路与编程入门

量子机器学习的所有算法,最终都要落到一条可执行、可测量、可重复的量子线路上。理解量子线路模型,是后续阅读变分量子线路(VQC)、量子核方法、量子神经网络等结构的前提。本节从线路模型的基本约定出发,讲清常用量子门的作用与矩阵形式,再通过一个可手算的简单线路,把“画图—模拟—读结果”这条链路走通。

一、量子线路模型的基本约定

量子线路模型把计算过程描述为:若干量子比特从初态出发,依次经过一系列量子门(酉变换),最后在指定比特上进行测量得到经典结果。它有三条必须牢记的约定:

  • 时间从左向右:横线代表量子比特的“导线”,从左到右表示时间推进,最左侧是初态,最右侧是测量。
  • 默认初态为 |0⟩:每个量子比特初始化为 |0⟩,多比特系统的初态是张量积 |0⟩⊗|0⟩⊗…。
  • 门是酉变换,测量不可逆:除测量外,所有门都可用酉矩阵 U 表示,满足 U†U = I;测量会把量子态坍缩为经典比特串,因此测量通常放在线路末端。

需要特别说明参照约定:本课程统一采用计算基 |0⟩=(1,0)ᵀ、|1⟩=(0,1)ᵀ,比特序按 q₀q₁…qₙ₋₁ 从左到右书写,与常见教材的“大端序”一致。后文的矩阵、模拟结果与图示均遵循这一约定,切换时不再另行说明。

二、常用量子门及其作用

单比特门中,最基础的是三个泡利门与两个相位类门。X 门相当于经典非门,把 |0⟩ 与 |1⟩ 互换;Z 门给 |1⟩ 加一个 −1 相位,不改变测量概率;H 门把 |0⟩ 变成 (|0⟩+|1⟩)/√2,是制造叠加态的核心工具。绕 Z 轴旋转的 Rz(θ) 与绕 X 轴旋转的 Rx(θ) 则提供了连续可调参数,这正是变分量子线路中“可训练参数”的来源。

两比特门中,CNOT(受控非)最关键:控制比特为 |1⟩ 时翻转目标比特,否则不变。它与 H 门配合可以制备纠缠态。下表给出常用门的矩阵与典型用途,便于对照查阅:

门矩阵(计算基)典型用途
X[[0,1],[1,0]]比特翻转、构造 |1⟩
Z[[1,0],[0,−1]]相位翻转
H(1/√2)[[1,1],[1,−1]]制备叠加态
Rz(θ)diag(e−iθ/2, eiθ/2)可训练相位参数
Rx(θ)cos(θ/2)I − i sin(θ/2)X可训练旋转参数
CNOT4×4 受控翻转矩阵制备纠缠、条件操作

三、线路图绘制规范

线路图是量子编程的“通用语言”。绘制时遵循几条规范:每条横线对应一个量子比特并标注 q₀、q₁;单比特门画成带门名的方框;CNOT 用“控制点 ● + 目标 ⊕ + 竖线”表示;测量用带指针的仪表符号,双横线表示输出的经典比特。下图给出本节示例线路的结构,它同时展示了叠加、纠缠与参数化旋转三类典型操作:

示例线路:H → CNOT → Rz(θ) → 测量 q₀ q₁ |0⟩ |0⟩ H CNOT Rz(θ) 可训练参数 测量 c₀ ① 叠加 ② 纠缠 ③ 参数化相位 ④ 采样

四、手算一条简单线路

以图中线路为例,取 θ = π/2,逐步推导状态演化。初态为 |00⟩。

第一步,H 作用于 q₀:|00⟩ → (|0⟩+|1⟩)/√2 ⊗ |0⟩ = (|00⟩+|10⟩)/√2。

第二步,CNOT 以 q₀ 为控制、q₁ 为目标:|10⟩ 中的控制位为 1,目标位翻转,得到 (|00⟩+|11⟩)/√2,即贝尔态。此时两比特完全纠缠,单独测量任一比特都会以 1/2 概率得到 0 或 1,且两者结果必然相同。

第三步,Rz(π/2) 作用于 q₀:Rz(π/2) = diag(e−iπ/4, eiπ/4),它只改变 |1⟩ 分量的相位,状态变为 (e−iπ/4|00⟩ + eiπ/4|11⟩)/√2。注意:相位不改变测量概率,因此测量结果仍是 |00⟩ 与 |11⟩ 各占 50%。这说明单看测量统计无法区分 θ 的取值,要提取相位信息必须引入干涉(例如在测量前再加一个 H 门),这也是量子算法设计中的常见技巧。

五、用代码模拟并验证

下面用 Qiskit 实现上述线路,并运行 1024 次采样。示例参数与结果属于教学演示,实际运行会因随机种子略有波动。

from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

qc = QuantumCircuit(2, 1)
qc.h(0)              # 叠加
qc.cx(0, 1)          # 纠缠
qc.rz(3.14159/2, 0)  # 参数化相位
qc.measure(0, 0)     # 只测 q0

sim = AerSimulator()
result = sim.run(transpile(qc, sim), shots=1024).result()
print(result.get_counts())   # 预期形如 {'0': 512, '1': 512}

运行后应观察到 '0' 与 '1' 的计数接近各半。若想验证相位确实存在,可把测量改为先加 qc.h(0) 再测量,此时 Rz 引入的相对相位会转化为可观测的概率差异,计数将随 θ 变化——这正是相位估计与变分线路中“测量基旋转”的雏形。

调试建议:先用 qc.draw('text') 检查线路结构是否符合预期,再用 Statevector.from_instruction(qc) 查看测量前的态矢量,最后才看采样计数。态矢量能直接暴露相位与幅度错误,比只看计数高效得多。
常见误区:把 CNOT 的控制位与目标位写反。控制位决定“是否翻转”,目标位是“被翻转者”,两者互换后得到的是不同的纠缠结构,在含多个 CNOT 的线路中会导致完全不同的结果。

掌握到这一步,你已经具备阅读和搭建基础量子线路的能力:能按约定画出线路、能写出关键门的矩阵、能对短线路手算态演化、能用模拟器验证测量统计。后续的变分量子线路,本质上就是把 Rz、Rx 这类参数门按层堆叠,再用经典优化器调整 θ,因此本节的手算与验证方法会反复用到。