Tech Blog

勉強したことをまとめます。

HHLアルゴリズム

はじめに

 今回は、連立一次方程式を量子コンピュータを用いて解く際に使われるHHL(Harrow-Hassidim-Lloyd)アルゴリズムを紹介する。

一般的な解法

 最初に一般的な解法を示す。N次元ベクトル{\bf x},{\bf b}の間に次式が成り立っているとする。

{\displaystyle
\begin{equation}
A{\bf x}={\bf b}\tag{1}
\end{equation}
}


Aは、N\times Nのユニタリー行列である。このとき

{\displaystyle
\begin{equation}
{\bf x}=A^{-1}{\bf b}\tag{2}
\end{equation}
}


を求めたい。A固有値固有ベクトルをそれぞれ\lambda_n,{\bf a}_nと置くと

{\displaystyle
\begin{equation}
A{\bf a}_n=\lambda_n{\bf a}_n\tag{3}
\end{equation}
}


が成り立ち、ベクトル{\bf b}{\bf a}_nで展開することができる。

{\displaystyle
\begin{equation}
{\bf b}=\sum_{n=0}^{N-1}\beta_n{\bf a}_n\tag{4}
\end{equation}
}


式(4)を式(2)に代入すると

{\displaystyle
\begin{equation}
{\bf x}=\sum_{n=0}^{N-1}\beta_n A^{-1}{\bf a}_n\tag{5}
\end{equation}
}


式(3)より

{\displaystyle
\begin{equation}
A^{-1}{\bf a}_n=\dfrac{1}{\lambda_n} {\bf a}_n
\end{equation}
}


これを式(5)に代入して

{\displaystyle
\begin{equation}
{\bf x}=\sum_{n=0}^{N-1}\dfrac{\beta_n}{\lambda_n} {\bf a}_n\tag{6}
\end{equation}
}


を得る。ここまでの式変形を量子コンピュータ上で行う手順を次に示す。

HHLアルゴリズム

 最初に、{\bf b}を振幅エンコーディングする。

{\displaystyle
\begin{equation}
|{\bf b}\rangle_A=\sum_{k=0}^{N-1}b_k|k\rangle_A\tag{7}
\end{equation}
}


振幅エンコーディングについてはここここにまとめてある。あとの区別のため、エンコード先をAレジスタと呼ぶことにする。これは複数の量子ビットから構成された量子状態である。さて、量子コンピュータでは顕に固有状態|{\bf a}_n\rangleを求める必要がないことに注意する。式(7)を得た時点でそれを固有状態|{\bf a}_n\rangleによる展開と同一視することができる。

{\displaystyle
\begin{equation}
|{\bf b}\rangle_A=\sum_{k=0}^{N-1}b_k|k\rangle_A=\sum_{n=0}^{N-1}\beta_n|{\bf a}_n\rangle_A
\end{equation}
}


ここが古典論との大きな違いである。次に、U=e^{iA}を考える。Aをユニタリー行列としたからUもユニタリー行列であり、次式が成り立つ。

{\displaystyle
\begin{equation}
U|{\bf a}_n\rangle_A=e^{iA}|{\bf a}_n\rangle_A=e^{i\lambda_n}|{\bf a}_n\rangle_A
\end{equation}
}


固有値\lambda_nを求めるため、量子位相推定(QPE)を行う。QPEを行うため、複数の量子ビットからなるBレジスタを追加する(0で初期化)。

{\displaystyle
\begin{equation}
|{\bf b}\rangle_A|0\rangle_B=\sum_{n=0}^{N-1}\beta_n|{\bf a}_n\rangle_A|0\rangle_B
\end{equation}
}


この状態にQPEを施してA固有値\lambda_nをBレジスタに入れる。

{\displaystyle
\begin{equation}
\sum_{n=0}^{N-1}\beta_n|{\bf a}_n\rangle_A|\lambda_n\rangle_B
\end{equation}
}


次に、複数ビットからなるCレジスタを追加し、Bレジスタの値を用いた算術演算(f(x)=\dfrac{1}{\pi}\cos^{-1}{\dfrac{1}{x}})を行い、結果をCレジスタに入れる。

{\displaystyle
\begin{equation}
\sum_{n=0}^{N-1}\beta_n\;|{\bf a}_n\rangle_A\;|\lambda_n\rangle_B\;|\dfrac{1}{\pi}\cos^{-1}{\dfrac{1}{\lambda_n}}\rangle_C
\end{equation}
}


次に、1ビットからなるDレジスタを追加し、Cレジスタの各ビットを制御ビットとしてDレジスタに回転ゲートR_y(\pi 2^{-k})を施す。このあたりの詳細な式変形はここにまとめてある。

{\displaystyle
\begin{equation}
\sum_{n=0}^{N-1}\beta_n\;|{\bf a}_n\rangle_A\;|\lambda_n\rangle_B\;|\dfrac{1}{\pi}\cos^{-1}{\dfrac{1}{\lambda_n}}\rangle_C
\left(
\dfrac{1}{\lambda_n}|0\rangle_D+\sqrt{1-\left(\dfrac{1}{\lambda_n}\right)^2}|1\rangle_D
\right)
\end{equation}
}


