1. 量子机器学习中的资源瓶颈与优化思路

在量子计算领域,量子机器学习(QML)被广泛认为是近期量子设备最具潜力的应用之一。想象一下,你手头有一台嘈杂、不稳定的量子计算机,就像一台老旧的收音机,信号时好时坏,每次“收听”(测量)都需要花费不少时间和资源。你的任务是训练一个参数化的量子模型,比如一个量子神经网络,让它学会处理“量子数据”——这些数据可能来自其他量子实验、模拟器,甚至是这台量子计算机本身产生的量子态。这个过程的核心是不断调整模型的参数,以最小化一个预先定义的“损失函数”,这衡量了模型预测与真实目标之间的差距。

然而,这里存在一个巨大的现实障碍: 测量成本 。在经典机器学习中,计算一个函数的梯度(即参数该往哪个方向调整才能降低损失)相对廉价。但在量子世界里,为了估计一个可观测量的期望值,你需要将同一个量子电路运行并测量成百上千次,每一次运行被称为一个“shot”。对于一个包含N个数据样本、每个样本需要测量M个算子的任务,每次梯度估计的总测量次数就是N×M。当数据集庞大或模型复杂时,这个数字会爆炸式增长,使得训练过程在时间和经济成本上变得不可行。这就像你想了解一座山的全貌,但每次只能通过一个像素极低的望远镜看一小块区域,要拼出完整图像,你需要移动并拍摄无数次。

因此,QML优化的核心矛盾在于:我们既需要足够精确的梯度信息来引导模型收敛,又必须极度节省宝贵的量子测量资源。传统的优化器,无论是经典的还是为变分量子本征求解器(VQE)设计的,都未能很好地解决QML场景下这种“双重采样”问题——既要对数据集采样,也要对测量算子采样。

Refoqus(REsource Frugal Optimizer for QUantum Stochastic gradient descent) 的提出,正是为了正面应对这一挑战。它的核心思想非常直观:既然我们无法承受测量所有数据样本和所有算子的代价,那就聪明地“抽样调查”。Refoqus通过构建一个精心设计的、同时对数据集索引 i 和测量算子索引 j 进行 加权随机采样 的方案,来获得损失函数及其梯度的 无偏估计 。所谓“无偏估计”,意味着尽管我们只用了部分数据,但这个估计值的期望(平均值)等于真实的梯度值,这就保证了优化方向在统计意义上是正确的,不会因为偷懒而跑偏。其目标是在每一轮迭代中,用最少的“shots”获得最具信息量的梯度估计,从而将资源用在刀刃上,实现高效的训练。

2. Refoqus的核心原理:构建无偏的随机梯度估计

要理解Refoqus如何工作,我们需要深入其数学内核。它处理的是一个非常通用的QML损失函数形式,这涵盖了量子自编码器、变分量子主成分分析(VQSE)、基于保真度的量子神经网络等众多应用。

2.1 通用损失函数框架

首先,我们形式化地定义问题。假设我们有一个量子数据集 S = {ρ_i} ,每个 ρ_i 是一个量子态(密度矩阵)。我们有一个参数化的量子模型 M_θ (例如一个含参量子电路),它对输入态 ρ_i 作用后,我们测量一个可能与数据相关的可观测量 H_i ,得到一个期望值 E_i(θ) = Tr[M_θ(ρ_i) H_i] 。那么,一个典型的损失函数是所有这些期望值的一个函数 ℓ 的加权平均:

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

这里 p_i 是数据样本 i 的权重(通常是均匀的1/N)。函数 ℓ 可以是线性的(如 ℓ(E)=E ),也可以是多项式的(如均方误差 ℓ(E) = (y_i - E)^2 )。

关键点在于,测量算子 H_i 本身通常可以分解为多个更易测量的子项之和: H_i = Σ_j c_{i,j} * h_{i,j} 。这里的 h_{i,j} 通常是泡利算符的张量积,可以直接在量子计算机上测量。因此,损失函数最终可以写成双重求和的形式:

