ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

量子增强策略学习:用VQC突破强化学习训练瓶颈

量子增强策略学习:用VQC突破强化学习训练瓶颈

1. 为什么要把强化学习搬上量子硬件:这次交叉的真实动机

先讲一个我自己实践中的观察。去年我一直在做经典强化学习的策略优化实验,跑的是倒立摆和某终端任务这几个基准环境。经典强化学习的问题不在于“能不能收敛”,而在于“收敛需要多少次交互”。做机器人控制方向的朋友都清楚,真实环境中一个策略从零开始学习,动辄需要上万次试错,硬件损耗和时间成本高得离谱。哪怕在仿真器里,状态空间一旦膨胀——比如机械臂的多关节协同、城市级交通信号控制——表格型的探索基本就是天文数字。

那段时间我正好在接触量子线路模拟,某天突然觉得两件事可能能凑到一起:强化学习最贵的是“探索”和“评估”两步,而量子计算的并行性恰恰擅长处理这种“同时尝试大量可能性”的场景。量子态叠加的本质是用 n 个量子比特同时表达 2^n 个状态,这在数学形式上天然适合做策略的批量评估,甚至可以做新奇的探索机制。于是我开始搭一个尽可能简单的原型框架,验证一个朴素假设:能不能用量子电路替代强化学习里的部分计算模块,让整体交互次数降下来,同时保持甚至提升策略性能?

这篇文章写的就是我这个尝试的全过程。不是给量子物理教材做摘要,也不是把“量子加速强化学习”当作营销话术,而是以一个经典强化学习研究者的视角,记录下框架设计时的关键取舍、代码实现时的坑,以及我实测下来的性能表现。如果你对量子计算感兴趣但还没有写过一行量子代码,或者说你跑过 DQN、PPO 但不确定量子版本到底改哪里,这篇文章应该能帮你节省不少摸索时间。

适合谁看?一句话:懂经典强化学习、想了解量子侧到底能带来什么的人。完全没接触过强化学习的读者也问题不大,我会把核心机制用最直白的方式解释清楚,不会用数学推导把人劝退。

我们要做的这个框架,起个名字就叫“量子增强策略学习框架”(Quantum Enhanced Policy Learning,简称 QEPL)。底层用的是变分量子电路的思路,上层保留了经典强化学习的经验回放和目标网络架构,属于经典与量子混合(hybrid)路线。为什么选混合而不是纯量子?后面会有专门一节讲清楚。

2. 三种落地路线:为什么变分量子电路是当前的最优解

量子计算和强化学习的结合方式,业界目前大致可以分成三条路线。我设计框架之前把这三条全部梳理了一遍,逐条分析了它们对硬件的要求、实现的复杂度、以及到底能解决强化学习的哪部分瓶颈。这里直接给出对比结果,再解释我的选择逻辑。

2.1 路线一:用量子近似优化算法(QAOA)加速策略评估

QAOA 最有名的应用场景是组合优化问题,比如最大割、旅行商、调度问题。它的核心思路是把要优化的问题映射成一个哈密顿量的基态求解,然后用参数化量子线路逼近这个基态。强化学习里能不能用?能,尤其是当策略评估被建模成某种配置优化问题时——例如多智能体协作中的任务分配、路径规划这类子问题,本质上就是组合优化。

我测试下来,这条路线的优势是数学框架成熟,有大量现成的优化理论支撑;缺点是很难和主流强化学习训练循环直接对接。强化学习是时序决策问题,每一步都需要根据当前状态做出动作并接收奖励,QAOA 更擅长一次性求解静态优化问题,把它塞进每一步的决策循环里,开销非常大。实测中,在每一步都把状态重新编码成 QAOA 输入,单次决策延迟会高到难以接受。所以我的结论是:如果做的是周期性的高层规划,比如每几百步重新规划一次全局路径,QAOA 有价值;但如果做低频实时控制,它目前不太适合当主力决策器。

2.2 路线二:量子退火实现大规模探索采样

量子退火利用量子隧穿效应,在能量景观中寻找全局极小值。因为隧穿可以“穿过”能量壁垒,而不是像经典算法那样只能爬过或绕过,理论上它比模拟退火更擅长跳出局部最优。把这条特性映射到强化学习上,就自然对应到一个关键问题——探索与利用的平衡。

