ゲート式量子コンピュータの基本知識

期待はしているがおそらく万能ではない。

[
前の記事へ]  [量子力学の目次へ]  [次の記事へ]


私の期待

 近頃は量子コンピュータが注目され始めている。実用化が近いように思えるので、時代に乗り遅れないように勉強しておこうという人も多いだろう。私も数年前から興味を持ち始め、近頃ようやくある程度のことが分かるようになってきた気がするので、自分なりの解説を書いてみたくなってきた。

 私は量子コンピュータの実用化を非常に楽しみにしているが、それが従来のコンピュータの座を奪うほどのものになるとは思っていない。限られた用途にのみ、補助的に使われるにとどまるだろうと予想している。その理由についてもこのあとで説明してゆくが、こういう予想は裏切られたほうが面白い。私としては人類に出来ることが増えていくのが楽しみで応援しているという感じだ。

 一つの記事にまとめると長くなりそうなので、数回に分けて、徐々に付け足すように書いてみることにする。


従来のコンピュータとの比較

 量子コンピュータではない従来のコンピュータのことを古典的コンピュータと呼ぶ。古典的とは言っても、現在普及している普通のコンピュータのことである。物理学者は量子力学が登場する以前の物理学を古典物理と呼んでおり、量子力学的でないものを全て古典的と呼ぶ癖が付いているのだ。

 古典的コンピュータでは情報を 1 と 0 の組み合わせで表現することで計算を実行している。具体的には、電気回路の信号線に掛かる電圧の高低を 1 と 0 の違いに見立てている。電圧の高い状態を1と見立てても良いし、電圧の低い状態を1と見立てても良い。どちらの設計も存在している。

 一方、量子コンピュータでは 1 と 0 の重ね合わせ状態を利用して計算を行わせる。1 でありながら同時に幾分かは 0 でもあるという不思議な状態であり、観測することで初めて状態がどちらかに確定するのである。

 量子コンピュータが古典的コンピュータの計算力を凌ぐのは、 この重ね合わせ状態をうまく利用したアルゴリズム(計算手順)が見つかっている場合だけである。どんな計算でも古典的コンピュータが負けるというわけではないし、古典的コンピュータよりも速く計算できる方法が知られている場合であっても、驚くほど速いわけではないということもある。

 量子コンピュータの動作には繊細な技術を必要とするので手間やコストがかかり、既に大規模化を実現している古典的コンピュータの並列処理を利用してガンガン計算させた方がはるかに有利だったりすることも多い。状況がどうなるかは今後の開発次第だが、あらゆる計算が量子コンピュータに置き換わるということは無いだろう。

 古典的コンピュータで行われているあらゆる計算を量子コンピュータで高速に計算させる方法などというのは見つかっていないのである。もう少し具体的に言えば、たとえ量子コンピュータが実用化しても家庭用ゲーム機が爆速になるわけではない。将来は量子計算が必要になるようなゲームが流行るかもしれないが、それがどんなゲームだか今はまったく想像もつかない。


量子ビットの意味

 観測した時に確実に 0 となる状態を\( \ket{0} \)という記号で表し、確実に 1 となる状態を\( \ket{1} \)という記号で表すことにしよう。量子的な重ね合わせ状態というのは次のような式で表せる。
\[ \begin{align*} \ket{\psi} \ =\ a \, \ket{0} \ +\ b \, \ket{1} \tag{1} \end{align*} \]
 ここで使っている\( a \)\( b \)はどちらも複素数である。量子的な状態の重ね合わせというのはこのように、複素数を使って表される少々奥の深いものである。単なる重ね合わせの配合の分量を表しているのではなく、 位相をずらした重ね合わせ方の違いをも表していると言えるかもしれない。

 この 2 つの複素数に対して次のような条件を課しておくと確率解釈をするのに便利である。
