めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Surface code の「お気持ち」を解説するメモ

冗長化符号の考え方

一般に、エラー訂正のための冗長化符号には、

・エラーを検知する

・エラーを訂正する

という2つの役割がありますが、当然ながら、すべてのエラーを検知・訂正できる完璧な冗長化符号はありません。重要なのは、発生する確率が高いエラーをより積極的に検知・訂正できる冗長化符号を設計することになります。

たとえば、0, 1 のデジタルビットを 3 重に冗長化して、000, 111 で表現した場合、

・100, 010, 001 -> 000

・011, 101, 110 -> 111

という訂正ルールを与えれば、任意の 1 つのビットの反転を検知・訂正することができます。ただし、2 つのビットが反転した場合、検知はできますが、正しく訂正する事はできません。

一方、

・100, 010, 001 -> 111

・011, 101, 110 -> 000

という訂正ルールを与えれば、2 つのビットが反転した場合にこれを検知・訂正できる一方、1 つのビットの反転は訂正できなくなります。

で、実際にどちらの訂正ルールを採用するのがよいかと言うと、1 つ目のルールになります。なぜなら、1 つのビットが反転する確率を p とすると、2 つのビットが反転する確率は  p^2 < p となるので、発生する確率が高いエラーを訂正できるという点で、1 つ目のルールの方が優れていることになるからです。

このように、冗長化符号を設計する際は、発生し得るエラー(すなわち、意図しない符号の変化)をモデル化して、発生する確率が高い変化を検知・訂正する方法を考えることが求められます。

論理 qubit の捉え方

「複数の物理 qubit を用いて、1つの論理的な qubit を表現することで、物理 qubit に発生したエラー(意図しない物理 qubit の変化)を検知、訂正できるようにしたもの」

というのが論理 qubit の平易な説明になりますが、これだけだと、どのようにしてエラーを検知すればいいのかがよくわかりません。そこで、ちょっとだけ数学的な見方をしてみます。

たとえば、2 個の物理 qubit があれば、数学的には、| 00\rangle,| 01\rangle,|10\rangle,|11\rangle の 4 つの基底を持つ 4 次元の複素ベクトル空間が得られます。

数学的には、この 4 つの基底はまったく同等ですが、「エラーモデル」の観点では同等ではありません。ここがポイントになります。

たとえば、「物理 qubit が確率 p で反転する」というエラーモデルを考えた場合、\mid 00\rangle\mid 01\rangle もしくは \mid 10\rangle に変化する確率は p ですが、\mid 11\rangle に変化する確率は p^2 になります。

つまり、この 4 次元複素ベクトル空間の中には、エラーによって変化しやすい方向と変化しにくい方向があります。そこで、この 4 次元空間の中で、「変化しにくい方向を含む 2 次元の部分空間」を取り出して、論理 qubit を表現することにします。

たとえば、\mid 00\rangle\mid 11\rangle で張られる部分空間を論理 qubit として利用してみます。普通の言い方(?)をすると、

| 0\rangle_L = | 00\rangle,\,|1\rangle_L = |11\rangle

で論理 qubit を定義します。

この場合、発生する確率の高いエラー(すなわち、1 物理 qubit の反転)が発生すると、状態ベクトルはこの部分空間をはみ出してしまいます。そこで、この「はみだし」を観測すれば、エラーの発生を検出することができます。(この場合、訂正まではできませんが、少なくとも検出はできます。)逆に言うと、部分空間をはみ出さないような変化(2 物理 qubit の反転)は、検出できないことになります。

また、はみ出しを観測する際は、観測によって論理 qubit の状態が変化しないように工夫する必要があります。これをうまく実現するのが、Surface code で登場する「Stabilizer」を用いた観測になります。

Stabilizer によるパリティの観測

さきほどの例の場合、論理 qubit が存在する部分空間と、それをはみ出す空間(直交する部分空間)は、状態ベクトルのパリティ、すなわち、演算子 Z_1Z_2 の値で区別できます。

 Z_1Z_2|00\rangle = |00\rangle,\,Z_1Z_2|11\rangle = |11\rangle

 Z_1Z_2|01\rangle = -|01\rangle,\,Z_1Z_2|10\rangle = -|10\rangle

たとえば、論理 qubit の重ね合わせ状態 |\psi\rangle = a|00\rangle + b|11\rangle において、1 つ目の物理 qubit が反転すると、|\psi'\rangle = a|10\rangle+b|01\rangle になり、演算子 Z_1Z_2 の値が +1 から -1 に変化します。つまり、エラーの発生していない状態、(検知したい範囲の)エラーが発生している状態は、どちらも 演算子 Z_1Z_2 の固有状態になっており、これを観測することで、状態が変化する事はありません。具体的には、次のように、|0\rangle に初期化した Ancilla bit を用いて、演算子 Z_1Z_2 の値を観測することができます。

仮に、特定の量子ビットの値を一定期間保存する量子メモリーを作るのであれば、上記の観測を定期的に繰り返して、演算子 Z_1Z_2 の値が +1 であることを確認すれば、想定範囲のエラー(物理 qubit の反転)が発生していないことが確認できます。