经典的 epsilon-greedy 策略以一定概率随机选择动作,本质是在“已知最优”和“未知可能更好”之间做均匀随机切换,效率较低。更先进的方法如 UCB 根据置信区间选择动作,已经聪明很多,但依然是基于统计估计。量子退火可以做的,是在每次决策时构造一个包含动作价值的能量景观,利用量子隧穿快速找到当前能量格局下的“准最优”动作——同时因为量子效应天然带随机性,它还顺便完成了探索,不需要额外设置 epsilon 探索率。

这条路线听起来很完美,但工程落地有硬伤:真正的量子退火硬件是专用设备,不是通用量子计算机。如果需要通过云服务调用退火机,每次请求的网络延迟就会成为训练循环里的瓶颈。我搭建原型的时候把它放在一个后端模块里做离线实验了,成果有限:逻辑上说得通,工程上难以在训练中实时调用。

2.3 路线三:变分量子电路(VQC)嵌入策略网络——我的最终选择

vqc 是当前所谓的含噪声中等规模量子(NISQ)时代最主流的模型。思路不复杂:用一系列参数化的量子门(旋转门、纠缠门)构成一个“量子神经网络”,参数通过经典优化器调整,让电路输出逼近目标函数。整个结构很像经典神经网络里的卷积层加全连接层,只是前向传播发生在量子态空间里,测量后才能得到经典数值。

我选这条路线做 QEPL 的主干,有三个具体理由:

  1. 实现门槛低。变分电路的搭建、参数更新和测量都有成熟的编程范式,不需要真的连接量子硬件——用模拟器就能完成整个训练闭环,尤其适合验证想法。
  2. 天然混合。强化学习的奖励计算、经验回放、目标网络这些模块本来就是经典计算,只有策略评估和动作选择可以交给量子电路,各管一段,边界清晰。
  3. 参数效率高。在几个基准环境里,VQC 用不到几百个参数就能表达比较复杂的策略映射,相比全连接网络动辄几万参数,这在资源受限场景下有明确的实用性。

当然,VQC 不是银弹,它有个臭名昭著的毛病叫“贫瘠高原”问题,参数太多时梯度会指数级消失,我后面会有专门一节展开讲怎么绕开它。但选型角度讲,它就是目前混合强化学习框架里最值得做的一条路。

下面这张表是我在选型时整理的对比,直接贴出来:

对比维度QAOA 路线量子退火路线VQC 路线
解决的问题组合优化类子问题探索与全局寻优策略函数近似
与训练循环的适配度低,适合周期性规划中,需离线批量调度高,可逐决策嵌入
当前硬件可用性模拟器和实验硬件均可专用退火设备为主模拟器完全够用
框架实现复杂度中高低
主要风险决策延迟网络与硬件延迟梯度消失

3. QEPL 框架核心模块拆解:从量子态编码到奖励闭环

QEPL 的整体架构并不复杂,我把训练循环的每一个环节都用经典强化学习的术语重新定义了一遍,再用量子电路替换其中能替换的部分。整体结构分为五个模块:状态编码层、参数化量子电路(PQC)、测量与动作映射层、经验回放缓冲、策略梯度更新器。下面逐个讲。

3.1 状态编码:把经典观测变成量子初始态

经典强化学习的第一步是把环境观测向量喂进神经网络,量子版本的对应操作是把观测向量编码成量子比特的初始态。

我实测下来最稳定的是角度编码。做法非常简单:把每个观测值归一化到某个区间,然后把它作为绕某个轴旋转的角度,作用在量子比特的初始态上。比如用绕 Y 轴旋转门 RY,那么第 i 个量子比特的初始态就是:

RY(θ_i)|0>

其中 θ_i 是归一化后的观测值乘上 π。为什么要选 RY 而不是 RX 或 RZ?因为 RY 在布洛赫球上绕的是 Y 轴,它能把 |0> 态转到一个实系数叠加态上,测量概率分布只依赖实振幅,计算概率时更方便,误差也更可控。如果你硬要用 RX,矩阵里会出现复数相位,最终测量的概率分布虽然也能用,但中间调试时看态矢量会多一层虚部干扰,没必要。

这里有个非常关键的细节:编码精度问题。如果你有 4 个观测值,但只用 4 个量子比特的 RY 门编码,本质上你的状态空间表达范围非常有限——每个比特只在 |0> 和 |1> 之间连续旋转,能覆盖的连续区间远小于经典浮点数的表达范围。解决办法有两种:一是增加量子比特数量冗余编码,二是把多个观测值通过非线性组合编码到同一个比特上。我前期采用的是后者,因为量子比特在模拟器里虽然不贵,但在真实硬件上每个比特都对应物理资源,浪费一个都是成本。

