😎

FTQC(誤り耐性量子コンピュータ)の処理フロー的なやつ

2024/12/22に公開

大阪大学の量子情報・量子生命研究センター(QIQB)で量子コンピュータの研究開発をやっている森と申します。
QIQBでは、量子機械学習をやったり、国産量子コンピュータの開発に携わらせてもらったりしています。
今作っている量子コンピュータとはNISQと呼ばれるノイズがある量子コンピュータでまだま現実的な問題を解くのは難しいです。
ノイズ対策したFTQCと呼ばれる誤り耐性量子コンピュータが必要になります。
私はエラー訂正とかは、なんとなく完全に理解した(※1)という感じなのですが、それで一体計算はどうやってやるんですか?というのがさっぱりイメージが湧かなかったので
FTQCの有識者の方に教えて頂きました。


この処理フローを説明したいのですが、前提知識として誤り訂正符号と魔法状態蒸留が必要でその説明を先に書いています。

エラー訂正と誤り訂正符号とは

FTQCの処理フローを説明する前知識として、エラー訂正・誤り訂正符号・魔法状態蒸留をざっくり説明します。
ノイズのある量子コンピュータはエラー訂正する必要があります。普通のコンピュータも量子コンピュータほどではないですがエラーは発生しており、ECCメモリやRAIDディスク等ちょっと高級なハードウェアはエラー訂正をやっています。
普通のコンピュータと量子コンピュータの大きな違いのひとつとして、量子コンピュータは測定すると量子状態が確定してしまいます。
量子状態が確定してしまうと、せっかくの量子アルゴリズムを使った量子コンピュータの特性をいかした高速な計算ができなくなってしまいます。
なので量子コンピュータは基本的には最後に測定して結果を取り出します。
しかし、エラー訂正するためには測定しないわけにはいきません。そこでどうするかというと誤り訂正符号というものを使って、量子状態を守りつつエラーのチェックを行います。
誤り訂正符号はこのページ(※2)を参照してください。
ざっというと、量子データを保存するデータビットに対して、アンシラビットと呼ばれる量子ビットを用意しておきデータビットともつれを作ることにより間接的にエラーチェック(パリティチェック)を行います。実際にどのデータビットでエラーが起きたのかは一般にはわからず、推定する必要があります。
このパリティチェックはこのページ(※3)を参照してください。
例えば単純な例を挙げると多数決による符号化(繰り返し符号と呼ばれています)というものがあります。1個のデータを守るために複数のデータで多数決を取ってチェックを行います。1個のデータに対して、3個のデータを作っておき1個エラーになっても残りが正しい値であればそれを採用します。
量子コンピュータでも同じような考え方で、沢山の次元空間を作っておき、エラーのない空間だけで計算をおこないます。エラーが発生すれば、エラーのない空間からエラーのある空間に出てしまうため、パリティチェックしてエラーのない空間に戻します。
このエラーのない空間とエラーのある空間のチェックのためには、決められた特定の測定を行います。またエラーのない空間でできる操作も決められた操作のみになります。
なぜかというとパリティチェックのために決められた特定の測定を行うのですが、その測定をしたことによって、データビットの量子状態を変えてしまってはダメだからです。
データビットの量子状態を変えずに、パリティチェックを行う測定操作を行います。そしてそれを誤り訂正符号と呼びます。誤り訂正符号にもいろいろ種類がありますが、表面符号など一部の符号では、簡潔に行うことができるのはクリフォードゲートと呼ばれる特定の処理だけです。(表面符号は、超電導型量子コンピュータのような2次元上の隣接した量子ビットだけ量子もつれが作成できるような系に都合がよい符号です)
クリフォードゲートだけで量子コンピュータで実行される全ての計算が行えればよかったのですがそうはいきません。
クリフォードゲートだけだと量子コンピュータの優位性はないのです。(普通のコンピュータで比較的容易にシミュレートできます。なぜならビット操作的な処理で再現できるから)
量子コンピュータの優位性のためには、Tゲートと呼ばれるゲートが必要となります。そしてTゲートを使うためには、次で説明する魔法状態蒸留が必要となります。

魔法状態蒸留とは

