1. 量子机器学习优化:为什么“省子弹”是头等大事?

在量子计算这个行当里混久了,你一定会对“测量”这件事又爱又恨。爱的是,它是我们窥探量子世界、获取计算结果的唯一窗口;恨的是,每一次测量,都像是在烧钱——这里的“钱”,指的是宝贵的量子比特相干时间、昂贵的设备机时,以及最核心的资源:“测量次数”。在量子机器学习领域,这个问题被急剧放大了。想象一下,你要训练一个量子神经网络来处理一个包含成千上万个量子态的数据集,每次迭代都需要对损失函数及其梯度进行估计,而每一次估计都需要成百上千次重复测量来对抗量子噪声。这个资源消耗的规模,足以让任何试图在近期量子硬件上实现实用化QML的研究者望而却步。

这就是为什么“资源节约型优化器”会成为当前量子机器学习研究中的一个关键痛点。我们需要的,不仅仅是能收敛的优化器,更是能以最高效、最“抠门”的方式使用每一次测量的优化器。传统的优化策略,比如对数据集中的每个样本、哈密顿量展开中的每一项都进行固定次数的测量,在QML的背景下显得异常笨拙和奢侈。近期,一种名为Refoqus的优化器进入了我们的视野,它的核心思想直击要害: 同时对数据集和测量算符进行随机采样 。这听起来像是一个简单的统计学技巧,但实测下来,它带来的资源节省是颠覆性的——几个数量级的提升,足以让许多原本因资源限制而“躺”在论文里的算法,真正有机会在真实的量子芯片上跑起来。

接下来的内容,我将为你彻底拆解Refoqus的原理、实现细节以及它在量子主成分分析和量子自动编码器等核心任务上的实战表现。无论你是刚踏入量子计算领域的新手,还是正在为模型训练资源发愁的老兵,这篇文章都将为你提供一个清晰、可操作的“省弹”指南。

2. Refoqus核心设计:双管齐下的随机采样哲学

要理解Refoqus为何有效,我们得先看看量子机器学习中损失函数那令人头疼的复杂结构。一个典型的QML损失函数可以写成如下形式:

L(θ) = Σ_i p_i * ℓ( E_i(θ) )

其中, θ 是我们要优化的参数(比如量子电路中的旋转门角度),求和项 i 遍历整个训练数据集 S = {ρ_i} (每个 ρ_i 是一个量子态), p_i 是每个样本的权重(通常是均匀的 1/N )。 E_i(θ) = Tr[ M_θ(ρ_i) H_i ] 是在参数化量子模型 M_θ 作用下,对输入态 ρ_i 进行测量 H_i 得到的期望值。 是一个函数,可能是线性的(如 ℓ(x)=x ),也可能是多项式的(如均方误差 ℓ(x)=(y_i - x)^2 )。

这个公式里藏着两个“资源吞噬兽”:

  1. 数据集求和 (Σ_i) :如果数据集有N个样本,最朴素的方法就是为每个样本都运行一次量子电路并测量,这至少需要N次电路执行。
  2. 测量算符展开 (H_i = Σ_j c_{i,j} h_{i,j}) :可观测量 H_i 通常可以分解为多个更易测量的项(例如泡利算符的线性组合)。要精确估计 Tr[M_θ(ρ_i) H_i] ,传统做法是测量每一项 h_{i,j} ,这需要 t_i 次测量。

如果老老实实对每一项都进行测量,总测量次数会爆炸式增长: 总次数 ∝ N * (Σ_i t_i) 。对于稍具规模的问题,这完全是不现实的。

2.1 从Rosalin到Refoqus:思想的演进

