\u200E
基于量桨搭建AI量子通信模拟平台,优化量子通信协议
发布日期:2021-07-14T10:30:39.000+0000 浏览量:932次



项目背景




现阶段量子通讯协议的设计和优化依然停留在人工处理的阶段,距离迈向系统化工程处理依然有着不小的距离。导致目前量子通讯协议从研发到实验验证这一整套流程面临着周期长、成本高等问题。系统化的搭建模拟平台和引入先进的人工智能技术将会有效帮助缓解以上问题,同时提升量子通讯协议的开发效率。这也是当前量子信息处理的前沿研究领域之一。

本项目依托Paddle Quantum搭建人工智能量子通信模拟平台,优化量子通信协议。



量子隐形传态






1.基本任务


量子隐形传态(Quantum Teleportation)是可以通过本地操作和经典通信(LOCC)协议完成的量子通信协议模拟的一种方式。该协议借助提前制备好的量子纠缠资源,在两个空间上分离的通信节点(仅允许经典信道,例如互联网、手机短信、邮件等形式)之间传输量子信息。

量子隐形传态协议最初由 C. H. Bennett 等人在 1993 年提出 [1],并在 1997 年通过基于光子的实验平台进行了验证 [2-3]。其主要工作流程如图1所示。传输过程中需要 2 个通信节点或参与方,即 Alice 和 Bob。简单起见,我们仅考虑传输一个单量子比特的量子态 ,这样整个系统总共需要 3 个量子比特,包括提前共享给 Alice 和 Bob 的量子纠缠资源。Alice 持有量子比特 A 和 C, Bob 持有量子比特B。

图 1:量子隐形传态: 传输量子态从 Alice 到 Bob

注:量子隐形传态协议仅传输量子信息,而非在物理上直接传输量子比特。


步骤 I: 一开始,整个量子系统的状态可以描述为
其中 Alice 要传输的量子态是 并且

步骤 II: Alice 在她持有的两个量子比特上作用 CNOT 门,得到作用后的量子态为
步骤 III: 接着 Alice 在她持有的量子比特  上作用 Hadamard 门,使得整个系统的状态变为
为了更好地观察后续的测量结果,不妨将上述态重新写为

步骤 IV: Alice 在计算基(computational basis) 上测量她的两个量子比特并将结果 通过经典信道发送给 Bob 。总共有 4 种不同的可能性: 然后, Bob 根据收到的消息在其量子比特  上进行对应的操作。
  • 如果测量结果为 ,则 Bob 的态将为
    无需任何操作即可完成传输。
  • 如果测量结果为 ,则 Bob 的态将为
    Bob 需要在其量子比特上作用  门。
  • 如果测量结果为 ,则 Bob 的态将为
    Bob 需要在其量子比特上作用  门。
  • 如果测量结果为 ,则 Bob 的态将为
    Bob 需要在其量子比特上执行  门操作,然后执行  门操作。



2.通信协议模拟


通信协议模拟采用了量桨(Paddle Quantum),它是基于百度飞桨开发的量子机器学习工具集,支持量子神经网络的搭建与训练,提供易用的量子机器学习开发套件与组合优化、量子化学等前沿量子应用工具集。

2021年2月,百度量子登台量子信息处理顶会QIP2021。量桨重点新增分布式量子信息处理模组LOCCNet,支持量子纠缠蒸馏、量子态分辨、量子隐形传态等核心量子信息协议的便捷开发。借助深度学习对量子技术的赋能,量桨LOCCNet已经被用于发现新的纠缠提纯方案,相比业界现有方案取得了更高的提纯保真度。

量桨官网地址:
https://qml.baidu.com/

Paddle Quantum的GitHub地址:
https://github.com/PaddlePaddle/Quantum

(1)安装 Paddle Quantum

推荐通过 pip 完成安装:

   
     
pip install paddle-quantum

用户也可以选择下载全部文件后,进行本地安装:

   
     
git clone http://github.com/PaddlePaddle/quantum
cd quantum
pip install -e .


(2)Paddle Quantum 代码实现:

   
     
