HHLアルゴリズム
はじめに
今回は、連立一次方程式を量子コンピュータを用いて解く際に使われるHHL(Harrow-Hassidim-Lloyd)アルゴリズムを紹介する。
一般的な解法
最初に一般的な解法を示す。次元ベクトルの間に次式が成り立っているとする。
は、のユニタリー行列である。このとき
が成り立ち、ベクトルをで展開することができる。
式(4)を式(2)に代入すると
式(3)より
これを式(5)に代入して
を得る。ここまでの式変形を量子コンピュータ上で行う手順を次に示す。
HHLアルゴリズム
最初に、を振幅エンコーディングする。
振幅エンコーディングについてはこことここにまとめてある。あとの区別のため、エンコード先をAレジスタと呼ぶことにする。これは複数の量子ビットから構成された量子状態である。さて、量子コンピュータでは顕に固有状態を求める必要がないことに注意する。式(7)を得た時点でそれを固有状態による展開と同一視することができる。
ここが古典論との大きな違いである。次に、を考える。をユニタリー行列としたからもユニタリー行列であり、次式が成り立つ。
固有値を求めるため、量子位相推定(QPE)を行う。QPEを行うため、複数の量子ビットからなるBレジスタを追加する(0で初期化)。
次に、複数ビットからなるCレジスタを追加し、Bレジスタの値を用いた算術演算()を行い、結果をCレジスタに入れる。
次に、1ビットからなるDレジスタを追加し、Cレジスタの各ビットを制御ビットとしてDレジスタに回転ゲートを施す。このあたりの詳細な式変形はここにまとめてある。
Dレジスタを測定し0が得られたとき、次の状態に収縮する。
ここで、は規格化定数である。B,Cレジスタにそれぞれの逆演算を施し初期化する。
Aレジスタに式(6)が再現されている。
木構造を使った振幅エンコーディング
はじめに
前回、振幅エンコーディングの手順を示した。その手法では、確率(前回の式(4))
が小さいとき、何度も測定を繰り返す必要があり効率が悪くなる。今回は、エンコーディングを行う過程の中に「測定」を含まない手法(木構造を用いた振幅エンコーディング)を説明する。
木構造
8次元ベクトルを振幅に埋め込んだ状態
を作ることを目的とする。規格化条件
は満たされているとする。は実数値である。8次元ベクトルを埋め込むのに必要な最小の量子ビット数は3であるので、ここでは3個の量子ビットを用いる。
最初に以下に示す木構造を作る。
次に、3個の量子ビットからなるレジスタと個の量子ビットからなるレジスタを用意する。すべてのビットは0に初期化されている。
レジスタをアドレスとして扱い、木構造からデータを取り出し、レジスタに入れる仕組みを作る(実現の仕方はここでは言及しない)。取り出す手順は以下の通り。
たとえば、最初の操作ではレジスタの最初のビットの値をアドレスとする。の場合、レジスタにNode 00の値を読み込む。の場合、レジスタにNode 10の値を読み込む。次の操作ではレジスタの最初の2ビットをアドレスとして扱い同じことを繰り返す。の場合、レジスタにNode 000の値を読み込む。の場合、レジスタにNode 010の値を読み込む。
以下具体的に木構造を用いた振幅エンコーディングの手順を示す。
振幅エンコーディング
1. 初期状態
上に述べた初期状態を作る。
2. Node 0のデータ取り出し
rootノードの左側の子ノードNode 0からデータを取り出す。この操作は上の手順を踏まない例外的な操作である。
ここで
はの2進数表記を表す(前回と同じ)。
3. 算術演算
レジスタを追加して、ここにレジスタの値を引数とする関数の値 を入力する。
2行目の式は、レジスタ内の値を2進数で書いたものである。詳細は前回の解説にある。
4. 回転ゲートの適用
レジスタの最初のビットを明示すると
となる。レジスタの各ビットを制御ビットにして、レジスタの最初のビットにを作用させる。
ここで
である。を得るまでの計算の詳細は、前回の解説に記載してある。
5. レジスタの初期化
レジスタに逆演算を施して初期化する。
6. Node 00のデータの取り出し
式(\ref{eq1})の第1項を考える。レジスタの最初のビット0をアドレスとして、木構造からNode 0の左側の子ノードNode 00の値を取り出しレジスタに入れる。
ここで
である。
7. Node 10のデータの取り出し
式(\ref{eq1})の第2項を考える。レジスタの最初のビット1をアドレスとして、木構造からNode 1の左側の子ノードNode 10の値を取り出しレジスタに入れる。
ここで
である。
8. Node 00とNode 10のデータを取り出した結果
とを合わせて
9. 算術演算と初期化
に以下の操作を行う。
これらを行うと以下を得る。
10. 最後のステップ
レジスタの最初の2つのビットをアドレスとして木構造からデータを取り出し、レジスタに入れる。たとえば、最初の2つのビットが00のとき、Node 00の左側の子ノードNode 000の値を取り出す。算術演算など同様な計算を繰り返すと次の状態を得る。
一番深いノードに格納してあるの符号も取り出して根号を外す。
目的とする式(\ref{eq0})が得られた。
まとめ
今回は木構造を利用した振幅エンコーディングを説明した。次元ベクトルのとき、の多項式のオーダでエンコーディングを行うことができる。前回の方法は、エンコーディング過程に測定行為が含まれており、場合によっては効率が悪くなる欠点があった。
参考文献
振幅エンコーディング
はじめに
振幅エンコーディングの手順を示す。規格化されたベクトルの各成分を量子状態の振幅に埋め込み
を作ることが目的である。
1. 初期状態
最初に次の初期状態を用意する。
ここで、とをつけたケットベクトルは個の量子ビットから構成されるレジスタ、をつけたケットベクトルは個の量子ビットから構成されるレジスタである。また、である。レジスタにはQRAMから取り出すデータのアドレスが格納されている。
2. QRAM
上の初期状態を用いてQRAMからデータを取り出す。は規格化されているとする。データの取り出しは基底エンコーディングにより行われレジスタに格納される。
ここで、はを2進数表記した0,1の並びである。従って、その精度はビットで表現できる範囲のものであることに注意する。
3. 算術演算
レジスタに入力した値を引数とする関数の値を算術演算によりレジスタに入力する。
は規格化されているのでである。これより
である。従っての2進数表記は
で定義されるを用いて
と書くことができる。ここで、は0か1のどちらかの値を取る整数である。この表記を用いるとレジスタは
と書くことができる。ここまでの処理で得られる全状態は次式である。
4. 回転ゲートの適用
最初に1ビットからなる4つ目のレジスタ(レジスタ)を追加する。
次にレジスタの各ビットを制御ビットとしてレジスタに回転ゲートを作用させる。
ここで、式(\ref{eq1})を用いると
を得る。さらに
であるから
を得る。式(\ref{eq2})よりであることに注意する。ここまでをまとめると
である。
5. レジスタの測定
レジスタを構成する1ビットを測定する。0が測定されるまで繰り返す。0が測定されたとき全状態は次の状態に収縮する。
と仮定したから
である。
6. レジスタの初期化
レジスタに逆演算を施して初期化する。
7. レジスタの初期化
レジスタに逆演算を施して初期化する。
8. 振幅エンコーディングの完成
備考
式(\ref{eq3})よりレジスタ(1量子ビット)が0になる確率は
である。効率よく振幅エンコーディングを行うにはが大きいことが望ましい。
参考文献
Quantum Circuit Learning
はじめに
論文「Quantum Circuit Learning」内の計算をまとめる。
密度演算子の導出
を作用させる。
ここで、密度演算子
を定義すると
と計算される。いま、とすれば
となる。従って、と置くと
を得る。ここで
である。
次に、量子ビットの状態
を考える。これに演算子
を作用させると、上と同じ計算を各ビットについて繰り返すことにより、次の密度演算子を得る。
ここで、の添字は、番目のビットに作用することを意味する。
密度演算子を用いた期待値計算
式(1)をもう一度書く。
を使うと密度演算子は以下のように書ける。
ここで次の量を計算する。
すなわち、を計算することは、状態を用いての期待値を計算することに等しい。として、式(2)を用いれば
と計算でき、従って
を得る。すなわち
である。この結果を用いれば、量子ビットの場合の密度演算子(3)を用いた次式を計算できる。
上にも書いた通り添字番号はビットの位置を表すだけなので、期待値の結果はどれもである。
高次元特徴空間への振幅エンコーディング
ここまでは論文内の定式化を見てきた。本論文では密度演算子を中心に据えて定式化をしているので何をしているのか少し分かり難い。ここでは密度演算子に移る前の式(4)に戻って考えてみる。
式(4)は1量子ビットの場合の式である。これを2量子ビットの場合に拡張する。
これを展開すると
を得る(簡単のため直積の記号は省略した)。いま、であるから
となる。状態との振幅にはの非線形項が、状態との振幅にはの線形項が埋め込まれていることが分かる。つまり、以下の手順を踏むことでを満たす実数を2量子状態の振幅に埋め込む(エンコーディングする)ことができる。
- を用意する。
- 各ビットにを作用させる。
言い換えると、回転ゲートを用いた量子回路により、を4(=22)次元の特徴空間に射影したことになる。この空間の中にはの非線形項も存在する。上の手順は容易に個の量子ビットの場合に拡張することができる。
- を用意する。
- 各ビットにを作用させる。
この場合は特徴空間の次元は2になる。を十分大きく取れるとき(例えば100や1000)、特徴空間の次元は膨大な数になる。ところで、機械学習におけるカーネル法では、ガウス関数がよく使われていた。ガウス関数を使うことが無限次元の特徴空間を考えることに等しいからであった。このことと考え合わせると、量子ビットの数が十分大きいとき、上の回転ゲートを用いた振幅エンコーディングは、ガウスカーネルと同じ効果を入力値に与えていることが分かる。
多次元入力への拡張
ここまでは1次元の入力を扱ってきた。ここでは多次元入力 を考える。量子ビットの総数を、を埋め込む量子ビット数をとすると
が成り立つ(下図参照)。 このとき、多次元ベクトルを埋め込んだ密度演算子は次式になる。
厳密な微分値の計算
機械学習において勾配降下法を行うとき微分値の計算が必要になる。上で導入した量子回路を用いると微分値を厳密に計算できることを示す。簡単のため、1量子ビットの場合を考える。最初に初期状態がある。を施すことで入力を振幅エンコーディングした状態 を作る。
ただし、である。この状態にユニタリ行列を施し(はパウリ行列、は実数値)、状態を作る。
最適化すべき物理量を表す演算子をとして、を用いた期待値を計算する。
ここで、1量子ビットの場合の密度演算子を導入した。さて、この式をで微分すると
を得る。ここで
を用いた。はエルミート行列であり、また、であることに注意する。 ところで
が成り立つので
である。これらを用いると
を得る。この式を(5)に代入すると
となる。すなわち、による微分は、をだけ前後にシフトして物理量の期待値を測定することにより計算することができる。
まとめ
少し古い論文であるが、自分の勉強のため式変形をフォローした。本論文の主張は以下である。
- 回転ゲートを用いた量子回路により、入力値を量子状態に振幅エンコーディングできる。入力値の線形項と非線形項が導入される。
- 振幅エンコーディングすることは、高次元特徴空間に射影することと等価である。
- パラメータによる微分を厳密に計算することができる。
量子状態を利用した高次元特徴空間への射影により、古典的な機械学習よりも精度が良くなるという主張は、最近の研究によると、通用しなくなっているそうである。