Dレジスタを測定し0が得られたとき、次の状態に収縮する。

{\displaystyle
\begin{equation}
C\sum_{n=0}^{N-1}\dfrac{\beta_n}{\lambda_n}\;|{\bf a}_n\rangle_A\;|\lambda_n\rangle_B\;|\dfrac{1}{\pi}\cos^{-1}{\dfrac{1}{\lambda_n}}\rangle_C
\;|0\rangle_D
\end{equation}
}


ここで、Cは規格化定数である。B,Cレジスタにそれぞれの逆演算を施し初期化する。

{\displaystyle
\begin{equation}
C\sum_{n=0}^{N-1}\dfrac{\beta_n}{\lambda_n}\;|{\bf a}_n\rangle_A\;|0\rangle_B\;|0\rangle_C
\;|0\rangle_D
\end{equation}
}


Aレジスタに式(6)が再現されている。

木構造を使った振幅エンコーディング

はじめに

 前回、振幅エンコーディングの手順を示した。その手法では、確率(前回の式(4))

{\displaystyle
\begin{align*}
P=\dfrac{1}{N}\sum_{i=0}^{N-1}v_i^2
\end{align*}
}


が小さいとき、何度も測定を繰り返す必要があり効率が悪くなる。今回は、エンコーディングを行う過程の中に「測定」を含まない手法(木構造を用いた振幅エンコーディング)を説明する。

木構造

 8次元ベクトル{\bf v}=(v_0,\cdots,v_7)を振幅に埋め込んだ状態

{\displaystyle
\begin{align}
|\psi\rangle
&=\sum_{k=0}^{7}v_k|k\rangle\\
&=v_0|000\rangle+v_1|001\rangle+v_2|010\rangle+v_3|011\rangle+v_4|100\rangle+v_5|101\rangle+v_6|110\rangle+v_7|111\rangle
\label{eq0}
\end{align}
}


を作ることを目的とする。規格化条件

{\displaystyle
\begin{align*}
\sum_{k=0}^{7}|v_k|^2=1
\end{align*}
}


は満たされているとする。v_kは実数値である。8次元ベクトルを埋め込むのに必要な最小の量子ビット数は3であるので、ここでは3個の量子ビットを用いる。

   最初に以下に示す木構造を作る。

図1. 木構造のデータ
次に、3個の量子ビットからなるAレジスタm個の量子ビットからなるBレジスタを用意する。すべてのビットは0に初期化されている。

{\displaystyle
\begin{align*}
|000\rangle_A\;|0\cdots0\rangle_B
\end{align*}
}


Aレジスタをアドレスとして扱い、木構造からデータを取り出し、Bレジスタに入れる仕組みを作る(実現の仕方はここでは言及しない)。取り出す手順は以下の通り。

  1. Aレジスタの値aを読む。
  2. Node aの左側の子ノードの値を、Bレジスタに基底エンコーディングにより読み込む。

たとえば、最初の操作ではAレジスタの最初のビットの値をアドレスaとする。a=0の場合、BレジスタにNode 00の値を読み込む。a=1の場合、BレジスタにNode 10の値を読み込む。次の操作ではAレジスタの最初の2ビットをアドレスとして扱い同じことを繰り返す。a=00の場合、BレジスタにNode 000の値を読み込む。a=01の場合、BレジスタにNode 010の値を読み込む。

 以下具体的に木構造を用いた振幅エンコーディングの手順を示す。

振幅エンコーディング

1. 初期状態

 上に述べた初期状態を作る。

{\displaystyle
\begin{align*}
|\psi_1\rangle=|000\rangle_A\;|0\cdots0\rangle_B
\end{align*}
}


2. Node 0のデータ取り出し

 rootノードの左側の子ノードNode 0からデータを取り出す。この操作は上の手順を踏まない例外的な操作である。

{\displaystyle
\begin{align*}
|\psi_2\rangle=|000\rangle_A\;|b(V_1^2)\rangle_B
\end{align*}
}


ここで

{\displaystyle
\begin{align*}
V_1^2=\sum_{i=0}^{3}v_i^2
\end{align*}
}


b(x)xの2進数表記を表す(前回と同じ)。

3. 算術演算

 Cレジスタを追加して、ここにBレジスタの値V^2を引数とする関数の値 f(V_1^2)=\dfrac{1}{\pi}\cos^{-1}{V_1} を入力する。

{\displaystyle
\begin{align*}
|\psi_3\rangle
&=
|000\rangle_A\;|b(V_1^2)\rangle_B\;|b(\dfrac{1}{\pi}\cos^{-1}{V_1})\rangle_C \\
&=
|000\rangle_A\;|b(V_1^2)\rangle_B\;|a_0\cdots a_{m-1}\rangle_C
\end{align*}
}


2行目の式は、Cレジスタ内の値を2進数で書いたものである。詳細は前回の解説にある。

