备注一句话概括本文核心:我们提出一个全新的量子线路自动搜索架构,用 DAG 图表示量子线路层,利用合理的方法大幅降低了搜索空间,并结合改良的 Monte Carlo Tree Search 方法,在同一个框架下测试了 VQE、QML、MaxCut 三种自动化设计量子线路任务,找到的线路比手工设计的线路更浅、更准、双比特门更少。 🎉🎉🎉
一、如何自动设计量子线路呢?
1. 手工设计量子线路的困境
假设你是一个计算机专业的硕士生,而你此前并没有量子力学和量子计算的知识基础(正是本人😭),而你的研究方向是量子计算和量子机器学习。有一天,你的导师突然问你:“能不能设计一个量子线路,用于解决 MNIST 手写数字二分类问题?” 此时你一脸懵逼,回答:“我不会啊!!我只会用传统 CNN !!”
因为传统 CNN 只需设计一系列的卷积层、池化层、全连接层和不同的激活函数即可,训练过程让它自己慢慢折腾即可。而量子线路你需要设定线路的深度是多少?不同层放量子门型又是什么?哪里放旋转门?哪里放纠缠门?头都大了😆,即使你是量子计算的专家,也不敢保证他们手工设计出来的量子线路稳定又有效。
手工设计通常依赖研究者的直觉:我觉得这里用 $Ry$,我觉得这里加 $CNOT$,我觉得堆 3 层 entanglement layer,我觉得这个 ansatz 应该有效。但问题是,不同任务需要的线路结构可能完全不同。比如 MNIST 二分类、量子化学基态能量估计、组合优化、量子态分类,它们对线路的要求不一样。一个在 MNIST 上有效的线路,不一定在别的任务上有效。
一个量子线路可以由很多因素决定:
- 量子比特数
- 量子门类型
- 门的顺序
- 门作用在哪些 qubit 上
- 纠缠连接方式
- 线路深度
- 参数共享方式
- 测量方式
- 硬件拓扑约束
哪怕只考虑几个 qubit,可能的线路组合也非常多,组合数量会迅速爆炸,是指数级别增长的。所以,自动设计量子线路很有必要,靠人工设计量子线路不知要设计到猴年马月😓
2. 自动设计量子线路的步骤
自动化搜索量子线路的第一步,是把“设计线路”形式化成一个搜索问题。
一个量子线路可以看成一串操作:
| |
也就是说,设计线路本质上是在不断回答几个问题:选什么量子门?放在哪些 qubit 上?放在第几层?要不要加纠缠?线路什么时候停止?
于是,量子线路搜索可以被看成:
| |
用一句话说:
自动化量子线路搜索,就是让算法在巨大的线路结构空间中,自动寻找高性能、低成本、硬件友好的量子线路。
1. 先定义搜索空间:算法能选什么?
自动化搜索不是凭空搜索。我们首先要告诉算法:你可以从哪些“积木”里搭线路。
这些积木通常包括:
| |
比如一个简单搜索空间可以是:
| |
这样搜索算法就不会乱来。它不会生成硬件上无法执行的线路,也不会无限制地堆门。
2. 再定义评价指标:什么叫“好线路”?
自动化搜索的关键不只是“找到能跑的线路”,而是要定义什么叫“好”。
对于 MNIST 二分类,最直接的目标是:分类准确率越高越好。但量子线路不能只看准确率。因为线路太深、双比特门太多,在真实量子硬件上很容易被噪声毁掉。
所以更合理的评价指标通常是多目标的:
| |
可以写成一个综合得分:
$$ Score = Accuracy - \lambda_1 \cdot Depth - \lambda_2 \cdot CNOTs - \lambda_3 \cdot Parameters $$意思是:准确率越高,分数越高;线路越深、$CNOT$ 越多、参数越多,分数越低。这样搜索出来的线路不会只是“很准但很臃肿”,而是更接近真正可用的量子线路。
3. 核心流程:生成、训练、评估、更新
一个典型的自动化量子线路搜索流程可以写成这样:
| |
这里要注意一点:搜索线路结构 和 训练线路参数 是两个层次的问题。
结构搜索回答的是:这个门该不该放?放在哪?线路长什么样?
参数训练回答的是:这个 $Ry(θ)$ 的 $θ$ 应该是多少?这个 $Rz(θ)$ 的 $θ$ 应该是多少?
所以完整流程其实是一个双层优化问题:
内层优化线路参数,给定一个量子线路结构 $\mathcal{A}$,我们先训练它的参数:
$$ \theta^{*}(\mathcal{A}) = \arg\min_{\theta} \mathcal{L}_{\mathrm{train}}(\theta,\mathcal{A}) $$意思是:如果线路结构已经固定,那么就像训练普通神经网络一样,优化其中的参数 $\theta$,让训练集 loss 尽可能小。
外层优化线路结构,给定一个量子线路结构 $\mathcal{A}$,先训练出最优参数 $\theta^{*}$,再训练结构:
$$ \mathcal{A}^{*} = \arg\min_{\mathcal{A}\in\Omega} \mathcal{L}_{\mathrm{val}} \left( \theta^{*}(\mathcal{A}), \mathcal{A} \right) $$在验证集上评估它的效果,最后选择验证集表现最好的线路结构。