Refoqus的思想并非凭空出现,它站在了巨人“Rosalin”的肩膀上。Rosalin是针对变分量子本征求解器问题设计的“省弹”优化器。它的核心洞见是:对于哈密顿量 H = Σ_j c_j H_j ,我们不需要均匀地测量每一项 H_j 。相反,我们可以根据每一项系数 |c_j| 的大小,构建一个概率分布 p_j = |c_j| / Σ_j |c_j| ,然后每次测量时,都按照这个分布随机挑选一项 H_j 进行测量。通过对测量结果进行适当的加权(除以 p_j ),我们可以得到一个 无偏的 损失函数估计量。这意味着,即使你只进行一次测量(只随机测了其中一项),你得到的估计在统计意义上也是正确的,不会系统性地偏离真实值。这种方法彻底移除了传统方法中“每项至少测一次”的硬性下限,实现了真正的按需分配。

然而,Rosalin是为VQE设计的,它只解决了“测量算符”这一个维度的采样问题。在QML中,我们还有“数据集”这个更庞大的维度。Refoqus的突破性贡献在于,它将Rosalin的思想推广到了二维: 同时对数据集索引 i 和测量算符索引 j 进行随机采样

2.2 构建无偏估计量:U-统计量的妙用

Refoqus的理论基础是U-统计量。简单来说,对于我们的线性损失函数 L(θ) = Σ_i Σ_j q_{i,j} ⟨h_{i,j}(θ)⟩ (其中 q_{i,j} = p_i * c_{i,j} ),我们可以构建一个双随机采样过程:

  1. 构建联合概率分布 :计算所有系数 q_{i,j} 的绝对值之和 M = Σ_i Σ_j |q_{i,j}| 。然后,为每一对 (i, j) 分配一个采样概率 π_{i,j} = |q_{i,j}| / M
  2. 随机采样与测量 :当你有 S 个“测量资源”(可以理解为允许进行的测量次数)时,你不再需要为每个 (i, j) 都分配资源。相反,你可以进行 S 次独立的随机实验:每次实验,都按照概率 π_{i,j} 随机挑选一对 (i, j) 。然后,在量子设备上准备输入态 ρ_i ,运行参数化电路 M_θ ,并对可观测量 h_{i,j} 进行一次测量(获得一个随机结果 o_{i,j,k} ,其期望值就是 ⟨h_{i,j}(θ)⟩ )。
  3. 计算无偏估计 :对于第 k 次采样(对应 (i_k, j_k) ),我们计算一个加权样本值: X_k = sign(q_{i_k, j_k}) * o_{i_k, j_k} / π_{i_k, j_k} 。这里除以 π_{i_k, j_k} 是为了纠正采样偏差,乘以 sign(q) 是为了处理系数可能为负的情况。那么,这 S 次采样的平均值 (1/S) * Σ_{k=1}^S X_k ,就是整个损失函数 L(θ) 的一个 无偏估计量

注意 :这里有一个非常关键的实操细节。 o_{i,j,k} 是单次测量的结果,对于泡利算符测量,它通常是+1或-1。因此, X_k 可能会是一个很大的数(如果 π_{i,j} 很小)。这会导致估计量的方差可能很大。Refoqus的聪明之处在于,它并不直接用这个简单的估计量,而是将其与自适应批处理大小策略(如iCANS/gCANS)结合,动态决定每次迭代需要多少采样次数 S ,以在估计精度和资源消耗间取得平衡。

2.3 梯度的无偏估计:参数移位规则的结合

对于基于梯度的优化,我们还需要估计梯度 ∇L(θ) 。对于线性损失函数,得益于 参数移位规则 ,这件事变得异常优雅。参数移位规则告诉我们,对于由泡利算符生成的门参数,其梯度可以通过在两个点评估损失函数来得到: ∂L/∂θ_x = [L(θ + (π/2)e_x) - L(θ - (π/2)e_x)] / 2 其中 e_x 是第x个分量为1的单位向量。

因此,要无偏地估计梯度第x个分量 g_x ,我们只需要:

  1. 使用上述双随机采样方法,分别构建 L(θ + (π/2)e_x) L(θ - (π/2)e_x) 的无偏估计量 \hat{L}_+ \hat{L}_-
  2. 然后计算 \hat{g}_x = (\hat{L}_+ - \hat{L}_-) / 2

