@yuichirominato 2018.07.07更新 630views

量子エラー訂正メモ

誤り訂正

はじめに

Googleの論文を読んでみて素人ながら色々思うところがあったので簡単にまとめてみます。

State preservation by repetitive error detection in a superconducting quantum circuit

J. Kelly,1, ∗ R. Barends,1, 2, ∗ A. G. Fowler,1, 3, 2, ∗ A. Megrant,1, 4 E. Jeffrey,1, 2 T. C. White,1 D. Sank,1, 2 J. Y. Mutus,1, 2 B. Campbell,1 Yu Chen,1, 2 Z. Chen,1 B. Chiaro,1 A. Dunsworth,1 I.-C. Hoi,1 C. Neill,1 P. J. J. O’Malley,1 C. Quintana,1 P. Roushan,1, 2 A. Vainsencher,1 J. Wenner,1 A. N. Cleland,1 and John M. Martinis1, 2

1.Department of Physics, University of California, Santa Barbara, CA 93106, USA
2.Present address: Google Inc.
3.Centre for Quantum Computation and Communication Technology, School of Physics, The University of Melbourne, Victoria 3010, Australia
4.Department of Materials, University of California, Santa Barbara, CA 93106,

USAhttps://arxiv.org/pdf/1411.7403.pdf

量子ゲートモデルについて

GoogleやAlibabaが取り組んでいる量子コンピュータの形式で、汎用性があると言われておりゲートと呼ばれる演算子を時間ごとに変化させて計算させます。

こんな感じ。

デジタルマシン

最近流行っている量子アニーリングはアナログマシンの位置付けですが、量子ゲートマシンはもともとデジタルマシンを目指して開発が進められています。その際に必要な技術の1つが誤り検出と誤り訂正です。現在の半導体技術でもそうですが、エラーをなんとか抑え込むためにがんばるということです。これがないと本来の意味で量子ゲートモデルの計算はあまり意味がなくなってしまいます。

エラー率

エラーが頻繁に起きてしまうと、誤り検出と訂正をしてもその次のエラーがすぐに起きてしまい、エラーを抑え込むことができません。1%未満に抑えられると誤り検出をできるということで、2015年実際にエラー率1%未満のマシンをGoogleがつくったので、それまで机上での理論が実際に実行されることとなりました。

ビットフリップエラーと反復符号

以前IBMQで反復符号を実装して見ました。

Repetition Code / 反復符号

おさらいで、

反復符号(英: Repetition code)とは、ビットを反復することで伝送路上の誤りのない通信を実現する (n,1)符号化手法である。反復符号は非常に単純な符号化手法である。フェージングのある通信路では反復回数が多いほど誤り率が低下するが、ホワイトノイズが加算されるような通信路では逆に誤り率が高くなる。
引用:https://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E7%AC%A6%E5%8F%B7

少し細かくみる

こちらの回路では、実機に合わせて構築されており、
q0,q2,q4がデータビットで、q1,q3がパリティチェック用のビットとなっている。q0,q2でエラーがあるとq1が反応し、q2,q4でエラーがあるとq3が反応するようになっている。q2のエラーがある場合にはq1とq3の両方が反応するようになっていることで、パターンからエラーの箇所を推定する。

こちらを普通に計算すると、

111か000がでてくる。間のビットはエラー検出用なのでデータは読まない。
たとえば、意図的にビットの反復を行なった後に、q2をXゲートでビット反転させて見ると、

結果は、01110と11011で、
反転して010は、パリティビットが両方反応して、01110に。
反転して101は、パリティビットが両方反応して、11011に。

つづいて、q0の反転は、


結果は、10110と00011で、
反転して001は、q1のパリティビットが反応して00011に。
反転して110は、q1のパリティビットが反応して10110に。

このようにビット反転では、パリティビットのパターンによってエラーの位置が推定できる。

Google論文概要

回路は1次元の9量子ビットのXモンと呼ばれる量子ビットを使用していて、5量子ビットをデータビット、間の4量子ビットをパリティビットに使っている。

エラーの検出は上記の例どうようでパリティビットの組み合わせで判断する。

引用:https://arxiv.org/pdf/1411.7403.pdf

また、今回は下記のように計算は量子計算を行なって、パリティビットの検出からエラー検出は古典計算機で行い、マッチングアルゴリズムを経てエラー訂正であるビット反転を古典計算機で行う。

引用:https://arxiv.org/pdf/1411.7403.pdf

その結果、繰り返し実行した際に実際にエラー訂正をこなった結果、Fidelityが上がったとのこと。

繰り返しの検出とエラーの種類

引用:https://arxiv.org/pdf/1411.7403.pdf

上記のように繰り返しパリティビットを測定することで、そのパターンからエラーの位置を特定もしくは推定できます。例えば上記は基本的にはデータエラーなどがありますが、データを変更していないのに値が変わる場合には、測定エラーもあります。

