你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

量子错误更正简介

本文介绍量子误差更正、量子误差类型以及一些常见的量子误差更正代码的基础知识。 它还提供了如何使用三量子位代码更正错误的示例。

什么是量子误差更正?

量子误差更正(QEC)是一种技术,允许我们保护量子信息免受错误的影响。 在量子计算机中,错误更正尤其重要,因为高效的量子算法利用对干扰敏感的大规模量子计算机。

量子误差更正背后的基本原则是,用于对给定信息量进行编码的位数增加。 此冗余允许代码检测和更正错误。

量子计算机的错误率通常高于经典计算机的错误率,这是由于构建和操作量子系统时所遇到的挑战。 量子门中的噪声、相干性丧失和缺陷可能会导致量子计算中的错误。 当前量子计算机在 1% 到 0.1% 的范围内具有错误率。 换句话说,这意味着平均每 100 到 1000 个量子门运算中的一个会导致错误。

量子错误的类型

量子误差有两种基本类型:位翻转和相位翻转。

当量子比特从 $\ket{0}$ 更改为 $\ket{1}$ 或反之亦然时,会发生位翻转错误。 位翻转错误也称为 $\sigma_x$ 错误,因为它们映射量子比特状态 $\sigma_x \ket{0}=\ket{{1}$ 和 $\sigma_x \ket{{1}=\ket{0}$。 这种错误类似于经典的比特翻转错误。

当量子比特更改其阶段时发生阶段翻转错误。 它们也称为 $\sigma_z$-错误,因为它们映射量子比特状态 $\sigma_z\ket{0}=\ket{{0}$ 和 $\sigma_z\ket{{1}= -\ket{1}$。 这种类型的错误没有经典模拟。

在量子计算中,量子错误可以表现为位翻转、相位翻转或两者的组合。

量子错误更正的工作原理是什么?

量子误差更正代码的工作原理是将量子信息编码为一组较大的量子比特,称为 物理量子比特。 物理量子比特的联合状态表示 逻辑量子比特

由于退相干以及量子门的不完美性,物理量子比特容易出现错误。 此代码旨在通过测量代码中的一些量子比特来检测和更正错误。

例如,假设你想要发送单量子比特消息 $\ket{0}$。 可以使用三个物理量子位对消息进行编码,发送$\ket{000}$,这被称为代码字。 此错误更正代码是 重复代码,因为消息重复了三次。

现在,想象在传输过程中发生了单个比特翻转错误,这样接收方接收到的状态就是 $\ket{010}$。 在这种情境中,收件人可能能够推断出预期的信息$\ket{000}$。 但是,如果信息受到两个位翻转错误的影响,收件人可能会得出错误的信息。 最后,如果翻转所有三个比特位,使原始信息 $\ket{000}$ 变成 $\ket{111}$,则收件人无法知道发生了错误。

QEC 代码的代码距离是将一个代码字更改为另一个代码字的最小错误数,即无法检测到的错误数。 代码距离 $d$ 可以定义为

$d = 2t + 1$

其中 $t$ 是代码可以更正的错误数。 例如,三位编码能够检测并纠正一位翻转错误,所以 $t = 1$,因此编码距离是 $d = 3$。

请注意,诸如本示例中所使用的三位编码这样的重复码,只能纠正比特翻转错误,而无法纠正相位翻转错误。 若要更正这两种类型的错误,需要更复杂的量子误差更正代码。

QEC 代码的类型

有许多不同类型的 QEC 代码,每个代码都有自己的属性和优势。 一些常见的 QEC 代码包括:

  • 重复代码: 最简单的量子误差更正代码,其中,单个量子比特通过多次重复编码为多个量子比特。 重复编码可以纠正比特翻转错误,但不能纠正相位翻转错误。

  • Shor 代码: 由 Peter Shor 开发的第一个量子误差更正代码。 它将一个逻辑量子比特编码为九个物理量子比特。 肖尔码可以纠正一位比特翻转错误或一位相位翻转错误,但它无法同时纠正这两种类型的错误。

  • Steane 代码: 这是一个七量子比特代码,能够纠正位翻转和相位翻转错误。 它具有容错能力的优势,这意味着错误更正过程本身不会引入额外的错误。

  • 图面代码: 这是一个拓扑错误更正代码,它使用量子比特的二维格来编码逻辑量子比特。 它具有较高的误差更正阈值,被认为是大规模容错量子计算最有前途的技术之一。 表面编码由 Azure Quantum 资源估算器使用。

  • 黑斯廷斯 - 哈阿码 (Hastings-Haah code):在许多情况下,这种量子纠错码在马约拉纳 (Majorana) 量子比特上,比表面码具有更好的时空成本优势。 对于基于门的指令集而言,其开销更大,这使得这种方法的效率比表面码更低。

示例:三量子位代码

三比特纠错码是一个简单的重复码,可以检测并更正单个比特翻转错误。 它通过将量子比特重复三次,将单个逻辑量子比特编码为三个物理量子比特。

提示

查看 Q# 三量子比特代码的代码示例。

假设你想要发送任意单个量子比特 $\ket{\phi}=\alpha\ket{{0} + 。 \beta\ket{1}$ 为了避免错误,你可以将基础状态 $\ket{0}$ 和 $\ket{1}$ 编码为三个量子比特的联合状态。 这两个逻辑基础状态是$\ket{0_L}=\ket{000}$和$\ket{1_L。}=\ket{111}$

因此,单个量子比特 $\ket{\phi}=\alpha\ket{{0}+ \beta\ket{1}$ 编码为:

$$\ket{\phi_L}=\alpha\ket{{000} + \beta\ket{{111}=\alpha\ket{0_L} + \beta\ket{1_L}$$

让我们分解三量子比特代码的步骤。

准备量子比特

首先,将单个量子比特 $\ket{\phi}=\alpha\ket{{0} +\beta\ket{1}$ 编码为三个量子比特的联合状态。

接下来,准备另外两个处于状态$\ket{0}$的量子比特。 因此,所有三个量子比特的全局状态为 $(\alpha\ket{0}+\beta\ket{1})\ket{0}\ket{0}=\alpha\ket{{000} + 。 \beta\ket{{100}$

最后,通过应用两个 CNOT 操作,将单个量子比特编码为三个量子比特的联合状态。 第一个 CNOT 使用第一个量子比特作为控制,并作用于第二个量子比特,生成 $\alpha\ket{000} + \beta\ket{110}$。 第二个 CNOT 使用第一个量子比特作为控制,并作用于第三个量子比特。 三个量子比特的状态现在是 $\alpha\ket{000} + \beta\ket{111}$。

发送量子比特

你发送全部三个量子比特。 假设只会发生一位比特翻转错误,那么接收到的量子比特处于以下状态之一:

状态 错误
$\alpha\ket{000} + \beta\ket{111}$ 无错误
$\alpha\ket{100} + \beta\ket{011}$ 量子位 1
$\alpha\ket{010} + \beta\ket{101}$ 量子比特 2
$\alpha\ket{001} + \beta\ket{110}$ 量子比特 3

添加辅助量子位

首先,你引入了另外两个量子比特,这些量子位在状态 $\ket{00}$中已准备好。 此辅助量子比特对用于提取错误的信息,而无需直接测量或获取有关逻辑状态的信息。

接下来,执行四个 CNOT 操作:前两个操作使用第一个和第二个接收的量子比特作为控制,并处理第一个辅助量子比特,最后两个操作使用第一和第三个接收的量子比特作为控制,并处理第二个辅助位。 所有五个量子比特的总状态现在为:

状态 错误
$(\alpha\ket{000} + \beta\ket{111})\ket{00}$ 无错误
$(\alpha\ket{100} + \beta\ket{011})\ket{11}$ 量子位 1
$(\alpha\ket{010} + \beta\ket{101})\ket{10}$ 量子比特 2
$(\alpha\ket{001} + \beta\ket{110})\ket{01}$ 量子比特 3

获取错误综合征

若要检索错误信息,可以在计算基础状态 $\ket{0}$ 和 $\ket{1}$ 中测量两个辅助量子比特。 通过执行此操作,可以恢复联合状态,这被称为错误综合症,因为它有助于诊断收到的量子比特中的错误。

现在,你知道三个接收量子比特所在的四个可能状态中的哪一个。 可以通过应用更正操作来更正错误。 在这种情况下,你处理的是比特翻转错误,所以纠正方法是对其中一个(或者不针对任何一个)量子比特应用 $\sigma_x$ 操作。

例如,如果错误综合症是$\ket{00}$,则收到的量子比特处于状态 $\alpha\ket{{000}+ \beta\ket{{111}$,这是最初发送的状态。 如果错误综合症是$\ket{11}$,则收到的量子比特处于状态 $\alpha\ket{{100}+ b。\ket{{011}$ 第一个量子比特上有一个位翻转错误,可以通过向第一个 $量子比特应用 \sigma_x$ 操作来更正此错误。

错误综合症 坍缩态 更正
$\ket{00}$ $\alpha\ket{000} + \beta\ket{111}$ 不执行任何操作
$\ket{01}$ $\alpha\ket{100} + \beta\ket{011}$ 将 \sigma_x$ 应用于$量子位 3
$\ket{10}$ $\alpha\ket{010} + \beta\ket{101}$ 将 \sigma_x$ 应用于$量子比特 2
$\ket{11}$ $\alpha\ket{001} + \beta\ket{110}$ 将 \sigma_x$ 应用于$量子比特 1

提取原始量子比特

最后,若要提取最初要传输的单个量子比特,请应用两个 CNOT 操作:一个使用第一个量子比特作为控制,另一个使用第二个量子比特作为控制,另一个使用第一个量子比特作为控制,并处理第三个量子比特。

第一个量子比特的状态现在 $\alpha\ket{0} 为 + \beta\ket{1}$,这是要传输的原始量子比特。

重要

QEC 代码不会获取关于系数$\alpha$$\beta$的任何信息,因此计算状态的叠加在纠错过程中保持不变。