ある量子回路を測定したとき、目的の条件を満たす結果はどれくらいの確率で出るのでしょうか。回路を何度も実行して数える方法に対し、量子振幅推定(Quantum Amplitude Estimation、QAE)は、その確率を量子状態の位相から読み取ろうとします。
位相推定を使う標準的な方式では、読み取り用の量子ビットを増やすと、位相を刻む目盛りが細かくなります。ただし、それに合わせて同じ演算を何度も組み込む必要があります。QED-Cの公開ベンチマーク実装と原論文をもとに、細かい推定のために、回路側で何が増えるのかを見ていきます。[1][2]
簡単にまとめると?
- 振幅推定は、目的の結果が出る確率を、量子状態に蓄積される位相から推定します。ここでは位相推定と逆量子フーリエ変換を使う方式を扱います。
- 読み取り用がm量子ビットなら、位相の目盛りは1/2m。確認した実装では、制御された演算Qを1、2、4……回と繰り返し、合計2m−1回組み込みます。
- 反復数は装置上の実行時間や最終的な回路深さとは別です。このベンチマークは既知の確率を埋め込んだ試験なので、未知の実問題を高速に解いた実証とも区別します。
推定するのは「目的の結果が出る確率」
まず、入力状態を用意する回路をAと呼びます。Aを実行してから測定すると、目的に合う「よい結果」と、それ以外の結果が出ます。「よい」は計算で決めた条件を満たすという意味で、装置のエラーがないという意味ではありません。
よい結果が出る確率をaとすると、その部分の振幅は√aです。振幅は量子状態の係数で、確率はその絶対値の二乗から得られます。「振幅推定」という名前ですが、ここで最終的に求める値は確率aです。たとえば、ある条件を満たす候補の割合を、状態の作り方と判定回路に埋め込めれば、その割合の推定に結び付けられます。[2]
Aの出力をすぐ測るのではなく、A、その逆演算A−1、よい結果と初期状態に応じて符号を変える操作を組み合わせ、演算Qを作ります。原論文の定義では、関係する二つの固有状態にQを作用させると、位相がそれぞれ+2θ、−2θだけ進みます。ここでa=sin²θ、0≤θ≤π/2です。確率を直接数える代わりに、この回転の角度を調べるのが位相推定型QAEの考え方です。[2]
目盛りを細かくするために、1・2・4回と演算を重ねる
位相推定では、読み取り用の量子ビットを別に用意します。各ビットに応じてQを作用させる「制御Q」を使い、Q、Q²、Q⁴……という異なる反復回数を組み合わせます。固有状態にQを2回作用させれば位相も2倍、4回なら4倍蓄積します。異なる長さで位相を蓄積した情報を、逆量子フーリエ変換によって、測定できるビット列へ変換します。[1][2]
QED-Cの固定版実装では、読み取り用の量子ビットごとに、制御Qを追加する回数を1、2、4……と倍増させています。m量子ビットなら、合計は次のようになります。
1+2+4+…+2m−1=2m−1