赤字の部分は2つのパリティビットの測定で確認できますが、測定の位置がだいぶずれているので、斜めにラインが繋がっています。実際のエラーの位置はさらにもう少し前です。黄土色のエラーは繰り返しの測定ですが、データは変わっていないはずなので、測定のエラーとすぐにわかります。紫色のエラーは赤と同じデータエラーですが、測定の位置が同じ位置にあるので、縦でつないで確認します。最後はデータビット自体を測定してパリティビットからのデータと齟齬がないかを確認します。

パリティチェックの捉え方

パリティチェックは誤り検出を必ずしも1つに特定できるわけではなく、時間展開で上から下にプロセスが進むような図の場合、下記のようにパターンが検出された場合エラーの検出は組合せ最適化問題になり、さまざまなパターンが存在する。下図aパリティチェックでの検出でデータエラーが3箇所、測定エラーが1箇所検出されているが、下図bでは、データエラーが4箇所、測定エラー1箇所に。下図aは追加のエッジを加えることで表現でき、組合せ最適化問題でもっともエッジの数が少なくなるようなminimal weighted perfect matchingをつかって解いているという。

引用:https://arxiv.org/pdf/1411.7403.pdf

マッチング (グラフ理論)

グラフ理論においてマッチングとは、グラフ中の枝集合で、互いに端点を共有しないもののこと。特に、これ以上枝を追加できないもののことを極大マッチング、枝数が最大のものを最大マッチングという。また、グラフ上の全ての頂点が、マッチング中のいずれかの枝の端点になっているとき、そのマッチングを完全マッチングという。

極大マッチング、最大マッチングは必ず存在するが、完全マッチングは存在するとは限らない。(例: 奇数個頂点のグラフ)

引用:https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%83%E3%83%81%E3%83%B3%E3%82%B0_(%E3%82%B0%E3%83%A9%E3%83%95%E7%90%86%E8%AB%96)

実機はエラーの出やすさもあるので、測定エラーやデータエラー、斜めのエッジのデータエラーなどの出やすさに違いがあるので、それらの特性に合わせてグラフ理論の重みを調整して組合せ最適化問題を瞬時に解いてビットフリップを訂正する必要がある。

続いて表面符号

今後量子コンピュータが発展する際には誤り訂正と呼ばれるエラーを訂正し、エラーに強くなる回路をソフトウェアで実装する必要が出てきます。その際に訂正すべきエラーがビット反転と位相反転と呼ばれる2種類のエラーに対応する必要があります。量子ビットが一列に並んだ一次元の回路ですとビット反転のみに対応できますが、平面状に並んだ回路の場合には、ビット反転および位相反転に対応した表面符号と呼ばれる手法に対応できると考えられています。

今回は、この表面符号に将来的に対応すべく、2*2の平面回路において誤り訂正を行なった論文を読んで動向を確認したいと思います。

文献

natureに掲載された、

Córcoles, A.D. et al. Demonstration of a quantum error detection code using a square lattice of four superconducting qubits. Nat. Commun. 6:6979 doi: 10.1038/ncomms7979 (2015).

Demonstration of a quantum error detection code using a square lattice of four superconducting qubits
A.D. Córcoles, Easwar Magesan, Srikanth J. Srinivasan, Andrew W. Cross, M. Steffen, Jay M. Gambetta & Jerry M. Chow
Nature Communications volume 6, Article number: 6979 (2015)
https://www.nature.com/articles/ncomms7979

こちらを見てみたいと思います。

導入

部分的にgoogle翻訳します。

表面コード(SC)は、最近傍キュビットレイアウトと高いフォールトトレラント誤差閾値のためにスケーラブルな量子コンピューティングを達成する有望な候補である。 SCはスタビライザコードの一例であり、スタビライザと呼ばれる一連の観測値の測定によって状態が一義的に定義されたコードです。 SCのコードキュービットは2次元配列の頂点に配置され、各スタビライザは4つの隣接するコードキュービットを含む。したがって、SCスタビライザは幾何学的に局所的であり、単一のシンドロームキュービットでフォールトトレラントに測定することができます。コード量子ビットの格子上の誤り検出は、安定化演算子をシンドローム量子ビットの相補格子にマッピングし、続いて測定結果の古典的相関を行うことによって達成される。シンドロームキュビットの中で、ビットフリップシンドローム(またはZシンドローム)とフェーズフリップシンドローム(またはXシンドローム)との区別がなされる。 SCの各符号量子ビットは、2つのXシンドローム量子ビットと2つのZシンドローム量子ビットと結合され、各シンドローム量子ビットは4つの符号量子ビットと結合される。

簡単にいうと表面符号と呼ばれる手法で、ビット反転と位相反転の検出を超電導量子ビットで行ったようです。その際にはXシンドロームとZシンドロームとの二種類があるようです。

