誤り軽減の設定¶
誤り軽減技術により、ユーザーは実行時のデバイス・ノイズをモデル化することで、回路エラーを軽減できます。 これは通常、モデルのトレーニングに関連する量子的な前処理のオーバーヘッドと、生成モデルを使用して生の結果のエラーを軽減するための古典的な後処理のオーバーヘッドになります。
Primitive に組み込まれているエラー緩和手法には、高度なレジリエンス・オプションがあります。これらのオプションを指定するには、ジョブを送信するときに resilience_level
オプションを使います。
resilience levelでは、エラーに対してどの程度のresilienceを構築するかを指定します。レベルが高いほど、処理時間が長くなりますが、より正確な結果が生成されます。resilience levelを使用しprimitiveクエリーに誤り軽減を適用することで、コスト/精度のトレードオフを構成できます。誤り軽減は、関連する回路のコレクションまたはアンサンブルからの出力を処理することにより、結果のエラー (バイアス) を削減します。誤り削減の程度は、適用される手法によって異なります。resilience levelは誤り軽減手法の詳細な選択を抽象化し、ユーザーがアプリケーションに適したコスト/精度のトレードについて推論できるようにします。
これを考えると、それぞれのレベルは、量子サンプリングのオーバーヘッドのレベルに応じた1つまたは複数のメソッドに対応しており、時間対精度のトレードオフの異なった組み合わせを試すことができます。 次の表は、それぞれのprimitive ごとの、使用できるレベルと対応するメソッドを示しています。
注釈
エラー緩和はタスク固有のものなので、分布値をサンプリングするか期待値を生成するかによって、適用できるテクニックはさまざまに異なります。
Resilience Level |
定義 |
Estimator |
Sampler |
---|---|---|---|
0 |
緩和なし |
無し |
無し |
1 [Default] |
最小の軽減コスト: 読み出しエラーに関連するエラーを軽減します。 |
トワイルド・リードアウトエラー・エクスティンクション (TREX) |
M3 |
2 |
中程度の軽減コスト。通常、estimatorのバイアスを削減しますが、バイアスがゼロであることは保証されていません。 |
ゼロノイズ外挿(ZNE) |
— |
3 |
レイヤー・サンプリングによる重い軽減。理論的には、ゼロバイアスのestimatorが得られることが期待されている。 |
確率論的エラーキャンセル (PEC) |
— |
注釈
Resilience levelは現在ベータ版のため、サンプリングのオーバーヘッドとソリューションの品質は回路によって異なります。 新機能、高度なオプションおよび管理ツールは、順次リリースされる予定です。 具体的なエラー軽減方法は、各Resilience levelで適用されることを保証するものではありません。
Resilience levelによるestimatorの設定¶
Resilience Level 0
ユーザープログラムにエラー軽減は適用されません。
Resilience Level 1
Level 1では、特に読み出しエラーに対応したエラー緩和手法を適用しています。Estimator では、TREX(Twirled Readout Error eXtinction)と呼ばれるモデルフリー技術を適用しています。これは、測定直前にXゲートを介してランダムに量子ビットを反転させ、Xゲートが適用された場合には対応する測定ビットを反転させることにより、測定に関連するノイズチャンネルを対角化することで測定誤差を低減するものです。対角化されたノイズチャンネルからのリスケーリング項は、ゼロ状態で初期化されたランダム回路のベンチマークによって学習されます。これにより、読み出しノイズに起因する期待値からのバイアスを除去することができます。この手法については、`Model-free readout-error mitigation for quantum expectation values <https://arxiv.org/abs/2012.09738>`__で詳しく説明しています。
Resilience Level 2
Level 2では、ゼロノイズ外挿法(ZNE)を用いて、異なるノイズ因子に対する観測値の期待値を計算し(増幅ステージ)、測定した期待値を用いてゼロノイズ限界における理想的な期待値を推測します(外挿ステージ)。この方法は期待値の誤差を少なくする傾向がありますが、不偏の結果を得ることが保証されているわけではありません。