4. 回転ゲートの適用

 Aレジスタの最初のビットを明示すると

{\displaystyle
\begin{align*}
|\psi_3\rangle=
|0\rangle_A\;|00\rangle_A\;|b(V_1^2)\rangle_B\;|a_0\cdots a_{m-1}\rangle_C \\
\end{align*}
}


となる。Cレジスタの各ビットを制御ビットにして、Aレジスタの最初のビットにR_y(\pi 2^{-k})を作用させる。

{\displaystyle
\begin{align*}
|\psi_4\rangle=
\left(V_1|0\rangle_A+\sqrt{1-V_1^2}|1\rangle_A\right)
\;|00\rangle_A\;|b(V_1^2)\rangle_B\;|a_0\cdots a_{m-1}\rangle_C
\end{align*}
}


ここで

{\displaystyle
\begin{align*}
V_1&=\sqrt{\sum_{i=0}^3 v_i^2}\\
\sqrt{1-V_1^2}&=\sqrt{\sum_{i=4}^7 v_i^2}
\end{align*}
}


である。|\psi_4\rangleを得るまでの計算の詳細は、前回の解説に記載してある。

5. B,Cレジスタの初期化

 B,Cレジスタに逆演算を施して初期化する。

{\displaystyle
\begin{align}
|\psi_5\rangle
&=
\left(V_1|0\rangle_A+\sqrt{1-V_1^2}|1\rangle_A\right)
\;|00\rangle_A\;|0\rangle_B\;|0\rangle_C \nonumber \\
&=
V_1|0\rangle_A\;|00\rangle_A\;|0\rangle_B\;|0\rangle_C
+\sqrt{1-V_1^2}|1\rangle_A\;|00\rangle_A\;|0\rangle_B\;|0\rangle_C
\label{eq1}
\end{align}
}


6. Node 00のデータの取り出し

 式(\ref{eq1})の第1項を考える。Aレジスタの最初のビット0をアドレスとして、木構造からNode 0の左側の子ノードNode 00の値を取り出しBレジスタに入れる。

{\displaystyle
\begin{align*}
|\psi_6\rangle
=
V_1|0\rangle_A\;|00\rangle_A\;|b(V_2^2)\rangle_B\;|0\rangle_C
\end{align*}
}


ここで

{\displaystyle
\begin{align*}
V_2^2=\dfrac{v_0^2+v_1^2}{P}
\end{align*}
}


である。

7. Node 10のデータの取り出し

 式(\ref{eq1})の第2項を考える。Aレジスタの最初のビット1をアドレスとして、木構造からNode 1の左側の子ノードNode 10の値を取り出しBレジスタに入れる。

{\displaystyle
\begin{align*}
|\psi_7\rangle
=
\sqrt{1-V_1^2}|1\rangle_A\;|00\rangle_A\;|b(V_3^2)\rangle_B\;|0\rangle_C
\end{align*}
}


ここで

{\displaystyle
\begin{align*}
V_3^2=\dfrac{v_4^2+v_5^2}{Q}
\end{align*}
}


である。

8. Node 00とNode 10のデータを取り出した結果

 |\psi_6\rangle|\psi_7\rangleを合わせて

{\displaystyle
\begin{align*}
|\psi_8\rangle
=
V_1|0\rangle_A\;|00\rangle_A\;|b(V_2^2)\rangle_B\;|0\rangle_C+
\sqrt{1-V_1^2}|1\rangle_A\;|00\rangle_A\;|b(V_3^2)\rangle_B\;|0\rangle_C
\end{align*}
}


9. 算術演算と初期化

 |\psi_8\rangleに以下の操作を行う。

  1. 先と同様にBレジスタの値を用いた算術演算を行いCレジスタに値を入れる。
  2. Cレジスタ内の各ビットを制御ビットとして、回転ゲートをAレジスタの2つ目のビットに施す。
  3. B,Cレジスタに逆演算を施し初期化する。

これらを行うと以下を得る。

{\displaystyle
\begin{align*}
|\psi_9\rangle
&=\left(
V_1V_2|00\rangle_A\;|0\rangle_A+
V_1\sqrt{1-V_2^2}|01\rangle_A\;|0\rangle_A+
\sqrt{1-V_1^2}V_3|10\rangle_A\;|0\rangle_A+
\sqrt{1-V_1^2}\sqrt{1-V_3^2}|11\rangle_A\;|0\rangle_A\right)\\
&&\hspace{10cm}\otimes
\;|0\rangle_B\;|0\rangle_C\\
&=
\left(
\sqrt{v_0^2+v_1^2}|00\rangle_A\;|0\rangle_A+
\sqrt{v_2^2+v_3^2}|01\rangle_A\;|0\rangle_A+
\sqrt{v_4^2+v_5^2}|10\rangle_A\;|0\rangle_A+
\sqrt{v_6^2+v_7^2}|11\rangle_A\;|0\rangle_A\right)\\
&\hspace{10cm}\otimes
\;|0\rangle_B\;|0\rangle_C
\end{align*}
}


