科学と技術を雑学的に気まぐれに語るブログ 

科学と技術に関係したエッセイのようなもの

量子ビットとシュレディンガーの猫

さて今回は量子ビットのお話。

前回は、量子コンピューターが速い理由を「データの並列化」にあると説明しました。そして、その「データの並列化」のカラクリが量子ビットにあります。

まずは用語の定義。量子コンピューターに対して普通のコンピューター(スーパーコンピューターも含みます)を「古典コンピューター」と呼びます。また、量子ビットに対して普通のビットを「古典ビット」と呼びます。

古典という用語が奇異に感じられるかもしれませんが、これは物理学の用語でして、量子物理学以外の物理学をまとめて「古典物理学」と呼んでいます。ニュートン力学もマックスウェルの電磁気学アインシュタイン相対性理論も全て「古典物理学」です。それに倣って、「量子コンピューターではない」という意味で「古典」を付けて呼びます。

量子ビットでのデータの並列化を説明するための前段階として、古典ビットについて考えます。古典コンピューターにおける古典ビットは、データを表現するために使われており、同時にそのデータに対する演算を可能とするための仕組みでもありました。

例えば、古典ビットで整数を表すことを考えると、以下のような表が出来るでしょう。この表は2bitで整数の0から3までを表しています(「bit」は古典ビットを表します)が、もちろん、ビット数を大きくすると、さらに広い範囲の整数を表すことが可能です。一般的な古典コンピューターで用いられている整数表現は8bit、32bit、64bitなどですが、長く煩雑になるので2bitで考えます。

10進数 2bit(2進数)
0 00
1 01
2 10
3 11

次にデータを2つ使って演算をしてみます。整数の足し算をしても良いのですが、簡単のためにAND(論理積)の演算を行います。2bitのデータiとjのAND(論理積)を取ると下表のようになります。

 i   j  i AND j
00 00 00
00 01 00
00 10 00
00 11 00
01 00 00
01 01 01
01 10 00
01 11 01
10 00 00
10 01 00
10 10 10
10 11 10
11 00 00
11 01 01
11 10 10
11 11 11

このように、i も j も00、01、10、11の4通りの値を取りうるので、i AND j は4 x 4 = 16通りの計算があります。i も j も各ビットは 0 か 1 のどちらかですから当然です。

もし、i と j の全ての取りうる値全てについて計算を行わなければならないとしたら、その計算を16回行う必要があります。ANDならば単純な計算ですが、もっともっと複雑な計算の場合は1回の計算にもそれなりの時間を要します。

仮にiもjも32bitだとしたら18,446,744,073,709,551,616回の計算が必要になります。1回の計算を100万分の1秒で行うとしても、18,446,744,073,709,551,616回の計算には60万年近くを要します。このように、全ての場合をもれなく計算する場合、とてつもない手間がかかることがあります。

古典コンピューターであるスーパーコンピューターは、膨大な数の計算ユニットを用意して、「i=00の場合の計算は計算ユニットXで行う、i=01の場合の計算は計算ユニットYで行う」などとその計算ユニット毎にデータを割り振って並列で計算を行います。

量子コンピューターの場合はビットの考え方から違います。古典ビットは 0 か 1 のどちらかでしたが、量子ビットは「0 と 1 のどちらでもありうる状態」です。「0 と 1 のどちらかわからない状態」と言っても良いでしょう。量子ビットを「観測」するまでは、0 か 1 のどちらになるかわからないのです。量子ビットを「観測」したら 0 か 1 のどちらかの結果が得られます。どちらの結果が得られるのかを確率的に知ることは出来ますが、「観測」するまでは「0 と 1 のどちらでもありうる状態」「0 と 1 のどちらかわからない状態」です。

このあたりの概念が量子力学なのですが、この概念を直感的に理解出来なくても全く問題ありません。直感的に理解出来る人類は皆無だと思います。ここではとりあえず、「そういうものなんだ」と思っていて下さい。著名な物理学者でも「そういうものなんだ」とあまり変わりませんし、アインシュタインは「そういうものなんだ」すら拒否してましたので、安心して下さい。

上表の i と j を量子ビットで表すとしましょう。i と j はそれぞれ2量子ビットになります。そして、i と j の全てのビット(合計4量子ビット)が「観測すると同じ確率で 0 または 1 になる状態」に設定できたとしましょう。そうすると、その状態は上表の16通りのパターン全てを含んでいることになります。

古典ビットは 0 か 1 のどちらに決まっていますので、それぞれの値の組み合わせが16通り必要でした。量子ビットは「観測すると同じ確率で 0 または 1 になる状態」ですので、各ビットは「 0 と 1 の重ね合わせ」の状態ですし、i と j 全体では16通りの重ね合わせの状態にあると考えられます。

この「データにおける重ね合わせ」が「データの並列化」の正体です。このデータの並列化を利用すると、組み合わせの数の回数分の計算を行う必要がなく、重ね合わせ状態にあるデータについて1回の計算だけで済むことがあります。「ことがあります」が重要ですが、ここでは深入りしません。

古典コンピューターであるスーパーコンピューターでは「組み合わせ」の数に対抗して計算ユニットを多数用意していますが、量子コンピューターでは「重ね合わせ」を利用して一気に計算を行う、という違いがあります。そして、理論的には重ね合わせの度合いが計算ユニット数よりも桁外れに大きいので、量子コンピューターによる高速計算が期待されている、というわけです。

この、量子ビットにおける重ね合わせですが、おそらく多くの方は重ね合わせの逸話をご存知です。シュレディンガーの猫です。

猫が「死んでいる」と「生きている」の重ね合わせ状態になっているというパラドックスシュレディンガーの猫ですが、量子ビットの0 と 1 の重ね合わせはパラドックスでも何でもなく、実験室レベルでは実証されていることです。

シュレディンガーの猫のお話と同じ「重ね合わせ」の原理によって、量子コンピューターはデータの並列性を得て、それが高速な計算につながっています。

次回は重ね合わせ状態にある量子ビットの表現方法について述べたいと思います。ブラとケットでブラケット、というお話です。