这个 \hat{g}_x 就是梯度分量 ∂L/∂θ_x 的一个无偏估计量。 这意味着,我们不需要为每个参数、每个数据点、每个测量项都单独计算梯度。一次对损失函数的随机采样评估,就同时包含了所有梯度分量的信息 (当然,需要分别在两个参数点上评估)。这极大地统一和简化了梯度估计的流程。

3. 实战拆解:Refoqus在量子PCA与自动编码器中的应用

理论再漂亮,也得看实战效果。Refoqus论文中主要测试了两个经典的QML任务:变分量子主成分分析和量子自动编码器。我们来看看它是如何具体工作的,以及为什么能省下那么多资源。

3.1 案例一:变分量子主成分分析

VQSE的目标是找到一个参数化量子电路 U(θ) ,使得 U(θ) ρ U(θ)^† 尽可能对角化,从而读出密度矩阵 ρ 的主要特征值和特征向量。其损失函数通常设计为: L(θ) = Tr[ H U(θ) ρ U(θ)^† ] 其中 H 是一个精心设计的哈密顿量,其基态对应于我们想要的特征向量。 ρ 本身通常就是数据集的协方差矩阵,可以写成 ρ = Σ_i p_i |ψ_i⟩⟨ψ_i|

传统做法的资源消耗

  1. 准备 ρ :需要从数据集中按概率 p_i 采样态 |ψ_i⟩ ,这本身可能就需要多次制备。
  2. 估计损失: H 可以展开为多个泡利算符项 H = Σ_j c_j P_j 。传统方法需要为每一个 P_j 进行多次测量来估计 Tr[U(θ) ρ U(θ)^† P_j] ,然后再加权求和。如果数据集大(N大), H 项数多(项数多),资源消耗是指数级增长的。

Refoqus的“省弹”策略

  1. 联合采样 :将损失函数重写为 L(θ) = Σ_i Σ_j (p_i * c_j) * Tr[U(θ) |ψ_i⟩⟨ψ_i| U(θ)^† P_j] 。这里, (i, j) 就是我们的采样对。
  2. 单次电路,双重随机 :每次迭代,我们不再需要为所有 (i, j) 对做准备。我们只需要:
    • 按照概率 π_{i,j} ∝ |p_i * c_j| 随机挑选一个数据索引 i 和一个泡利项索引 j
    • 在量子设备上制备态 |ψ_i⟩
    • 运行电路 U(θ)
    • 对泡利算符 P_j 进行 一次 测量(获得+1或-1)。
  3. 自适应分配 :将上述过程与gCANS等自适应优化器结合。gCANS会根据当前梯度估计的方差 σ_x^2 和梯度大小 g_x^2 ,动态决定下一次迭代需要分配多少总测量次数 S_total ,以及如何在不同梯度分量间分配。Refoqus则在这个框架内,使用上述联合采样方法来高效地完成每一次指定的测量。

实测效果 :论文中的数值模拟显示,在达到相同精度(损失函数值)的情况下,Refoqus相比“仅对测量算符采样”(即Rosalin方法)和“完全均匀采样”的方法,节省了1到3个数量级的测量次数。这是因为对于许多数据集,不同样本对损失的贡献差异很大,有些样本可能包含更多信息或噪声更小。Refoqus通过概率 π_{i,j} 自然地将更多测量资源分配给那些系数 |p_i * c_j| 更大的项,这些项通常对梯度的贡献也更大,从而实现了更高的采样效率。

3.2 案例二:量子自动编码器

量子自动编码器的目标是学习一个压缩电路 U(θ) ,将输入态 |ψ_i⟩_{AB} (在系统A和B上)编码,然后丢弃B系统(“垃圾”系统),希望仅从A系统就能高保真地恢复原态。一个常用的损失函数是衡量垃圾系统B与某个固定纯态(如 |0⟩ )的接近程度: L(θ) = 1 - Σ_i p_i * Tr[ (I_A ⊗ |0⟩⟨0|_B) U(θ) |ψ_i⟩⟨ψ_i| U(θ)^† ]