\[ \begin{align*} |a|^2 \ +\ |b|^2 \ =\ 1 \tag{2} \end{align*} \]
 量子状態\( \ket{\psi} \)の全体に複素数を掛けても物理的状態としては同じものを表しているので、もしこの条件を満たしていなければ、満たすように全体を掛けたり割ったりして調整してやっても構わない。このように (2) 式の条件を満たすように調整することを「規格化」と呼んでいる。

 なぜ規格化を行うかと言えば、そうすることでシンプルな説明が可能になり、説明する側もされる側も楽だからである。規格化が行われていれば、次のようなわかりやすい関係が成り立っていると言える。

 この重ね合わせ状態\( \ket{\psi} \)を観測した時に 0 という結果が出る確率は\( |a|^2 \)であり、1 という結果が出る確率は\( |b|^2 \)である。

 ちなみにもし規格化が行われていなければ次のような説明になるだろう。この重ね合わせ状態\( \ket{\psi} \)を観測した時に 0 という結果が出る確率は\( |a|^2/(|a|^2+|b|^2) \)であり、1 という結果が出る確率は\( |b|^2/(|a|^2+|b|^2) \)である。

 (1) 式で表されるような 2 つの状態が重ね合わさった状態\( \ket{\psi} \)を「量子ビット」あるいは「キュービット」(qubit)などと呼ぶ。もし一時的に\( a = 0 \)\( b = 0 \)ならば状態が重なっていないことになるが、それでも (1) 式の形であることには変わらないし、重ね合わせ状態を保持できる能力がある限りは量子ビットと呼んで問題ない。


量子ビットの実現方法

 量子コンピュータはこの量子ビットを単位としてあれこれ操作したり組み合わせたりして計算を行わせるのである。量子コンピュータを作るには二つの量子状態の重ね合わせさえ利用できればいいので、具体的には色んな方法が使える。電子のスピンの上向き状態と下向き状態をそれぞれ\( \ket{0} \)\( \ket{1} \)になぞらえてもいいし、光子の偏向方向の縦と横をそれぞれ\( \ket{0} \)\( \ket{1} \)になぞらえてもいい。どちらをどちらになぞらえても構わない。他にも原子や原子核の 2 つのエネルギー準位の重ね合わせを利用することもある。どの方式が実用化されて普及するかはまだ分からない。

 電子のスピンを利用することをイメージするなら、電子のスピン状態を操作するための具体的な物理法則を知っていると助けになるだろう。光子の偏光を利用するなら光学の知識が助けになるだろう。例えば光子の場合には、複素数の係数\( a \)\( b \)というのは、縦偏光と横偏光の重ね合わせをするときの位相のずらし方に相当する。重ね合わせ方によって右回りの円偏光になったり、左回りの円偏光になったり、2 つの係数の絶対値が異なれば楕円偏光になったりする。

 このようなわけで、何を利用して量子計算を行わせるかによって、具体的にどんな操作をするかというイメージは大きく異なるのである。それでも (1) 式で表されるような状態を利用するという共通点があるので、そこだけを抽出して議論を進めることが可能である。

 具体的にどうやって量子コンピュータを実現したらいいかという技術的問題と、計算を実行する手順(量子アルゴリズム)についての基礎理論とを別々に分けて論じることができるということである。このことは説明をする上で利点にもなるが、難点にもなるだろう。理論ばかりを聞いていても、それは現実に何をすることに相当するのかというイメージが湧かないのである。具体的にイメージできなければ理解した気になれないという読者も多いことだろう。

 しかし具体的な実現方法というのは今まさにあれこれ研究が進められているものなので、唯一この方法しかないというようなものでもない。何かを説明したとしてもあくまでも一例に過ぎない。技術的な話は難しかったりするのだが、簡単に説明できそうなところだけ、後で少しだけ話すことにしよう。