物理的な実装

引用:Córcoles, A.D. et al. Demonstration of a quantum error detection code using a square lattice of four superconducting qubits. Nat. Commun. 6:6979 doi: 10.1038/ncomms7979 (2015).

今回サーフェスコードは位相反転を検出するZシンドロームとビット反転を検出するXシンドロームが交互に実装されている。上記の表のように、SCとよばれるサーフェスコードの論理配置と、MAPとよばれる実際の量子ビットへの実装が提示されており、データビットと検出パリティビットが格子状に並んでいる。今回IBMの実験では、このSCの部分的な実装が4量子ビットで行われている。

一番右の状態では、ベル状態を作ったQ1,Q3にたいして、Z測定とX測定をQ2とQ4にわりあて、そのうちのQ4に関しては最初から∣+⟩∣+⟩の状態で用意しておきます(Hゲートを適用して)。

位相フリップはZZに、ビットフリップはXXに、位相&ビットフリップはZZとXX両方に測定されます。

誤り訂正プロトコルの実装

任意のエラーを実現するために、回路上に任意回転角を導入し、位相の回転などでエラーを実現。量子ビットの励起状態や基底状態を観測して、エラーがおきているかどうかを判定します。


引用:Córcoles, A.D. et al. Demonstration of a quantum error detection code using a square lattice of four superconducting qubits. Nat. Commun. 6:6979 doi: 10.1038/ncomms7979 (2015).

また、任意のエラーを連続的に回転で表現すると、断続的に観測ができるので、

引用:Córcoles, A.D. et al. Demonstration of a quantum error detection code using a square lattice of four superconducting qubits. Nat. Commun. 6:6979 doi: 10.1038/ncomms7979 (2015).

エラーの種類によっても観測が変わるようです。

引用:Córcoles, A.D. et al. Demonstration of a quantum error detection code using a square lattice of four superconducting qubits. Nat. Commun. 6:6979 doi: 10.1038/ncomms7979 (2015).

考察

google翻訳ですが、結構当然の帰結に至っています。

我々は量子ビットの正方格子上の任意の単一量子ビット量子エラーの検出を実証する一連の実験を行った。この実験では、量子システムのスケーリングに必要なさまざまな主要コンポーネント、すなわち、高忠実度の1量子ビットおよび2量子ビットゲート、コードキュービットの非破壊測定を可能にする高いシングルショット割り当て忠実度、およびシステム設計の改善最近傍結合量子ビットの非自明な格子におけるクロストーク効果を最小にする。フォールトトレランスのしきい値に達するためには、ゲートと割り当ての忠実度の継続的な改善が必要になります。これには、キャリブレーションやクロストークの影響、システム設計とエンジニアリングの改善など、潜在的なエラーの原因を継続的に理解する必要があります。さらに、測定時間と測定の再現性を短くすることは、大規模な実験的量子エラー補正を実証する上で重要です。量子ビットの大規模格子上での複雑な操作を実行する上で重大な課題が残っていますが、私たちがここに示した研究は、フォールトトレラントな量子計算に役立つ形状で配置された超伝導キュビットで高度な制御とマイクロ波衛生が達成できることを示しています。

IBMQで簡単な誤り訂正(検出)をRepetition Codeで解いてみる

量子情報やアプリケーションは様々な資料や例題がでてきました。ここでは、将来的にハードウェアでの実装も念頭に量子誤り訂正(今回はそこまで大仰ではなさそうですが)を少しずつ実装という観点で進めていきたいと思います。まず初歩的なところから。

参考資料

IBM社のウェブサイトを参考にして、このページをまずは理解できるようにします。

Quantum Repetition Code
https://quantumexperience.ng.bluemix.net/proxy/tutorial/full-user-guide/005-Quantum_Error_Correction/060-Quantum_Repetition_Code.html

誤り訂正とは

誤り検出訂正(あやまりけんしゅつていせい)またはエラー検出訂正 (error detection and correction/error check and correct) とは、データに符号誤り(エラー)が発生した場合にそれを検出、あるいは検出し訂正(前方誤り訂正)することである。検出だけをする誤り検出またはエラー検出と、検出し訂正する誤り訂正またはエラー訂正を区別することもある。また改竄検出を含める場合も含めない場合もある。誤り検出訂正により、記憶装置やデジタル通信・信号処理の信頼性が確保されている。
引用:https://ja.wikipedia.org/wiki/%E8%AA%A4%E3%82%8A%E6%A4%9C%E5%87%BA%E8%A8%82%E6%AD%A3

量子コンピュータにとって誤り訂正はアナログマシンをデジタルマシンに変えるために将来必要なパーツです。現在の米大手各社は将来的にこの誤り訂正搭載を目指しながら手元では量子ビットの増大やエラー率の改善に力を入れています。