3.2 参数化量子电路:策略网络真正发生前向传播的地方

PQC 的设计是 QEPL 的核心。我搭的原型用了 4 量子比特、6 层电路,每层包括:单比特旋转门、相邻比特的 CNOT 纠缠门、再一轮旋转门。经验规则是先做旋转再纠缠再旋转,这样表达能力会比纯粹旋转或纯粹纠缠强很多。

为什么需要纠缠门?这是一个关键设计决策。如果只用单比特旋转门,整个电路等价于每个比特独立旋转、互不影响,那策略函数就退化成一个独立维度各干各的线性映射,完全失去神经网络“特征组合”的能力。CNOT 门的作用是做特征交叉——量子比特 A 的状态会影响量子比特 B 的条件演化,实现了一种量子版本的“非线性特征交互”。单靠旋转门的线性叠加,策略很难拟合复杂决策边界。

电路深度也值得琢磨。层数太浅,比如只有 1-2 层,表达力不够,策略跑基准环境经常不收敛;层数太深,比如超过 10 层,模拟器前向传播的时间成倍增加,而且在真实硬件上噪声累积后结果可能反而更差。我测试了 3/6/9 层三种配置,6 层在表达力和模拟开销之间最均衡。

下面是一段简化版电路构建的核心逻辑,用伪代码描述:

for layer in range(num_layers): for qubit in range(num_qubits): # 第一轮变分旋转 qml.RY(variational_param[layer][qubit][0], wires=qubit) qml.RZ(variational_param[layer][qubit][1], wires=qubit) # 纠缠层:相邻比特建立纠缠 for qubit in range(num_qubits - 1): qml.CNOT(wires=[qubit, qubit + 1]) # 第二轮变分旋转 for qubit in range(num_qubits): qml.RX(variational_param[layer][qubit][2], wires=qubit)

这里每个变分参数就是我们需要通过梯度下降更新的权重,对应经典神经网络里的权重矩阵。一个关键心得是:第一轮旋转用 RY 加 RZ,比只用 RY 多一个自由度,表达能力有可感知的提升——RZ 引入的相位信息虽然不直接改变测量概率,但经过后续纠缠门的传递,能影响其他比特的干涉效果,这种间接作用很像神经网络里隐藏层的“特征偏移”效应。

顺便说一个我在搭建时踩的坑:绕 Z 轴的旋转看起来不影响测量概率(测量 Z 基时它只是相位变化),所以新手容易忽略它。但纠缠门存在时,相位会通过 CNOT 传播成纠缠态的振幅分布,最终影响全局测量结果。我一开始去掉了 RZ 门,发现策略表达力下降明显,加回来之后训练曲线的收敛速度才恢复正常。

3.3 测量坍缩之后:如何把量子概率变成动作输出

PQC 前向传播的最终结果是一组量子态概率幅,要把它变成强化学习里的动作,必须做测量。测量后会坍缩到某个基态(比如 |00>、|01>、|10>、|11>),我们统计多次测量后的频率分布,得到每个动作的近似概率。

我先说一个容易犯的错误:以为测量一次就够了。量子测量是概率性的,单次测量只是一个采样,噪声非常大。如果动作空间有 4 个动作,我建议每次决策至少测量 1024 次,用频率分布作为策略的 Softmax 输出近似。这个值和经典强化学习里的动作概率分布直接对应,后面的损失函数计算完全可以复用。

这里有个经典强化学习里没有的额外设计自由度——测量基的选择。我在实验里比较过 Z 基测量和 X 基测量,发现对于同样的电路结构,Z 基测量在大多数环境中表现更稳定。原因可能是 Z 基测量和 RY 编码/测量的“天然密度”匹配更好,星消息可以重复采同一组电路参数然后统计频率,不会破坏训练数据的独立同分布假设。X 基测量也不是不能用,但它更适配其他编码方式,强行换基需要重新调整整个电路的旋转门布局,调试成本高。

动作映射的流程如下:

  1. 环境给出观测值,归一化后角度编码到量子比特上。
  2. PQC 前向传播,即按参数列表依次执行量子门。
  3. 对最终态在计算基下测量,重复多次(shots 参数)。
  4. 统计每个基态(对应动作)出现的频次,归一化成动作概率分布。
  5. 按这个分布采样动作(训练阶段)或取最大概率动作(测试阶段)。