L(θ) = Σ_i Σ_j q_{i,j} * ⟨h_{i,j}(θ)⟩

其中, q_{i,j} = p_i * c_{i,j} ,而 ⟨h_{i,j}(θ)⟩ = Tr[M_θ(ρ_i) h_{i,j}] 是需要通过量子测量来估计的量。

2.2 梯度的无偏估计与双重采样

我们的目标是计算损失函数 L(θ) 关于参数 θ 的梯度 ∇L(θ) 。对于线性损失函数( ℓ 为恒等映射),利用 参数移位规则 ,其偏导数可以精确表示为两个偏移点处损失函数值之差:

∂L/∂θ_x = (1/2) * Σ_i Σ_j q_{i,j} * [ ⟨h_{i,j}(θ + (π/2)e_x)⟩ - ⟨h_{i,j}(θ - (π/2)e_x)⟩ ]

这里 e_x 是第x个参数方向上的单位向量。这个公式的美妙之处在于,它将梯度计算转化为了在两个稍微不同的参数点 θ± 处估计损失函数的问题。

现在,Refoqus的聪明之处来了。我们并不直接计算整个双重求和。相反,我们构建一个随机估计量:

  1. 采样 :根据一个精心构造的概率分布 π_{i,j} ∝ |q_{i,j}| ,随机抽取一个索引对 (i, j) 。这个分布赋予了绝对值权重大的项更高的被采样概率,因为它们对梯度贡献的潜在幅度可能更大。
  2. 测量与估计 :对于采样到的 (i, j) ,我们在参数点 θ+ 和 θ- 下,分别准备量子态 M_{θ±}(ρ_i) ,并对可观测量 h_{i,j} 进行有限次数(比如 s 次)的测量,得到两个样本均值估计 ⟨h_{i,j}(θ+)⟩_est 和 ⟨h_{i,j}(θ-)⟩_est 。
  3. 构造无偏估计量 :那么,对于梯度第x个分量的一个 无偏估计 可以构造为: ĝ_x = (1/2) * (1/π_{i,j}) * [⟨h_{i,j}(θ+)⟩_est - ⟨h_{i,j}(θ-)⟩_est] 可以证明,这个随机变量 ĝ_x 的期望值恰好等于真实的梯度分量 ∂L/∂θ_x 。我们通过单一样本对 (i,j) 的一次采样和测量,就获得了一个梯度的无偏估计!

注意 :这里概率分布 π_{i,j} 必须正比于 |q_{i,j}| ,并且所有 π_{i,j} 之和为1。分母中的 π_{i,j} 是为了纠正采样偏差,确保估计量的无偏性。这类似于统计学中的重要性采样。

2.3 从单次采样到批量采样:方差的权衡

当然,单次采样估计的方差可能会很大。为了获得更稳定的梯度估计,我们可以在一次迭代中执行多次独立的采样-测量过程,然后将这些估计值平均起来。这就是“小批量”随机梯度下降的思想。Refoqus的核心资源分配策略就在于: 如何动态地决定每一轮迭代中,为每一个梯度分量 ĝ_x 分配多少测量资源(总shots数) 。

这里就引入了像 iCANS 和 gCANS 这样的自适应优化器思想。它们的目标是最大化“每shot收益”,即期望的损失下降除以所使用的shot总数。Refoqus将双重采样策略与这些自适应优化器相结合。具体来说,它会根据当前估计的梯度值 g_x 和其方差 σ_x^2 ,以及一个全局的Lipschitz常数 L 和学习率 α ,来计算每个参数方向最优的shot分配数 s_x 。

例如,gCANS给出的最优分配公式为: s_x ∝ (σ_x / Σ σ_x’) * ||g||^2 这意味着,对于梯度估计不确定性大(方差 σ_x^2 高)或者梯度幅度本身大的分量,我们应该分配更多的测量资源去精确估计它,因为调整这些参数可能带来更大的损失下降。

