量子計算について

物理学

※ChatGPT画伯作 “A visually striking image representing a quantum computer.”

量子計算と量子力学的な時間

 前回の投稿

で、量子力学的な時間(相対論的な時間)が複素関数

\[ \small \zeta = te^{i\omega t} \]

で表現され、その経路長を計算すると

\[ \small T(t) = \int_0^t \sqrt{1+\omega^2u^2} du \approx \frac{1}{2}\omega t^2 \]

と近似できるという説明をした。言い換えれば、我々が認識している時間\(\small t\)に対して、量子の運動で流れている時間の長さが\(\small t^2\)に比例する値として計算されているということであり、量子の運動を活用すれば\(\small t\)の時間が流れる間にあたかも\(\small t^2\)の時間を利用しているかのように数値計算を行ったり、情報を処理することができるかもしれないという気分になることができるかもしれない。

 この発想を推し進めたのが量子計算の理論であり、それを物理的な媒体として実現しようという試みが量子コンピュータということになる。量子計算の理論は非常に難解であり、その本質が何なのかということは定かではないが、筆者の偏見を述べれば次のとおりである。古典コンピュータにおける計算について1つだけイカサマを認めることで、量子コンピュータと同じ計算ができるようにしたいと考えた場合に、どのようなイカサマを考えればそれが可能になるだろうか?この問いに関する筆者の回答は次のとおりである。

  • \(\small N \times N\)の行列を\(\small N\)要素のベクトルに掛ける計算について、\(\small O(N)\)(\(\small N\)のオーダーの計算量)で計算できることにする(古典コンピュータでは\(\small O(N^2)\)の計算コストがかかる)。

このイカサマを量子力学的な事象を用いることで実現しようというのが量子コンピュータのメカニズムである。

 \(\small N \times N\)の行列を\(\small N\)要素のベクトルに掛ける計算と書いたが、これはフーリエ変換(逆フーリエ変換)と置き換えても同じことである。古典コンピュータで\(\small O(N^2)\)もしくは\(\small O(N)\)の計算量がかかる計算が\(\small O(N)\)もしくは\(\small O(\sqrt{N})\)で済むということであり、これはquadratic speed upと言われることもある。一見すると大した有難味はないように見えるかもしれないが、例えば\(\small 10^{20}\)ぐらいの演算が必要な計算処理が\(\small 10^{10}\)と必要な演算処理の桁数が半分になるということであり、天文学的な計算量の計算処理が現実的な計算量に収まることがあるかもしれないということは理解できるだろう。これがどういった仕組みで考えられているかを以下で簡単にまとめてみよう。

量子計算の計算手続き

 古典コンピュータと言われる現在のコンピュータは情報を0か1という状態を持つビットといわれる論理モデルで保持している。これは集積回路といわれる多数の電源スイッチの集合体のON/OFFで表現されるものである。\(\small a_i\in\{0,1\}\)と表したときに一つの数値\(\small x\)は\(\small n\)個のビット\(\small x=a_1a_2\cdots a_n\)の組み合わせで表現することができ、\(\small 2^n\)通りの値のうちの1つを表現することができる。このビットの集合体の値を論理回路といわれる情報に単純な変換処理を行う関数(装置)を繰り返し作用させることで計算処理を行っているのが現在のコンピュータの仕組みである。

 これに対して、量子コンピュータにおいて用いられる論理モデルは量子ビットといわれており、これも\(\small n\)個の量子ビット\(\small x=q_1q_2\cdots q_n\)で情報を表現するが、これはすべての組み合わせを同時に表現しており、その組み合わせのうち対象の情報がサンプリングされる確率を表す係数を情報として保持するモデルということになる。具体的には、\(\small n\)個の量子ビットが同時に\(\small x\)の値で検出される確率を

