量子エラー修正の概要
この記事では、量子エラー修正の基本、量子エラーの種類、一般的な量子エラー修正コードについて説明します。 また、3 量子ビット コードを使用してエラーを修正する方法の例も示します。
量子エラー修正とは
量子エラー修正 (QEC) は、量子情報をエラーから保護できる手法です。 効率的な量子アルゴリズムはノイズに敏感な大規模な量子コンピューターを使用するため、量子コンピューターではエラー修正が特に重要です。
量子エラー修正の背後にある基本的な原則は、特定の量の情報をエンコードするために使用されるビット数が増加することです。 この冗長性により、コードはエラーを検出して修正できます。
量子コンピューターのエラー率は、通常、量子システムの構築と運用に関連する課題により、従来のコンピューターのエラーよりも高くなります。 量子ゲートのノイズ、デコヒーレンス、不完全性は、量子計算でエラーを引き起こす可能性があります。 現在の量子コンピューターのエラー率は、1% から 0.1% の範囲です。 つまり、平均して 100 ~ 1,000 個の量子ゲート演算の 1 つでエラーが発生します。
量子エラーの種類
量子エラーには、ビット フリップと位相フリップの 2 つの基本的な種類があります。
ビット フリップ エラーは、量子ビットが $\ket{0}$ から $\ket{1}$ に変更された場合、またはその逆に発生します。 ビット フリップ エラーは、量子ビットの状態を $\sigma_x \ket{0}=\ket{{1}$ と $\sigma_x \ket{{1}=\ket{0}$ にマップするため、$\sigma_x$ エラーとも呼ばれます。 このエラーは、従来のビット フリップ エラーに似ています。
位相反転エラーは、量子ビットがその位相を変更したときに発生します。 量子ビットの状態を $\sigma_z \ket{0}=\ket{{0}$ と $\sigma_z \ket{{1}= -\ket{1}$ にマップするため、これらは $\sigma_z$-errors とも呼ばれます。 この種のエラーには古典的なアナログはありません。
量子コンピューティングでは、量子エラーはビット フリップ、位相反転、またはその両方の組み合わせとして現れる可能性があります。
量子エラー修正のしくみ
量子エラー修正コードは、量子情報を、 物理量子ビットと呼ばれるより大きな量子ビット セットにエンコードすることによって機能します。 物理量子ビットの結合状態は、 論理量子ビットを表します。
物理量子ビットは、量子ゲートのデコヒーレンスと不完全さのためにエラーの対象となります。 コードは、コード内の量子ビットの一部を測定することによってエラーを検出および修正できるように設計されています。
たとえば、単一量子ビット メッセージを $\ket{0}$送信するとします。 3 つの物理量子ビットを使用してメッセージをエンコードし、codeword と呼ばれる$\ket{000}$を送信。 このエラー修正コードは、メッセージが 3 回繰り返されるため、 繰り返しコードです。
次に、受信者が受け取るものが $\ket{010}$状態になるように、送信中に 1 つのビット フリップ エラーが発生するとします。 このシナリオでは、受信者は、目的のメッセージが $\ket{000}$されていることを推測できる場合があります。 ただし、メッセージに 2 つのビット フリップ エラーが発生した場合、受信者は正しくないメッセージを推論する可能性があります。 最後に、元のメッセージ $\ket{000}$ が $\ket{111}$になるように 3 つのビットがすべて反転されている場合、受信者はエラーが発生したことを知る方法がありません。
QEC コードのコード距離は、1 つのコードワードを別のコードワードに変更するエラーの最小数、つまり検出できないエラーの数です。 コード距離 $d$ は次のように定義できます。
$$d = 2t + 1$$
ここで $t$ は、コードが修正できるエラーの数です。 たとえば、3 ビット コードは 1 つのビット フリップ エラーを検出して修正できるため、$= 1$ではないため、コードの距離は 3 =$$。
この例で使用されている 3 ビット コードなどの繰り返しコードでは、ビット フリップ エラーのみを修正でき、フェーズ フリップ エラーは修正できません。 両方の種類のエラーを修正するには、より高度な量子エラー修正コードが必要です。
QEC コードの種類
QEC コードにはさまざまな種類があり、それぞれに独自のプロパティと利点があります。 一般的な QEC コードは次のとおりです。
繰り返しコード: 1 つの量子ビットを複数回繰り返して複数の量子ビットにエンコードする最も単純な量子エラー修正コードです。 繰り返しコードはビット フリップ エラーを修正できますが、フェーズ フリップ エラーは修正できません。
Shor コード: Peter Shor によって開発された最初の量子エラー修正コード。 1 つの論理量子ビットを 9 つの物理量子ビットにエンコードします。 Shor コードでは、1 ビット フリップ エラーまたは 1 フェーズ フリップ エラーを修正できますが、両方の種類のエラーを同時に修正することはできません。
Steane code: これは、ビット フリップエラーと位相フリップ エラーの両方を修正できる 7 量子ビット コードです。 フォールト トレラントであるという利点があります。つまり、エラー修正プロセス自体で余分なエラーが発生することはありません。
Surface code: これは、量子ビットの 2 次元格子を使用して論理量子ビットをエンコードするトポロジエラー修正コードです。 エラー修正しきい値が高く、大規模でフォールト トレラントな量子コンピューティングの最も有望な手法の 1 つと考えられています。 サーフェス コードは、 Azure Quantum Resource Estimator によって使用されます。
Hastings-Haah code: この量子エラー修正コードは、多くのレジームの Majorana 量子ビットのサーフェス コードよりも優れた時空間コストを提供します。 ゲート ベースの命令セットの場合、オーバーヘッドが大きいため、このアプローチはサーフェス コードよりも効率が低くなります。
例: 3 量子ビット コード
3 量子ビットエラー修正コードは、1 ビットフリップ エラーを検出して修正できる単純な繰り返しコードです。 量子ビットを 3 回繰り返すことで、1 つの論理量子ビットを 3 つの物理量子ビットにエンコードします。
ヒント
3 量子ビット コードの Q# コード サンプルを確認。
任意の単一量子ビット $\ket{\phi}=\alpha\ket{{0} + \beta\ket{1}$を送信するとします。 エラーを回避するには、基底状態を $\ket{0}$ し、 $\ket{1}$ を 3 量子ビットの結合状態にエンコードします。 2 つの論理基礎状態は、 $\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}$$
3 量子ビット コードの手順を分解しましょう。
量子ビットの準備
まず、1 つの量子ビット $\ket{\phi}=\alpha\ket{{0} +\beta\ket{1}$ を 3 つの量子ビットの結合状態にエンコードします。
次に、状態 $\ket{0}$にさらに 2 つの量子ビットを準備します。 したがって、3 つの量子ビットのグローバル状態は、 $(\alpha\ket{0} +\beta\ket{1})\ket{0}\ket{0}=\alpha\ket{{000} + \beta\ket{{100}$です。
最後に、2 つの CNOT 演算を適用して、3 つの量子ビットの結合状態に 1 つの量子ビットをエンコードします。 最初の CNOT は、最初の量子ビットを制御として使用し、2 番目の量子ビットに作用し、 $\alpha\ket{000} + \beta\ket{110}$を生成します。 2 番目の CNOT は、最初の量子ビットを制御として使用し、3 番目の量子ビットに作用します。 3 つの量子ビットの状態が $\alpha\ket{000} + \beta\ket{111}$になりました。
量子ビットの送信
3 つの量子ビットをすべて送信します。 1 ビットのフリップ エラーしか発生できないと仮定すると、受信した量子ビットは次のいずれかの状態になります。
都道府県 | エラー |
---|---|
$\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}$で準備された、さらに 2 つの量子ビットを導入します。 この補助量子ビットのペアは、論理状態に関する情報を直接測定または取得することなく、エラーの情報を抽出するために使用されます。
次に、4 つの CNOT 操作を実行します。最初の 2 つの操作は、1 番目と 2 番目の受信量子ビットを制御として使用し、最初の補助量子ビットに作用し、最後の 2 つの操作では、1 番目と 3 番目に受信した量子ビットを制御として使用し、2 番目の補助ビットに作用します。 これで、5 つの量子ビットの合計状態は次のようになります。
都道府県 | エラー |
---|---|
$(\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}$の 2 つの補助量子ビットを測定します。 これを行うことで、 エラー症候群と呼ばれる共同状態を回復します 受信した量子ビットのエラーを診断するのに役立ちます。
これで、受信した 3 つの量子ビットが 4 つの状態のうちどれにあるかがわかります。 修正操作を適用することで、エラーを修正できます。 この場合、ビット フリップ エラーを処理するため、修正は量子ビットの 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}$ | 量子ビット 3 に $\sigma_x$ を適用する |
$\ket{10}$ | $\alpha\ket{010} + \beta\ket{101}$ | 量子ビット 2 に $\sigma_x$ を適用する |
$\ket{11}$ | $\alpha\ket{001} + \beta\ket{110}$ | 量子ビット 1 に $\sigma_x$ を適用する |
元の量子ビットの抽出
最後に、最初に送信する 1 つの量子ビットを抽出するには、2 つの CNOT 操作を適用します。1 つは最初の量子ビットを制御として使用し、もう 1 つは 2 番目の量子ビットに作用し、もう 1 つは制御として最初の量子ビットを使用し、3 番目の量子ビットに作用します。
最初の量子ビットの状態が $\alpha\ket{0} + \beta\ket{1}$ になりました。これは、送信する元の量子ビットです。
重要
QEC コードは、 $\alpha$ 係数と $\beta$に関する情報を取得しないため、計算状態の重ね合わせは修正時にそのまま残ります。