量子自然勾配法(Quantum Natural Gradient)の実装について


# はじめに
[量子コンピューター Advent Calendar 2022](https://qiita.com/advent-calendar/2022/quantum)の13日目の記事です。


Advent Calendar初投稿のmorimです。
Quantum Natural Gradientの具体的な実装の話が日本語文献で見当たらなかったので、詳しく見ていきたいと思います。

変分量子アルゴリズムはパラメーター付きの量子回路を何らかのコスト関数について最適化するアルゴリズムです。
そのパラメーターの最適化には勾配を使わない方法や、勾配を近似する手法(SPSA)、勾配を使用する手法などがあります。
勾配を使用する手法の中でも、量子状態の計量を利用した自然勾配法が提案されています[1]。

自然勾配法は簡単に言うと、勾配法に座標変換不変性を与えた手法になります。
勾配法は
```math
\boldsymbol{x}_{n+1}=\boldsymbol{x}_n+\alpha \frac{\partial f}{\partial \boldsymbol{x}}(\boldsymbol{x}_n)
```
のように更新していきますが、右辺で座標と関数の微分を足し合わせているので、$\boldsymbol{x}$を変数変換したときにもとの形に戻りません。
そこで、計量テンソル$G$を使用して、
```math
\boldsymbol{x}_{n+1}=\boldsymbol{x}_n+\alpha G^{-1}\frac{\partial f}{\partial \boldsymbol{x}}(\boldsymbol{x}_n)
```
のように更新することで更新式が座標変換不変になります。
$G$には、古典の確率モデルではフィッシャー情報行列、量子モデルではQuantum metric Tensorが使用されます。
詳しくは@Kashalphaさんの記事([自然勾配法を理解する（古典も、量子も）](https://qiita.com/Kashalpha/items/21733c009b066c24c927))をご覧ください。



# Quantum metric Tensor
パラメーター付きの量子状態 $|{\psi(\boldsymbol{\theta})}\rangle=U(\boldsymbol{\theta})|0\rangle$について、Quantum metric Tensorは以下のように定義されます。
```math
G_{kl}(\boldsymbol{x})
:=\operatorname{Re}\left(
\langle\partial_{k}\psi|\partial_{l}\psi\rangle
-\langle\partial_{k}\psi|\psi\rangle\langle\psi|\partial_{l}\psi\rangle
\right)
```
ここで、$|\partial_k \psi\rangle$は$k$番目のパラメーターについての微分を表します。

量子状態を$|{\psi(\boldsymbol{\theta})}\rangle=U_K(\theta_K)...U_2(\theta_2)U_1(\theta_1)|0\rangle$のような形と仮定します。
すると通常の行列微分によって、
```math
|\partial_{k}\psi \rangle = U_K(\theta_K)\ldots U_{k-1}(\theta_{k-1})\frac{\partial U_{k}(\theta_{k})}{\partial\theta_k}U_{k}(\theta_{k-1})\ldots U_2(\theta_2)U_1(\theta_1)|0\rangle
```
になります。
例えば、 $U_k(\theta_k)=R_Z(\theta_k)=e^{-i\theta_kZ/2}$とすると、$\frac{\partial U_{k}(\theta_{k})}{\partial\theta_k}=-\frac{i}{2}e^{-i\theta_kZ/2}Z$のようになり、微分した状態もゲートを用いて表現できます。量子変分回路で通常用いられる$U_k$($R_X, R_Y$など)は$R_Z$ Gateのように$\partial_k U_k=U_k \sigma_k$で表されます。
すると、$k<l$のとき、$U_s^\dagger U_s$が打ち消し合って、
```math
\begin{align}
\langle\partial_{k}\psi|\partial_{l}\psi\rangle&=\langle 0| U_1^\dagger\ldots\sigma_k^\dagger U_k^\dagger\ldots U_K^{\dagger}U_K\ldots U_l\sigma_l\ldots U_2U_1|0\rangle \\
&=\langle 0|U_1^\dagger\ldots\sigma_k^\dagger U_k^\dagger\ldots U_{l-1}^\dagger\sigma_{l}U_{l-1}\ldots U_2U_1|0\rangle
\end{align}
```
```math
\begin{align}
\langle\psi|\partial_{l}\psi\rangle&=\langle 0| U_1^\dagger\ldots U_K^{\dagger}U_K\ldots U_l\sigma_l\ldots U_2U_1|0\rangle \\
&=\langle 0|U_1^\dagger\ldots U_{l-1}^\dagger\sigma_l U_{l-1}\ldots U_2U_1|0\rangle
\end{align}
```
となります。
# Quantum metric Tensorの実装

上での計算により、$\operatorname{Re}\left(\langle\partial_{k}\psi|\partial_{l}\psi\rangle\right)$を計算するためには、
```math
f(\sigma_k, \sigma_l) := \langle 0|U_1^\dagger\ldots\sigma_k^\dagger U_k^\dagger\ldots U_{l-1}^\dagger\sigma_{l}U_{l-1}\ldots U_2U_1|0\rangle
```
のような形の式の実部を計算できれば十分です。
$\operatorname{Re}\left(\langle\partial_{k}\psi|\psi\rangle\langle\psi|\partial_{l}\psi\rangle
\right)$についても、単位行列$I$について、$f(I, \sigma_k)$の実部と虚部から求められます。
$f$ の実部と虚部はアダマールテストを利用すれば計算できますが[4]、より簡単な回路(下図)で計算する方法が[2]で示されています。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182880/084e5387-de09-40e4-da22-276b348e0836.jpeg">

実際、実部の方の回路について補助bitが0となる確率は
```math
\frac{1}{2}+\frac{1}{2}\operatorname{Re}(f(\sigma_k, \sigma_l))
```
となります。虚部についても同様な結果が得られます。
<details><summary>計算</summary><div>


実部と虚部をまとめて計算するため、補助ビットの初期状態を$\frac{|0\rangle+e^{i\theta}|1\rangle}{\sqrt{2}}$として計算する。

```math
\begin{align}
&\frac{1}{\sqrt{2}}\left(|0\rangle+e^{i\theta}|1\rangle\right)|0\rangle \\
\xrightarrow{X\otimes U_{1:k-1}} \,\,\,& \frac{1}{\sqrt{2}}\left(|1\rangle+e^{i\theta}|0\rangle\right)U_{1:k-1}|0\rangle \\
\xrightarrow{\rm{control}\,\sigma_k} \,\,\,& \frac{1}{\sqrt{2}}\left(|1\rangle \sigma_k U_{1:k-1}|0\rangle+e^{i\theta}|0\rangle U_{1:k-1}|0\rangle \right) \\
\xrightarrow{X\otimes U_{k:l-1}} \,\,\,& \frac{1}{\sqrt{2}}\left(|0\rangle U_{k:l-1} \sigma_k U_{1:k-1}|0\rangle+e^{i\theta}|1\rangle U_{k:l-1} U_{1:k-1}|0\rangle \right) \\
\xrightarrow{\rm{control}\,\sigma_l} \,\,\,& \frac{1}{\sqrt{2}}\left(|0\rangle U_{k:l-1} \sigma_k U_{1:k-1}|0\rangle+e^{i\theta}|1\rangle \sigma_l U_{1:l-1}|0\rangle \right) \\
\xrightarrow{H\otimes I} \,\,\,& \frac{1}{2}\left(|0\rangle \left(U_{k:l-1} \sigma_k U_{1:k-1}+e^{i\theta} \sigma_l U_{1:l-1} \right)|0\rangle
+|1\rangle \left(U_{k:l-1} \sigma_k U_{1:k-1}-e^{i\theta}\sigma_l U_{1:l-1}\right)|0\rangle \right) 

\end{align}
```
補助bitが0を取る確率は
```math
\frac{1}{4}|| \left( U_{k:l-1} \sigma_k U_{1:k-1}+e^{i\theta} \sigma_l U_{1:l-1} \right)|0\rangle||^2=\frac{1}{2}+\frac{1}{2}\operatorname{Re}\left(\langle0|e^{i\theta}U_{1:k-1}^\dagger \sigma_k^\dagger U_{k:l-1}\sigma_l U_{1:l-1}|0\rangle\right)
```
$\theta=0$のとき実部、$\theta=-\frac{\pi}{2}$のとき虚部が得られる。


</div></details>

誤りや疑問点等ありましたらコメント欄に気軽にお願いします。
また、有識者の方がいらっしゃれば、この回路をどうやれば思いつけるのか是非教えてください。
ありがとうございました！

# 参考文献
1. [Quantum Natural Gradient, Quantum 4, 269 (2020)](https://quantum-journal.org/papers/q-2020-05-25-269/)
2. [Variational ansatz-based quantum simulation of imaginary
time evolution](https://www.nature.com/articles/s41534-019-0187-2#additional-information): Supplementary Information ii
3. [量子コンピューティング・ワークブック:【課題】アダマールテスト](https://utokyo-icepp.github.io/qc-workbook/quantum_computation.html)
4. [Qiskit Gradient フレームワーク](https://qiskit.org/documentation/locale/ja_JP/tutorials/operators/02_gradients_framework.html)