传统做法的瓶颈 :这个损失函数中的可观测量 I_A ⊗ |0⟩⟨0|_B 是一个全局投影算符。虽然它可以分解为泡利项,但分解后项数可能非常多(随量子比特数指数增长)。同时,对数据集的求和也带来了额外开销。

Refoqus的应对

  1. 分解测量算符 :将投影算符 |0⟩⟨0|_B 在泡利基下展开。由于它是一个纯态投影,其展开式中会包含大量项,但许多项的系数可能很小。
  2. 构建联合分布 :损失函数可写为 L(θ) = 1 - Σ_i Σ_j (p_i * c_j) * Tr[U(θ) |ψ_i⟩⟨ψ_i| U(θ)^† P_j] 。这里 P_j 是展开后的泡利算符。我们构建联合概率 π_{i,j} ∝ |p_i * c_j|
  3. 高效训练 :在训练过程中,Refoqus会自动地将更多的测量机会分配给那些 (i, j) 对,其中 |p_i * c_j| 较大。这意味着,对于那些本身概率 p_i 就大的重要数据样本,以及那些在可观测量展开中权重 |c_j| 大的关键泡利项,我们会进行更频繁的测量,从而更快地降低损失函数估计的方差,加速收敛。

实操心得 :在实现Refoqus时,一个容易被忽略但至关重要的步骤是 概率分布 π_{i,j} 的预处理与采样效率 。如果 (i, j) 对的数量极其庞大(例如上百万),计算所有 |q_{i,j}| 并求和得到 M 可能会成为经典计算瓶颈。在实践中,对于某些具有特殊结构的问题(如系数 c_j 服从某种分布,或数据集有聚类结构),可以采用分层采样或别名采样法来加速采样过程,避免每次都计算完整的概率分布表。

4. 实现Refoqus:从理论到代码的关键步骤

理解了原理,我们来看看如何亲手实现一个Refoqus优化器。这里我不会给出完整的代码(那太占篇幅),但会勾勒出核心步骤和必须注意的坑。

4.1 核心算法流程

假设我们已经有了一个QML问题,其损失函数可表述为 L(θ) = Σ_i Σ_j q_{i,j} ⟨h_{i,j}(θ)⟩ ,并且我们打算使用基于梯度的方法(如结合gCANS)进行优化。

步骤1:预处理与初始化

  1. 计算归一化系数 :计算所有 q_{i,j} 的绝对值之和 M = Σ_i Σ_j |q_{i,j}| 。存储每一对的 π_{i,j} = |q_{i,j}| / M 。如果对数太多,需要设计高效的数据结构(如别名表)来支持O(1)时间的采样。
  2. 初始化优化器状态 :初始化参数 θ ,设置gCANS优化器所需的超参数,如初始学习率 α 、Lipschitz常数 L 的估计值、用于估计梯度方差和范数的指数移动平均衰减因子等。