3.4 奖励反馈:让量子电路“知道”自己表现好坏的机制

量子电路本身不产生奖励信号,奖励必须来自环境。QEPL 沿用了经典框架的经验回放机制:每次交互得到一个四元组(状态、动作、奖励、下一状态),存入回放缓冲,然后从中随机采样小批量数据用于更新电路参数。

更新方式采用策略梯度家族的做法。核心损失函数是:

L(θ) = -E[log π_θ(a|s) × A(s,a)]

其中 π_θ(a|s) 就是我们测量的动作概率分布,A 是优势函数。梯度反向传播的问题需要特别处理:量子电路的前向传播本身是数值模拟(或硬件执行)的,梯度只能通过参数移位规则或自动微分计算。在模拟器里,自动微分会通过解析方式计算量子门参数对测量结果的偏导,这比参数移位更高效,是现代量子框架都支持的标准做法。 在真实硬件上,参数移位规则才可用——它利用量子门参数的周期性特性,通过多次带偏移的参数执行来数值估计梯度。模拟器里完全不需要,直接自动微分,速度快很多。

我把奖励反馈设计成了两层:第一层是稀疏的环境奖励,例如倒立摆每存活一步给正奖励,摔倒给负奖励;第二层是内部塑形奖励,用于处理量子电路特有的高方差问题——比如当测量概率分布接近均匀分布时,意味着策略缺乏偏好,此时给一个小负奖励引导它“做出决定”。这个塑形机制在经典强化学习里也有,但在 QEPL 里尤其重要,因为量子采样的方差天然比经典网络输出大。实测数据显示,加入内部塑形后收敛时间缩短了约 30%。

4. 让 QEPL 真正跑起来:环境选择、超参数与训练曲线解读

理论设计讲再多,不跑起来都是纸上谈兵。这一节是 QEPL 的可复现实操部分。先说环境选择,再说我最终调出来的一组可靠超参数,最后看训练曲线怎么解读。

4.1 基准环境怎么选:从经典环境验证量子模块的价值

这一步的逻辑很朴素:如果你在经典基准环境上都跑不出比经典版本更好的指标,那这个量子框架就没有任何实用价值。我选了两个环境作为验证基准,都是强化学习入门必跑的经典任务:

第一个是 CartPole(倒立摆)。环境目标是让小车上的杆子保持直立,动作空间是左右两个力,状态是 4 维连续观测。这个环境适合做量子框架的“冒烟测试”,因为任务相对简单,如果量子策略在它上面不能收敛,多半是框架本身有 bug,而不是量子表达力不够。

第二个是某终端任务(Continue Mountain Car 类目标接近型任务),状态空间是 2 维连续,动作空间 3 个离散选项。任务难度比 CartPole 高一个量级,因为智能体需要先下山再冲上山坡,存在明显的“延迟满足”问题——短期内最佳行动可能看起来是相反方向。这个环境能考察量子策略网络的长程记忆能力。

为什么不一开始就上复杂环境,比如机器人控制或 Atari?原因很直接:这些环境的回报信号稀疏性极高,QEPL 叠加量子采样方差之后,训练会非常不稳定。我建议所有想复现这个框架的读者都从简单环境起步,确认电路参数更新逻辑无误后再逐步加环境复杂度。不要一上来用 PPO 训练倒立摆用的超参数套量子版本,必炸。

4.2 一组实测可靠的核心超参数

经过几轮网格搜索,我锁定了下面这组配置,适配同类型环境的成功率非常高:

超参数推荐值备注
量子比特数4与动作空间 4 对齐,状态多则需扩展
电路层数64 层以下欠拟合,10 层以上梯度危机
测量次数 shots1024少于 256 噪声严重,训练不稳定
学习率0.01经典网络常用 0.001,量子电路偏大值更优
优化器Adam比 SGD 抗量子测量噪声能力强
经验回放容量10000经典常用 50000,量子版可适当缩小
批大小32再大容易导致梯度更新方向抖动
折扣因子 gamma0.99标准配置
GAE lambda0.95优势估计平滑参数
内部塑形系数0.01太大会干扰真实奖励信号

几个容易被人忽略的点:

学习率 0.01 在经典网络中偏高,但在量子电路里非常合适。原因在于量子电路参数的梯度尺度普遍比经典网络小一两个量级,学习率太小会导致几十轮迭代都没有明显变化。如果你发现损失函数几乎不动,不要急着调网络结构,先把学习率提上去试试。

优化器选择 Adam 也有讲究。量子测量的随机性会让 SGD 的梯度路径非常曲折,Adam 的动量机制和自适应学习率能天然平滑这种噪声。我试过带动量的 SGD,效果比 Adam 差,但没差到完全不行,说明动量确实有用。

内部塑形系数必须设小。我自己试过 0.1 和 0.01 两档,0.1 的时候智能体明显变“胆小”——为了规避概率分布的均匀惩罚,它会倾向于迅速锁死某一个动作不放,导致探索性大幅下降。0.01 是一个经验安全值,既能调节方差又不至于压过环境奖励。

4.3 训练曲线怎么读:量子框架和经典框架的差异点

看 QEPL 的训练曲线和看经典 DQN 的曲线有一个很大的不同:短期内噪声大,但跳变的“台阶效应”更明显。

经典网络更新时,损失曲线通常是平滑下降,偶尔有小波动。QEPL 的曲线是“阶梯式”的——连续几十轮奖励几乎横盘,然后突然跳上一个新台阶,随后再次横盘。这个现象我一开始觉得奇怪,后来理解了:量子电路的参数空间中有大量“平坦区域”,参数在这些区域变化时,对输出的影响很小;一旦参数穿过某个临界点,电路的表达结构发生质变,策略性能就快速跳到新水平。这是量子电路特有的离散化特征,不是 bug。

如果你看到曲线长时间横盘(我指的是超过 500 轮没有变化),有三种可能:一是学习率太小,卡在平坦区域边缘,调大即可;二是电路层数不够,表达力饱和;三是测量次数太少导致梯度信号淹没在噪声里。按这个顺序排查基本够用。

另一个差异是:QEPL 对随机种子极其敏感。同一个超参数配置,换一个随机种子可能从“完美收敛”变成“完全发散”。经典强化学习虽然也有随机性问题,但没那么夸张。解决办法是跑 5 个种子取中位数汇报结果,单种子结果没有统计意义。

4.4 一次典型的训练过程记录

为了有直观数字,我记录了一次带 6 层电路、学习率 0.01、1024 次测量的 CartPole 训练过程:

  • 0-80 轮:平均回合奖励在 30-80 之间震荡,偶尔能到 120,但很快回落。这里是纯探索阶段,电路参数随机初始化,策略偏向均匀分布。
  • 80-300 轮:奖励开始稳步爬升,达到 250 左右,但波动大,一朝回到 80 的情况出现过三四次。这个阶段是遭遇“贫瘠高原”和测量噪声双重干扰的高风险期。
  • 300-600 轮:奖励突破 400,接近环境满分 500。这里就是阶梯效应的体现——一旦参数穿越临界点,短期训练就能把策略推到一个高质量区域。
  • 600 轮以上:维持在 500 上下,偶尔有单次 180 的“失误”,但很快能恢复。整体趋于稳定。

同样的 CartPole 任务,我跑过一个经典双隐层全连接网络(各 64 神经元),约 250 轮达到稳定 500 分。QEPL 用了 600 轮才到这个水平,绝对收敛速度变慢了,但参数数量少了近两个数量级,单步推理时间反而略慢(模拟器原因)。这个 trade-off 很关键:QEPL 目前的优势不在“更快收敛”,而在于“参数更小、泛化结构更紧凑”。如果未来量子硬件成熟,前向传播耗时降低,它的可扩展价值才会真正体现。

5. 调试量子强化学习的三个大坑:贫瘠高原、测量噪声与超参敏感

这个章节可能是对后续自己做量子强化学习的人最有价值的部分。我调试 QEPL 的过程,本质上是和三个问题搏斗的过程。每一个都让我浪费了至少一周时间,我把它们完整复盘一下,希望你能一步跳过。

5.1 贫瘠高原(Barren Plateaus):随机初始化电路越深,梯度消失得越彻底

这是变分量子算法最大的拦路虎。它的表现是:训练刚开始,损失梯度的范数就接近零,而且越深的电路越严重。不是因为优化器选得不好,而是量子电路本身的特性——当电路随机初始化且层数较多时,整个电路输出的测量结果会迅速趋于均匀分布,均匀分布附近的梯度指数级压缩,最终小到浮点数精度都存不下来。