量子ゲート

 量子ビットに対して一定の操作を行う部分は「量子ゲート」と呼ばれている。基本的な量子ゲートが数種類あって、それぞれどんな操作を行うかが違っている。どんな種類の量子ゲートがあるかを紹介し始めると途端に話がややこしくなるのであとにしておこう。

 量子ゲートが具体的にどんな装置であるかは、量子ビットとして何を利用するかによって大きく違っている。ごく簡単な仕組みで済むこともあるし、大掛かりであることもある。何段階かの操作が必要であったり、ある程度の時間を掛けて徐々に変化させて操作を完了させる場合もある。

 量子ゲートはまるでブロックの部品のようなものである。その何種類かのゲートをあれこれと組み合わせたものに量子ビットを通してゆくことで情報を操作して目的の計算結果を得る。このように一定の操作ごとに量子ゲートという概念でまとめて理論化しておけば、何を使って量子コンピュータを実現するかに関係なくアルゴリズムの研究を進めていけるし、その一方で別の研究者は性能の良い量子ゲートを実現することに集中すれば良くなる。

 色んな種類の量子コンピュータが研究されているが、必要な一揃いの量子ゲートを用意することが難しいのである。ある方式では幾つかの量子ゲートを簡単に実現できるが、必要な残り一種類の量子ゲートだけはどうしても複雑になってしまうということがあったりして、それぞれに難所が異なっている。また、一揃いのゲートが辛うじて実現できたとしても、実用化には多くの課題がある。量子ビットの状態を安定に保ったまま正確に操作するのが難しかったり、量子ゲートを何段階も(将来的には数百や数千以上を目指したい)接続して複雑な計算をさせるにはサイズが大き過ぎたりする。


エラー対策

 量子コンピュータはデジタル的な面とアナログ的な面を併せ持っている。最終的な結果が観測によって 1 か 0 で得られるという意味ではデジタル的なのだが、観測前の状態の重ね合わさり方は連続的で無数であり、少し狂えば結果もそれなりに影響を受けて狂うというところはアナログ的である。

 計算の最終結果は量子ビットの観測によって確率的に得ることになるのだが、確率が半々に近い状態を観測しても、サイコロを振るようなものだからまるで意味がないだろう。そこでアルゴリズムを工夫して量子ビットの状態を\( \ket{1} \)\( \ket{0} \)に限りなく近付けて計算を終えるようにするのである。そういうわけだから、簡単に終わるような計算なら量子ビットの状態が多少狂ったとしても正しい結果が得られる可能性は高い。しかし一回一回の操作の不正確さが大きいと、複雑な計算を行うときにはそれが積み重なって、結果の信頼性がなくなってくる。どれくらい複雑な問題を解かせられるかは量子ゲートの動作の正確さにかかっている。

 量子ゲートでの操作の正確さとは別の問題もある。外来ノイズだ。量子ビットは非常に繊細であり、予期せぬ粒子が一個衝突するだけでも状態が壊れてしまう。状態が少しだけずれるだとかそういう甘いものではなく、ほぼ完全に壊れる。よって、計算途中にそういうものが衝突してくる確率を可能な限り下げる必要がある。そのために絶対零度近くまで冷却する努力をしているものもある。長い計算途中に邪魔が一回も入らずに無事に最終結果にたどり着くかどうかは確率次第である。

 それに対抗するために、量子ビットが壊されていないかどうかを計算途中に検出したり、場合によっては再び元に戻して計算を続けるアルゴリズムが研究されており、「量子誤り訂正」と呼ばれている。これは複数の量子ビットを使って一つの量子ビット分の情報を載せておくことで実現している。量子ビットの状態を観測してしまうと 1 か 0 かしか結果が出ないので情報が壊れたかどうかを判断できないが、観測する前に「何かがおかしい」ということが分かるようにしているのである。

 ただしこの手法を使うと使用する量子ビットの数が増えるし、手続きが増えて計算時間も増えるので、余計に量子ビットが壊される確率が上がってしまうことがあるという本末転倒っぽく思えるジレンマを抱えている。この手法を積極的に取り入れることに利点があるかどうかは状況次第であり、今後の開発でどんな方式が実用化されるかに依るところだろう。