めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

Phase Estimator の量子回路を解説してみる(その2)

前回 は量子フーリエ変換を実装した量子回路を紹介しました。今回は、これを用いて、ユニタリ演算の固有値(の位相)を推定する方法を説明します。

逆フーリエ変換

有名な事実ですが、前回説明したフーリエ変換

 \displaystyle y_k := \frac{1}{\sqrt{N}}\sum_{j=0}^{N-1}x_j\exp\left(2\pi i\times\frac{jk}{N} \right) --- (1)

には、逆変換があります。次になります。

 \displaystyle x_j := \frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}y_k\exp\left(-2\pi i\times\frac{jk}{N} \right) --- (2)

(1) と (2) を見比べると指数関数の引数の符号が変わっているだけですが、これが逆変換になっていることは直接計算で確認できます。(2) の右辺に (1) を代入して計算してみます。

 \displaystyle \frac{1}{\sqrt{N}}\sum_{k=0}^{N-1}y_k\exp\left(-2\pi i\times\frac{jk}{N} \right)
=\frac{1}{N}\sum_{k=0}^{N-1}\sum_{j'=0}^{N-1}x_{j'}\exp\left(2\pi i\times\frac{j'k}{N} \right)\exp\left(-2\pi i\times\frac{jk}{N} \right)

  \displaystyle =\frac{1}{N}\sum_{j'=0}^{N-1}x_{j'}\sum_{k=0}^{N-1}\exp\left(2\pi i\times\frac{(j'-j)k}{N} \right)

ここで、j'=j の場合は、

 \displaystyle \sum_{k=0}^{N-1}\exp\left(2\pi i\times\frac{(j'-j)k}{N} \right)  =  N

となりますが、一方、j'\ne j の場合、この和は、複素平面上の単位円において中心角を等分した点の値を足し合わせたものになり、対称性から、

 \displaystyle \sum_{k=0}^{N-1}\exp\left(2\pi i\times\frac{(j'-j)k}{N} \right)  =  0

となります。したがって、j' についての和は j'=j の部分だけが残って、(2) が成り立ちます。

したがって、前回のフーリエ変換の量子回路において、\displaystyle R_k = Z^{1/2^{k-1}}\displaystyle R'_k = Z^{-1/2^{k-1}} に置き換えれば逆フーリエ変換

 \displaystyle U^{-1}\left(\frac{1}{2^{n/2}}
\left( {\mid 0\rangle} + e^{2\pi i[0.j_n]}{\mid 1\rangle}\right)
\left({\mid 0\rangle}+e^{2\pi i[0.j_{n-1}j_n]}{\mid 1\rangle}\right)
\cdots
\left({\mid 0\rangle}+e^{2\pi i[0.j_1\cdots j_n]}{\mid 1\rangle}\right)\right)
={\mid j_1\rangle}\otimes\cdots\otimes {\mid j_n\rangle}
 --- (3)

の量子回路が得られます。

位相推定

唐突ですが、(3) の左辺にある

 \displaystyle \frac{1}{2^{n/2}}
\left( {\mid 0\rangle} + e^{2\pi i[0.j_n]}{\mid 1\rangle}\right)
\left({\mid 0\rangle}+e^{2\pi i[0.j_{n-1}j_n]}{\mid 1\rangle}\right)
\cdots
\left({\mid 0\rangle}+e^{2\pi i[0.j_1\cdots j_n]}{\mid 1\rangle}\right) --- (3)

という量子状態を作る方法を考えます。結論から言うと、次の量子回路で実現できます。

ここに、{\mid u\rangle} はユニタリ演算子 U の固有状態で固有値は e^{2\pi i\varphi}\varphi = [0.j_1j_2\cdots j_n])とします。つまり、

 \displaystyle U^{2^0}{\mid u\rangle} = e^{2\pi i [0.j_1j_2\cdots j_n]}{\mid u\rangle}

 \displaystyle U^{2^1}{\mid u\rangle} = e^{2\pi i [j_1.j_2\cdots j_n]}{\mid u\rangle} = e^{2\pi i [0.j_2\cdots j_n]}{\mid u\rangle}

 \displaystyle U^{2^2}{\mid u\rangle} = e^{2\pi i [j_1j_2.j_3\cdots j_n]}{\mid u\rangle} = e^{2\pi i [0.j_3\cdots j_n]}{\mid u\rangle}

などが成り立ちます。これより、上記の量子回路の出力が (3) に一致することがわかります。

さらにこの出力に逆フーリエ変換の量子回路を適用すると・・・最後の結果は、

 \displaystyle{\mid j_1\rangle}\otimes\cdots\otimes {\mid j_n\rangle}

になります。つまり、この状態を観測して、j_1,j_2,\cdots,j_n の値を読み取れば、固有値の位相 \varphi = [0.j_1j_2\cdots j_n] が分かることになります。

つまり、固有値が未知のユニタリ演算、および、固有状態のペアがあった時に、この未知の固有値を測定できることになります。これが、量子回路による位相推定アルゴリズムというわけです。

固有値が n 桁の二進数小数で厳密に表現できない場合は、当然ながらこの手法は近似値を与えることになります。

Cirq による実装例

github.com