引用:https://docs.microsoft.com/en-us/quantum/quantum-concepts-9-softwarestack?view=qsharp-preview

上図のように量子コンピュータで問題を解く際に、問題をコンパイルする過程で、Fault Tolerant Quantum Computerと書いてあるように、論理ゲートを物理ゲートに落とし込む際に量子誤り訂正を使ってエラーに強い回路に落とし込みますが、現在はこの仕組みがないため、米国のゲートマシンはNoisy Intermediate-Scale Quantum (NISQ)と呼ばれています。中規模のエラーありのマシンで解ける問題は以前より考えられていたような量子回路とは違うものが出てきています。

参考資料:
Quantum Computing in the NISQ era and beyond
John Preskill
https://arxiv.org/abs/1801.00862

Repetition Code / 反復符号

反復符号(英: Repetition code)とは、ビットを反復することで伝送路上の誤りのない通信を実現する (n,1)符号化手法である。反復符号は非常に単純な符号化手法である。フェージングのある通信路では反復回数が多いほど誤り率が低下するが、ホワイトノイズが加算されるような通信路では逆に誤り率が高くなる。
引用:https://ja.wikipedia.org/wiki/%E5%8F%8D%E5%BE%A9%E7%AC%A6%E5%8F%B7

最初にサイトに書いてあるのは反復符号で簡単にいうと、1と0だとエラーでひっくり返ると間違えてしまうので、反復させて多少エラーがあっても多数決で元に戻すという考え方です。

0を000として、1を111とすると、エラーで1量子ビットが反転すると、{001,010,100}もしくは{110,101,011}が検出されますが、私たちはそれが最初は000か111かわかっているので元に戻せばいいという考えです。

Encoder into bit-flip code

まずは単純なビットのコピーを例題で。アダマールからの、TゲートでZ軸周りで位相をずらしてます。アダマールで古典に戻すと、1/8の確率で1がでます。Tゲートの説明は下記の通りでした。

引用:IBMQ

まずはシミュレータやってみました。
だいたい1/8の確率で111と000がでてます。

これは、アダマール変換してからTゲートを使って回転して位相を変化させてからアダマールで戻してビットに変換。その確率計算がそのまま結果に出てます。

次に実機。空いてる実機が違っていたので少しゲートを改造して同じものをやってみました。
結果は、

多少のエラーはあれど、だいたいOKでした。

反復符号を実行した後に意識的に1量子ビットを反転させてみました。一番上を反転させます。
実機での実行は下記となり、00001と00110の結果がきちんと得られています。

きちんと反転していました。今回はエンコードだけなので、最後の結果の取得だけやってみました。続いて余剰量子ビットを活用したパリティチェックを行ってみます。

Encoder into bit-flip code with parity checks

パリティチェックではエラーが起きているかどうかを余剰ビットを活用して判断します。判断の仕方をIBMQを用いて確認していきます。

例題はこちらです。

1つ目のゲートのグループでまずは量子ビット2の状態をずらして、、、
2つ目のグループで量子ビット2の状態を0,1,3にうつして、
3つ目のグループでパリティビットと呼ばれる余剰ビットにエラーの状態をうつします。エラーの状態の測定は2番目と四番目の量子ビットに格納されます。

まずシミュレータで確認します。

何もエラーがない場合には、量子ビット0,1,3に状態が保存されているので、01011か(5から0番目の方に読む)、00000が得られます。量子ビット2と4はエラーがないので0のままに。

試しに意図的に最初の量子ビットを反転させてみます。回路は最初をXゲートで反転です。


結果は、

q4のビットが1となり、エラーが検出されました。q0が1になってます。

次にq1を反転させてみると、


こちらもきちんとシミュレータで結果が観測できました。

q1は両方のパリティビットに影響を与えるので、q2とq4の両方が1となってエラーが検出されています。ですので、11はq1にエラーがあるということがわかります。

そして、念のためにq3も反転させてみると、


こちらもシミュレータで

こちらはq2のみが1の判定となりました。

2量子ビットの反転

今度は2量子ビットを反転させてみました。

パリティビットや量子ビットの状態としてはq4を反転させた場合と同じですが、出現確率が逆になっています。出現確率をみることで2量子ビットのビット反転は取れるということでしょうか。

実機での実装

実機では接続方向を考えながら実装が必要ですので、追ってやってみようと思います。
簡単なもので1箇所のエラー検知をやってみました。

q0にパリティを設定して、q1とq2のどちらかにエラーがあったら検知できるようにします。

まずは意図的にq1にエラーを想定して反転


実機の結果は、


次にq2を反転


実機の結果は、

ビット反転は検出できてますが、色々結果が間違ってる気がします(シミュレータとだいぶずれてる)が、一旦シミュレータを正として終わりにします。

q1反転のシミュレータ結果


q2反転のシミュレータ結果