位相キックバック
制御ユニタリゲートを使うことによって位相がコントロールビットの方に移行するというよくわからんことが起こりますので、そのところを確認したいと思います。
制御ユニタリゲート
制御ユニタリゲートはコントロールビットとターゲットビットの2つを持ち、コントロールビットが1の時にだけターゲットビットにユニタリ操作をします。
U =
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&u00&u01\\
0&0&u10&u11
\end{bmatrix}
ユニタリ操作は任意の操作が入りますが、位相キックバックに対応した回路が入りそうです。
手順
位相キックバックを理解するための手順としては、位相を取り出す回路、元となる量子状態が格納された回路、そして、位相を移す回路になります。
|0> -H--*--M
|
|ψ> ----U--
上の回路が位相を取り出す回路で、下の回路が量子状態が用意された回路、真ん中のControlled Unitary回路が位相を移す部分です。まずは上の回路ですが、アダマールゲートを適用することで|0>と|1>の重ね合わせ状態を作ることができます。
\frac{\mid 0\rangle + \mid 1 \rangle}{\sqrt{2}}
次に、位相キックバックを実行します。下の回路は量子状態が実現されています。それに対して状態ベクトルを固有値としてみた時の元の行列=ハミルトニアンをユニタリ回路として制御付きで実行します。それにより、波動関数Uがかかり、結果として位相e^{2\pi i \phi}がかかることになります。
U\mid \psi \rangle = e^{2\pi i \phi} \mid \psi \rangle
Uはハミルトニアンです。上記の回路は、
\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の方だけにUがかかります。
\frac{\mid 0\rangle \mid \psi \rangle + \mid 1 \rangle U \mid \psi \rangle}{\sqrt{2}}
Uの固有ベクトルが\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
のように、量子状態は変化せず、上の回路の方の\mid 1 \rangleの方に係数が変化します。これによって位相がうまく回路に反映されました。これが位相キックバックと呼ばれている手法のようです。
考察
結局量子状態を作る、固有値固有ベクトルの関係からユニタリ変換から固有値が導き出される、量子状態が変化せずに、出力したい方の量子ビットの\mid 1 \rangleの方の量子状態がうまく回転を使って表現されました。こちらを逆量子フーリエ変換を利用してうまく位相の情報を取り出せば量子位相推定アルゴリズムへと応用できそうです。
続いて位相推定
量子コンピュータを使って固有値を位相の形で求める量子位相推定についてまとめます。
行列の固有値を求める
行列の固有値を求めます。量子ビットは01のバイナリなので細かい数字は角度を使って表現します。
のように、行列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の行列から対応する量子状態(固有状態)が作り出せればきちんと固有値を量子回路で取り出せることがわかりました。
現在の量子コンピュータではエラーが多くこの回路はシミュレータで実行する必要がありますが、一旦学んでみたいと思います。