10. 最後のステップ

 Aレジスタの最初の2つのビットをアドレスとして木構造からデータを取り出し、Bレジスタに入れる。たとえば、最初の2つのビットが00のとき、Node 00の左側の子ノードNode 000の値を取り出す。算術演算など同様な計算を繰り返すと次の状態を得る。

{\displaystyle
\begin{align*}
|\psi_{10}\rangle&=
\left(
\sqrt{v_0^2}|000\rangle_A+
\sqrt{v_1^2}|001\rangle_A+
\sqrt{v_2^2}|010\rangle_A+
\sqrt{v_3^2}|011\rangle_A+
\sqrt{v_4^2}|100\rangle_A
\right.\\
&\hspace{5cm}+
\left.
\sqrt{v_5^2}|101\rangle_A+
\sqrt{v_6^2}|110\rangle_A+
\sqrt{v_7^2}|111\rangle_A
\right)\otimes
|0\rangle_B\;|0\rangle_C
\end{align*}
}


一番深いノードに格納してあるv_kの符号も取り出して根号を外す。

{\displaystyle
\begin{align*}
|\psi_{10}\rangle&=
\bigl(
v_0|000\rangle_A+
v_1|001\rangle_A+
v_2|010\rangle_A+
v_3|011\rangle_A+
v_4|100\rangle_A
\bigr.\\
&\hspace{5cm}+
\bigl.
v_5|101\rangle_A+
v_6|110\rangle_A+
v_7|111\rangle_A
\bigr)\otimes
|0\rangle_B\;|0\rangle_C
\end{align*}
}


目的とする式(\ref{eq0})が得られた。

まとめ

 今回は木構造を利用した振幅エンコーディングを説明した。N次元ベクトル{\bf v}=(v_0\cdots v_{N-1})のとき、\log_2{N}多項式のオーダでエンコーディングを行うことができる。前回の方法は、エンコーディング過程に測定行為が含まれており、場合によっては効率が悪くなる欠点があった。

参考文献

振幅エンコーディング

はじめに

 振幅エンコーディングの手順を示す。規格化されたベクトル{\bf v}=(v_0,\cdots,v_{N-1})の各成分を量子状態の振幅に埋め込み

{\displaystyle
\begin{equation}
\sum_{i=0}^{N-1}v_i|i\rangle
\end{equation}
}


を作ることが目的である。

1. 初期状態

 最初に次の初期状態を用意する。

{\displaystyle
\begin{equation}
\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|0\rangle_B\;|0\rangle_C
\end{equation}
}


ここで、ABをつけたケットベクトルはn個の量子ビットから構成されるレジスタCをつけたケットベクトルはm個の量子ビットから構成されるレジスタである。また、N=2^nである。AレジスタにはQRAMから取り出すデータのアドレスが格納されている。

2. QRAM

 上の初期状態を用いてQRAMからデータ{\bf v}=(v_0,\cdots,v_{N-1})を取り出す。{\bf v}は規格化されているとする。データの取り出しは基底エンコーディングにより行われBレジスタに格納される。

{\displaystyle
\begin{equation}
\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|b(v_i)\rangle_B\;|0\rangle_C
\end{equation}
}


ここで、b(x)xを2進数表記した0,1の並びである。従って、その精度はnビットで表現できる範囲のものであることに注意する。

3. 算術演算

 Bレジスタに入力した値v_iを引数とする関数\;f(v_i)=\dfrac{1}{\pi}\cos^{-1}{v_i}の値を算術演算によりCレジスタに入力する。

{\displaystyle
\begin{equation}
\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|b(v_i)\rangle_B\;|b\left(\dfrac{1}{\pi}\cos^{-1}{v_i}\right)\rangle_C
\end{equation}
}


{\bf v}は規格化されているので0\le v_i\le 1である。これより

{\displaystyle
\begin{align}
0\le\dfrac{1}{\pi}\cos^{-1}{v_i}\le\dfrac{1}{2}
\label{eq2}
\end{align}
}

である。従って\dfrac{1}{\pi}\cos^{-1}{v_i}の2進数表記は

{\displaystyle
\begin{align}
\dfrac{1}{\pi}\cos^{-1}{v_i}
&=\sum_{k=0}^{m-1}2^{-k-1}a_k\nonumber \\
&=\dfrac{1}{2}a_0+\left(\dfrac{1}{2}\right)^2a_1+\cdots+\left(\dfrac{1}{2}\right)^m a_{m-1}
\label{eq1}
\end{align}
}

で定義されるa_kを用いて

{\displaystyle
\begin{equation}
b\left(\dfrac{1}{\pi}\cos^{-1}{v_i}\right)=0.a_0a_1\cdots a_{m-1}
\end{equation}
}


と書くことができる。ここで、a_kは0か1のどちらかの値を取る整数である。この表記を用いるとCレジスタ

{\displaystyle
\begin{equation}
|b\left(\dfrac{1}{\pi}\cos^{-1}{v_i}\right)\rangle_C=|a_0a_1\cdots a_{m-1}\rangle_C
\end{equation}
}


