Path: blob/main/translations/ja/ch-algorithms/quantum-phase-estimation.ipynb
3855 views
量子位相推定
量子位相推定は、量子計算における最も重要なサブルーチンの1つです。 多くの量子アルゴリズムの中心的な構成要素として機能します。このアルゴリズムの目的は次のとおりです。
ユニタリ演算子が、 のように与えられた場合に、を推定します。 ここで、 は固有ベクトルであり、は対応する固有値です。 はユニタリーなので、すべての固有値のノルムは1です。
位相推定の一般的な量子回路を以下に示します。 上側のレジスターには個の「カウント」量子ビットがあり、下のレジスターにはの状態の量子ビットがあります: 
1.1 直感的解釈
量子位相推定アルゴリズムは、位相キックバックを使用して、の(フーリエ基底における)位相をカウントレジスターの 量子ビットに書き込みます。次に、逆QFTを使用して、フーリエ基底から計算基底に変換し、測定します。
(QFTの章から)フーリエ基底では、 から数えて回で最上位の量子ビットが1回転したことを覚えているでしょう。 からの間の数であるを数えるには、この量子ビットをz軸を中心に 回転させます。 次の量子ビットでは回転し、3番目の量子ビットでは回転します。

制御ゲートを使うと、量子ビットは(キックバックにより)位相 に比例して回転します。 連続してゲートを使用して、フーリエ基底で 〜 の数値として位相をエンコードできるところまで、この回転を適切な回数繰り返します。
次に、を使用してこれを計算基底に変換します。
1.2 基礎となる数学
上記のように、この回路はユニタリー演算子の位相を推定します。において、は固有ベクトル、は対応する固有値で、を推定します。回路は次の手順です。
i. 準備:を1量子ビットレジスターにセットします。 別の個の量子ビットのセットは、値を格納するカウントレジスターです。
ii. 重ね合わせ:ビットのアダマールゲート操作をカウントレジスターに適用します。
iii. 制御ユニタリー演算:制御ビットがの場合にのみ、ターゲットレジスターにユニタリー演算子 を適用する、制御ユニタリー演算を導入する必要があります。は、となる固有ベクトル のユニタリー演算子であるため、次のようになります。
すべての𝑛制御演算子 をにおいて適用し、を使用すると以下のようになります。
ここで、 はnビットの2進数の整数表現です。
iv. 逆フーリエ変換:上の式は、量子フーリエ変換とそのQiskit実装のnotebookで導出したように、量子フーリエ変換を適用した結果であることに注意してください。 QFTがn量子ビットの入力状態を出力として以下のようにマップすることを思い出してください。
上の式でを に置き換えると、上記のステップ2で導出された式が正確に得られます。したがって、状態を復元するには、補助レジスターに逆フーリエ変換を適用します。そうすることで、以下を得られます。
v. 測定:上記の式は付近でピークになります。が整数の場合、計算基底で測定すると、高い確率で補助レジスターに位相が得られます。
が整数でない場合、上記の式は の近くでピークに達し、その確率はよりも高いものになります[1]。
みなさんがよく知っているゲートを例として取り上げ、量子位相推定を使用してその位相を推定します。ゲートは状態に位相 を追加することを思い出してください。
以下の式で与えられる についてQPEを使って、
を見つけることができます:
この例では、3量子ビットを使用して、 正確な 結果(推定ではありません!)を得ます。
次に、量子回路を設定します。 4量子ビットを使用します。qubit 0〜2はカウント量子ビットとして、qubit 3はユニタリー演算子()の固有状態として使用します。
ゲートを適用して、と初期化します。
カウント量子ビットにアダマールゲートをかけます:
次に、制御ユニタリー演算を実行します。注意:Qiskitでは量子ビットが上の画像とは逆のむきに並びます。
逆量子フーリエ変換を適用して、カウントレジスターの状態を変換します。 ここでは、のコードを以下のように与えます。
次に、カウントレジスターを測定します。
結果(001)のみが得られ、これは10進数に変換されると 1となります。の結果を得るには、結果(1)をで割る必要があります。
これはまさに私たちが期待した結果です!
最も可能性の高い2つの測定結果は、01011(10進数の11)と01010 (10進数の10)です。 これらから、次のようにが求められます。
この2つの結果の との誤差は、それぞれ3%と6%です。さきほどよりずっと優れた精度の結果が得られました!
うまくいけば、最も可能性の高い結果は、シミュレーターから期待される結果である 001 になることがわかります。 シミュレーターとは異なり、 001以外も測定される可能性があります。これは、量子コンピューターにおけるノイズとゲートエラーによるものです。