エラー軽減および抑制技術
新しい実行モデルのベータ版がリリースされた。 有向実行モデルは、エラー軽減のワークフローをカスタマイズする際に、より柔軟性を提供する。 詳しくは Directed実行モデルガイドを参照。
このページのコードは、以下の要件に基づいて開発された。 これらのバージョンまたは新しいバージョンの使用をお勧めします。
qiskit-ibm-runtime~=0.47.0
エラーの軽減および抑制技術は、より大規模なワークロードへスケールアップする際に、結果の品質を向上させるために用いられます。 このページでは、 IBM Quantum Compute で利用可能なエラー抑制およびエラー軽減の手法について、概要を説明します。
次のセルでは、Estimatorプリミティブをインポートし、後のコードセルでEstimatorの初期化に使用するバックエンドを作成しています。
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy()動的分離
量子回路は、 IBM®、マイクロ波パルスのシーケンスとしてハードウェア上で実行され、正確な時間間隔でスケジュールして実行する必要がある。 残念ながら、量子ビット間の不要な相互作用は、アイドリング中の量子ビットのコヒーレントエラーにつながる可能性がある。 動的デカップリングは、アイドリング中の量子ビットにパルス列を挿入して、これらの誤差の影響をほぼ打ち消すことによって機能する。 挿入された各パルス・シーケンスはID演算に相当するが、パルスの物理的な存在はエラーを抑制する効果がある。 パルスシーケンスには多くの選択肢があり、特定の症例ごとにどのシーケンスが良いかは、依然として活発な研究分野である。
ダイナミック・デカップリングは、主に、いくつかの量子ビットが何も操作されずにアイドル状態になっているギャップを含む回路に有効であることに注意されたい。 回路内の演算が非常に高密度に詰め込まれており、すべての量子ビットがほとんどの時間ビジー状態である場合、動的デカップリング・パルスを追加しても性能が向上しない可能性がある。 それどころか、パルス自体の不完全性によって性能が悪化する可能性さえある。
下図はXXパルスシーケンスによるダイナミックデカップリングを示している。 左の抽象的な回路は、右上のマイクロ波パルス・スケジュールにマッピングされている。 右下は同じスケジュールを示しているが、最初の量子ビットのアイドル期間に2つのXパルスが挿入されている。
動的デカップリングは、 動的デカップリング・オプションで enable を True に設定することで有効にできる。 sequence_type オプションを使用すると、複数の異なるパルスシーケンスから選択できる。 デフォルトのシーケンスタイプは "XX"。
以下のコードセルでは、Estimator の動的デカップリングを有効にし、動的デカップリングシーケンスを選択する方法を示しています。
estimator = Estimator(mode=backend)
estimator.options.dynamical_decoupling.enable = True
estimator.options.dynamical_decoupling.sequence_type = "XpXm"パウリの回転
ランダム化コンパイルとしても知られるトワーリングは、任意のノイズ・チャンネルをより特殊な構造を持つノイズ・チャンネルに変換するために広く使われている技術である。
パウリ・ツワーリングは、パウリ演算を用いた特殊なツワーリングである。 量子チャンネルをパウリチャンネルに変換する効果がある。 パウリノイズは線形に蓄積されるのに対し、コヒーレントノイズは演算回数に応じて二次関数的に蓄積される傾向があるためだ。 パウリ・ツワーリングはしばしば、任意のノイズよりもパウリ・ノイズの方が効果的な他のエラー緩和技術と組み合わされる。
パウリ・ツワーリングは、ゲートの理想的な効果が変わらないように、ランダムに選ばれた1量子ビットのパウリ・ゲートで、選ばれたゲートのセットを挟むことで実装される。 その結果、単一の回路が、すべて同じ理想的な効果を持つランダムな回路のアンサンブルに置き換えられる。 回路をサンプリングする場合、サンプルは1つだけではなく、複数のランダムなインスタンスから抽出される。
現在の量子ハードウェアのエラーのほとんどは2量子ビットゲートに起因するため、この技術は(ネイティブの)2量子ビットゲートにのみ適用されることが多い。 次の図は、CNOTゲートとECRゲートのパウリ・ツワールを示している。 列内のすべての回路が同じ理想的な効果を持つ。
パウリ・ツワーリングは、 ツワーリング・オプションで enable_gates を True に設定することで有効になる。 その他の注目すべきオプションは以下の通り:
num_randomizations:撚り合わされた回路のアンサンブルから引き出される回路インスタンスの数。shots_per_randomization:各回路インスタンスからサンプリングするショット数。
以下のコードセルでは、パウリ・トゥワーリングを有効にし、Estimatorに対してこれらのオプションを設定する方法を示しています。 これらのオプションはいずれも、明示的に設定する必要はありません。
estimator = Estimator(mode=backend)
estimator.options.twirling.enable_gates = True
estimator.options.twirling.num_randomizations = 32
estimator.options.twirling.shots_per_randomization = 100TREX( eXtinction )
Twirled Readout Error(TREX: eXtinction ) は、パウリ観測量の期待値を推定する際の測定誤差の影響を軽減する。 これは「ツイールド測定」という概念に基づいており、測定ゲートを、(1) パウリXゲート、(2) 測定、(3) 古典的なビット反転、という一連の操作でランダムに置き換えることによって実現される。 標準的なゲートツイリングと同様に、このシーケンスは、次の図に示すように、ノイズがない場合の単純な測定に相当します
読み出し誤差が存在する場合、測定の回転は読み出し誤差伝達行列を対角化するという効果があり、これにより行列の逆行列を求めることが容易になる。 ゼロ状態で初期化されたランダム回路のベンチマークを行うことにより、 対角ノイズチャネルからのスケーリング項が学習される。 これにより、 本サービスは、読み出しノイズに起因する 期待値からバイアスを除去することができる。 読み出し誤差伝達行列を推定するには、追加の校正回路を実行する必要があり、それによってわずかなオーバーヘッドが生じる。
オプションを使用してTREXを measure_mitigation 有効にします
TREXを有効にするには、 IBM Quantum の「Estimatorの計算耐障害性オプション」で True を に measure_mitigation 設定します。 ここでは、 測定ノイズの学習に関するオプションについて説明します。 ゲートの回転と同様に、回路のランダム化回数や、1回のランダム化あたりのショット数を設定できます。
以下のコードセルでは、TREXを有効にし、Estimatorに対してこれらのオプションを設定する方法を示しています。 これらのオプションはいずれも、明示的に設定する必要はありません。
estimator = Estimator(mode=backend)
estimator.options.resilience.measure_mitigation = True
estimator.options.resilience.measure_noise_learning.num_randomizations = 32
estimator.options.resilience.measure_noise_learning.shots_per_randomization = 100オプション resilience_level を使用してTREXを有効にします
次の例に示すように、 レジリエンスレベルを に設定することで 1、TREXを有効にできます。
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 1})ゼロノイズ外挿法(ZNE)
ゼロノイズ外挿(ZNE)は、観測値の期待値を推定する際の誤差を軽減するための手法である。 それによって結果が改善されることも多いが、偏りのない結果が得られる保証はない。
ZNEは2つの段階からなる:
- ノイズ増幅 :元の量子回路を異なるノイズ率で複数回実行する。
- 外挿 :理想的な結果は、ノイズの多い期待値の結果をゼロノイズ限界まで外挿することによって推定される。
ノイズ増幅段階と外挿段階は、いずれもさまざまな方法で実装することができます。 IBM Quantum Computeは、「デジタルゲートフォールディング」によってノイズ増幅を実現しています。これは、2量子ビットゲートを、そのゲートとその逆ゲートからなる等価なシーケンスに置き換えることを意味します。 たとえば、単一の を に置き換えると、ノイズ増幅係数は3になります。 外挿を行う際には、線形近似や指数近似など、いくつかの関数形式の中から選択することができます。 下の図は、左側がデジタルゲートの折り畳み、右側が外挿の手順を示しています。
この手法のオーバーヘッドは、ノイズ因子の数に比例して増加する。 デフォルト設定では、3つのノイズ係数で期待値をサンプリングするため、 おおよそ3xのオーバーヘッドが生じます。
オプション zne_mitigation を使用してZNEを有効にする
ZNE を有効にするには、 IBM Quantum の「Estimator」の「Compute resilience」オプション True で を に zne_mitigation 設定します。
ZNEのオプションについては、 こちらで説明しています。 特に注目すべきオプションは以下の通りです:
noise_factors:ノイズ増幅に使用するノイズ係数。extrapolator:外挿に使用する関数形式。
以下のコードセルでは、ZNEを有効にし、Estimatorのこれらのオプションを設定する方法を示しています。 これらのオプションはいずれも、明示的に設定する必要はありません。
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.noise_factors = (1, 3, 5)
estimator.options.resilience.zne.extrapolator = "exponential"オプション resilience_level を使用してZNEを有効にする
次の例に示すように、 レジリエンスレベルを に設定することで、ZNE(およびTREX、 2ゲート・トゥワーリング)を有効にできます。
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 2})確率的誤差増幅(PEA)
ZNEにおける主な課題の1つは、ターゲット回路に影響を与えるノイズを正確に増幅することである。 ゲートフォールディングは、この増幅を簡単に行う方法を提供するが、不正確な可能性があり、誤った結果につながる可能性がある。 詳細は、論文 "Scalable error mitigation for noisy quantum circuits produces competitive expectation values"、特に補足情報の4ページを参照のこと。 確率的誤差増幅は、ノイズ学習による誤差増幅に対してより正確なアプローチを提供する。
PEAはより洗練された技術であり、ノイズを再構築するために予備実験を行い、その情報を使って正確な増幅を行う。 これは、回路の各レイヤーのエンタングルゲートが実行される前に、そのエンタングルゲートの渦巻きノイズモデルを学習することから始まる(関連する学習オプションを参照)。 LayerNoiseLearningOptions を参照)。 学習段階の後、回路は各ノイズ係数で実行され、回路の各エンタングル層は、対応する学習ノイズモデルに比例した1量子ビットノイズを確率的に注入することで増幅される。 詳しくは 「フォールト・トレランス以前の量子コンピューティングの有用性の証拠」という記事を参照されたい。
PEAは3つの段階からなる:
- 学習 :回路の各層のエンタングルゲートの渦巻きノイズモデルを学習する。
- ノイズ増幅 :元の量子回路を異なるノイズ係数で複数回実行する。
- 外挿 :理想的な結果は、ノイズの多い期待値の結果をゼロノイズ限界まで外挿することによって推定される。
実用規模の実験では、PEAが最良の選択となることが多い。
PEAはZNEノイズ増幅技術であるため、 resilience.zne_mitigation = True を設定してZNEを有効にする必要もある。 その他の resilience.zne オプションはさらに、エクストラポレーターや増幅レベルなどを設定するために使うことができる。 PEAは、プリミティブを使用する際に自動的に生成されるノイズモデルを必要とする。
次のスニペットは、Estimatorジョブの結果を軽減するためにPEAを使用した例です:
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.amplifier = "pea"確率的誤差補償(PEC)
確率的エラーキャンセル(PEC)は、観測値の期待値を推定する際のエラーを軽減する技術である。 ZNEとは異なり、期待値の不偏推定値を返す。 しかし、一般的にはオーバーヘッドが大きくなる。
PECでは、理想的なターゲット回路の効果は、実際に実装可能なノイズ回路の線形結合として表現される:
理想回路の出力は、線形結合で定義されたランダムアンサンブルから抽出された異なるノイズ回路インスタンスを実行することで再現できる。 係数 が確率分布を形成していれば、アンサンブルの確率として直接使うことができる。 実際には、係数のいくつかは負なので、代わりに準確率分布を形成する。 それでもランダム・アンサンブルを定義するために使用することはできるが、準確率分布の否定性に関連するサンプリング・オーバーヘッドがあり、これは次の量によって特徴づけられる
サンプリングオーバーヘッドとは、期待値を所定の精度で推定するために必要なショット数に対する乗算係数であり、理想的な回路から必要とされるショット数と比較される。 これは、 に対して2次関数的にスケールする。
PEC を有効にするには、 IBM Quantum の「Estimator の計算耐障害性オプション」で True を に pec_mitigation 設定します。
PEC のオプションについては、 こちらで説明しています。 サンプリングのオーバーヘッドの上限は、オプション max_overhead を使用して設定できます。 サンプリングのオーバーヘッドを制限すると、結果の精度が要求された精度を超えてしまう可能性があることに注意してください。 のデフォルト値は 100 max_overhead です。
次のコードセルでは、PECを有効にし、Estimatorのオプションを設定 max_overhead する方法を示しています。
estimator = Estimator(mode=backend)
estimator.options.resilience.pec_mitigation = True
estimator.options.resilience.pec.max_overhead = 100次のステップ
- エラー軽減オプションとEstimatorプリミティブの組み合わせについては、 チュートリアルをご覧ください。
- Estimator を使用してノイズ管理を設定します。
- Sampler を使用してノイズ管理を設定します。
- IBM Quantum プリミティブのその他のオプションを確認してください。
- ジョブを実行するモードを決定します。