図 1 ZNE方式の図¶
この方法のオーバーヘッドは、ノイズファクターの数でスケールします。デフォルトの設定では、3つのノイズファクターで期待値をサンプリングするため、このresilience levelを採用した場合、およそ3倍のオーバーヘッドとなります。
Resilience Level 3
Level 3では、PEC(Probabilistic Error Cancellation)方式を実現しました。この手法は、相関のあるノイズを捉えることができる疎なノイズモデルを学習し、反転させることでエラーを軽減するものです。PECは、学習されたノイズモデルが軽減時の実際のノイズモデルを忠実に表現している限り、期待値の不偏推定値を返します。 実際には、ノイズモデルを学習する実験手順は、独立に区別できないある種の誤差項による曖昧さがあります。これらは対称性の仮定によって解決されるが、真の基底ノイズによっては、不完全なノイズモデルを使用することにより、軽減された期待値の推定値に偏りが生じる可能性があります。
PECのQiskit Runtime Primitives 実装は、特に自己逆2量子ビットゲートにおけるノイズを扱うため、まず各入力回路を、同時1量子ビットゲートと同時2量子ビットゲートの層が交互に並ぶように 層別 します。そして、それぞれの2量子ビットゲート層に関連するノイズモデルを学習します。

図 2 層別回路の例で、2量子ビットゲートの層は1層からn層とラベル付けされています。各 \(U_l\) は量子プロセッサーのネイティブな接続グラフ上の2量子ビットゲートで構成されていることに注意してください。文字の入っていないボックスは、任意の1量子ビットゲートを表しています。¶
この方法のオーバーヘッドは、ノイズファクターの数でスケールします。デフォルトの設定では、3つのノイズファクターで期待値をサンプリングするため、このresilience levelを採用した場合、およそ3倍のオーバーヘッドとなります。
PECは、学習したノイズを反転させる効果を模倣するために、準確率的な方法を使用します。このため、ユーザーの元の回路に関連するランダムな回路ファミリーからサンプリングする必要があります。PECを適用すると、入力回路と特性化回路の両方について回路あたりのサンプル数を増やさない限り、返される期待値推定値のばらつきが大きくなります。このばらつきに対処するために必要なサンプル数は、軽減された回路のノイズ強度に対して指数関数的に増加します。
動作説明:
軽減されていないパウリの観測量 \(\langle P\rangle\) を推定する場合、推定された期待値の標準誤差は \(\frac{1}{\sqrt{N_{\mbox{shots}}}}\left(1- \langle P\rangle^2\right)\) で与えられます。ここで \(N_{\mbox{shots}}\) は \(\langle P\rangle\) を推定するために使用されるショット数です。 PEC軽減を適用すると、標準誤差は \(\sqrt{\frac{S}{N_{\mbox{samples}}}}\left(1- \langle P\rangle^2\right)\) になります。 \(N_{\mbox{samples}}\) は PEC サンプルの数です。
サンプリング・オーバーヘッドは、入力回路の集合的なノイズを特徴付けるパラメーターで指数関数的にスケールします。Qiskit Runtime Primitives は回路のノイズを学習すると、その特定のレイヤーに関連するサンプリング・オーバーヘッドに関するメタデータを返します。 ここでは、レイヤー \(l\) のオーバーヘッドを \(\gamma_l\) とラベル付けしてみましょう。そして、回路を軽減するための総サンプリング・オーバーヘッドは、すべてのレイヤーのオーバーヘッドの積、つまり、以下の通りです。
\(S = \prod_l \gamma_l\)
Estimator がPrimitiveのクエリーのモデル学習フェーズを完了すると、回路の総サンプリング・オーバーヘッドに関するメタデータが返されます。
アプリケーションで要求される精度に応じて、サンプル数を適宜増減させる必要があります。以下のプロットは、異なるサンプリング・オーバーヘッドの場合のEstimator エラーと回路サンプル数の関係を示しています。