实操心得 :在实际代码实现中, σ_x 和 ||g||^2 的真实值是未知的,需要用指数移动平均(EMA)从历史估计中动态更新。一个常见的技巧是设置一个较小的初始化方差,并给EMA一个较大的衰减因子(如0.9),让分配策略能够快速适应优化早期的剧烈变化,又在后期保持稳定。

3. Refoqus的完整工作流程与实现细节

理解了原理,我们来看如何一步步实现Refoqus优化器。以下是一个详细的、可操作的流程,你可以将其视为一个算法蓝图。

3.1 初始化阶段

在训练开始前,需要完成以下准备工作:

  1. 解析损失函数 :明确你的QML任务对应的损失函数形式,将其展开为 L(θ) = Σ_i Σ_j q_{i,j} ⟨h_{i,j}(θ)⟩ 。这需要你:

    • 确定数据集 {ρ_i} 和权重 p_i 。
    • 确定每个 ρ_i 对应的测量算子 H_i 及其分解 H_i = Σ_j c_{i,j} h_{i,j} 。对于泡利算子和, c_{i,j} 就是分解系数。
    • 计算所有 q_{i,j} = p_i * c_{i,j} 。
  2. 构建采样分布 :计算所有 |q_{i,j}| 的和 Q_total = Σ_i Σ_j |q_{i,j}| 。然后构建离散概率分布: π_{i,j} = |q_{i,j}| / Q_total 。这个分布将用于后续的随机采样。

  3. 优化器超参数设置 :

    • 学习率 α :这是一个关键参数。可以从一个较小的值开始(如0.01),根据损失下降情况调整。
    • Lipschitz常数估计 L :通常初始化为一个经验值(如1.0),或在最初几轮迭代中通过梯度变化来粗略估计。
    • 指数移动平均衰减因子 β :用于平滑估计梯度和方差,建议设置在0.8到0.99之间。
    • 最小/最大shot数限制 :为避免极端情况,设置每轮每个参数分配的shot数上下限(如 s_min=10, s_max=10000 )。

3.2 单次迭代步骤

假设我们处于第 t 轮迭代,当前参数为 θ_t 。

步骤1:为每个参数分量分配shot预算 对于每个待优化的参数 x (共 d 个):

  1. 获取上一轮对该参数梯度分量的估计值 g_x^{t-1} 和方差估计 (σ_x^{t-1})^2 (初始轮可设为0和1)。
  2. 根据gCANS规则(公式7),计算本轮建议的shot分配数: s_x^{temp} = (2Lα / (2 - Lα)) * (σ_x^{t-1} / Σ_{x'} σ_{x'}^{t-1}) * ||g^{t-1}||^2
  3. 将 s_x^{temp} 裁剪到预设的 [s_min, s_max] 区间,并取整,得到最终为本轮参数 x 分配的总shot数 s_x^t 。

步骤2:基于双重采样进行梯度估计 对于每个参数 x ,我们拥有 s_x^t 个shots的预算。我们使用这些shots来构建梯度估计 ĝ_x^t :

  1. 采样 :根据分布 π_{i,j} ,独立地采样 M 个索引对 {(i_1, j_1), (i_2, j_2), ..., (i_M, j_M)} 。这里 M 可以等于 s_x^t (即每个shot采样一次),也可以小于 s_x^t (然后将多个shot分配给同一个采样项以降低其测量方差)。通常,为了简化,我们令每次采样对应一个shot的测量。
  2. 测量与计算 :对于第 k 个采样 (i_k, j_k) :
    • 在量子设备上,用参数 θ_t + (π/2)e_x 准备态 M(ρ_{i_k}) ,并对可观测量 h_{i_k, j_k} 进行1次测量,得到结果 r_{k+} (通常为+1或-1)。
    • 同样,用参数 θ_t - (π/2)e_x 准备态,对 h_{i_k, j_k} 进行1次测量,得到结果 r_{k-} 。
    • 计算该采样对梯度估计的贡献: contrib_k = (1/(2π_{i_k, j_k})) * (r_{k+} - r_{k-}) 。
  3. 聚合 :将所有 M 个采样的贡献平均,作为本轮对 ∂L/∂θ_x 的估计: ĝ_x^t = (1/M) * Σ_{k=1}^M contrib_k 。
  4. 估计方差 :同时,可以计算本次估计的样本方差,用于更新 σ_x 的EMA: (σ̂_x^t)^2 = Var({contrib_k}) / M 。