と書くことができる。ここまでの処理で得られる全状態は次式である。

{\displaystyle
\begin{equation}
\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|b(v_i)\rangle_B\;|a_0a_1\cdots a_{m-1}\rangle_C
\end{equation}
}

4. 回転ゲートの適用

 最初に1ビットからなる4つ目のレジスタDレジスタ)を追加する。

{\displaystyle
\begin{equation}
\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|b(v_i)\rangle_B\;|a_0a_1\cdots a_{m-1}\rangle_C\;|0\rangle_D
\end{equation}
}


次にCレジスタの各ビットを制御ビットとしてDレジスタに回転ゲートR_y(\pi 2^{-k})を作用させる。

{\displaystyle
\begin{align*}
&\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|b(v_i)\rangle_B\;|a_0a_1\cdots a_{m-1}\rangle_C\;\prod_{k=0}^{m-1}R_y(a_k\pi 2^{-k})|0\rangle_D\\
&=\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|b(v_i)\rangle_B\;|a_0a_1\cdots a_{m-1}\rangle_C\;R_y\left(\pi\sum_{k=0}^{m-1}a_k2^{-k}\right)|0\rangle_D
\end{align*}
}


ここで、式(\ref{eq1})を用いると

{\displaystyle
\begin{align*}
R_y\left(\pi\sum_{k=0}^{m-1}a_k2^{-k}\right)
&=R_y\left(\pi\dfrac{2}{\pi}\cos^{-1}{v_i})\right)\\
&=R_y\left(2\cos^{-1}{v_i})\right)
\end{align*}
}


を得る。さらに

{\displaystyle
\begin{equation}
R_y\left(\theta\right)|0\rangle=\cos{\dfrac{\theta}{2}}|0\rangle+\sin{\dfrac{\theta}{2}}|1\rangle
\end{equation}
}


であるから

{\displaystyle
\begin{align*}
R_y\left(2\cos^{-1}{v_i})\right)|0\rangle_D
&=\cos{\left(\cos^{-1}{v_i}\right)}|0\rangle_D+\sin{\left(\cos^{-1}{v_i}\right)}|1\rangle_D\\
&=v_i|0\rangle_D+\sqrt{1-v_i^2}|1\rangle_D
\end{align*}
}


を得る。式(\ref{eq2})より\sin{\left(\cos^{-1}{v_i}\right)}>0であることに注意する。ここまでをまとめると

{\displaystyle
\begin{align}
\dfrac{1}{\sqrt{N}}\sum_{i=0}^{N-1}|i\rangle_A\;|b(v_i)\rangle_B\;|a_0a_1\cdots a_{m-1}\rangle_C\;\left(v_i|0\rangle_D+\sqrt{1-v_i^2}|1\rangle_D\right)\tag{3}
\label{eq3}
\end{align}
}


である。

5. Dレジスタの測定

 Dレジスタを構成する1ビットを測定する。0が測定されるまで繰り返す。0が測定されたとき全状態は次の状態に収縮する。

{\displaystyle
\begin{align*}
\dfrac{1}{\|{\bf v}\|}\sum_{i=0}^{N-1}v_i|i\rangle_A\;|b(v_i)\rangle_B\;|a_0a_1\cdots a_{m-1}\rangle_C\;|0\rangle_D
\end{align*}
}


\|{\bf v}\|=1と仮定したから

{\displaystyle
\begin{align*}
\sum_{i=0}^{N-1}v_i|i\rangle_A\;|b(v_i)\rangle_B\;|a_0a_1\cdots a_{m-1}\rangle_C\;|0\rangle_D
\end{align*}
}


である。

6. Cレジスタの初期化

 Cレジスタに逆演算を施して初期化する。

{\displaystyle
\begin{align*}
\sum_{i=0}^{N-1}v_i|i\rangle_A\;|b(v_i)\rangle_B\;|0\rangle_C\;|0\rangle_D
\end{align*}
}


7. Bレジスタの初期化

 Bレジスタに逆演算を施して初期化する。

{\displaystyle
\begin{align*}
\sum_{i=0}^{N-1}v_i|i\rangle_A\;|0\rangle_B\;|0\rangle_C\;|0\rangle_D
\end{align*}
}


8. 振幅エンコーディングの完成

 Aレジスタに望みの振幅エンコーディングができている。

{\displaystyle
\begin{align*}
\sum_{i=0}^{N-1}v_i|i\rangle_A
\end{align*}
}


備考

 式(\ref{eq3})よりDレジスタ(1量子ビット)が0になる確率は

{\displaystyle
\begin{align*}
P=\dfrac{1}{N}\sum_{i=0}^{N-1}v_i^2\tag{4}
\end{align*}
}


である。効率よく振幅エンコーディングを行うにはPが大きいことが望ましい。

参考文献

Quantum Circuit Learning

はじめに

 論文「Quantum Circuit Learning」内の計算をまとめる。

密度演算子の導出

 1量子ビットの状態 |0\rangleを考え、演算子