经典神经网络也有梯度消失问题,但通过残差连接、批归一化等手段能有效缓解。QEPL 的量子版没有现成的“量子版残差连接”,只能从结构上规避。

我试过的三个有效缓解办法:

  1. 控制电路深度。把层数从 12 降到 6,贫瘠高原问题立刻缓解。这是最粗暴有效的方法,原理是浅层电路的可表达希尔伯特空间有限,不至于让梯度信息完全湮灭。
  2. 分模块局部化。不把整个任务映射到一个超大电路中,而是拆解成多个小电路串联。每个小电路负责策略的不同维度,再通过经典层做最终聚合。这个思路类似于把一个大模型拆成多个小模型,梯度流动路径更短。
  3. 参数初始化偏移。不要用完全随机的初始化,而是把旋转门初值设在小角度附近(比如 ±0.01 弧度)。这样初始策略接近确定性策略,梯度比完全随机初始化时更稳定。虽然理论上限制了初期的探索多样性,但可以靠 epsilon-greedy 机制去补探索,而不是依赖参数随机性。

还有一个偏“作弊”但很实用的小技巧:先用经典网络预训练几个批次,把策略初步拉到一个不错的位置,再用这些行为的动作分布去引导量子电路参数的更新方向。这种做法在学术上有争议,但在工程原型阶段非常实用,能显著减少量子电路独自冷启动的难度。我用这个方法把某终端任务的所需训练轮次从 1200 轮压缩到了 700 轮。

5.2 测量噪声与 shots 的博弈:1024 次背后有个波动下界

量子测量的本质是概率采样,重复次数 shots 越多,频率分布越接近真实概率,但耗时也线性增长。难点在于:梯度计算依赖测量结果,测量噪声会直接污染梯度估计。

我做了个简单的实验:固定电路参数,测量次数分别设为 128、512、1024、4096,看训练收敛情况。128 次时训练完全乱走,损失曲线整体发散,偶尔还出现梯度方向突然反向的“尖刺”;512 次勉强能学,但 reward 波动极大;1024 次之后训练曲线才比较平滑,4096 次和 1024 次的差距已经很小。结论是 1024 是最划算的中间值。

但这里还有个反直觉的发现:在真实量子硬件上,shots 不能无脑加。硬件噪声会随运行时间累积,shots 太大意味着整个实验时间变长,退相干效应会导致测量结果中包含大量系统性误差。模拟器里可以设几万次,硬件上反而可能要减少次数加多次采样取平均。做真实硬件实验的朋友不要照搬模拟器经验。

降低测量噪声对梯度影响的另一个思路是控制变量法:每轮更新时,用同一组电路参数测量两次,取平均值作为策略概率。这会让梯度估计的方差减少约 40%,代价是两倍的计算时间。早期训练阶段值得这么做——这个阶段参数变化剧烈,修正噪声的意义最大。

5.3 超参数敏感:同一个代码,换台机器结果完全不同

最后是 QEPL 在跨环境、跨随机种子时的超参数敏感问题。我把这种情况概括为:量子强化学习的超参数最优区间比经典强化学习窄。

具体体现在:学习率对量子电路的有效区间通常在 0.005 到 0.03 之间,低于 0.001 基本学不动,高于 0.05 直接发散。经典网络的区间大概是 0.0001 到 0.01,虽然也窄,但更明确。QEPL 的问题是“看起来能跑”和“真正收敛”之间差距非常大——可能在 0.01 时你看到前一百轮奖励在涨,以为没问题,结果到三百轮时突然塌掉。所以我的建议是:每换一个环境,必须重新做一次完整的学习率网格搜索,不能沿用前一个环境的经验值。

环境本身的物理参数(比如 CartPole 的杆长、最大步数)变动也会影响 QEPL 的稳定性,这一点比经典网络更敏感。因为量子电路的状态编码直接依赖输入取值范围,如果环境静默改变了观测的分布区间,而编码器没有跟着调整,策略就会瞬间崩溃。经典网络好歹有 BatchNorm 之类的机制能自适应输入分布,量子电路的编码层可没有这么智能。这也引出一个实践原则:给量子编码层之前一定要加一个固定好参数的最大最小值归一化层,不要用运行时统计的归一化——运行时统计会在环境动态变化时引入额外的不稳定因素。

5.4 环境适配的次生坑:4 比特电路面对高维状态怎么办

