量子神经网络原创概念封面

量子神经网络

从旋转门到一个可训练的量子模型

Quantum Notes · 量子计算入门学习 02

#把量子电路看成可训练的函数

在上一篇里,量子门负责演化,测量负责产生经典结果。顺着这个思路,就可以理解笔记中那条 QNN 流程:把输入编码成量子态,用带参数的门改变它,再把测量统计量作为模型输出。

这里讨论的是变分量子电路形式的量子神经网络。QNN 是一组模型的统称,不只有一种固定结构;这篇先围绕一个能完整算清楚、也能在网页中训练的例子展开。

#编码、演化、读出与经典优化器

把经典输入记作 x,把可训练参数记作 θ\boldsymbol\theta。一个常见流程是:

∣ψ(x,θ)⟩=Utrain(θ)Uenc(x)∣0⟩⊗n.|\psi(x,\boldsymbol\theta)\rangle=U_{\mathrm{train}}(\boldsymbol\theta)U_{\mathrm{enc}}(x)|0\rangle^{\otimes n}.

选定可观测量 O 后,模型可输出期望值:

fθ(x)=⟨ψ(x,θ)∣O∣ψ(x,θ)⟩.f_{\boldsymbol\theta}(x)=\langle\psi(x,\boldsymbol\theta)|O|\psi(x,\boldsymbol\theta)\rangle.

也可以直接把某个测量结果的概率作为输出。随后在经典计算机上计算损失、更新参数,再重新运行量子电路。Cerezo 等人的变分量子算法综述对这种量子—经典优化闭环有系统介绍。

重画笔记中的三比特电路:Ry 输入编码、Ry 可训练角度、两组 CNOT 和测量,以及经典参数更新回路
图 1 · 根据原笔记重画的三 qubit 电路。CNOT 提供可能产生纠缠的联合操作;是否纠缠还取决于输入。虚线表示经典优化器更新 θ,不是额外的量子门。

输入怎样进入电路?

编码一个例子要注意的成本
基态编码二进制 101 → ∣101⟩|101\rangle按位表示离散输入。
角度编码Ry(x)∣0⟩R_y(x)|0\rangle特征需缩放到合适角度,旋转具有周期性。
振幅编码x/∥x∥x/\|x\| → 态振幅qubit 数少,不代表一般态制备免费。

最容易直接理解的是角度编码:

Ry(x)=[cos⁡(x/2)−sin⁡(x/2)sin⁡(x/2)cos⁡(x/2)],Ry(x)∣0⟩=cos⁡x2∣0⟩+sin⁡x2∣1⟩.R_y(x)=\begin{bmatrix}\cos(x/2)&-\sin(x/2)\\\sin(x/2)&\cos(x/2)\end{bmatrix},\qquad R_y(x)|0\rangle=\cos\frac x2|0\rangle+\sin\frac x2|1\rangle.

若向量有 2n2^n 个分量,振幅编码可以用 n 个 qubit 来表示归一化后的方向,但任意输入的制备过程仍可能需要大量操作,而且向量的原始模长需要另行处理。表示空间的维度不能直接等同于端到端效率。

#最小 QNN:一条正弦曲线也能训练

先暂时去掉多 qubit 和纠缠,只保留两次绕 Y 轴的旋转:

∣0⟩→Ry(x)→Ry(θ)→Z measurement{0,1}.|0\rangle\xrightarrow{R_y(x)}\xrightarrow{R_y(\theta)}\xrightarrow{Z\ \mathrm{measurement}}\{0,1\}.

同轴旋转可以合并,因此:

∣ψout⟩=Ry(θ)Ry(x)∣0⟩=Ry(x+θ)∣0⟩.|\psi_{\mathrm{out}}\rangle=R_y(\theta)R_y(x)|0\rangle=R_y(x+\theta)|0\rangle.

把测到 1 的概率作为模型输出:

fθ(x)=P(1∣x,θ)=sin⁡2x+θ2=1−cos⁡(x+θ)2.f_\theta(x)=P(1\mid x,\theta)=\sin^2\frac{x+\theta}{2}=\frac{1-\cos(x+\theta)}2.

如果选择期望值读出,则 ⟨Z⟩=cos⁡(x+θ)\langle Z\rangle=\cos(x+\theta),两种输出之间有 fθ=(1−⟨Z⟩)/2f_\theta=(1-\langle Z\rangle)/2 的关系。它们都来自同一条电路。

从预测到损失,再到参数更新

对 m 个训练样本,可以定义均方误差:

L(θ)=1m∑j=1m(fθ(xj)−yj)2,θ←θ−η ∂θL.\mathcal L(\theta)=\frac1m\sum_{j=1}^{m}\bigl(f_\theta(x_j)-y_j\bigr)^2,\qquad\theta\leftarrow\theta-\eta\,\partial_\theta\mathcal L.

下面准备 9 个等间距输入,xj=−π+jπ/4x_j=-\pi+j\pi/4(j=0,…,8j=0,\ldots,8),并用 yj=sin⁡2((xj+1.1)/2)y_j=\sin^2((x_j+1.1)/2) 生成软目标值。目标特意选在这个模型能表达的函数族里,用来观察训练机制;这不是一个真实数据集上的性能实验。