import numpy as np
from paddle_quantum.locc import LoccNet
from paddle import matmul, trace
import paddle
from paddle_quantum.utils import state_fidelity
from paddle_quantum.state import bell_state, isotropic_state, density_op_random
#初始化整个量子系统,然后定义量子电路和隐形传态协议。
class LOCC(LoccNet):
    def __init__(self):
        super(LOCC, self).__init__()

        # 添加第一个参与方 Alice
        # 第一个参数 2 代表着 Alice 手里有几个量子比特
        # 第二个参数代表着参与方的名字
        self.add_new_party(2, party_name="Alice")

        # 添加第二个参与方 Bob
        # 第一个参数 1 代表着 Bob 手里有几个量子比特
        # 第二个参数代表着参与方的名字
        self.add_new_party(1, party_name="Bob")


        # 准备一个贝尔态
        _state = paddle.to_tensor(bell_state(2))
        # _state = paddle.to_tensor(isotropic_state(2, 0.8))


        # 随机制备传输用的纯态 (rank =1)
        random_state = density_op_random(n=1, real_or_complex=2, rank=1)
        self.state_C = paddle.to_tensor(random_state)

        # 通过分配上述制备好的量子态初始化整个量子系统
        # 这里 ("Alice", 0) 即表示量子比特 C
        # 这里 ("Alice", 1) 即表示量子比特 A
        # 这里 ("Bob", 0) 即表示量子比特 B
        # print('提前分配好的纠缠态为:\n', _state.numpy())
        self.set_init_state(self.state_C, [("Alice"0)])
        self.set_init_state(_state, [("Alice"1), ("Bob"0)])


    def teleportation(self):
        status = self.init_status

        # 设置 Alice 的本地操作
        cirA = self.create_ansatz("Alice")
        cirA.cnot([01])
        cirA.h(0)

        # 运行上述电路
        status = cirA.run(status)

        # Alice 在计算基上测量她所持有的两个量子比特 C 还有 A
        # 得到并记录四种结果 00,01,10,11
        status_A = self.measure(status, [("Alice"0), ("Alice"1)], ["00""01""10""11"])

        # 用于记录平均保真度
        fid_list = []

        # Bob 根据 Alice 的测量结果选择不同的门作用在自己的量子比特上
        for i, s in enumerate(status_A):

            # 判断语句根据 Alice 的测量结果,进行不同操作 
            if status_A[i].measured_result == '00':

                # 创建 Bob 的本地操作
                cirB = self.create_ansatz("Bob")

                # 执行电路
                status_B = cirB.run(s) 

                # 仅保留 Bob 的量子比特 B
                status_fin = self.partial_state(status_B, [("Bob"0)])

                # 计算初始态和传输后态之间的保真度
                fid = state_fidelity(self.state_C.numpy(), status_fin.state.numpy())**2
                fid_list.append(fid * status_fin.prob.numpy()[0])

            # 以下操作类似
            elif status_A[i].measured_result == '01':
                cirB = self.create_ansatz("Bob")
                cirB.x(0)
                status_B = cirB.run(s)
                status_fin = self.partial_state(status_B, [("Bob"0)])
                fid = state_fidelity(self.state_C.numpy(), status_fin.state.numpy())**2
                fid_list.append(fid * status_fin.prob.numpy()[0])
            elif status_A[i].measured_result == '10':
                cirB = self.create_ansatz("Bob")
                cirB.z(0)
                status_B = cirB.run(s)
                status_fin = self.partial_state(status_B, [("Bob"0)])
                fid = state_fidelity(self.state_C.numpy(), status_fin.state.numpy())**2
                fid_list.append(fid * status_fin.prob.numpy()[0])
            elif status_A[i].measured_result == '11':
                cirB = self.create_ansatz("Bob")
                cirB.x(0)
                cirB.z(0)
                status_B = cirB.run(s)
                status_fin = self.partial_state(status_B, [("Bob"0)])
                fid = state_fidelity(self.state_C.numpy(), status_fin.state.numpy())**2
                fid_list.append(fid * status_fin.prob.numpy()[0])
        fid_avg = sum(fid_list)
        return fid_avg