步骤3:参数更新与元数据更新

  1. 参数更新 :使用标准的随机梯度下降步骤更新参数: θ_{t+1} = θ_t - α * ĝ^t ,其中 ĝ^t 是所有 ĝ_x^t 构成的梯度向量。
  2. 更新EMA :更新每个参数的梯度幅值和方差的指数移动平均:
    • g_x^{EMA} = β * g_x^{EMA} + (1-β) * ĝ_x^t
    • (σ_x^{EMA})^2 = β * (σ_x^{EMA})^2 + (1-β) * (σ̂_x^t)^2
    • 更新全局梯度范数估计: ||g^{EMA}||^2 = Σ_x (g_x^{EMA})^2

步骤4:检查收敛条件 重复步骤1-3,直到满足停止条件,例如:

  • 损失函数在验证集上连续多轮不再显著下降。
  • 达到预设的最大迭代次数。
  • 梯度范数 ||g^{EMA}|| 小于某个阈值。

重要提示 :上述流程中,每次为估计 ĝ_x^t 都需要在 θ+ 和 θ- 两个点进行测量。这意味着,为估计 d 个参数的梯度,理论上需要运行 2d 个不同的量子电路。在实际硬件中,这可以通过参数移位规则和电路编译技术来高效管理。此外,对于共享参数的电路结构,有些测量可以复用,从而进一步减少实际电路运行次数。

4. 实战应用:以量子主成分分析(VQSE)为例

让我们通过一个具体例子—— 变分量子态特征求解器(VQSE) ,来直观感受Refoqus的威力。VQSE的目标是找到一个参数化量子电路 U(θ) ,使得它对输入密度矩阵 ρ 进行变换后,在某个容易测量的哈密顿量 H 下的期望值最小化,从而提取 ρ 的主成分。

4.1 问题设置与损失函数

假设我们的数据集是 N 个量子态 { |ψ_i⟩ } ,其出现概率均匀( p_i = 1/N )。输入态就是这些纯态, ρ_i = |ψ_i⟩⟨ψ_i| 。我们的模型是酉矩阵 U(θ) ,损失函数为: L(θ) = (1/N) * Σ_i ⟨ψ_i| U†(θ) H U(θ) |ψ_i⟩ 这正是我们框架中的线性损失函数。通常, H 被设计为在计算基下是对角化的,例如 H = Σ_{k=1}^n r_k Z_k ,其中 Z_k 是第k个量子比特上的泡利Z算符, r_k 是一组递减的实数系数。这样,最小化 L(θ) 就驱使 U(θ) 将 ρ 对角化,并将其主要特征向量映射到 H 的低能级本征态。

测量算子 H 可以分解为 n 个可直接测量的项: H = Σ_{k=1}^n r_k * (Z_k) 。因此,在这个例子中:

  • 索引 i 从1到 N (数据集)。
  • 索引 j 从1到 n (测量算子项,即不同的量子比特位置)。
  • q_{i,j} = p_i * c_{i,j} = (1/N) * r_k 。
  • 可直接测量的算符 h_{i,j} 就是 Z_k (作用在第k个量子比特上,其他比特为单位算符)。

4.2 Refoqus与传统方法的资源对比

