2023年10月6日金曜日

Simonの量子アルゴリズムとHadamard行列のKronecker積

【要旨】量子コンピューティングでの重要な行列(ゲート機能)の一つに、アダマール行列があります。複数の量子ビットシステム(テンソル積)の各量子ビットにアダマール変換を施すための行列が、Kronecker Products of Hadamard Matrices(アダマール行列のクロネッカー積) です。記念碑的解法として有名なSimonの量子アルゴリズムにも有効に使われています。それは、参考文献[1]で丁寧に説明されているのですが、時間が経つと忘れてしまうので、私自身の理解をメモとして残して置きます。

Simon's Algorithm
 まず、ここで解くべき問題については既に本ブログ(2022-12-11の記事)に書いたので、以下に極く簡単に記す:

 長さnのbinary string x(0か1から成る文字列)を入力とし、出力も長さnのbinary stringとなる2対1関数fがあるとする。ここで、ある長さnの秘密のbinary string s があり、y=x or y=x⊕s の時に限りf(x)=f(y) である。ただし、sの全ての文字が0であることは無いとする。記号⊕は、bitwise addition of strings modulo 2を意味する。入力xに対する関数値f(x)を問い合わせることはできるが、関数fの定義は与えられていない。解くべきことは、秘密のsを特定することである。

 そのために、関数fを何回評価する必要があるかを問題とする。古典的アルゴリズムでは、最悪の場合、2のn乗のオーダーの関数呼び出し回数となるが、Simonの量子アルゴリズムではnの多項式オーダーとなる。しかし、この言い方はあまり正確ではない。計算量に関する、BQP(Bounded-error Quantum Polynomial-time)などの議論を、Prof. Bernhardtの書籍[1]のChapter 8 (pp.166-170)等でご覧いただく必要がある。

Simon's Algorithmを実装する量子回路
 Simonの問題は、上記の関数fと秘密のsを知っている人が作成した問題を解く、いわばリバースエンジニアリングである。実用的な問題ではないにも拘らず、これに対するSimonの解法は、量子アルゴリズムの威力を示すものとして広く認められている。そのための量子回路を、n=2とn=3の場合について検討するが、その方法は一般のnについても自然に当てはめることができる。この量子回路の出力であるいくつかのbinary string(長さn)から、秘密のsを特定するための連立一次方程式を作ることができる。なぜかと言うと、出力されたbinary string bと秘密のsとのdot product(後述)が0になるからである。以下に、このようなdot productがなぜ0になるかを中心に、図を使って詳しく述べる。

 Fig.1は、n=2とn=3の場合のSimonのアルゴリズムを実装した量子回路である。上述の通り、関数fに対するOracleが設定されている。すなわち、関数fの定義と秘密のsがこのように決められているのだが、回答する人はそれを知らずにsを特定するのである。


 一般のnに対してのSimonの量子回路は、Fig.2のように描ける。

 さて、Fig.3は、Fig.1でのn=2とn=3の場合の量子回路の実行結果である。2段になっているレジスタの1段目を測定した結果をFig.3に示した。n=2の問題では測定結果としてbinary string 00と10がそれぞれ1/2の確率で得られた。これらのbinary stringと秘密のsとのdot productsは0となる。そうすれば、それらから連立一次方程式を作ってsを特定できのだが、この部分に関しては既に述べたので、ここでは省略する。以降では、なぜ、このdot productsが0になるのかを考察する。
測定結果のbinary stringと秘密のsとのdot productsがなぜ0になるのか
 この質問の回答を、以下で検討する。Fig.4は、Fig.1 case(a)でのψaのフェーズ(2回目のHadamard変換後で測定を行う直前)の4量子ビットシステムの状態ベクトルである。いくつかの計算を経ているが、ここに示されているのは、4qubitsのうちの上段の2qubitsに着目して式を整理した結果である。
 テンソル積の左側が|10>(測定結果10に対応)である項の関数fの値に注目する。秘密sに関するペアのbit string(00と01、および10と11)に対する関数fの値は同一であるが、それらの符号(プラス、マイナス)も同一である。もう一つの測定結果|00>についても同様である。
 一方、測定結果に現れない|01>と|11>に関しては、これらのペアの間数値の符号が互いに反転している。そのため、最終的な計算結果として、|00>と|10>の確率振幅が増大され、|01>と|11>に関しては減衰(キャンセル)されて0となった。
 このような増幅と減衰が、「測定結果のbit stringと秘密のsとのdot podurct (・)」とどのように関係しているかを、Fig.5で明らかにしている。
 以上で説明を終わるのだが、最後に、Fig.6をご覧いただきたい。ここに、Hadamard行列のKronecker積がある。たとえば、n=2の場合の行列を見ると、その各要素の符号は、Fig.4で示した項の符号と完全に合致している。すなわち、Fig.4でのテンソル積の左側のqubitのペアを行ラベルとし、関数fの引数に与えるqubitの組みを列ラベルと考えれば、Hadamard行列の該当要素の符号が(マイナス1に対してのdot productの冪乗で)直ちに計算できるのである。むしろ、Fig.4でのテンソル積の右側に出現する項の符号は、このHadamard行列から決められるのである。ここに、Kronecker products of Hadamard matricesの重要性がある。
まとめ
 Prof. Bernhardtは [1]の中で、このSimon's algorithmにダブルスター⭐️⭐️(かなり難しい)を付している。確かにその通りだが、何度か読み返して検討して、上記のように理解できた。確率振幅の増幅と減衰に関しては、Groverのアルゴリズムではその操作を明示的に行なってるが、Simonでは「知らぬ間にそうなっている」感がある。ともかく、以下の文言を言えれば、Simonアルゴリズムは一応理解できたことになるのではないか。Fig.7参照。
「Simonの量子回路での全ての測定結果(行ラベル)について、秘密sでペアとなるbinary string(列ラベル)が示すHadamard行列の要素の符号は互いに一致する」
 Simonのアルゴリズムは、有名なShorの因数分解アルゴリズムに影響を与えたことが[1]に具体的に説明されている。その叙述から、Shor's algorithmの"こころ"をつかむことができると思う。ただし、もちろん、その詳細を知るには、量子フーリエ変換などの進んだ数学が必要になるので、改めてじっくり取り組みたいと思う。

 Reference
 [1] Chris Bernhardt: Quantum Computing for Everyone, The MIT Press, 2020.

0 件のコメント:

コメントを投稿