詳しくはこのページ(※4)を見てほしいのですが、ざっと説明すると、表面符号では論理Tゲートをシンプルに実行する方法がないため、論理Tゲートを実行するには長い時間が必要となります。論理Tゲートを実行している間はパリティ検査ができないので、論理Tゲートが終わった後にパリティ検査をすることになりますが、そうするとエラーがたくさん載ってしまってまともにエラー推定ができません。そこでどうやってTゲートを実行するかというとゲートテレポーテーションという手法を使います。(ここでは論理TゲートとTゲートを分けて書いていますが、論理ゲートは表面符号で実行するゲートのことを指しています。)
Tゲートが適用された量子状態を作って、その状態をテレポーテーションさせて適用させてしまいます。(量子テレポーテーションの応用です。)
そのTゲートが適用された量子状態は、エラー訂正されていない(いわゆる汚い)量子ビットでそれを蒸留してきれいにして適用します。
その蒸留は確率的に実行されるのですが、このTゲートを適用する操作は重い処理になります。「15個のノイジーな論理魔法状態から、1個のクリーンな論理魔法状態を作る」というような処理が入る関係上、必要な量子ビット数や時間が長くかかります。
最近ここら辺の手法も研究されてきており、「魔法状態蒸留」とは別のアプローチできれいな論理魔法状態を準備する等の手法が開発されています。
大阪大学の藤井研究室の学生の研究がGoogleの人によって改善されたりもしているようです。(※5)

FTQC処理フロー

やっとこれで前提知識が説明できたような気がします。ここからがやっと処理フローです。

まずは何もしない処理

誤り訂正符号で守られた量子ビットの集合を論理量子ビットといいます。この量子ビット |0>_L に対して、何もしない処理フローが以下になります。

何もしなくても量子ビットはエラーが発生します。そのためパリティチェックを定期的に行います。このパリティチェックの間隔が今のコンピュータのCPUのクロックに相当します。
パリティチェックした結果はためておきます。そして、最終的に測定した後にエラーがある量子状態に対して、パリティチェック結果からエラー推定を行いエラー訂正を行います。
パリティチェックをした後すぐにエラー推定してエラー訂正を行えばよさそうに思いますが残念ながら今の技術では処理に時間がかかるため逐次的にやる必要はないです。
量子コンピュータの処理は、状態ベクトルと呼ばれる複素数のベクトルに対して、ゲートと呼ばれる行列をかけていくことで行われます。
行列の掛け算は順番が前後すると計算結果が変わってしまいます。そのためエラーが発生した後に行列をかけると結果が変わります。
入れ替えた後の結果を、後処理で普通のコンピュータで推定して処理します。
例えば、「Xゲート」と「Z測定」は可換ではないため入れ替えると計算結果が変わります。
しかし、「XゲートしてからZ測定」は「Z測定してからXゲートして、Z測定の結果を反転」とすれば結果は同じになります。
このように、A→B という操作について、これと同じ結果を生み出す B→C という操作Cが
1.普通のコンピュータで簡単に計算できて
2.量子計算機でCが実行できる
という必要があります。

パリティチェックの間隔をここではサイクルと呼びます。
例えば超電導型量子コンピュータの場合、測定には1us程度のパルスを当てる必要があります。さらに測定結果を解析する必要があります。
測定と解析処理をシーケンスにやっているととても遅くて使いものにならないので、
バケツリレー式にパイプライン実行する必要があります。
それによりデータ解析をやっている間に次のパリティ検査を開始できます。
よって、パリティ検査は1us毎に行われるため、1サイクルは1usとなります。
(そうでないと、パリティ検査の合間にエラーがたくさん起きてエラー訂正ができません。)

クリフォードゲートだけの処理フロー

以下がクリフォードゲートを実行した場合の処理フローになります。
オレンジ色の箱がクリフォードゲートを表しています。クリフォードゲートの種類により実行するのに必要なサイクルが変わります。

クリフォードゲート(処理演算)を実行した場合でも後処理で推定できるため最後にエラー訂正する形でよいです。

量子回路の展開図

次にTゲートも実行する場合の処理フローですが、Tゲートを実行するにはTゲートを展開しておく必要があります。
誤り訂正符号上ではクリフォードゲートしか実行できないためTゲートがかかる部分を以下の図のように展開しておきます。

Tゲートありの処理フロー

Tゲートを実行する部分の処理フロー

Tゲートを実行する全体的な処理フローの前にTゲートを実行する部分の量子回路を以下に表します。

Tゲートを適用した量子ビットを用意しゲートテレポーテーションします。その結果Tゲートが適用されます。

Tゲートを実行するためにエラー訂正する処理フロー

ここで注意点があります。ゲートテレポーテーションするためには、測定結果によってSXゲートを適用するかどうかを決める必要があります。
この処理は可換ではないためこのタイミングでエラー訂正を行う必要があります。

エラー訂正を行うためのエラー推定中にもパリティチェックは行っておく必要があります。

Tゲートを複数実行する処理フロー

複数のTを実行する場合は以下の処理フローとなります。

このような形でFTQCは実行されていきます。
今回はふれませんでしたが、誤り訂正符号上でゲート処理するときに論理量子ビット上でどんな事が行われるのか等、まだまだ面白い事が沢山あります。
今後もいろいろ調べて出来ることならFTQCを創ってみたいなと思う今日この頃です。

参考ページ

量子ソフトウェア研究拠点テックブログ

Discussion