m=3なら7回、m=4なら15回、m=5なら31回です。一本増えた読み取り用の量子ビットが、たとえば8回分のQを担うため、必要な反復は一つだけ増えるのではありません。ここでmは回路全体の量子ビット数ではなく、位相を読み取る部分だけの数です。対象を表す量子ビットや、よい結果を示す量子ビットは別に必要です。[1]
測定した数から、確率へ戻す
読み取り用がm量子ビットなら、測定値yは0から2m−1までの整数になります。M=2mと置くと、位相を一周で割った値をy/Mという目盛りで読み取ります。原論文と、このベンチマークの結果変換処理は、確率の推定値を次のように計算します。[2][3]
推定値 ã=sin²(πy/M)
ここでπは落とせません。また、Qが進める位相は±2θなので、測定された位相角2πy/Mをそのままsin²へ入れるのではなく、半分の角度に対応させます。角度そのものと、一周を1とした位相の値を混ぜると、答えが変わってしまいます。
具体例として、m=3、M=8で、a=sin²(π/8)≒0.1464を考えます。理想的な位相推定では、二つの位相に対応する測定値はy=1とy=7です。どちらからもsin²(π/8)=sin²(7π/8)となり、同じ確率へ戻ります。ビット列が二種類出ることだけで、推定が失敗したとはいえません。これは原論文の理想回路についての計算例で、今回この公開実装を実行して得た測定結果ではありません。[2][3]
mを4にすれば目盛りは1/16になり、この例の二つの位相はy=2とy=14で表せます。もともと目盛りに合う値なので、この一例では、細かくしただけで正しい値がさらに改善するわけではありません。一般の未知の確率では、位相が目盛りと一致するとは限らず、測定値にばらつきが生じます。また、sin²を通して確率に戻すため、位相の等間隔な目盛りは、確率の等間隔な目盛りではありません。たとえばM=8のy=0、1、2は、それぞれ確率0、約0.1464、0.5へ対応します。
理論上の精度と、装置で支払う負担を分ける
原論文は、理想的に演算できる条件で、推定誤差が主に1/Mに従って小さくなることを示しています。具体的には、次の誤差範囲に入る確率が少なくとも8/π²、約81.1%とされます。[2]
|ã−a| ≤ 2π√{a(1−a)}/M + π²/M²
これは各回で必ずその誤差に収まるという保証でも、装置のノイズを含めた誤差評価でもありません。Mを増やすと理論上の範囲は狭くなりますが、この実装では制御Qの反復がM−1回へ増えます。Qの中にはAとA−1が含まれるため、問題に対応するA自体が複雑なら、一回のQも重くなります。
さらに、制御Qという大きな操作は、実行先の装置が使える基本ゲートへ分解されます。量子ビット同士の接続や回路の最適化、Aの作り方によって、実際のゲート数と回路深さは変わります。回路深さは順番に実行する操作の層の数であり、2m−1という反復数そのものではありません。ここで確認した反復数だけから、「何秒かかる」「何倍速い」「精度が必ず上がる」とは結論できません。
既知の確率を使う試験で、何を確かめているのか
QED-Cのこの実装は、試験用の入力を作りやすくしています。実行側の処理は整数sからa=sin²(πs/2m)を計算し、所定の小数桁へ丸めてから、状態準備回路へ渡します。カーネルのA_genはそのaを使い、回転角を2arcsin√aとして組み立てます。つまり、この試験で使う確率は、入力回路を作る段階ですでに分かっています。[1][3]
結果を評価する処理は、既知のaに対応するビット列を計算し、通常は二つに各50%、両者が重なる場合などは一つに100%の参照分布を用意します。実測の分布と比較するためのものです。入力の小数丸めもあるため、試験入力が理想の位相目盛りへ厳密に一致すると一律には扱えません。[3]
既知の答えを持つ試験は、実行先や回路条件を変えたときの出力を比べるために役立ちます。一方、実問題では、未知の確率を含む状態をAでどう準備し、その逆演算をどう実現するかが課題になります。ここでの単純なA_genを使えたことは、現実のデータ読み込みや複雑な計算も同じ負担で実装できる証拠ではありません。公開コードがあること、既知入力で結果を比較できること、未知の問題で実用上の優位を示したことを分けて読む必要があります。
量子ビット数を見るときは、反復数と問題の準備も確かめる
位相推定型の振幅推定を比較するときは、まず読み取り用の量子ビット数mと、対象を表す量子ビット数を分けます。次に、制御Qの反復回数だけでなく、Qに含まれるAと逆演算、装置向けの分解後の回路、測定を繰り返す回数を確認します。測定回数を増やすことと、一本の回路内でQを長く繰り返すことも、別の変更です。
読み取り用のビットを増やせば、位相の目盛りは細かくなります。そのために長い制御演算を保てるか、状態を準備する負担がどれくらいかを合わせて見ることで、振幅推定の理論上の利点と、実装で確かめるべき条件がつながります。
参考資料
- QED-C, Amplitude Estimation Qiskit kernel。固定コミット21dfc331ce61a2170b06f88259aa19f901c021bcのAmplitudeEstimation、A_gen、Ctrl_Qを参照。静的なコード確認であり、今回の実行結果ではありません。
- G. Brassard, P. Høyer, M. Mosca, A. Tapp, Quantum Amplitude Amplification and Estimation, arXiv:quant-ph/0005055v1、2000年5月15日。§2、§4、Est_Amp手順、定理12。理想的なアルゴリズムの条件と誤差評価を参照。
- QED-C, Amplitude Estimation benchmark driver。同じ固定コミットのa_from_s_int、a_to_bitstring、bitstring_to_a、analyze_and_print_resultを参照。