{\displaystyle
\begin{equation}
R^Y\left(\theta\right)=
\begin{pmatrix}
\cos{\dfrac{\theta}{2}}&-\sin{\dfrac{\theta}{2}} \\
\sin{\dfrac{\theta}{2}}&\cos{\dfrac{\theta}{2}}
\end{pmatrix}
\end{equation}
}

を作用させる。


R^Y\left(\theta\right)|0\rangle=\cos{\dfrac{\theta}{2}}|0\rangle+\sin{\dfrac{\theta}{2}}|1\rangle\tag{1}

ここで、密度演算子


\rho_1=R^Y\left(\theta\right)|0\rangle\langle0|R^{Y\dagger}\left(\theta\right)

を定義すると

{\displaystyle
\begin{eqnarray}
\rho_1
&=&
\left(\cos{\dfrac{\theta}{2}}|0\rangle+\sin{\dfrac{\theta}{2}}|1\rangle\right)\left(\cos{\dfrac{\theta}{2}}\langle0|+\sin{\dfrac{\theta}{2}}\langle1|\right)\\
&=&
\begin{pmatrix}
\cos^2{\dfrac{\theta}{2}}& \dfrac{1}{2}\sin{\theta} \\
\dfrac{1}{2}\sin{\theta}&\sin^2{\dfrac{\theta}{2}}
\end{pmatrix} \tag{2}
\end{eqnarray}
}


と計算される。いま、-\dfrac{\pi}{2}\leq\theta\leq\dfrac{\pi}{2}とすれば


\begin{aligned}
\cos^2{\dfrac{\theta}{2}}&=\dfrac{1+\cos{\theta}}{2} \\
&=\dfrac{1+\sqrt{1-\sin^2{\theta}}}{2}
\end{aligned}

となる。従って、\sin{\theta}=xと置くと


\begin{aligned}
\rho_1
&=
\dfrac{1}{2}\begin{pmatrix}
1+\sqrt{1-x^2}&x \\
x&1-\sqrt{1-x^2}
\end{pmatrix}\\
&=\dfrac{1}{2}\left(I+xX+\sqrt{1-x^2}Z \right)
\end{aligned}

を得る。ここで


\begin{aligned}
X&=
\begin{pmatrix}
0&1 \\
1&0
\end{pmatrix} \\
Z&=
\begin{pmatrix}
1&0 \\
0&-1
\end{pmatrix} \\
\end{aligned}

である。

 次に、N量子ビットの状態


|\psi\rangle=|0\cdots0\rangle

を考える。これに演算子


\begin{aligned}
\prod_{n=1}^{N}R^{Y}_n(\sin^{-1}{x})
\end{aligned}

を作用させると、上と同じ計算を各ビットについて繰り返すことにより、次の密度演算子を得る。


\begin{aligned}
\rho_{N}(x)=\dfrac{1}{2^N}\prod_{n=1}^{N}\left(I+xX_n+\sqrt{1-x^2}Z_n \right)
\end{aligned}\tag{3}

ここで、X_n,Z_nの添字nは、n番目のビットに作用することを意味する。

密度演算子を用いた期待値計算

 式(1)をもう一度書く。


|\psi_1\rangle=R^Y\left(\theta\right)|0\rangle=\cos{\dfrac{\theta}{2}}|0\rangle+\sin{\dfrac{\theta}{2}}|1\rangle\tag{4}

|\psi_1\rangleを使うと密度演算子\rho_1は以下のように書ける。


\rho_1=|\psi_1\rangle\langle\psi_1|

ここで次の量を計算する。


\begin{eqnarray}
\mathrm{tr}\left(\rho_1 X_1\right)&=&\mathrm{tr}\left(|\psi_1\rangle\langle\psi_1|X_1\right) \\
&=&
\sum_{n=0}^1\langle n|\psi_1\rangle\langle\psi_1|X_1|n\rangle \\
&=&
\sum_{n=0}^1\langle\psi_1|X_1|n\rangle\langle n|\psi_1\rangle \\
&=&
\langle\psi_1|X_1|\psi_1\rangle
\end{eqnarray}


すなわち、\mathrm{tr}\left(\rho_1 X_1\right)を計算することは、状態|\psi_1\rangleを用いてXの期待値を計算することに等しい。\rho_1として、式(2)を用いれば

{\displaystyle
\begin{eqnarray}
\rho_1 X_1
&=&
\begin{pmatrix}
\cos^2{\dfrac{\theta}{2}}& \dfrac{1}{2}\sin{\theta} \\
\dfrac{1}{2}\sin{\theta}&\sin^2{\dfrac{\theta}{2}}
\end{pmatrix}
\begin{pmatrix}
0&1 \\
1&0
\end{pmatrix} \\
&=&
\begin{pmatrix}
\dfrac{1}{2}\sin{\theta} & \cos^2{\dfrac{\theta}{2}} \\
\sin^2{\dfrac{\theta}{2}} &\dfrac{1}{2}\sin{\theta}
\end{pmatrix}
\end{eqnarray}
}

と計算でき、従って


