{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 纠缠蒸馏 -- LOCCNet 设计协议\n", "\n", " Copyright (c) 2021 Institute for Quantum Computing, Baidu Inc. All Rights Reserved. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 概述\n", "\n", "量子纠缠在量子通信,量子计算和其他许多量子技术中起着至关重要的作用。因此,如果我们想在这些领域构建实际应用,探测、传输和分发量子纠缠是必不可少的任务。但是在实际操作中,误差是不可避免的。这些误差可能来自于生产纠缠设备的缺陷,也可能是传输量子纠缠时的信道噪声。随着传输距离的增加,噪声会导致纠缠资源的不断减少。而纠缠蒸馏(entanglement distillation)这项技术的开发目的正是为了补偿各种噪声引起的纠缠资源消耗。基本的实现原理为通过操作多对含噪的纠缠态将纠缠资源集中在其中一对纠缠态上,并使之尽可能的接近**最大纠缠态**(qubit 情况下,通常是大家熟知的贝尔态)。从这个意义上讲,也可以将纠缠蒸馏看作一种提纯/纠错协议。此过程通常由 Alice 和 Bob 两个远程参与方执行,由于双方在空间上会相隔一定的距离,因此仅允许本地操作和经典通信(LOCC)[1]。纠缠蒸馏的概念最早由 Bennett 等人于 1996 年提出 [2],最初的协议被称为 **BBPSSW 协议**。后来 Deutsch 等人提出了一个新的蒸馏协议,即 DEJMPS 协议 [3]。\n", "\n", "但是,BBPSSW 协议和 DEJMPS 协议都是针对特定噪声态设计的,比如:BBPSSW 是针对 isotropic 态设计而 DEJMPS 协议是针对贝尔对角态(Bell-diagonal state)设计的。实际上,设计出一个通用的能够应对所有噪声进行提纯的协议几乎是不可能的。同时,由于 LOCC 协议结构的复杂性,每次遇到新种类的噪声时用纸和笔重新设计一个蒸馏协议是非常困难的。LOCCNet 作为一个设计 LOCC 协议的机器学习框架,就是为了解决上述问题而存在的。在 LOCCNet 的加持下,只要给定纠缠态中噪声的数学形式,设计对应的蒸馏方案就会变成一件十分简单的事情。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 预备知识\n", "\n", "在谈论纠缠蒸馏的时候,我们通常使用蒸馏后的输出态 $\\rho_{out}$ 和贝尔态 $|\\Phi^+\\rangle$ 之间的**保真度** $F$ 来量化纠缠蒸馏协议的好坏,保真度 $F$ 定义为\n", "\n", "$$\n", "F(\\rho_{out}, \\Phi^+) \\equiv \\langle \\Phi^+|\\rho_{out}|\\Phi^+\\rangle.\n", "\\tag{1}\n", "$$\n", "\n", "**注意:** 通常情况下,LOCC 纠缠蒸馏协议并不是在所有测量结果下都算成功,一般记成功概率为 $p_{succ}$。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 协议的设计逻辑\n", "\n", "在本教程中,我们用4份相同的 **isotropic 态** (也被称为 Werner 态)蒸馏出一份具有更高保真度输出态(相较于初始态,输出态更接近贝尔态 $|\\Phi^+\\rangle$)。这种协议被称为 $4\\rightarrow 1$ LOCC 蒸馏协议。相对应的,BBPSSW 和 DEJMPS 协议属于 $2\\rightarrow 1$ LOCC 蒸馏协议(因为一开始使用了2份相同的初始态)。\n", "Isotropic 态是由 $|\\Phi^+\\rangle$ 和完全混合态(白噪声)$I/4$ 组成,\n", "\n", "$$\n", "\\rho_{\\text{iso}}(p) = p\\lvert\\Phi^+\\rangle \\langle\\Phi^+\\rvert + (1-p)\\frac{I}{4}, \\quad p \\in [0,1]\n", "\\tag{2}\n", "$$\n", "\n", "在我们的例子中 $p=0.7$,于是输入态就是\n", "\n", "$$\n", "\\rho_{in} = \\rho_{\\text{iso}}(0.7)= 0.7\\lvert\\Phi^+\\rangle \\langle\\Phi^+\\rvert + 0.075 I.\n", "\\tag{3}\n", "$$\n", "\n", "为了通过 LOCC 完成纠缠蒸馏,我们需要两位身处于两个地方的参与者 $A$ (Alice) 和 $B$ (Bob)。在最开始的时候,他们共享四份纠缠量子比特对 $\\rho_{A_0B_0}, \\rho_{A_1B_1}, \\rho_{A_2B_2}$ 和 $\\rho_{A_3B_3}$,每一份的初始态都为 $\\rho_{in} = \\rho_{\\text{iso}}(p =0.7)$。如此,Alice 手中有四个量子比特,分别是 $A_0, A_1, A_2, A_3$;对应地,Bob 手中也有四个量子比特,$B_0, B_1, B_2, B_3$。完成上述初始化后,Alice 和 Bob 需要选择通讯的轮数(communication round)$r$,即他们需要交换经典信息(可以是各自的测量结果)多少次。为了方便讨论,这里我们选择通讯轮数为 1。接下来, Alice 和 Bob 需要进行下述操作使得 LOCCNet 学习出最优的本地操作(local operation)。更准确的说法是学习出代表本地操作的量子神经网络(quantum neural network, QNN)的最优参数。\n", "\n", "1. 设计一个 QNN 架构 $U(\\boldsymbol\\theta)$ 如图 1所示,其中 $R(\\theta)$ 表示单比特通用门。我们可以通过调用 Paddle Quantum 中的 `u3(theta, phi, lam, which_qubit)` 来实现该旋转门。\n", "2. 在量子比特通过步骤 1. 中设计的 QNN 电路后,Alice 和 Bob 需要对除去 $A_0$ 和 $B_0$ 的剩余量子比特进行测量。测量结果 $M = \\{m_{A_1}m_{B_1}, m_{A_2}m_{B_2}, m_{A_3}m_{B_3}\\}$ 需要通过经典方式告知对方。\n", "3. 如果每对的测量结果都相同,即 $m_{A_1}m_{B_1}, m_{A_2}m_{B_2}, m_{A_3}m_{B_3}$ 的结果要么为 00, 要么为 11。这种情况下,我们称蒸馏成功,然后剩余的一对量子比特 $A_0B_0$ 作为输出态被保存,标记为 $\\rho_{AB}'$。如果测量结果不满足上述判定结果,则蒸馏失败,需要丢弃量子比特 $A_0B_0$。\n", "4. 这里,我们在所以蒸馏成功的情况下定义一个累积的损失函数 $L = \\sum_{m_{A_j}m_{B_j}\\in \\{00,11\\}} \\big(1- \\text{Tr}(\\rho_{tar}\\rho_{AB}')\\big)$,其中 $\\text{Tr}(\\rho_{tar}\\rho_{AB}')$ 表示当前态 $\\rho_{AB}'$ 和目标态 $\\rho_{tar}=\\lvert\\Phi^+\\rangle \\langle \\Phi^+\\rvert$ 之间的态重叠。\n", "5. 使用梯度下降的优化方案来更新 QNN 中的参数使得损失函数最小化。\n", "6. 重复步骤 1-5 直至损失函数收敛。\n", "7. 输出蒸馏后的态 $\\rho_{out} = \\rho'_{A_0B_0}$。\n", "\n", "