EXPERIMENT 04

训练一个只有 θ 的量子模型

蓝线是模型输出,橙色点是训练目标。拖动 θ 会平移整条曲线;拖动 x 只移动蓝色读数点。

单 qubit QNN 的预测曲线与训练点在九个合成样本上最小化预测概率的均方误差。10.50−π0πxP(1)
参数 θ−0.800
训练集 MSE0.29571
训练步数0
当前输入的预测 P(1)0.2%

当前损失梯度 ∂L/∂θ = −0.20060。使用精确期望值与参数位移梯度;这里没有加入有限 shots 的采样噪声。

初始 θ = −0.8,学习率 η = 0.8。

可以先手动拖动 θ,观察曲线怎样整体平移;再重置,点击“训练 50 步”。优化器根据当前损失梯度更新 θ,而不是把答案参数直接写入模型。输入 x 的滑块只用于观察一个位置的预测,不会改变训练集。

#参数位移:用两次电路求导

这个例子可以直接微分:

∂fθ(x)∂θ=12sin⁡(x+θ).\frac{\partial f_\theta(x)}{\partial\theta}=\frac12\sin(x+\theta).

也可以把参数向两个方向分别平移 π/2\pi/2,重新计算电路输出:

∂fθ(x)∂θ=fθ+π/2(x)−fθ−π/2(x)2.\frac{\partial f_\theta(x)}{\partial\theta}=\frac{f_{\theta+\pi/2}(x)-f_{\theta-\pi/2}(x)}2.

这是参数位移规则(parameter-shift)。对一个参数只出现于一个 e−iθP/2e^{-i\theta P/2} 形式的 Pauli 旋转门、其余门固定时,这个两项规则精确成立。它不是用一个很小的步长近似导数。更一般的生成元、共享参数或重复出现的参数,需要相应推广或按出现位置求导再相加。可参阅 PennyLane 的量子梯度教程。

要特别区分电路输出的导数与损失的导数。对这里的平方损失,仍需要链式法则:

∂θL=2m∑j(fθ(xj)−yj) ∂θfθ(xj).\partial_\theta\mathcal L=\frac2m\sum_j\bigl(f_\theta(x_j)-y_j\bigr)\,\partial_\theta f_\theta(x_j).

不能直接把平方损失代入同一个两项位移式,就当作损失梯度。网页演示正是先计算输出的参数位移导数,再通过上式更新参数。

理想期望值与有限 shots

网页模拟可以直接计算振幅,从而得到精确概率。真实采样通常需要 S 次独立运行,用 p^=n1/S\widehat p=n_1/S 估计概率:

Var⁡(p^)=p(1−p)S≤14S.\operatorname{Var}(\widehat p)=\frac{p(1-p)}S\leq\frac1{4S}.

因此,标准误差通常按 1/S1/\sqrt S 缩小。参数位移需要估计两个不同电路的输出,采样噪声也会进入梯度。这些执行次数是训练成本的一部分。

#门都是线性的,模型为什么还能非线性?

这里需要分清楚“对什么变量线性”。固定门参数时,所有酉门对输入量子态向量都是线性的。多层门仍可合并成:

Utotal=UL⋯U2U1.U_{\mathrm{total}}=U_L\cdots U_2U_1.

但模型从经典输入 x 到经典预测的映射,不必是线性的。角度编码把 x 放进三角函数;测量概率又是振幅模长平方。我们的例子就是 fθ(x)=sin⁡2((x+θ)/2)f_\theta(x)=\sin^2((x+\theta)/2)。

“测量是非线性的”还需要限定描述方式:Born 概率对态向量的振幅是二次的,但对密度矩阵 ρ\rho 是线性的,P(i)=Tr⁡(ρΠi)P(i)=\operatorname{Tr}(\rho\Pi_i)。不能据此把测量直接当作经典网络里的 ReLU。

这也解释了为什么不能把“堆更多量子门”直接类比为“更深的经典神经网络”。本例里连续的两个同轴旋转就可以合并;更复杂模型的函数族取决于编码、旋转轴、参数共享、联合门、重复编码与读出方式。

实践中还要考虑可训练性。McClean 等人关于 barren plateaus 的工作表明,在满足相应随机电路条件的情形下,梯度会随系统规模变得极小。这不意味着每条 QNN 都无法训练,但提醒我们不能仅凭参数量或 qubit 数判断模型是否有用。

#从教学模型走向实际问题

对一个 QNN,我现在更愿意依次问:输入怎么编码?可训练门能表达什么函数?测量什么统计量?怎样估计梯度?为了达到给定精度,需要多少次电路执行?最后再把总成本与合适的经典模型比较。

多 qubit、纠缠与重复编码可能改变模型的表达能力,但不会自动构成量子优势。下一篇换一个不依赖训练的例子,看看如何主动设计相位与干涉:Grover 搜索:标记相位,放大振幅。

  1. Cerezo et al. · Variational Quantum Algorithms,Nature Reviews Physics, 2021。
  2. Josh Izaac / PennyLane · Quantum gradients with backpropagation:参数位移与模拟器反向传播。
  3. McClean et al. · Barren plateaus in quantum neural network training landscapes,Nature Communications, 2018。
0%