量子位相推定

はじめに

 今回は量子位相推定と呼ばれる手法を解説する。量子フーリエ変換とともに、多くの量子アルゴリズム(暗号解読、量子化学、量子機械学習など)の要素技術として使われる手法である。

量子位相推定とは(概論)

 量子アルゴリズムとは、さまざまな量子回路を組み合わせて構築するものであることを過去のブログで見てきた。量子回路は量子ゲートから構成され、1量子ゲートと2量子ゲートがあることも見た。1量子ゲートは、1量子ビットからなる状態ベクトル|a\rangle(2次元列ベクトル)に2\times 2のユニタリー行列U(量子アルゴリズムで使われる演算は全てユニタリー性を持たなければならない)を施すものである。

(1)    \begin{equation*} |b\rangle=U|a\rangle \end{equation*}

図で示すと以下のようになる。左側が入力ビット、右側が出力ビットである。

Uの固有値は一般にe^{i2\pi\phi}\phi0\leq\phi<1を満たす実数)と書くことができるので、対応する固有状態を|\psi\rangleとすると

(2)    \begin{equation*} U|\psi\rangle=e^{i2\pi\phi}|\psi\rangle \end{equation*}

が成り立つ。固有状態|\psi\rangleが既知のとき、位相\phiを求めるアルゴリズムが量子位相推定である。

量子位相推定とは(詳細)

 先のブログで量子フーリエ変換Fを解説した。

(3)    \begin{equation*} F|j\rangle=\frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}e^{i\frac{2\pi kj}{N}}|k\rangle \end{equation*}

ここで、N=2^nであり、nは量子ビット数である。式(3)を眺めると、左辺の状態ベクトル内にあるjが右辺の指数関数の肩に移動していることが分かる。つまり、逆フーリエ変換をすれば、指数関数の肩にある値を状態ベクトル内部に移すことができる。

(4)    \begin{equation*} F^{-1}\left(\frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}e^{i\frac{2\pi kj}{N}}|k\rangle\right)=|j\rangle \end{equation*}

この事実を踏まえて式(2)を見直す。いま求めたい値\phiは指数関数の肩に乗っているので、逆フーリエ変換を利用して状態ベクトル側に下ろす。その後この状態を測定することにより\phiの値を知ることできるだろう。この方針に従って以下の計算を行う。

 まず最初に、n個の量子ビットを用意する。これらをまとめて第1レジスタと呼ぶことにする(下図参照)。全ての量子ビットの状態を0に初期化する。第1レジスタとは別にm個の量子ビットから成る第2レジスタを用意する。第2レジスタ上には固有値を求めたいユニタリー行列Uの固有状態|\psi\rangleが既に実現されているとする。

第1レジスタと第2レジスタを合わせた全状態を|\Psi\rangleと書くことにすると

(5)    \begin{equation*} |\Psi\rangle=|0\rangle^{\otimes n}\;|\psi\rangle \end{equation*}

となる。ここで、\otimes nは同じ状態をn回繰り返すことを意味する(n個の直積)。次に、第1レジスタに属する個々の量子ビットにHゲート(アダマールゲート)を作用させる(下図参照)。

全状態は以下のようになる。

(6)    \begin{equation*} |\Psi\rangle=\frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}|k\rangle\;|\psi\rangle \end{equation*}

ここで、N=2^nとした。式(6)の第1レジスタの状態がどのような状態なのかを、n=3の場合に調べてみる。

(7)    \begin{eqnarray*} \frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}|k\rangle\ &=& \frac{1}{\sqrt{8}}\left( |0\rangle+|1\rangle+\cdots+|7\rangle \right) \\ &=& \frac{1}{\sqrt{8}}\left( |000\rangle+|001\rangle+\cdots+|111\rangle \right) \\ &=& \frac{1}{\sqrt{8}}\left( |0\rangle|0\rangle|0\rangle+|0\rangle|0\rangle|1\rangle+\cdots+|1\rangle|1\rangle|1\rangle \right) \end{eqnarray*}

式中の左から右への量子ビットの並び|q_1q_2q_3\rangleは、図における量子ビットの上から下への並びに対応している(下図参照)。

以上が3量子ビットのときの第1レジスタの内容である。この後の説明を一般のn量子ビットに戻って行うと分かり難くなるので、もうしばらく3量子ビットのまま説明を続ける。

 アダマールゲートの後、第1レジスタの各ビットを制御ビットとして第2レジスタにUの累乗を作用させる(下図参照)。

制御ビットが1の時のみU^kを作用させると言う意味である。全状態は以下のようになる。

(8)    \begin{equation*} |\Psi\rangle=\frac{1}{\sqrt{8}}\left( |000\rangle\;|\psi\rangle + |001\rangle\;U|\psi\rangle + |010\rangle\;U^2|\psi\rangle + |011\rangle\;U^{1+2}|\psi\rangle +\cdots \right) \end{equation*}