このような演算子 Z_1Z_2 を一般化したものが Surface code における Stabilizer で、Stabilizer の固有値(\pm 1)によって、論理 qubit が存在する部分空間を定義すると同時に、そこからはみ出した状態、すなわち、エラーが発生した状態を検知することができます。

Stabilizer の一般論

上記の例では、4 次元の状態空間に対して、Stabilizer Z_1Z_2 の固有状態という制約を付ける事で、互いに直交する 2 つの 2 次元の部分空間が得られました。一般には、n 個の物理 qubit からなる 2^n 次元の状態空間に対して、n-1 種類の Stabilizer を与えると、それぞれの Stabilizer の値の組み合わせによって、互いに直行する 2^{n-1} 個の 2 次元の部分空間が得られます*1。特にすべての Stabilizer の値が +1 の状態を「エラーが発生していない状態」と定義すれば、この 2 次元部分空間が論理 qubit を表現する空間として利用できることになります。

たとえば、Surface-13 と呼ばれる、次の構成では、9 個の物理 qubit(白丸)があり、全体として、 2^9 次元の状態空間を持ちます。

そして、4 個の ancilla bit(黒丸)を用いて、次の 8 種類の Stabilizer の値を観測します。

すべての Stabilizer の値が +1 の状態を「エラーがない状態」とすることで、論理 qubit を表現する 2 次元の部分空間が得られます。このモデルでは、それぞれの物理 qubit に対するビット反転 X_i、および、位相反転 Z_i を発生し得るエラーと想定しており、これらのエラーが発生すると、いずれかの Stabilizer の値が -1 に変化します。これにより、エラーの発生を検知することができます。

エラー訂正について

上記の Surface-13 の場合、すべてのエラーの原因を正確に「特定」することはできません。たとえば、Z_1Z_2Z_4Z_5Z_3Z_4Z_6Z_7 が共に -1 になった場合、共通に含まれるのは、Z_4 のみなので、(0 番目から数える事にして)4 番目の物理 qubit が反転したことが分かります。したがって、この物理 qubit を再度反転させればエラーを訂正することができます。

一方、Z_1Z_2Z_4Z_5 だけが -1 になった場合は、1 番目の物理 qubit が反転したのか、2 番目の物理 qubit が反転したのかはわかりません。しかしながら、それでもエラーを訂正することは可能です。なぜなら、Stabilizer の中に X_1X_2 があるので、正しい論理 qubit を表す状態ベクトルは、

 X_1X_2|\psi\rangle = |\psi\rangle

という関係を満たします。X_ii 番目の物理 qubit を反転させる演算子であることを思い出すと、論理 qubit を表す状態ベクトルは、1 番目と 2 番目の物理 qubit の同時反転によって状態が変化しません。したがって、Z_1Z_2Z_4Z_5 だけが -1 になった場合は、1 番目か 2 番目の物理 qubit のどちらか一方を再反転させれば、それで元の状態を回復することができるのです。

このように、Stabilizer の組み合わせによって、論理 qubit を表現する部分空間を定義すると同時に、エラーの検知・訂正を行うというのが、量子ビットのエラー訂正の本質になります。特に、Surface code の場合は、データ用 qubit の間に ancillar bit を挟み込んで、隣接する 4 qubit を組み合わせた Stabilizer を効率的に実現しようというアイデアになります。

物理 qubit の追加による精度の向上

理論上は、物理 qubit を増やして、stabilizer の数を増やすことで、検知・修正可能なエラーの種類を増やすことが可能です。たとえば、次の Surface-25 を用いると、2 個の物理 qubit のビット反転、位相反転も検知・修正が可能になります。

 

ただし、現実には、モデルで想定していないエラーが発生することがあります。Stabilizer の値を観測するための量子回路の動作に誤りが生じるなどの可能性もあります。物理 qubit を増やすには量子デバイスのサイズを大きくする必要があるために、このような想定外のエラーが発生する確率も大きくなります。そのため、物理 qubit を増やすことで、論理 qubit にエラーが発生する確率(エラーの検知・訂正に失敗する確率)を本当に小さくするには、物理 qubit そのものが一定以上の信頼性を持つ(想定外のエラーが発生する確率が一定値以下である)必要があります。

arxiv.org

上記の論文では、実際の量子デバイス上に 2 種類のサイズの論理 qubit を構成して、サイズを大きくすることで論理 qubit の信頼性が本当に向上するかを実験で確かめています。

横軸は、9 個の物理 qubit で構成した論理 qubit の信頼性、縦軸は 25 個の物理 qubit で構成した論理 qubit の信頼性に対応しており、実験の初期では、横軸の値の方が縦軸の値よりも大きい状態(つまり、物理 qubit を増やしても論理 qubit の信頼性は向上しない)でしたが、その後、物理デバイスのチューニングを行なって、物理デバイスの信頼性を向上することで、最終的に、わずかながら、縦軸の値の方が大きくなる結果を達成しています。

わずか 1 論理 qubit ではありますが、ついに現実の量子デバイス上に論理 qubit を構成して、サイズを大きくすることで信頼性を向上することが可能である、という事実が確認できた結果になります。

*1:厳密には、それぞれの Stabilizer は、Stabilizer 全体がなす群の独立した生成子であるという条件が付きます。