步骤2:单次迭代流程 对于第 t 次迭代:

  1. 估计梯度及其统计量
    • 对于每个待优化的参数 θ_x ,利用参数移位规则,我们需要估计 L(θ + s e_x) L(θ - s e_x) ,其中 s = π/2
    • 对于 每个移位点 的损失估计: a. 确定本轮总测量预算 :根据gCANS公式 s_x = (2Lα/(2-Lα)) * (σ_x / Σ_x‘ σ_x’) * ||g||^2 ,优化器会给出本轮对梯度分量 x 的推荐测量次数 s_x 。注意,这里 s_x 是对 单个梯度分量 单个移位点 的损失进行估计所需的测量次数。由于每个梯度分量需要两个移位点,且我们采用联合采样,实际我们需要分配 2 * s_x 次测量来估计这个分量对应的两个损失值(通常平均分配)。 b. 执行联合随机采样 :进行 S = 2 * s_x 次(或根据总预算分配)测量。每次测量: i. 按照分布 π_{i,j} 随机抽取一对 (i, j) 。 ii. 在量子设备(或模拟器)上准备输入态 ρ_i 。 iii. 运行参数化量子电路 M_θ (或在当前移位点 θ ± s e_x 的电路)。 iv. 对可观测量 h_{i,j} 执行一次测量,得到结果 o ∈ {+1, -1} (假设是泡利测量)。 v. 计算该次测量的贡献: X = sign(q_{i,j}) * o / π_{i,j} 。 c. 计算无偏估计 :将所有 S 次测量的 X 值取平均,得到该移位点损失 L 的无偏估计 \hat{L}
    • 对每个参数 θ_x ,计算梯度估计 \hat{g}_x = (\hat{L}_+ - \hat{L}_-) / 2
    • 同时,记录在估计过程中产生的样本方差,用于更新gCANS内部对 σ_x ||g||^2 的指数移动平均估计。
  2. 参数更新 :使用估计出的梯度 \hat{g} ,按照标准的梯度下降规则更新参数: θ^{(t+1)} = θ^{(t)} - α \hat{g}
  3. 自适应调整 :gCANS根据更新后的梯度统计量(方差和范数),重新计算下一轮迭代中每个梯度分量应分配的测量次数 s_x 。如果损失下降不明显,可能会增加总预算;如果收敛稳定,则可能减少预算。

4.2 避坑指南与经验技巧

  1. 方差的初始化与稳定性 :gCANS需要梯度分量方差 σ_x^2 和梯度范数 ||g||^2 的估计。在训练初期,这些估计可能非常不准确。一个常见的技巧是,在最初几轮使用一个固定的、较小的测量次数进行“预热”,让优化器对梯度的统计特性有一个初步的估计,然后再启动自适应的 S 分配。否则,初期不稳定的估计可能导致分配的资源剧烈波动,甚至发散。

  2. 处理极小的采样概率 :当某些 π_{i,j} 极其微小时,对应的 1/π_{i,j} 会非常大,导致单次测量值 X 的幅度巨大,增加估计量的方差。虽然从无偏性上看没问题,但高方差会降低收敛速度。实践中,可以考虑设置一个概率下限 π_min ,将所有低于此值的 π_{i,j} 置零,并将对应的概率质量按比例重新分配给其他项。这引入了一个微小的偏差,但通常能显著降低方差,加速收敛,是一种有效的偏差-方差权衡。

  3. 与参数化电路结构的协同 :Refoqus和参数移位规则要求参数化门是由泡利算符生成的(如 R_x, R_y, R_z 门)。如果你的电路包含其他类型的参数化门(如 CRY 门),需要确保你能计算其梯度,或者将其分解为符合规则的基门。此外,对于具有参数共享的电路,需要仔细处理梯度计算,确保每个独立参数都得到正确的无偏估计。

  4. 经典计算开销的权衡 :Refoqus将巨大的量子测量开销,部分转移到了经典计算上:需要维护采样分布、进行随机采样、加权计算等。对于超大规模问题,这个经典开销也可能变得显著。需要评估你的经典计算资源是否足以支持这种采样开销。通常,对于参数规模在数百、数据项在数千、测量项在数百的问题,现代CPU是完全可以应对的。

  5. 停止准则的设置 :由于使用了随机梯度估计,损失函数值会在迭代中波动。不宜使用简单的“损失值变化小于阈值”作为停止准则,这很容易因噪声而提前停止或永不停止。建议采用以下组合策略:

    • 移动平均损失 :跟踪最近 K 次迭代损失的平均值,当其变化很小时考虑停止。
    • 梯度范数 :监控梯度估计的范数 ||\hat{g}|| ,当其持续低于某个阈值时,表明可能接近驻点。
    • 固定预算/迭代次数 :设定一个最大的测量次数或迭代次数上限,作为安全保障。