例えば、式(8)の右辺第2項を見てみる。第1レジスタのq_3ビットは1であるから上の回路図より第2レジスタにUがかかる。また、第4項はq_2ビットとq_3ビットが1である。上の回路図を見ると、q_2ビットと紐づいている演算はU^2q_3ビットと紐づいている演算はU^1であるからトータルでU^3が第2レジスタに作用する。ここまでの考察で、第1レジスタの2進数を10進数に変換した値がUの肩に乗ることが分かったので

(9)    \begin{equation*} |\Psi\rangle=\frac{1}{\sqrt{8}}\sum_{k=0}^{7}|k\rangle\;U^k|\psi\rangle \end{equation*}

とまとめることができる。ここまでくれば一般のnビットの場合に拡張するのは容易である。

(10)    \begin{equation*} |\Psi\rangle=\frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}|k\rangle\;U^k|\psi\rangle \end{equation*}

ここで、N=2^nである。いま

(11)    \begin{equation*} U|\psi\rangle=e^{i2\pi\phi}|\psi\rangle \end{equation*}

が成り立つのでこれを代入すると

(12)    \begin{eqnarray*} |\Psi\rangle &=& \frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}|k\rangle\;U^k|\psi\rangle \\ &=& \frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}|k\rangle\;e^{i2\pi\phi k}|\psi\rangle \\ &=& \frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}|k\rangle\;e^{i\frac{2\pi k (N\phi)}{N}}|\psi\rangle \end{eqnarray*}

を得る。式(4)の逆フーリエ変換は以下であった。

(13)    \begin{equation*} F^{-1}\left(\frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}e^{i\frac{2\pi kj}{N}}|k\rangle\right)=|j\rangle \end{equation*}

この式に出てくるjN\phiと思えば、第1レジスタに逆フーリエ変換をかけた後の状態は次式となる。

(14)    \begin{equation*} F^{-1}|\Psi\rangle=|N\phi\rangle|\psi\rangle \end{equation*}

このときの量子回路は下図である(3量子ビットのとき)。

最後に第1レジスタを測定しNで割れば\phiを求めることができる。

 上の計算はN\phiが整数となる場合に成り立つ結果である。N\phiが整数とならない場合でも、その値に近い状態が高い確率で観測される。その誤差は2\piN=2^nで割った程度であるから、ビット数nを増やすほど精度は良くなる。

実装

 ここまでのロジックを、IBMのSDKQiskitを用いて実装してみる(ソースコードはここにある。)。Uとして次を考える。

(15)    \begin{equation*} U=\left( \begin{array}{rr} 1 & 0 \\ 0 & e^{i\theta} \\ \end{array} \right) \end{equation*}

ここで

(16)    \begin{equation*} |1\rangle=\left(   \begin{array}{c}      0 \\      1   \end{array}  \right) \end{equation*}

であることを思い出せば、次式が成り立つことが分かる。

(17)    \begin{equation*} U|1\rangle=e^{i\theta}|1\rangle \end{equation*}

つまり、Uの固有値はe^{i\theta}、固有状態|\psi\rangle|1\rangleである。式(11)と対応させれば、\phi=\theta/(2\pi)である。量子回路を作るコードは以下のようになる。

この回路を実行するコードは以下の通り。

8行目のN_ENCODEは第1レジスタのビット数である。16行目で\theta(=2\pi\phi)の正解値を与える。今回は量子コンピュータの実機ではなくPC上で行うシミュレーターを選択した(22行目)。28行目で計算を実行し、38行目で位相\phiの推定結果を算出する。45行目で正解値との差分を計算している。実際に計算したときの出力は以下のようになる。

第1レジスタの様子は以下のようになる。

量子ビット数を5としたから横軸の最大値は11111(10進数で31(=2^5-1))である。縦軸は各ビットの実現確率を表す。このヒストグラムを見ると、状態4(=00100)の実現確率が最も高いことが分かる。従って推定された位相\phiの値は0.125(=4/2^5)となる。正解値とのずれは0.0072である。

まとめ

 今回は、量子位相推定(QPE)のアルゴリズを解説した。さまざまな分野(量子化学・暗号読解など)での応用が考えられる要素技術である。しかし、QPEを精度よく実行するには、現在の小規模な量子コンピュータ(NISQ)では無理であり、誤り訂正のある大規模な量子コンピュータ(FTQC)の出現を待つ必要がある。その時期は2029年ごろと言われている(記事)。

参考文献

  • IBM Quantumで学ぶ量子コンピュータ
  • 量子コンピューティング 基本アルゴリズムから量子機械学習まで
  • 量子位相推定アルゴリズム (Quantum Phase Estimation) とは
  • Kumada Seiya

    Kumada Seiya

    仕事であろうとなかろうと勉強し続ける、その結果”中身”を知ったエンジニアになれる

    最近の記事

    • 関連記事
    • おすすめ記事
    • 特集記事

    アーカイブ

    カテゴリー

    PAGE TOP