\begin{equation}
\mathrm{tr}\left(\rho_1 X_1\right)=\sin\theta=x
\end{equation}

を得る。すなわち


\begin{equation}
\langle\psi_1|X_1|\psi_1\rangle=x
\end{equation}

である。この結果を用いれば、N量子ビットの場合の密度演算子(3)を用いた次式を計算できる。


\begin{eqnarray}
\mathrm{tr}\left(\rho_N X_1\cdots X_N\right)
&=&
\mathrm{tr}\bigl(|\psi_1\rangle\langle\psi_1| X_1\otimes|\psi_2\rangle\langle\psi_2|X_2\otimes\cdots\otimes |\psi_N\rangle\langle\psi_N|X_N\bigr) \\
&=&
\langle\psi_1|X_1|\psi_1\rangle\otimes\cdots\otimes\langle\psi_N|X_N|\psi_N\rangle\\
&=&x^N 
\end{eqnarray}

上にも書いた通り添字番号はビットの位置を表すだけなので、期待値\langle\psi_n|X_n|\psi_n\rangleの結果はどれもxである。

高次元特徴空間への振幅エンコーディング

 ここまでは論文内の定式化を見てきた。本論文では密度演算子を中心に据えて定式化をしているので何をしているのか少し分かり難い。ここでは密度演算子に移る前の式(4)に戻って考えてみる。
 式(4)は1量子ビットの場合の式である。これを2量子ビットの場合に拡張する。

\begin{eqnarray} |\psi_1\rangle\otimes|\psi_2\rangle=\bigl(\cos{\dfrac{\theta}{2}}|0\rangle+\sin{\dfrac{\theta}{2}}|1\rangle\bigr)\otimes\bigl(\cos{\dfrac{\theta}{2}}|0\rangle+\sin{\dfrac{\theta}{2}}|1\rangle\bigr) \end{eqnarray}

これを展開すると

\begin{eqnarray} |\psi_1\psi_2\rangle=\cos^2{\dfrac{\theta}{2}}|00\rangle+\dfrac{1}{2}\sin\theta|01\rangle+\dfrac{1}{2}\sin\theta|10\rangle+\sin^2{\dfrac{\theta}{2}}|11\rangle \end{eqnarray}

を得る(簡単のため直積の記号は省略した)。いま、\sin\theta=xであるから

\begin{eqnarray} |\psi_1\psi_2\rangle=\dfrac{1+\sqrt{1-x^2}}{2}|00\rangle+\dfrac{1}{2}x|01\rangle+\dfrac{1}{2}x|10\rangle+\dfrac{1-\sqrt{1-x^2}}{2}|11\rangle \end{eqnarray}

となる。状態|00\rangle|11\rangleの振幅にはx非線形項が、状態|01\rangle|10\rangleの振幅にはxの線形項が埋め込まれていることが分かる。つまり、以下の手順を踏むことで-1\leq x\leq 1を満たす実数xを2量子状態の振幅に埋め込む(エンコーディングする)ことができる。

  1. |00\rangleを用意する。
  2. 各ビットにR^{Y}(\sin^{-1}{x})を作用させる。

言い換えると、回転ゲートR^{Y}(\sin^{-1}{x})を用いた量子回路により、xを4(=22)次元の特徴空間に射影したことになる。この空間の中にはx非線形項も存在する。上の手順は容易にN個の量子ビットの場合に拡張することができる。

  1. |0\cdots0\rangleを用意する。
  2. 各ビットにR^{Y}(\sin^{-1}{x})を作用させる。

この場合は特徴空間の次元は2^Nになる。Nを十分大きく取れるとき(例えば100や1000)、特徴空間の次元は膨大な数になる。ところで、機械学習におけるカーネル法では、ガウス関数がよく使われていた。ガウス関数を使うことが無限次元の特徴空間を考えることに等しいからであった。このことと考え合わせると、量子ビットの数が十分大きいとき、上の回転ゲートを用いた振幅エンコーディングは、ガウスカーネルと同じ効果を入力値に与えていることが分かる。

多次元入力への拡張

 ここまでは1次元の入力xを扱ってきた。ここでは多次元入力 x=\{x_1,x_2,\cdots,x_D\}を考える。量子ビットの総数をNx_dを埋め込む量子ビット数をn_dとすると

\begin{equation} \sum_{d=1}^D n_d=N \end{equation}

が成り立つ(下図参照)。

f:id:seiya_kumada:20210704145334p:plain
図1
このとき、多次元ベクトルを埋め込んだ密度演算子は次式になる。

\begin{equation} \rho_N(x)=\dfrac{1}{2^N}\prod_{d=1}^D\left( \prod_{i=1}^{n_d} \left[ I+x_dX_i+\sqrt{1-x_d^2}\;Z_i \right] \right) \end{equation}

厳密な微分値の計算

 機械学習において勾配降下法を行うとき微分値の計算が必要になる。上で導入した量子回路を用いると微分値を厳密に計算できることを示す。簡単のため、1量子ビットの場合を考える。最初に初期状態|0\rangleがある。R^{Y}(\theta)を施すことで入力xを振幅エンコーディングした状態 |\psi\rangleを作る。