5. 性能对比与扩展思考

Refoqus论文中展示了与多种基线方法的对比,包括:

  • 均匀确定性采样 :为每个数据样本和每个测量算符项分配相等的测量次数。
  • 加权确定性采样 :根据 |q_{i,j}| 的比例分配测量次数,但分配是固定的。
  • 仅对测量算符随机采样 :即Rosalin方法,只对 j 进行随机采样,对 i 还是采用均匀或遍历的方式。

在量子PCA和量子自动编码器的数值实验中,Refoqus consistently地以显著优势胜出。其节省的资源量(测量次数)常常达到10倍甚至100倍以上。这种优势在问题规模增大(数据更多、测量算符更复杂)时尤为明显。

5.1 超越线性损失:多项式与对数似然损失

Refoqus的框架不仅限于线性损失函数。对于多项式损失(如均方误差),我们可以利用一个数学技巧:任何D次多项式 ℓ(E) = Σ_{z=0}^D a_z E^z ,其关于参数 θ 的梯度,可以表示为多个期望值乘积的线性组合。通过引入额外的“虚拟”采样索引来对应这些乘积项,我们仍然可以构建一个无偏的梯度估计量,并应用类似的联合采样策略。当然,这会使采样分布 π 的定义变得更加复杂,因为它现在要同时覆盖数据索引、测量项索引以及多项式幂次索引。

对于更复杂的损失函数,如分类任务中常用的 负对数似然损失 ,由于其输出是离散的类别概率,无法直接使用参数移位规则和梯度估计。Refoqus论文的附录中提出了一种基于 逆二项采样 的扩展思路。核心思想是:构建损失函数本身(而不是其梯度)的无偏估计量,然后使用基于函数值(而不是梯度)的优化方法,如自然进化策略或基于梯度的优化。这为离散输出问题的“省弹”优化开辟了新的可能性,虽然实现起来更为复杂,但无疑是未来一个重要的研究方向。

5.2 实际部署的考量

将Refoqus应用到真实的量子硬件上,还需要考虑一些工程细节:

  • 测量项的兼容性 :随机采样到的泡利算符 h_{i,j} 可能是 X, Y, Z 或其张量积。在真实硬件上,测量不同泡利基需要不同的基旋转。频繁地在不同测量基之间切换可能会引入额外的校准误差和延迟。一种缓解策略是,将采样到的 (i, j) 对按照所需的测量基进行分组,在同一基下连续进行多次测量,然后再切换基,以减少切换开销。
  • 电路编译与优化 :对于不同的输入态 ρ_i ,可能需要不同的制备电路。在采样到一系列 i 后,需要高效地调度这些状态制备电路。同样,对于参数移位规则,需要在 θ θ ± s e_x 等多个参数点上运行电路。这些电路具有高度的相似性,可以利用这种相似性进行电路编译优化,减少实际加载到硬件上的指令数量。
  • 噪声环境下的鲁棒性 :Refoqus本质上是一个减少测量次数(即减少电路运行次数)的方法。在噪声环境下,每次测量的信噪比是固定的。减少测量次数意味着我们用于平均以抑制统计噪声的样本变少了,这可能会使梯度估计对硬件噪声更加敏感。因此,在噪声较大的设备上使用Refoqus时,可能需要适当增加每轮迭代的基础测量预算,或者与误差缓解技术结合使用。

从我个人的实验经验来看,Refoqus代表了一种思维范式的转变:从“尽可能精确地计算每一步”转向“以最高效的方式获取足以推动优化的信息”。它承认了在近量子设备上,资源是极度稀缺的,因此优化算法本身必须是资源感知的。这种思想不仅适用于测量,未来也可能扩展到对量子门数量、电路深度等其它稀缺资源的联合优化。

更多推荐