#然后,我们随机生成 200 个量子纯态,并使用态保真度来衡量传输协议好坏
SEED = 999              # 固定随机数
num_state = 200         # 设置随机态的生成数量
list_fid = []           # 用于记录保真度
np.random.seed(SEED)
# 开始采样 
for idx in range(num_state):
    list_fid.append(LOCC().teleportation())

print('平均保真度 =', np.around(sum(list_fid)/len(list_fid), 4), ', 标准差 =', np.std(list_fid))

注:需要指出的是,该协议的有效性取决于提前分配好的贝尔态品质。感兴趣的读者可以将纠缠态从 bell_state(2) 更改为 isotropic_state(2, p),并测试观察在贝尔态中出现的量子噪声将如何影响该协议的性能。

(3)训练一个自定义的量子隐形传态协议的过程

  • Alice 对她所持有的两个量子比特作用两量子比特通用门。
  • 然后 Alice 在计算基上测量她的两个量子比特,并通过经典信道与 Bob 交流。
  • 共计有 4 种可能的测量结果: 。Bob 需要根据这些测量结果采取不同的本地操作。在 Bob 进行操作后,记其量子态为
  • 计算 (纯态)之间的量子态重叠(state overlap)并记为O 。
    由于 LOCCNet 框架目前仅支持密度矩阵形式,因此我们必须将它们重写为 。然后可以得到 。对于纯态,此距离度量就是保真度 (fidelity)。
  • 将损失函数设置为 4 种可能测量结果的累加,即 ,并使用基于梯度的优化方法更新 Alice 和 Bob 本地操作中的参数,从而使得损失函数最小化。
  • 重复步骤 1-5,直到损失函数收敛。
  • 生成一组随机的态 ,并以平均保真度对训练出的传输协议进行基准测试。

详细的代码可参考:量子隐形传态
https://aistudio.baidu.com/aistudio/projectdetail/1831786



结论




从以上实验的结果可以看出,我基于 LOCCNet 成功地学习出了量子隐形传态协议。最初的隐形传态协议旨在传输单量子比特量子态,无法直接推广到多量子比特的情形。相比之下,LOCCNet 为寻找多量子比特情形下的隐形传态协议提供了可能, 这种场景是很难人工去设计的。因为数学形式复杂,本地量子操作和通讯结果组合的可能性太多了,搜索空间很大。除了学习量子通讯协议之外,LOCCNet 还可以支持多种量子纠缠资源处理的应用场景。感兴趣的读者可以移步至:https://qml.baidu.com/tutorials/loccnet/loccnet-framework.html和论文[5]。




参考文献:


[1] Bennett, Charles H., et al. "Teleporting an unknown quantum state via dual classical and Einstein-Podolsky-Rosen channels." Physical Review Letters 70.13 (1993): 1895.
[2] Boschi, Danilo, et al. "Experimental realization of teleporting an unknown pure quantum state via dual classical and Einstein-Podolsky-Rosen channels." Physical Review Letters 80.6 (1998): 1121.
[3] Bouwmeester, Dik, et al. "Experimental quantum teleportation." Nature 390.6660 (1997): 575-579.
[4] Vidal, Guifre, and Christopher M. Dawson. "Universal quantum circuit for two-qubit transformations with three controlled-NOT gates." Physical Review A 69.1 (2004): 010301.
[5] Xuanqiang Zhao(Baidu, IQC, Beijing), Benchi Zhao(Baidu, IQC, Beijing), Zihe Wang(Baidu, IQC, Beijing), Zhixin Song(Baidu, IQC, Beijing), Xin Wang(Baidu, IQC, Beijing).  LOCCNet: a machine learning framework for distributed quantum information processing.  e-Print: 2101.12190 [quant-ph]

如在使用过程中有问题,可加入官方QQ群进行交流:793866180

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

·飞桨官网地址·
https://www.paddlepaddle.org.cn/

·飞桨开源框架项目地址·
GitHub: https://github.com/PaddlePaddle/Paddle 
Gitee: https://gitee.com/paddlepaddle/Paddle

长按上方二维码立即star!


飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨企业版针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。


END