2021年1月2日土曜日

量子コンピュータはどこがすごいのか、どうして使えないのか

新春だし、また少し脱線してみることにしたい。ここのところ少し気になっている量子計算についてだ。とは言っても、よく話に出るような、大きな数の因数分解を求めたり暗号を解読する問題についてではない。関心があるのは、格子ゲージ理論のような物理系のシミュレーションの可能性についてだ。ここ数年、私の分野でも、特にアメリカでは量子計算の手法開発がちょっとしたブームになっているように見える。皮肉な見方をすれば、政府が先頭に立って旗を振る、つまり金を配っているのに群がっているだけ、というふうに見えなくもない。ただ、通常のやり方ではできないことをやろうとしているのも確かなので、そこはやはり気になる。そこでいろんな論文を斜め読みしてみたが、確かにおもしろい問題であると同時に、難しい問題であるというのもわかってきた。以下は、専門家ではない人が外野席から興味本位で眺めてみた感想だと思っていただきたい。考え違いもあるだろうし、これが量子計算への入門になるわけではもちろんない。

量子計算はファインマンの夢であったと言われる。計算したいのは量子系で、そのヒルベルト空間(波動関数の取りうる可能性)は古典力学で考えるものよりもはるかに大きいので、従来の計算機ではすぐに頭打ちになる。量子系の問題を解きたいなら量子力学をそのまま扱える「計算機」を使うのが自然だ、というのがファインマンの考えだった。「計算機」という言葉に惑わされそうになるが、量子コンピュータは通常の計算機のように数を足したり掛けたりする機械ではない。実際に波動関数を作って、そこにあらかじめプログラムした操作(演算子)を加えることができる機械だ。小さな量子系を実際に作って「実験」する装置と言ってもよい。自分が解きたい問題に対応する実験装置を作ることができれば、「計算」する代わりに「実験」することができるわけだ。

 では、「波動関数を作る」とはどういうことだろうか。量子力学で出てくる波動関数には、調和振動子のように等間隔で無限個のエネルギー準位をもつものや、水素原子のような回転対称性をもつもの、そしてさらに複雑なものがいくらでもある。量子計算で考えるのは、その中でもっとも単純な2準位の波動関数だ。単純ではあるが、2つの状態がそれぞれ複素数の振幅を持つことができ、一般の状態はその重ね合わせになるので、それだけで結構複雑な話になる。この「量子ビット」が基本単位になり、量子ビットをいくつも組み合わせて相互作用を持たせたものが量子コンピュータというわけだ。

2準位をもつ系を実際に作るにはいろんなやり方がありうる。スピンの上向きと下向きを使うのでもいいし、小さな円状の回路に流れる電流の向きを制御するのでもいい。あるいは、光の円偏光を使って右巻きと左巻きで表現するのも考えられる。どうやるのが技術的にもっとも有利かというのは私にはわからない。世界中で多くの人が自分のやり方で実現を試みているのが現状で、多いときには数十個の量子ビットを制御できるようになっているらしい。数十個では自分が解きたい問題には少なすぎる、と思うことが多いだろう。きっとその通りで、本当に興味のある問題を解くには、現状より100倍、1000倍、あるいはもっと多くの量子ビットを必要とするはずだ。人々は、そういうのがそう遠くない将来に実現するだろうと期待して、そのときにできることを考えている。

解きたい問題が2準位系を組み合わせて書けるなら、話はおそらく単純だろう。実際、イジング模型のように、実際の問題をあるやり方で切り取った模型のなかには2準位で書けるものもある。そのハミルトニアン演算子を量子コンピュータの操作であらわせば、この量子系の時間発展を追うのは簡単だ。あとは、出てきた状態の測定を何度もくりかえして必要な演算子の期待値を「測定」すればよい。これが、この問題に対する「量子計算」の意味だ。

では、あなたの解きたい問題が2準位系ではなかったらどうすればいいだろうか。もっと多くの準位(あるいは状態)をもつ量子系を実現してもらうよう、量子コンピュータの設計者に頼むのは一つの解かもしれないが、きっと相手にしてもらえないだろう。あらゆる可能性に対応する量子コンピュータをいちいち作るのは現実的ではない。だとしたら、あなたの仕事はその問題を2準位系の問題に書き直すことだ。これは、状態数が有限であれば必ずできる。量子ビットをN個使えば、2のN乗個の量子状態を表現することができるので、N=10 ならば、1024個の状態を扱うことができる。ただし、1024個の状態をもつ波動関数に何か演算子を作用させようとすると、それを個々の量子ビットへの演算に落とし込むのはかなり複雑な話になってしまうだろう。あっちの量子ビットとこっちの量子ビットの状態を組み合わせて、その結果をまた別の量子ビットに作用させる、といったような話で、かなりイライラする操作を考えないといけない。実際の量子コンピュータの上では、何十個かの量子ビットがすべて隣同士でつながっているわけではなく、直接相互作用できる数は限られるので、離れた量子ビット同士の相互作用を実現するには複数の操作を組み合わせることになるに違いない。そういうわけで、自分の解きたい問題を量子コンピュータで再現できるように書き換えるのは、そんなに単純な話ではなさそうだ。

格子理論では、格子点上に配置された自由度が隣の格子点と相互作用をもつ。上記のような有限個の状態をもつ変数が各格子点にあるわけで、それらをさらに組み合わせていくことになる。数十個の量子ビットではまったく足らないことがわかるだろう。

さらに問題なのは、格子ゲージ理論のように、変数が連続的な値をもつ場合だ。格子上の各点には無限個の自由度があることになるので、それをあらわすには無限個の量子ビットが必要になる。そんなことはもちろんできないので、自由度を有限個に限るしかない。何らかのやり方で自由度を制限して有限個にした系で計算をしておき、最後に元の問題に戻るように外挿するという手順をとる必要がある。無限個の自由度を2個の自由度にまで制限するのはあんまりなので、8個とか16個とかから始めて、増やしながら計算をくり返して極限をとるわけだ。これだけでもかなり大変な話になりそうだというのが想像できるだろう。またしてもかなりの数の量子ビットを必要とする。

数十個や数百個の量子ビットをもつ量子コンピュータでは、「私が」解きたい問題にはまったく役に立たないというのはわかってもらえるだろう。例えば百万個くらいの量子ビットを扱えるようになれば話は変わってくる。それがどれくらい難しいことなのかは、私にはわからない。

さらにまずいことに、量子コンピュータは「間違う」。量子状態を壊さないように保つのは非常に難しい。多くの量子ビットを組み合わせてできる量子状態ならなおさらだ。ちょっとした熱ゆらぎなどですぐに壊れてしまう。それでは役に立たないので、誤り訂正の理論や技術も開発されているが、それにはまた何倍もの量子ビットを必要とするらしいので、これはこれで面倒な話になる。問題を解く側で誤り訂正を含めた問題設定ができればよいのかもしれない。そういうわけで、それ自体がまた一つの研究テーマになる。

かなり悲観的だと思われたかもしれない。「量子超越」が大々的に宣伝されたりするが、少なくともここで考えるような問題に量子コンピュータが使えるようになるのは、まだかなり先になりそうだ。だとしたら、人々はなぜ量子計算に惹かれるのか。「量子コンピュータはどこがすごいのか」は、また明日にしておこう。

0 件のコメント:

コメントを投稿