\begin{equation} |\psi\rangle=R^Y(\theta)|0\rangle \end{equation}

ただし、\sin{\theta}=xである。この状態にユニタリ行列U(\phi)=\exp{\left(-i\phi P/2\right)}を施し(Pはパウリ行列、\phiは実数値)、状態|\bar{\psi}\rangleを作る。

\begin{equation} |\bar{\psi}\rangle=U(\phi)|\psi\rangle \end{equation}

最適化すべき物理量を表す演算子Bとして、|\bar{\psi}\rangleを用いた期待値を計算する。

\begin{eqnarray} \langle B(\phi)\rangle&=&\mathrm{tr}\bigl(B |\bar{\psi}\rangle \langle\bar{\psi}\rangle \bigr) \\ &=&\mathrm{tr}\bigl(B U(\phi)|\psi\rangle\langle\psi|U^{\dagger}(\phi) \bigr) \\ &=&\mathrm{tr}\bigl(B U(\phi)\rho_1 U^{\dagger}(\phi) \bigr) \end{eqnarray}

ここで、1量子ビットの場合の密度演算子\rho_1を導入した。さて、この式を\phi微分すると

\begin{equation} \dfrac{\partial \langle B(\phi)\rangle}{\partial\phi}=\dfrac{i}{2}\mathrm{tr}\bigl( BU(\phi)\;[\rho_1,P]\;U^{\dagger}(\phi) \bigr)\tag{5} \end{equation}

を得る。ここで

\begin{eqnarray} \dfrac{\partial U(\phi)}{\partial\phi}&=&-\dfrac{i}{2}U(\phi)P=-\dfrac{i}{2}PU(\phi) \\ \dfrac{\partial U^{\dagger}(\phi)}{\partial\phi}&=&\dfrac{i}{2}U^{\dagger}(\phi)P=\dfrac{i}{2}PU^{\dagger}(\phi) \end{eqnarray}

を用いた。Pはエルミート行列であり、また、[U(\phi),P]=0であることに注意する。 ところで


\begin{equation}
U(\phi)=\exp{\left(
-\dfrac{i\phi}{2}P
\right)}
=\cos{\dfrac{\phi}{2}}I-i\sin{\dfrac{\phi}{2}}P
\end{equation}

が成り立つので


\begin{eqnarray}
U\bigl(\dfrac{\pi}{2}\bigr)&=&\dfrac{1}{\sqrt{2}}(I-iP) \\
U\bigl(-\dfrac{\pi}{2}\bigr)&=&\dfrac{1}{\sqrt{2}}(I+iP)
\end{eqnarray}

である。これらを用いると


\begin{equation}
U\bigl(\dfrac{\pi}{2}\bigr)\rho_1U^{\dagger}\bigl(\dfrac{\pi}{2}\bigr)-U\bigl(-\dfrac{\pi}{2}\bigr)\rho_1U^{\dagger}\bigl(-\dfrac{\pi}{2}\bigr)=i[\rho_1,P]
\end{equation}

を得る。この式を(5)に代入すると

\begin{eqnarray} \dfrac{\partial \langle B(\phi)\rangle}{\partial\phi} &=& \dfrac{1}{2}\mathrm{tr}\bigl( BU(\phi)U(\dfrac{\pi}{2})\rho_1U^{\dagger}(\dfrac{\pi}{2}) U^{\dagger}(\phi) \bigr) -\dfrac{1}{2}\mathrm{tr}\bigl( BU(\phi)U(-\dfrac{\pi}{2})\rho_1U^{\dagger}(-\dfrac{\pi}{2}) U^{\dagger}(\phi) \bigr) \\ &=& \dfrac{1}{2}\mathrm{tr}\bigl( BU(\phi+\dfrac{\pi}{2})\rho_1U^{\dagger}(\phi+\dfrac{\pi}{2}) \bigr) -\dfrac{1}{2}\mathrm{tr}\bigl( BU(\phi-\dfrac{\pi}{2})\rho_1U^{\dagger}(\phi-\dfrac{\pi}{2})\bigr)\\ &=& \dfrac{1}{2}\left(\langle B(\phi+\dfrac{\pi}{2})\rangle-\langle B(\phi-\dfrac{\pi}{2})\rangle\right) \end{eqnarray}

となる。すなわち、\phiによる微分は、\phi\pi/2だけ前後にシフトして物理量Bの期待値を測定することにより計算することができる。

まとめ

 少し古い論文であるが、自分の勉強のため式変形をフォローした。本論文の主張は以下である。

  • 回転ゲートを用いた量子回路により、入力値を量子状態に振幅エンコーディングできる。入力値の線形項と非線形項が導入される。
  • 振幅エンコーディングすることは、高次元特徴空間に射影することと等価である。
  • パラメータによる微分を厳密に計算することができる。

量子状態を利用した高次元特徴空間への射影により、古典的な機械学習よりも精度が良くなるという主張は、最近の研究によると、通用しなくなっているそうである。