传统方法(朴素SGD) : 在每一轮迭代中,为了精确计算梯度,你需要:

  1. 对 N 个数据样本中的每一个,计算其在 2d 个参数移位点下的损失。
  2. 对每个数据样本在每个参数点下的损失,你需要测量 H 的所有 n 个分量 Z_k ,每个都需要一定数量的shots来估计期望值。 总shot成本约为: 迭代次数 × N × 2d × n × (每个期望值的shot数) 。即使每个期望值只用100 shots,当 N=1000 , d=10 , n=10 时,一次迭代就需要2千万shots,这在实际的量子硬件上是难以承受的。

Refoqus方法 : 在每一轮迭代中:

  1. 对于每个参数 x ,根据自适应策略分配 s_x 个shots(可能只有几十到几百)。
  2. 对于每个shot,根据分布 π_{i,j} ∝ |r_k|/N 随机选择一个数据样本 i 和一个量子比特位置 k 。
  3. 仅对这个特定的 (i, k) 组合,在 θ+ 和 θ- 两个参数点下,测量 Z_k 算符(各1次shot)。 总shot成本为: 迭代次数 × Σ_x s_x 。由于 s_x 是自适应且通常很小的,总shot数可能比传统方法低 数个数量级 。

4.3 实现中的注意事项与调参技巧

  1. 概率分布的预处理 :分布 π_{i,j} ∝ |q_{i,j}| 要求我们计算所有权重的绝对值之和。对于大型问题,这是一个 O(N*n) 的操作,但只需在初始化时计算一次。可以使用别名采样法(Alias Method)来实现在 O(1) 时间内完成一次采样,这对于高效运行至关重要。

  2. 学习率与Lipschitz常数 : L 和 α 是耦合的。一个实用的方法是使用 学习率衰减 。开始时可以设置一个相对较大的 α (如0.1)和一个保守的 L (如1.0),观察初期损失下降。如果损失震荡剧烈,说明 α 可能太大或 L 估计过小,应调小 α 或调大 L 。也可以采用自适应学习率算法(如Adam)的思想,但需要将其与shot分配策略结合,这属于更高级的变体。

  3. 方差的初始化与稳定性 :在训练初期,梯度估计可能非常不准确,导致方差 σ_x^2 的估计波动大。一个稳定策略是给方差设置一个初始下限(如 σ_min^2 = 1e-4 ),并让EMA的衰减因子 β 从较低值(如0.5)开始,随着迭代逐渐增加到0.9,这样能让优化器在早期更积极地探索,后期更稳定地收敛。

  4. 处理非线性和更复杂的损失函数 :对于像均方误差(MSE)这样的多项式损失函数,其梯度表达式会包含期望值的乘积。Refoqus通过引入 U-统计量 来构建无偏估计。简单来说,对于形如 [E(θ)]^2 的项,其无偏估计不能简单地用 (单次测量值)^2 ,而需要用两个独立测量的乘积的期望来构造。在实现时,这意味着需要对同一项进行两次独立采样和测量,这略微增加了复杂度,但核心的双重采样思想不变。

常见陷阱 :

  • 采样偏差 :如果概率分布 π_{i,j} 计算错误(例如忽略了系数 c_{i,j} 的符号),或者采样实现有bug,会导致梯度估计产生偏差,最终使优化失败。务必验证你的估计量在期望上是否等于一个已知小规模问题的解析梯度。
  • 硬件噪声的影响 :量子硬件噪声会系统性地扭曲测量结果 ⟨h_{i,j}(θ)⟩ 。Refoqus本身不缓解噪声,但可以与误差缓解技术结合。需要注意的是,噪声可能会改变不同 (i,j) 项方差的相对大小,从而影响最优shot分配。在噪声严重的设备上,可能需要更保守的shot分配策略。
  • “冷启动”问题 :在训练最开始,梯度估计几乎完全是随机的,可能导致自适应分配策略失效。一个简单的解决方案是前几轮使用固定的、较小的shot数进行“预热”,待梯度估计有了一定统计意义后再开启自适应的Refoqus策略。

