はじめに
量子コンピュータで目的の精度であるシミュレーションをしたい場合など、その結果としての振幅を精度よく取得するための方法として量子振幅推定があります。
用途
用途は金融や実問題などの社会問題を効率的に解くことができそうです。この量子振幅推定や量子振幅増幅の発展形としてグローバーのアルゴリズムがあります。量子振幅推定、量子振幅増幅はグローバーのアルゴリズムの一般化と言えるでしょう。
参考
MUFG、みずほ銀行(順不同)の方々が論文を出しています。
https://arxiv.org/abs/1904.10246
日本語解説もありました。
「量子コンピュータを用いた高速数値積分」
https://www.mizuho-ir.co.jp/publication/giho/pdf/010_01.pdf
Quantum Amplitude Amplification and Estimation
https://arxiv.org/abs/quant-ph/0005055
量子振幅増幅
初期状態の振幅を増幅させることができます。ある関数を設定して、所望の状態を導き出します。
参考:
https://whyitsso.net/physics/quantum_mechanics/AA_AE_Grover.html
初期状態
初期状態は任意の量子状態と設定しますが、0状態と1状態の重ね合わせで複素数として、
\mid \psi \rangle = cos \theta \mid \psi_0 \rangle + e^{i\phi} sin \theta \mid \psi_1 \rangle
マーキング
マーキングは\mid \psi_1 \rangleのみにマイナスをつけます。
U_{marking}\mid \psi_0 \rangle = \mid \psi_0 \rangle\\
U_{marking}\mid \psi_1 \rangle = -\mid \psi_1 \rangle
次のようにした時、
\mid \psi \rangle = \begin{bmatrix}cos \theta \\ e^{i\phi} sin \theta \end{bmatrix}
マーキングの回路は、
U_{marking} = \begin{bmatrix} 1&0 \\ 0&-1 \end{bmatrix}
となれば、
U_{marking} \mid \psi \rangle = \begin{bmatrix} 1&0 \\ 0&-1 \end{bmatrix} \begin{bmatrix}cos \theta \\ e^{i\phi} sin \theta \end{bmatrix} = \begin{bmatrix}cos \theta \\ - e^{i\phi} sin \theta \end{bmatrix}
となるようです。
振幅増幅
マーキングした指定の量子状態の振幅を増幅します。
U_{aa} = 2\mid \psi \rangle \langle \psi \mid - I
とすれば、指定の量子状態の周りでの反転になるので、
U_{aa} =
\begin{bmatrix}
2 \alpha^2 -1 & -2 \alpha \beta e^{-i\phi}\\
-2 \alpha \beta e^{i \phi} & 2 \beta^2 - 1 \end{bmatrix}
となるようです。
複数回の繰り返し
これを複数回繰り返すので、
(U_{aa}U_{marking})^n =
(\begin{bmatrix}
2 \alpha^2 -1 & -2 \alpha \beta e^{-i\phi}\\
-2 \alpha \beta e^{i \phi} & 2 \beta^2 - 1 \end{bmatrix}
\begin{bmatrix} 1&0 \\ 0&-1 \end{bmatrix})^n
\\=
\begin{bmatrix}
2 \alpha^2 -1 & -2 \alpha \beta e^{-i\phi}\\
2 \alpha \beta e^{i \phi} & 1- 2 \beta^2 \end{bmatrix}^n
固有値固有ベクトルをおいて、
量子状態に対して、n回操作した結果は、
cos(2n+1)\theta \mid \psi_0 \rangle + e^{i\phi}sin(2n+1)\theta \mid \psi_1 \rangle
こうなりました。所望の回数操作をした後に、振幅がこのようになりました。シミュレーションで使ってもよし、検索で使ってもよし、組合せ最適化で使っても良さそうです。
具体的な利用例としてグローバーのアルゴリズムを見てみます。
グローバーのアルゴリズム
グローバーのアルゴリズムは上記の振幅増幅回路を使って、所望の量子状態の振幅を最大にするように操作をします。
初期状態を\mid + \rangle^{\otimes N}とすると、振幅は量子ビット数Nに応じて、\frac{1}{\sqrt{2^N}}となり、等分されます。初期のsin\thetaがわかるので、それから試行回数のnがわかります。
最終的な振幅はsinの値を1に持っていきたいので、角度(2n+1)\theta = \pi/2を目指します。
これがグローバーのアルゴリズムで、量子振幅増幅回路の具体例になります。
量子振幅推定
話をグローバーのアルゴリズムから量子振幅増幅に戻します。上記グローバーは振幅を最大化することを目指していました。一方必ずしも振幅を最大化する必要はありません。
あるシミュレーションをした時に、その精度が保証されているので、ある一定の操作を量子オラクルを通じて行った後の振幅を取得したいという需要があります。
金融ではモンテカルロシミュレーションをした後のサンプリング用途で需要があります。振幅がわかれば精度を落とさずに確率分布を求めることができます。
https://arxiv.org/pdf/2006.10656.pdf
量子振幅推定では、位相推定の技術を使うことで、振幅を精度よく求めることができます。出力回路は重ね合わせを準備しておき、振幅増幅回路を位相キックバックで写し、最後に逆量子フーリエ変換で位相を取り出します。
ある量子状態Aを準備。出力回路にはHゲートを適用して起きます。
次に、入力回路に振幅増幅の操作を2k回行いますが、それぞれの結果を出力回路に落としていきます。最終的に、回路を逆量子フーリエ変換で位相を取り出します。
シミュレーションなどに利用することができ、精度を評価することで、速度がルートで速くなるようです。10000回計算が必要な問題が100回で良くなります。
参考:位相キックバック、位相推定
https://qiita.com/YuichiroMinato/items/462bb42283fc642bea9d
今回は振幅増幅、振幅推定、グローバーを確認しました。
以上です。