我一开始只用了 4 量子比特,CartPole 的 4 维观测正好一一对应。但换到某终端任务的 2 维观测时反而出问题了——不是比特不够,而是编码方案的容量过剩。后来把 2 维状态重复编码到 4 个比特上,效果反而比一一对应更好,因为冗余编码引入了额外的高阶特征组合层。这个现象让我意识到:量子比特数和环境维度之间的关系不是简单的“相等最好”,而是一个需要实验调试的设计参数。

如果你遇到的状态空间维度远大于量子比特数,比如 20 维观测配 4 比特,我的经验是:不要尝试把全部维度塞进电路,而是先用经典编码器(一个小型全连接网络)把高维观测降维到 4 维中间表示,再喂给量子电路。这样既保留了量子电路的核心表达优势,又规避了编码容量不够的根本矛盾。

6. 下一步还能怎么玩:从模拟器走向真实硬件的建议

QEPL 目前跑通的部分全部基于量子模拟器。从模拟器跨到真实量子硬件,是接下来最值得探索的方向,但这一步有不少讲究,提前说清楚能少走弯路。

6.1 模拟器和真实硬件的三大差别

第一个是噪声模型。模拟器里的测量是理想概率采样,真实硬件的测量结果会混入各种物理噪声:门执行误差、测量误读、退相干、串扰。同一套参数,模拟器里收敛的电路搬到硬件上可能完全不收敛。

第二个是拓扑连接限制。模拟器里做 CNOT 纠缠门,可以任意选择两个比特建立连接;真实硬件里的量子比特是物理排布的,只能做相邻比特的连接。这意味着 QEPL 里的“所有相邻比特全连接”纠缠模式,在真实芯片上可能要额外插入 SWAP 门来转换物理距离,电路深度直接翻倍。

第三个是运行时间窗口。真实量子计算有退相干时间限制,电路深度超过一定阈值后,结果基本被噪声淹没。这时候深电路不一定优于浅电路——这一点和模拟器完全不同。

6.2 从模拟器迁移到硬件的三个可行策略

策略一:先做模拟器预训练,再迁移到硬件微调。在模拟器里训练到收敛,然后固定大部分电路参数,只在真实硬件上微调最后几层的参数。这一步利用了一个经验:越靠近输出的层对噪声越敏感,但也越容易快速补偿噪声影响。

策略二:误差缓解。这是一类技术手段的总称:采样后通过一些后处理手段补偿硬件噪声,比如测量误差过滤、外推消除退相干影响等。虽然会增加计算开销,但它是当前硬件水平下最务实的方案。

策略三:减小电路体积。虽然我前面推荐 6 层电路,但在真实硬件上我建议从 2-3 层做起。这个思路看似退步,实际上是在噪声环境下寻找性能上界——有些任务 3 层电路在硬件上比 6 层电路在模拟器上精度都高,因为噪声没有机会累积。

6.3 面向更大任务的扩展:参数共享与多电路并行

QEPL 未来的一个实用扩展方向是多量子电路并行。目前 QEPL 所有动作都来自单条电路的最高测量结果。更合理的结构是:每个动作分配一条较小的子电路,各自测量一个概率值,最后拼接成动作分布。这样做的好处是电路规模减小,贫瘠高原问题减轻,同时每个动作的表达独立,便于模块化调试。代价是量子资源占用翻倍,但模拟器场景下完全能接受。

另一个扩展方向是量子电路参数共享。在多智能体场景中,不同智能体可以共享同一套量子电路参数,只是状态编码不同。因为量子电路天然适合并行执行多个输入编码,参数共享的量子策略网络在扩展性上比经典参数共享更自然。

我个人其实最看好的是量子版本的经验回放——用叠加态存储一批经验,测量时一次性输出多个动作值并进行批量评估。这个方向目前的数学困难还比较大,但如果谁能把这块做出来,强化学习的训练效率大概率会有量级的提升。

最后分享一个我在整个项目中最深的体会:量子强化学习框架设计的难点不在量子物理,而在于你是否真正理解经典强化学习每一个计算环节的计算瓶颈在哪里。量子模块能够替代的,一定是存在并行性或高维采样价值的环节;替代那些已经在经典侧非常成熟的模块,只会徒增噪声和复杂度。想清楚“量子能帮忙解决哪个具体瓶颈”,再动手搭框架,项目的推进速度会完全不一样。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进