ラベル 量子計算 の投稿を表示しています。 すべての投稿を表示
ラベル 量子計算 の投稿を表示しています。 すべての投稿を表示

2021年1月3日日曜日

量子コンピュータはどこがすごい(かもしれない)のか

それを計算機だと思うから、間違えると腹が立つ。実験装置だと思えば、エラーがあるのはあたりまえ。誤差つきで得られた結果から意味のある結論を導くのが実験家の腕の見せどころだ。量子コンピュータもそういうものだと思えばいいのかもしれない。ただし、誤差の要因を含めて装置全体を理解するのは、量子計算を理解するよりもはるかに難しそうではある。

とは言え、そこにおもしろそうな装置があるなら触ってみたくなるのは人情で、だからこそ多くの人が量子コンピュータの使い方について考えている。ここで考えたいのは、格子上に定義された場の量子論だ。ここに量子コンピュータを使うと何がすごいのか。量子の魔法を使って、既存のスーパーコンピュータを上回るスピードの計算を実現するのが量子コンピュータ。そういう考えは間違いだ。まったく違うアプローチで問題にせまる。それがどういうことか考えてみよう。

これまでの格子場の理論のシミュレーションでは、時間を虚数にとることで元の模型を計算しやすい模型に変換しておき、モンテカルロ法を用いてもっとも起こりそうな場の配置をシミュレーションで取り出すという手法が用いられてきた。(このあたりの事情については以前に紹介したことがあるので、よかったら過去の記事を参照していただきたい。)虚時間を持ち出すところがミソで、こうすることでさまざまな場の配置に関する確率分布という問題にもちこむことができる。知りたい量の期待値を求めるには、モンテカルロ法で得られた場の配置が全体を代表すると思って平均を取ればよい。ここにはもはや場の変数のとる「波動関数」という概念は現れないことに注意しよう。ここで言う波動関数とは、空間に広がる場の変数のことではない。ある配置をもつ場があらわれる確率(ではなくて量子的な振幅)をあらわす量で、場のあらゆる配置に、ある複素数が割り当てられる。こういうのを「第2量子化」といって、場の量子論を学ぶときに混乱する原因なのだが、そこを意識しておかないと何をやっているのかわからなくなる。こうして得られた場の波動関数をすべて重ね合わせたものが、場の量子論における状態をあらわす。場の配置はそれこそ無限のバリエーションがあるので、それをすべて重ね合わせるのは無理というもので、そういう無理なことは放棄して(場全体がもつエネルギーなどの)期待値を求めることに特化したのが従来の手法だった。実際、この手法は大きな成功を収めたので、そのことについて文句を言う筋合いはないのだが、そこには放置されたままの問題があることも忘れてはならない。

その代表的なものが、場の時間発展を追うという問題だ。例えば、陽子と陽子の衝突で、いろんな粒子ができてそれらが飛び散っていく様子を考えたいとしよう。時間を追ってみていくと、陽子と陽子がぶつかった瞬間に両者がくっついてつぶれたり振動し、次の瞬間に引き千切れて離れていくことだろう。ところがこれまでのやり方では、初手から時間を虚時間に置き換えてしまったので、時間発展を考えようにもそこにはもう「時間」は存在しない。これではどうにもならない。実際、この問題は非常にやっかいで、量子論なのでいろんなことが同時に起こりうる。陽子と陽子が壊れてできる粒子は一通りではなく、それらの飛ぶ方向もいろんなものがあるだろう。そういうすべてが量子論の波動関数のなかに含まれているはずだ。波動関数は、ありとあらゆる分岐の可能性をすべて内包しながら時間発展していく。それらをすべて計算するにはどうすればいいだろうか。いろんな状態の重ね合わせになった波動関数の各々の状態がどう発展していくかをすべて追いかけるしかない。それは無理というものだ。

ここで登場するのが量子コンピュータ、ということになる。ある波動関数の時間発展を追いかけるということは、ハミルトニアン演算子を何度も掛けることに相当する。演算子をある状態に作用させると、一般には一つだけではなく別の状態を含む重ね合わせになる。さらに演算子を作用させると、それぞれの状態がまた別の状態を生成し、どんどん複雑な状態の重ね合わせに変化していく。実際、それこそが量子論での時間発展の本質で、シュレーディンガーの猫のように、全然違う状態を含んだ重ね合わせが生まれるわけだ。量子コンピュータでは、実際にこういうことが可能になる。最初はある量子ビットが上向きの状態だけだったものが、ハミルトニアンをかけるたびに周辺の量子ビットも巻き込みながら状態がどんどん複雑になっていく。そのすべては、個々の状態の行方を一つひとつ計算しなくても、全体に量子的な演算をかけることで実現される。これこそが、量子コンピュータが得意とする(はずの)ことで、従来の計算では手を出せなかった「波動関数」を扱うことが可能になるわけだ。

こうして状態の時間発展を追うことで可能になることは他にもある。例えば、いろんなエネルギーをもつ状態のなかから指定したエネルギーの状態を抜き出す問題だ。固有のエネルギーをもつ状態の時間発展は、そのエネルギーにしたがって複素位相が回転するだけなので、時間発展を正確に追うことができれば、フーリエ解析を使って異なるエネルギーの状態を分離することができる。従来のやり方では、虚時間を持ち込んだせいでこれができない。エネルギーの保存則も存在しないので、粒子の散乱や崩壊などの扱いが制限される。こういう問題も、量子計算が期待される応用の一つだ。

どんどん進歩する技術の将来を予測することは難しい。10年もすれば、上記のような問題が実際に扱えるようになるのだろうか。10年は無理でも私が生きているうちに、そういう未来を見てみたい、そして触ってみたいものだ。

2021年1月2日土曜日

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

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

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

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

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

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

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

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

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

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

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

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