Skip main navigation

New lower prices! Get up to 50% off 1000s of courses. 

Explore courses

Quantum codes

How can we take what we know to design a complete quantum error correcting code, and a computer to run it?

Finally, we have the tools to understand quantum error correcting codes. We know what types of errors happen, and how to measure the parity of groups of qubits without destroying the superposition and entanglement, at least for certain carefully constructed quantum states. So how do we design a complete code?

The triple redundancy code

In the prior article, we saw the triple redundancy code that encodes (|0rangle) into the three-qubit state (|000rangle) and (|1rangle) into (|111rangle). Is this a complete code?

Let’s examine its error protection properties: if a single bit is flipped, we have a state such as (|101rangle), and the parity extraction will find parity 1 on the first two qubits and also on the second two qubits. Since a good state has parity 0, we know that both pairs have a bit flip error, and it’s easy to see that this implies that it must be the middle qubit is in error. We can easily correct it by flipping the middle qubit again.

That takes care of what we call (X) errors. However, (Z) errors, or phase flips, are problematic. A (|000rangle) state would be unchanged, but a (|111rangle) state becomes ((pi)|111rangle), which appears innocuous but in practice destroys our ability to correctly create the interference on which quantum algorithms depend.

The parity extraction operations will see a ((pi)|111rangle) state exactly like a (|111rangle). (Or, for that matter, a ((pi)|101rangle) exactly like a (|101rangle) state.) Phase flip errors, therefore, will go undetected.

The phase flip error takes a (|+rangle) state to a (|-rangle) state, and vice versa. Normal parity is calculated along the (Z) axis, but we can take the parity along the (X) axis in a similar fashion. Turn a (|+rangle) state into a (|+++rangle) state and a (|-rangle) state into a (|—rangle) state and apply similar parity extraction methods.

Peter Shor recognized that we can use triple redundancy on each of the two axes (X) and (Z) in order to detect both phase flips and bit flips. First, encode (|0ranglerightarrow |000rangle) and (|1ranglerightarrow |111rangle) using two CNOT gates. Then take each of the three qubits, apply a Hadamard gate (which swaps the (X) and (Z) axes), and expand each of the three qubits into a set of three, (|+ranglerightarrow |+++rangle) and (|-ranglerightarrow |111rangle). Now we have nine physical qubits that are encoding one logical qubit, and the Hamming distance between the code words is 3, so we describe the code as ([[9,1,3]]).

Since the code distance is 3, this code can detect a single bit flip, a single phase flip, or one of each. With a (9:1) consumption of space, it’s not a terribly efficient code, but it’s one of the simplest to understand. Beyond this already significant cost, for reasons that we won’t go into in detail, extracting the parity involves operations can result in the propagation of errors from qubit to qubit. To keep this from happening, we use still more qubits in specially prepared states, so the total overhead is (18:1).

Surface Codes

The two-layer, triple redundancy Shor code gives you the flavor of how quantum error correction works. Many different kinds of codes, most building on known classical codes in novel ways, have been developed over the last two decades, by researchers including Charles Bennett, Andrew Steane, Dave Bacon, and a long list of others. John Preskill, Todd Brun, Barbara Terhal, and others are advancing the theory of what it means for a system to be fault tolerant. There are books and conferences on the topic for specialists. We have no need to go beyond the basic ideas in this course, but one particular class of error correcting codes has generated a lot of excitement over the last fifteen years, and is worth mentioning.

Surface codes, or topological codes, build on ideas by Alexei Kitaev and his collaborators. They recognized that if you laid qubits out on the surface of a torus (a donut shape), you could store one logical qubit in the entire set. To maintain the state and check the parity bits to see if the state has developed an error, each physical qubit only has to interact with four neighbors. The code turns out to have a very high threshold, or level of errors that it can tolerate.

Of course, it’s not practical to create a large donut and put many qubits on its surface for every logical qubit we would like to have; algorithms such as Shor take thousands of logical qubits, and we have no way of connecting those donuts to each other.

Robert Raussendorf and his collaborators figured out how to create mathematically similar arrangements with qubits laid out on a flat surface, and how to put many logical qubits into one large surface of stationary qubits, or by entangling photons into a 3-D lattice. Austin Fowler and his collaborators (including us) have extended the engineering of the 2-D code to make it practical. In the next step, when Simon Devitt and I discuss the history of error correcting codes, you will see an animation of this code.

Because the surface codes tolerate high error rates and can be laid out in this nearest neighbor fashion, many researchers (including us) believe that they are the most attractive for real systems. Over the last decade, Kae Nemoto and members of her group, especially Simon Devitt, have been among the fiercest advocates for the code and have worked on designs using single photons and NV diamond centers. Designs have also been proposed for ion traps, and IBM and Google are pursuing the code for superconducting systems.

The optical quantum computers discussed by Professor Furusawa are advancing toward using the 3-D version of the surface code, and the superconducting devices discussed by Professor Nakamura are aiming toward the 2-D surface code, which is ideally suited to qubits that can only interact with their nearest neighbors in such a layout.

 

量子コード

最後に、量子誤り訂正符号を理解するためのツールがあります。少なくとも注意深く構成された量子状態については、どのようなタイプのエラーが発生し、どのように量子ビットのグループのパリティを測定するかを知っています。では、完全なコードをどのように設計するのでしょうか?

3重冗長コード

前回の記事では、(vert0rangle)を3量子ビット状態(vert000rangle)と(vert1rangle)を(vert111rangle)にエンコードする3重冗長コードを見ました。これは完全なコードですか?