5. 性能评估、局限性与未来方向

Refoqus在模拟和理论上都显示出巨大的潜力。在原论文的数值实验中,在量子自编码器和VQSE任务上,Refoqus相比仅对测量算子采样(如Rosalin)或均匀采样的优化器,经常能节省10到1000倍的shot数,达到相同的损失值。

5.1 性能优势来源分析

  1. 方差缩减 :通过按 |q_{i,j}| 加权采样,Refoqus将更多的测量资源分配给了对梯度贡献可能更大的项,从而降低了整体梯度估计的方差。这比均匀采样更高效。
  2. 自适应资源分配 :结合iCANS/gCANS,Refoqus能动态地将shots分配给最需要被精确估计的梯度分量(那些梯度值大或不确定性高的分量),实现了资源的最优动态配置。
  3. 去除了“硬性下限” :传统方法必须为每个数据-算子对分配至少一些shots,否则估计有偏。Refoqus的双重随机采样从理论上允许对任意单个 (i,j) 对进行任意少(甚至一次)的测量,只要采样概率非零,就能保证整体估计的无偏性。这提供了极大的灵活性。

5.2 当前局限与挑战

  1. 计算开销 :构建和维护采样分布 π_{i,j} 、计算自适应shot分配公式,都需要额外的经典计算。对于超大规模问题(极端大的N和n),这部分开销可能变得显著,需要高效的算法实现。
  2. 对超参数的敏感性 :虽然自适应,但Refoqus仍依赖于学习率 α 、Lipschitz常数估计 L 等超参数。不合适的设置可能导致收敛缓慢或震荡。
  3. 非凸优化景观 :QML的损失函数景观通常非常复杂,充满贫瘠高原和局部极小值。Refoqus是一种高效的梯度估计器,但它并不能直接解决景观本身带来的优化难题。它需要与初始化策略、景观感知的优化器(如动量、自适应学习率)结合使用。
  4. 适用范围 :当前框架主要针对损失函数是期望值的线性或多项式函数的情况。对于更复杂的损失函数(如涉及对数的似然函数),需要不同的无偏估计技术,如逆二项采样,这增加了实现的复杂性。

5.3 进阶技巧与扩展思路

  1. 与二阶方法结合 :可以探索将Refoqus的随机梯度估计用于量子自然梯度下降或拟牛顿法。虽然估计海森矩阵需要更多资源,但或许可以仅对其对角线或低秩近似进行高效采样估计。
  2. 分层采样 :对于具有特殊结构的数据集(如聚类结构),可以先对数据聚类,然后在类层面和类内数据层面进行两级采样,可能能更好地利用数据分布的先验知识。
  3. 硬件感知的采样 :在真实的量子硬件上,不同测量基 h_{i,j} (如X, Y, Z)的切换和测量时间可能不同。未来的优化器可以将这些硬件层面的成本(时间、误差)纳入 π_{i,j} 的权重中,实现真正意义上的“资源”高效,而不仅仅是shot数高效。
  4. 用于迁移学习与持续学习 :在持续学习场景中,新旧任务的数据分布不同。Refoqus的采样框架可以动态调整,在优化新任务时,根据重要性对旧任务的数据进行降采样,从而高效利用历史数据防止遗忘。

在我自己的模拟实验中,将Refoqus应用于一个10量子比特的VQSE任务来压缩量子态信息,其资源节约效果是令人印象深刻的。与传统固定shot分配相比,Refoqus以约1/50的测量总量达到了相似的保真度。最关键的是,你需要仔细监控训练初期梯度的方差,并适时调整学习率。有时候,在损失曲线进入平台期时,临时增加一轮“高精度”(更多shots)的梯度估计,有助于跳出浅层局部极小点,这个技巧在实践中很管用。

更多推荐