\[ \small P(x) = \psi(x)\psi^\ast(x) = \left\{\begin{array}{ll} p_{00\cdots0} & x=00\cdots0 \\ p_{00\cdots1} & x=00\cdots1 \\ \quad\vdots \\ p_{11\cdots1} & x=11\cdots1 \end{array} \right. \]

と表した場合の波動関数

\[ \small \psi(x) = \left\{ \begin{array}{ll} c_{00\cdots0} & x=00\cdots0 \\
c_{00\cdots1} & x=00\cdots1 \\ \quad\vdots \\ c_{11\cdots1} & x=11\cdots1 \end{array} \right. \]

が情報を表現するモデルになる。例えば、1個の量子ビットが\(\small 1/2\)の確率で0か1をとる状態にあることを

\[ \small \psi(x) = \frac{1}{\sqrt{2}} |0\rangle+\frac{i}{\sqrt{2}} |1\rangle=c_0 |0\rangle+c_1 |1\rangle \]

などと表すが、このときの情報を表すのは\(\small (c_0,c_1)=(1/\sqrt{2},i/\sqrt{2})\)である。言い換えれば、ここで量子の状態として保持されている情報は係数\(\small c_{q_1q_2\cdots q_n}\)であるということになる。量子コンピュータでは、\(\small n\)個の量子ビットが確定した情報を保持しているのではなく、これらの量子ビットがとりえる値の(\(\small 2^n\)個のパラメータを持つ)確率分布を情報として保持しているということになるだろう。この波動関数に単純な変換処理を行う作用素(量子ゲート)を繰り返し作用させることで計算処理を行うのが量子コンピュータということになる。

 変換処理を行う装置を作用素(量子ゲート)と書いたが、作用素は関数を引数として受けとり、返り値として関数を返す関数のことである。線形代数でいえば、関数はベクトルであり、作用素は行列ということになる。量子ゲートは波動関数\(\small \psi(c_{q_1q_2\cdots q_n})\)を引数として受け取って、変換された波動関数\(\small \psi(c’_{q_1q_2\cdots q_n})\)​を返す関数ということになる。波動関数は複素共役を掛けて2乗した場合に合計で1(確率分布)にならなければならないという制約があるため、量子ゲートと言われる行列は以下の性質を持つユニタリ行列という行列\(\small U\)に限られることになる。

\[ \small U(U^\ast)^T=I \]

線形代数では、量子ゲートを作用させることはベクトルに行列を掛けて別のベクトルを返す処理であり、

\[ \small U\psi(c_{q_1q_2\cdots q_n}) = \psi(c’_{q_1q_2\cdots q_n}) \]

である。これは古典コンピュータにおいて\(\small O\left(N^2=(2^n)^2\right)\)の計算量がかかる処理に相当する。量子コンピュータでは、これを量子ビットを量子ゲートに通すという\(\small n\)回の操作\(\small (O(n))\)で実現できたらいいなということを前提にアルゴリズムが考えられているということになる。

 \(\small 2^n\)と\(\small n\)では大きく計算量が異なるようにみえるため、量子超越性など楽勝だろうと思うかもしれない。しかし、古典コンピュータにおいても総当たりで計算するアルゴリズム(指数時間かかる計算)など稀であろうし、量子コンピュータにおいても、任意に波動関数を加工できるだけユニタリ行列(最大で\(\small (2^n)^2\)個)を用意するというのは非現実的である。現実には、単純な変換処理を行う少数の量子ゲートを繰り返し作用させることで処理を実現させる必要があり、このアルゴリズムのコストがどれぐらいかは計算処理の内容に依存するだろう。

 計算処理としては

  1. 目標としている解がサンプリングされやすくなるように事前に確率分布を加工する。
  2. 条件を満たす解が算出されるまでサンプリングを繰り返す。

という処理であり、基本的にはモンテカルロシミュレーションによる解の探索と類似のものであるように見える。解の正確性をある程度犠牲にしてよければ、古典コンピュータにおいてもシミュレーションで解を探索するアルゴリズムは多数存在するだろう。そのため、この計算量の差異はアルゴリズムの問題であり、等価なアルゴリズムが古典コンピュータにも存在する可能性が高く、量子コンピュータが優位性を持つ数理問題は非常に限定された範囲であると推測できる。

 したがって、古典コンピュータと量子コンピュータの計算量に関する本質的な差異は、量子ビットに量子ゲートを作用させるという操作がどの程度の自由度を持っているかという部分だろう。量子ゲートは行列であるから、\(\small n^2\)の自由度を持っているはずであり、観測可能な値の数\(\small n\)と比較して2乗に相当する分だけ多くの情報を処理できるということになるかもしれない。この理由から典型的な量子アルゴリズムでは、古典コンピュータにおいて\(\small O(N^2)\)、あるいは、\(\small O(N)\)であったものが、\(\small O(N),O(\sqrt{N})\)のオーダーで理論上計算できるということが主張されることが多いように見える。特殊な問題を除いた一般的な数値計算で高速化が望める計算量はこのオーダーであるということだろう。

できるかな?

できるかな?じゃねぇよ、やるんだよ

NHKの番組『できるかな』に対するブラックジョーク

 実際に量子コンピュータの開発に携わっている科学者やエンジニアは、この質問をすることも”Yes, we can.”以外の回答をすることも許されていないだろう。政府による公共支出であれ民間資本による投資であれ、実現可能性がない技術に投資しているなどということは投資家にとって考え得る限りの最大の悪夢であり、それを当の研究者たちが言いだすなど許されざる暴挙であるからである。もしそれを言えば、研究者やエンジニアを全員解雇して損切しなければならないということになる。しばしば到底実現できそうもないことを”俺達ならできる”と言い続けるあやしげなベンチャー企業とかが存在するが、投資家がやれと言っている以上できると言い続けるしかないという事情によるものだろう。したがって、この質問は部外者にしかできないし、部外者にしか回答できない質問ということになる。必然的に部外者は該当の技術について詳しい知識を持たないので、結局よくわからないということになる。ただ、怪しいポイントは簡単に指摘できるので、どこが難しそうに見えるかだけは指摘しておこうと思う。

 量子コンピュータの仕組みは量子力学の原理に従っており、量子力学の原理が正しければ理論的には実現可能であると言われる。しかし、上記の説明から我々の常識から乖離した技術的にあやしい箇所があることに気づくだろう。具体的にいうと、以下の2点の主張が矛盾しているように見えるのである。

  1. それぞれの量子ビットを互いに検出確率が相関するように扱うことができる(複数の量子ビットをあたかも連結した1つの数値であるかのように扱うことができる。)。
  2. 各量子ビットは互いの検出確率に影響を及ぼさないように量子ゲートで操作することができる(複数の量子ビットがあたかも独立した1個の論理ビットであるかのように扱うことができる。)。

複数の量子ビットの検出確率を相関を持つような形で扱うことができることは、量子エンタングルメント(量子もつれ)と言われる現象から正当される。量子が持つ物理量(運動量やスピンの場合が多い)の中には、互いに相関を持つように操作することができるものが存在するらしく、これを利用すれば複数の量子ビットの状態を相関を持つ形で重ね合わせることができるということであるらしい。\(\small n\)個の量子ビットが\(\small 2^n\)通りの値を表現するためにはこれが成り立つ必要がある。

 一方で、量子ビットの検出確率を操作するためには、量子ゲートによる単純な量子演算を繰り返し適用する必要がある。任意の計算を実現するために必要な量子ゲートの組み合わせをユニバーサル量子ゲートというが、この組み合わせに含まれる単純な量子ゲートは1~3ビットの量子ビットに関する確率を操作するものである。最低でも必ず2ビットを同時に操作する量子ゲートが必要になることに注意しておく。この操作を実現するためには、対象の量子ビットの確率を操作した結果が他の量子ビットの検出確率に影響を与えないという条件が必要になり、これが上記の条件の2.である。

 量子計算のアルゴリズムというのはこの2つが両立するという前提の下で提示されているが、現実にはこの2つは両立しえない可能性があるのではないだろうか。理由として、\(\small n\)個の量子ビットは相関しているのであるから、他の量子ビットに影響を与えないように独立して少数の量子ビットだけを操作することはできそうもないということである。言い換えれば、他の量子ビットの検出確率を変更しない(バインドする)という操作が追加的に必要であり、2.の操作を実現するためには量子ゲートに\(\small N^2\)(行列の要素の数)の自由度がそもそも要求されることになる。しかし、我々が量子の運動を観測したり、操作できるタイミングが\(\small t\)に比例する数しかないのであれば、そもそも自由度は\(\small N\)個(固有値の数)しか存在しないということであり、この操作は実現不可能であるということになるだろう。

 典型的には量子ビットに量子ゲートを作用させた結果、元あった量子ビット間の相関関係(量子もつれ)が崩れてしまう現象として現れることになる。これはノイズと言われており、これを訂正するための誤り訂正処理を追加的に実行することで量子計算が実行できるのではないかと考えられているようである。そもそもそれはノイズなどではなく、正しい計算を実行することが不可能であることに起因しているのではないか、というのが一つの仮説として考えられるだろう。まとめると、ゲート方式の量子コンピュータにおいて、量子ゲートという概念が聖杯(どんな願いもかなえるが、虚構の存在)である可能性があるということである。ゲート方式の量子コンピュータが古典コンピュータより少ない計算量の計算の仕組みとしてFeasibilityがない可能性があるということは頭の片隅に置いておいた方が良いかもしれない。

結論

 金融工学の専門家だと言いながら、このブログでは(書くなら本か論文にしようかと思って)金融工学の話題を避けてきたのだけど、最後に金融工学において量子コンピュータに何が期待されているかを簡潔に述べて終わりにしよう。金融工学の理論を量子力学の理論で記述しようという分野として量子ファイナンスがあるが、一つの大きな動機は金融工学におけるデリバティブなど複雑な金融商品の時価計算や金融ポートフォリオのリスク計算を量子コンピュータで高速化できないかというものである。これを実現するためには金融工学の時価計算のアルゴリズムを量子計算のそれに置き換える必要があるだろうということである。

 デリバティブなど複雑な金融商品の時価計算はモンテカルロシミュレーションで計算するが、この計算はシミュレーション回数\(\small N\)に大体比例する計算コスト(すなわち、\(\small O(N)\))がかかる一方、数値の収束性を1桁上げるためにはシミュレーション回数を10倍にしなければならないという性質がある。そのため、十分な収束性を得るためには相当な回数のシミュレーションをしなければならないのであるが、現実には計算時間や計算リソースの都合から妥協した回数で打ち切って運用していることが通常である。これを量子計算で置き換えることで\(\small O(\sqrt{N})\)​​​ぐらいの計算でできたらいいな、ということが金融工学において量子コンピュータに期待されていることだろう。

 量子コンピュータが古典コンピュータより速く計算できるかどうかは現時点ではわからない。計算理論における計算量表記というのがあくまでデータ量や何らかの単純な計算に比例するものとして表記されるだけで、本当の意味における計算コストの比較というものができていないことに原因があるのかもしれない。この意味で、量子コンピュータが古典コンピュータより高速な計算ができるかということについて理論的に証明することはできず、出たとこ勝負で試してみるしかないということなのかもしれない。多少のノイズが入ったり、近似処理になるにしても\(\small N \times N\)の行列計算に相当する計算処理が量子ビットと量子ゲートによって\(\small O(N)\)のオーダーで実現できるのであれば、量子コンピュータによって古典コンピュータより速い計算処理が実現する可能性があるということだろう。

 もちろん、量子の運動が\(\small t\)の間に\(\small t^2\)に比例するだけ運動をしているように見えるということが、ノイズにしか適用されないものであり、そういった事象を量子の運動の制御に用いることができないのであれば、これは絵に描いた餅に過ぎないということになるかもしれない。量子の運動の制御が\(\small t\)に比例する分しかできないのであれば、量子の運動が表現できる自由度はあくまで\(\small N\)であり、古典力学的な計算量と変わらないということになるだろう。もう一つの可能性としては、理論的には無理でも実践的な手法で何らかの効率的な計算が実現してしまう可能性もあるのかもしれない。この場合、これらの技術はscience(理屈)であるよりart(職人芸)に属する研究になるのだろう。

参考文献

[1] Nielsen, M. A., & Chuang, I. L. (2010). Quantum Computation and Quantum Information: 10th Anniversary Edition. Cambridge: Cambridge University Press.

[2] Rebentrost, P., Gupt, B., & Bromley, T.R. (2018). Quantum computational finance: Monte Carlo pricing of financial derivatives. Physical Review A.

コメント