Posted at

量子位相推定をもっと簡潔に理解する。


はじめに

量子コンピュータを使って固有値を位相の形で求める量子位相推定についてまとめます。この前やったのですがもっと簡単に説明できそうなので。


行列の固有値を求める

行列の固有値を求めます。量子ビットは01のバイナリなので細かい数字は角度を使って表現します。

Ax = \lambda x

のように、行列Aに対して固有値$\lambda$を出します。$x$は固有ベクトルですが、量子ゲートでは状態ベクトル$\mid \psi \rangle$が対応します。


回路

回路は簡単です。

1、量子状態を準備

2、位相キックバック回路を準備

3、逆量子フーリエ変換を実行

こうすると最終的に位相がビットの配列で出ます。

0     ------*--iQFT-- output

0 ----*-|--iQFT-- output
| |
input ----U-U--------

inputとして固有状態を入れて、位相キックバック回路、逆量子フーリエ変換回路を経て、outputとしてビットが出ます。それが位相に対応します。


計算の原理

計算の原理は簡単です。出力は位相に対応しています。逆量子フーリエ変換は逆高速フーリエ変換とほぼ同じですが、特定の形に量子状態を作れば、ビットの形で位相が出ます。ですので、量子状態を逆量子フーリエ変換できる形に変換するのが中間の位相キックバック回路です。

逆量子フーリエ変換は、

iQFT(\frac{1}{\sqrt{N}}(\mid 0 \rangle + e^{2\pi i [0.x_n]} \mid 1 \rangle) \otimes … \otimes (\mid 0 \rangle + e^{2\pi i [0.x_1x_2…x_n]} \mid 1 \rangle)) = \mid x_1,x_2,…,x_n \rangle

上記のように$\mid 1 \rangle$の方の係数に位相の情報が入った形で準備できれば、位相の小数点情報がビット配列として出てきます。ですので、位相キックバック回路でこれを実現します。

位相キックバック回路は特殊です。制御付回路を使うことで、上記の$\mid 1 \rangle$の状態ベクトルにのみ位相情報を反映させることができます。

まずは出力のようの回路を重ね合わせ状態にします。

\mid 0 \rangle \mid \psi \rangle \rightarrow \frac{\mid 0\rangle + \mid 1 \rangle}{\sqrt{2}} \mid \psi \rangle = \frac{\mid 0\rangle \mid \psi \rangle + \mid 1 \rangle \mid \psi \rangle}{\sqrt{2}}

次に制御ユニタリ変換回路を作って、$\mid 1 \rangle$の方にのみユニタリ変換がかかるようにします。

\frac{\mid 0\rangle \mid \psi \rangle + \mid 1 \rangle U \mid \psi \rangle}{\sqrt{2}}

ここで固有値固有ベクトルの関係で、$U$を行列、$\mid \psi \rangle$を固有状態、$e^{2\pi i \phi}$を固有値として、

U\mid \psi \rangle = e^{2\pi i \phi} \mid \psi \rangle

が成り立ちますので、

\frac{\mid 0\rangle \mid \psi \rangle + \mid 1 \rangle e^{2\pi i \phi} \mid \psi \rangle}{\sqrt{2}} = \frac{\mid 0\rangle \mid \psi \rangle +  e^{2\pi i \phi} \mid 1 \rangle \mid \psi \rangle}{\sqrt{2}} = \frac{\mid 0\rangle +  e^{2\pi i \phi} \mid 1 \rangle}{\sqrt{2}} \mid \psi \rangle

のように式変形でき、逆量子フーリエ変換の準備が整いました。これで位相を取り出せます。


まとめ

位相は、$[0.x_1x_2…] = \frac{x_1}{2}+\frac{x_2}{2^2}+…$のように小数点の形で出ます。これに、$e^{2\pi i \phi}$に代入することで固有値が出ます。

きちんとUの行列から対応する量子状態(固有状態)が作り出せればきちんと固有値を量子回路で取り出せることがわかりました。

現在の量子コンピュータではエラーが多くこの回路はシミュレータで実行する必要がありますが、一旦学んでみたいと思います。