《昇思25天学习打卡营第17天|HHL 算法》

概述

HHL算法的目的:给定一个 Hermitian一个一个和一个单位向量𝑏 ⃗𝑏→, 求解方程一个𝑥 ⃗=𝑏 ⃗

\left|b \right\rangle = \sum_{j=1}^{N} b_{j } \left|j \右\rangle\left|b \right\rangle = \sum_{j=1}^{N} b_{j } \left|j \右\rangle, 算法的关键在于在||湾〉|𝑏〉上模拟𝑒iAΔt𝑒我一个Δ𝑡。

设一个一个的谱分解如下

那么

将||湾〉|𝑏〉用基{|𝑢𝑗〉}表示 :

使用量子相位估计 QPE(Quantum Phase Estimation),其中,作用结果如下:

其中|𝜆𝑗˜〉|𝜆𝑗~〉是特征值𝜆𝑗𝜆𝑗的估计(波浪线表示估计值,下文同理)。

很容易看出方程的解就是

所以我们只需要将信息从量子态|𝜆𝑗~〉中提取出来即可。

HHL 算法步骤

下面详细介绍 HHL 算法的详细步骤,包含详细的数学推导。

数据预处理

前面提到一个一个需要是 Hermitian 的,也就是一个†=一个一个†=一个。其实这个条件可以放宽,如果一个一个不是 Hermitian 的,构造一个 ̃一个~如下:

然后求解方程

很容易验证方程的解𝑦 ⃗𝑦→一定具有如下的形式

其中一个𝑥 ⃗=𝑏 ⃗。

对于𝑏 ⃗𝑏→,因为 HHL 是量子算法,所以需要输入的是量子态|湾〉=∑𝑁j=1𝑏𝑗|J〉|𝑏〉=∑𝑗=1𝑁𝑏𝑗|𝑗〉。关于如何制备这样量子态,如何将经典信息编码到量子信息,不是本算法关心的重点,这里只假设制备好了这样的量子态。

制备算子

如何高效的制备算子是核心问题。后面将会看到,整个 HHL 算法的复杂度主要取决于算子𝑈𝑈,所以需要高效的模拟𝑈。

制备这个时间演化算子属于量子系统模拟(哈密顿量模拟)问题,本身是一个重要的量子问题,这里并不展开讨论。

在原论文中,对矩阵一个一个作出了稀疏性的限制,其目的就是能够高效的模拟。对于一般的稠密矩阵一个模拟其演化复杂度可能很高。

这里不去展开证明 QPE 的正确性,读者只需要知道 QPE 的输入是一个酉算子𝑈𝑈和其特征向量|U〉|𝑢〉,设𝑈|U〉=𝑒2π我φ|U〉𝑈|𝑢〉=𝑒2𝜋我𝜑|𝑢〉,输出是φ𝜑的估计φ ̃𝜑~。

具体来说,使用𝑡𝑡个辅助量子比特, QPE 的作用如下

其中||φ𝑗˜〉|𝜑𝑗~〉是相位φ𝑗𝜑𝑗的估计。 这里在𝑡𝑡个辅助比特后面还增加了一个辅助比特,是用于后面的旋转步骤。

为了更好的理解,这里举一个例子: 取

那么

两个相位分别是𝜑1=Δ𝑡/2𝜋和𝜑2=−Δ𝑡/2𝜋。

如果我们使用𝑡=4个辅助比特,并且取Δ𝑡=𝜋/4,那么𝜑1=1/8和𝜑2=−1/8。

两个相位的估计值分别是φ1˜=0.0010×24=2和φ2˜=0.1110×24=14。 因为相位是[0,1)之间的小数0.𝑞𝑡1𝑞𝑡2…𝑞𝑡𝑡, 乘上2𝑡得到其对应的量子态|𝑞𝑡1…𝑞𝑡𝑡〉。 需要指出的是,因为相位是模11的小数,−0.0010被映射到了0.1110,我们想要还原相位(为了还原𝜆),首先通过选取足够小的Δ𝑡使得|𝜑|<1/2,这样如果|𝑞𝑡1…𝑞𝑡𝑡〉<2𝑡−1对应正数,|𝑞𝑡1…𝑞𝑡𝑡〉>2𝑡−1对应负数。

通过简单的定量计算,我们得到如下的映射关系:

其中𝜆𝜆是一个一个的特征值,φ是的相位,φ ̃是φ的估计。

条件旋转

经过 QPE 后,整个量子态如下

想要将𝜆𝑗𝜆𝑗的信息从量子态||φ𝑗˜〉|𝜑𝑗~〉中提取出来,我们需要使用条件旋转门𝐶R(k)𝐶𝑅(𝑘),其作用效果如下

简单来说,只有当𝑘𝑘选择了正确的φ ̃,才会对后面的量子比特作用旋转操作。

因为我们不知道正确的φ ̃是什么,所以暴力的枚举所有的可能𝐶𝑅(𝑘),𝑘=1,…,2𝑡−1。

旋转的效果是很简单的

再作用一次逆 QPE,整体的量子态如下

测量

对最后一个量子比特进行测量,当测量结果是 $\left|1 \right\rangle$ 时,其概率是

测量后的量子态变为

显然此时三个量子寄存器之间不存在纠缠,如果只看第一个量子寄存器,它已经是|十〉|𝑥〉的状态了(忽略掉一个归一化系数)。

需要指出的是,旋转操作里面有一个参数𝐶𝐶,我们看到𝐶𝐶不会影响最后结果的正确性,但是却实实在在的影响了得到结果的概率𝑝1𝑝1。 我们肯定希望𝐶𝐶能够尽可能大,从而使𝑝1𝑝1尽可能大。但是𝐶≤||𝜆𝑗||𝐶≤|𝜆𝑗|,它要比所有特征值的绝对值还要小,如果没有先验信息,不知道绝对值最小的𝜆𝜆有多大,那么就只能保守的取一个很小的𝐶𝐶,然后可以通过振幅放大技术来增大得到结果的概率。

MindQuantum 实现

这里使用 MindQuantum 实现一个简单的例子,仅说明 HHL 算法的过程和正确性。

为了计算方便,我们选取一个简单的因为其时间演化算子,比较容易实现。导入所需要的各种函数。

对于量子态 $|b\rangle = \cos\theta |0\rangle + \sin\theta |1\rangle$ 的制备,可以通过一个 $R_y(2 \theta)$ 实现。

下面的代码制备了|B〉=0.6|0〉+0.8|1〉|𝑏〉=0.6|0〉+0.8|1〉并进行了测量。

下面一步步构建出完整的量子线路,取t=4𝑡=4,Δ吨=π/4Δ𝑡=𝜋/4,𝐶=0.5𝐶=0.5。

  • 首先是 QPE
  • 然后是 $CR(k)$,$k = 1, \ldots, 15$
  • 接着是 逆QPE
  • 最后测量

如何验证我们的结果的正确性?测量。因为结果是量子态|十〉|𝑥〉,目前 MindQuantum 没有相关的办法能够单独取出某一个量子比特的内部值,我们只能通过测量。

通过统计当 是 1 时, 的测量结果,我们看到 的占比是 ,和答案的预期一致。q0q5q5 = 00.36

当然这种方法只能得到振幅大小,想要得到更多信息,例如相位,需要对测量进行调整,这里不去讨论。

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值