そのエラー保護プロパティを調べてみましょう。単一のビットが反転された場合、(vert101rangle)のような状態があり、パリティ抽出は最初の2つの量子ビットでパリティ1を見つけ、2番目の2つの量子ビットでも見つけます。良好な状態はパリティ0なので、両方のペアにビットフリップエラーがあることがわかります。このことは、真ん中の量子ビットがエラーになっていることを意味することが容易にわかります。真ん中の量子ビットを反転させることで簡単に修正できます。

これは(X)エラーと呼ばれるものを処理します。しかし、(Z)エラー、すなわち位相反転は問題があります。(vert000rangle)だと状態はは変更されませんが、(vert111rangle)だと状態は ((pi)vert111rangle)になりますが、実際には無害に見えますが、実際には、アルゴリズムに依存します。

パリティ抽出操作では、(vert111rangle)と((pi)vert111rangle)は全く同じ状態が表示されます。 (つまり、(vert101rangle)は((pi)vert101rangle)と全く同じ状態です。)したがって、位相のフリップエラーは検出されません。

フェーズフリップエラーは、(vert +rangle)の状態から(vert -rangle)の状態になり、逆も同様です。 通常のパリティは Z 軸に沿って計算されますが、同様の方法で X 軸に沿ってパリティを取ることができます。(vert +rangle)を(vert +++rangle)に、(vert -rangle)を(vert —rangle)に変え、同様のパリティ抽出法を適用します。

Peter Shorは、位相反転とビット反転の両方を検出するために、2つの軸(X)と(Z)それぞれに三重冗長性を使用できることを発見しました。まず、2つのCNOTゲートを使用して、(vert0ranglerightarrow vert000rangle)と(vert1ranglerightarrow vert111rangle)をエンコードします。次に3つの量子ビットを取り、アダマールゲート((X)軸と(Z)軸を入れ替えます)を適用し、3つの量子ビットをそれぞれ(vert+ranglerightarrow vert+++rangle)と (vert-ranglerightarrow vert111rangle)です。今度は、論理量子ビットを符号化する9つの物理量子ビットがあり、コードワード間のハミング距離は3であるので、コードを [[9,1,3]] と記述します。

コード距離は3であるため、このコードは1ビットフリップ、1フェーズフリップ、またはそれぞれの1つを検出できます。スペースの(9:1)の消費で、効率的なコードではありませんが、理解するのが最も簡単です。この重要なコストを超えて、詳細には取り上げないため、パリティを抽出すると、演算によって量子ビットから量子ビットへのエラーが伝播する可能性があります。これが起こらないようにするために、私たちは準備状態でもっと多くの量子ビットを使用するので、総オーバーヘッドは(18:1)です。

サーフェースコード

2層、3重冗長Shorコードは、量子エラー訂正がどのように機能するかを示します。Charles Bennett、Andrew Steane、Dave Bacon、その他の長いリストを含む研究者によって、斬新な方法で知られている古典的なコードで構築された多くの異なる種類のコードが過去20年間に開発されました。John Preskill、Todd Brun、Barbara Terhalなどは、システムがフォールトトレラントであることが何を意味するのかという理論を発展させています。専門家のこの話題に関する書籍や会議があります。このコースで基本的な理論以上を行う必要はありませんが、誤り訂正符号の特定のクラスの1つが過去15年間に多くの興奮をもたらし、言及する価値があります。

サーフェースコード、またはトポロジカルコードは、Alexei Kitaevとその共同研究者のアイデアを基にしています。彼らは、トーラス(ドーナツ形状)の表面に量子ビットを置くと、セット全体に1つの論理量子ビットを格納できることを認識しました。状態を維持し、状態がエラーを発生したかどうかを見るためにパリティビットをチェックするために、各物理的量子ビットは4つの近隣とだけ対話しなければならないです。このコードは、非常に高いしきい値またはエラーのレベルを許容することができます。

もちろん、大規模なドーナツを作り、それが欲しいと思っているすべての論理量子ビットについて、その表面に多くの量子ビットを置くことは現実的ではありません。 Shorのようなアルゴリズムは何千もの論理的な量子ビットを使い、それらのドーナツを互いに接続する方法はありません。

Robert Raussendorfと彼の共同研究者たちは、平らな表面上に配置された量子ビットを用いて数学的に同様の配置を作り出す方法と、静止量子ビットの大きな表面に多くの論理量子ビットを入れたり、光子を3次元格子に絡ませる方法を考え出した。 Austin Fowlerと彼の協力者(私たちを含む)は、実用的にするために2-Dコードのエンジニアリングを拡張しました。 次のStepでは、Simon Devittと私が誤り訂正のコードの歴史について議論します。その際に、このコードに関するアニメーションが表示されます。

サーフェースコードは高い誤り率を許容し、この最近隣の方法で配置することができるので、多くの研究者が、それらが実際のシステムにとって最も魅力的であると信じています。この10年間で、根本恵とそのグループのメンバー、特にSimon Devittはこのコードの激しい支持者であり、シングルフォトンとNVダイヤモンドセンターを使用したデザインに取り組んできました。イオントラップの設計も提案されており、IBMとGoogleは超電導システムのコードを追求しています。

古川先生が議論した光学量子コンピュータは、表面コードの3次元版を使用する方向に進んでおり、中村教授が論じた超伝導デバイスは、相互作用することができる量子ビットに理想的に適した2次元表面コードを目指しています。

© Keio University
This article is from the free online

Understanding Quantum Computers

Created by
FutureLearn - Learning For Life

Reach your personal and professional goals

Unlock access to hundreds of expert online courses and degrees from top universities and educators to gain accredited qualifications and professional CV-building certificates.

Join over 18 million learners to launch, switch or build upon your career, all at your own pace, across a wide range of topic areas.

Start Learning now