なお、軽減スケーリング・ファクターはPECの学習段階で発見されるため、所望の精度を実現するために必要なサンプル数は、Primitive クエリーの前にはわからないことに注意してください。
より大きな問題に挑戦する前に、PECのサンプリング・オーバーヘッドのスケーリングに関する感触を得るために、短い深さの回路から始めることをお勧めします。
例¶
Estimatorのインターフェースでは、観測値の期待値の誤差を軽減するために、様々なエラー緩和手法をシームレスに使用することができます。次のコードでは、単純に resilience_level 2
を設定することで、ゼロノイズ外挿を使用しています。
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Estimator, Options
service = QiskitRuntimeService()
options = Options()
options.resilience_level = 2
options.optimization_level = 3
with Session(service=service, backend="ibmq_qasm_simulator") as session:
estimator = Estimator(session=session, options=options)
job = estimator.run(circuits=[psi1], observables=[H1], parameter_values=[theta1])
psi1_H1 = job.result()
# Close the session only if all jobs are finished, and you don't need to run more in the session
session.close()
注釈
Resilience levelを上げると、結果の精度を向上させるために、追加のメソッドを使用できるようになります。しかし、レベルが上がるごとに手法は高度になるため、より正確な期待値を生成するためには、サンプリングのオーバーヘッド(時間)が追加で必要になります。
Resilience levelによるSampler の設定¶
Samplerのデフォルトのresilience設定(level 1)では、読み出し誤差を緩和し、緩和された準確率分布を生成することができます。
Resilience Level 1
Level 1 は、読み出しエラーを軽減するために、マトリクス・フリー・メジャーメント・ミティゲーション(M3)ルーチンを使用します。M3は、補正すべきノイズの多い入力ビット列で定義される縮小部分空間で動作します。ビット列の数は、マルチ量子ビットのヒルベルト空間の次元よりもはるかに小さいため、結果として得られる連立方程式は、名目上、はるかに簡単に解くことができます。

図 3 M3 方式の図¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Sampler, Options
service = QiskitRuntimeService()
options = Options()
options.resilience_level = 1
options.optimization_level = 3
with Session(service=service, backend="ibmq_qasm_simulator") as session:
sampler = Sampler(session=session, options=options)
高度なresilienceオプション¶
高度なオプションを調整することで、resilience戦略をさらに設定することができます。これらの方法は、resilience level と一緒に使うことができ、関心のある特定のオプションを変更し、残りは以前に設定したresilience level に管理させることができます。
Resilience オプションのbeta版リリースの一環として、ユーザーは高度なオプションを使用してZNEを設定することができます。 PECを含む他のresilience level を調整するためのオプションは今後すぐにリリースされます。
オプション |
インプット |
概要 |
---|---|---|
options.resilience.noise_amplifier(Optional[str]) 増幅のストラテジーを選択してください |
|
ローカルゲートのフォールディングを実行することで、すべての2量子ビットゲートのノイズを増幅します。 |
|
ローカルゲートのフォールディングを実行することで、すべてのCNOTゲートのノイズを増幅します。 |
|
|
ローカルゲートのフォールデイングを実行することで、すべてのゲートのノイズを増幅します。 |
|
|
入力回路全体の全体的なフォールディングを行うことによって、入力回路のノイズを増幅します。 |
|
options.resilience.noise_factors((Optional[Sequence[float]]) |
(1, 3, 5) [Default] |
ノイズの増幅率。1 はベースライン・ノイズを表します。いずれもベースライン以上であることが必要です。 |
options.resilience.extrapolator(オプション[str]) |
|
次数1の多項式外挿。 |
|
2次以下の多項式外挿。 |
|
|
3次以下の多項式外挿。 |
|
|
次数4以下の多項式外挿。 |
Estimator session に resilience_options
を追加する例¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Estimator, Options
service = QiskitRuntimeService()
options = Options()
options.optimization_level = 3
options.resilience_level = 2
options.resilience.noise_factors = (1, 2, 3, 4)
options.resilience.noise_amplifier = 'CxAmplifier'
options.resilience.extrapolator = 'QuadraticExtrapolator'
with Session(service=service, backend="ibmq_qasm_simulator") as session:
estimator = Estimator(session=session, options=options)
job = estimator.run(circuits=[psi1], observables=[H1], parameter_values=[theta1])
psi1_H1 = job.result()
# Close the session only if all jobs are finished, and you don't need to run more in the session
session.close()