検索
連載

1量子ビットを制御してみよう踊るバズワード 〜Behind the Buzzword(4)量子コンピュータ(4)(2/8 ページ)

本当に難しい話になってきました……。が、めげずに続けます。今回のテーマは「1量子ビットを制御する」です。それに関連して、量子シミュレーションやレーザー冷却方式にも触れたいと思います。

Share
Tweet
LINE
Hatena

「ブロッホ球」とは

 「ブロッホ球て何だったっけ?」というところで前回を終えてしまいましたので、まずはブロッホ球について再度お話をしたいと思います。

 実は、私、ブロッホ球を理解できたつもりで初版のコラムを書いていたのですが、今回も「量子コンピュータ大好きのTUさん、通称『量オタのTさん』」から「よく分かりません」とのコメントを頂いて、考え直してみたら、実は、私も良く分っていないことが分かりました。

 そこで、量子状態を示す式から、もう一度、丁寧に見直してみました。

 つまり、φは”0猫”と”1猫”の位相差を示し、θは、"0猫"と"1猫"の大きさ(ただし、|0猫|2+|1猫|2 =1拘束される)を示すものになります。

 ですので、ブロッホ球を何時間眺めていようとも、そこから”猫”全体の姿を見いだすことはできません(少なくとも、私にはできませんでした)。

 で、やはり結論としては、この連載第1回の結論と同じように1ビット量子状態を「長さ1のベクトルを2軸でグルグル回す式で記述できる」という結論であり、それは、たまたま「球面」として表現できるだけ、という結論に至りました。

 実際のところ、ブロッホ球は、面倒くさい数式cos(θ/2) “0猫” + ei(Φ) cos(θ/2) “1猫”を見える化するツールにすぎませんので、別に無理してこれ(ブロッホ球)を使わなくても構いません。


第1〜3回までに記載してきたブロッホ球は、”0猫”と”1猫”が逆に配置されていました。お詫びして訂正します

 ところが、このブロッホ球は、量子状態やら量子ゲートを説明する分には、とっても便利な道具なのです。今回は、このお話をします。

量子コンピュータのプログラミングって?

 ところで、今頃になって、私は「量子コンピュータって、古典コンピュータ(今のパソコンやスパコン)のように、ちゃんとプログラミングできるのか?」が気になり始めました。

 それはズバリ「量子コンピュータって”IF 〜 THEN 〜”を使えるのか?」ということです。なぜなら、現在のコンピュータを、コンピュータ足らしめているのは、この条件分岐が実現できるからです。

 もちろん、観測後の量子ビットは、当然、”0”か”1”に確定してしまうので、この収束した値を使って、古典コンピュータを使って、分岐条件を行うことは、当然に可能です。

 私が分からないのは、「”0猫”と”1猫”の両方を持ちながら存在する量子ビットどうしを、同一または異なるものとして判定する手段が存在するのか」、ということですが ―― 普通に考えれば「ない」はずです

[Tさんツッコミ!]CNOTゲートなどの2量子ビットゲートは、IF-THENの量子ビット版に対応していると考えることもできませんか? 制御ビットが0か1かで、標的ビットにNOTをかけるかどうかが切り替わります。

江端:2量子ビットゲートは、まだ着手していないので、正直全然分かっていません。勉強して、次回にご報告致します。

 なぜなら分岐条件をするためには、量子ビットの量子状態を観測しなければなりませんが、量子ビットは観測した瞬間に、量子状態(”0猫”と”1猫”の両方)を喪失するからです。

 では、量子コンピュータの量子計算とは、一体何をやっているのか? ―― 今回、私、この問いに対して、現在の古典コンピュータのアーキテクチャからアプローチして考えてみました。

 まずは古典コンピュータの判断基準である、古典ビットゲートについて説明します(右図参考)。

 古典ビットゲートは真空管かトランジスタがあれば、簡単に作れます。電気を流す/止める手段があれば足りるからです。

 基本的に、古典コンピュータで必要となる古典ビットゲートは、NANDゲート1つあれば、全て作れることになっています(学生の頃、最初にこの話を聞いた時には「ウソだ!」と思ったのですが、本当でした)。

 そして、”IF〜THEN〜”ロジックは、下図に示すような回路を事前に準備しておくか、あるいは、必要に応じてソフトウェア的に作れば足ります。

 さらに、ここから古典コンピュータの基本的アーキテクチャを理解して頂くために架空の「1ビット古典コンピュータ」というものを想定して、ステップ単位で説明します(皆さんがいま使っている、PCやスマホは、32ビット/64ビット古典コンピュータというものになります)。

(Step1)プログラムの指示に応じて、メモリ上に配置されたデータ(“0”か”1”)を、引き出してきます。

(Step2)次に、これの2つを、ALU(Arithmetic Logic Unit、算術論理演算装置)に放り込みます(ALUの中は、先ほど説明したようなゲート回路が構成されているものとします)。

(Step3)ALUでビット計算された結果は、再び、内部バスを経由して、メモリに格納されます。

 要するに、古典コンピュータでは、「メモリから古典ビットを出して、ALUに放り込み、新しく作られた古典ビットをメモリに放り込む」、を延々と繰り返しているだけです。

 ところが、どれだけ量子コンピュータに関する本を読み漁っても、この量子コンピュータの「内部バス」「データバッファ」「データバス」のみならず、「レジスタセット」「アドレスバス」「プログラムカウンタ」に相当するものが、何一つ見あたらないのです ―― 唯一つ、”ALUに相当する部分”を除いて。

 そもそも、量子コンピュータには、データ(ビット)を「移動」させるどころか、「格納」するという考え方すらありません。量子ビットは、観測すれば、量子状態が全て消滅し、”0”か”1”に確定されてしまう、恐ろしくデリケートなビットだからです。

 既にお分かりでしょうが、同じ理由で、量子状態の量子ビットに対して、デバッグやトレースはできません。もちろん、量子状態として生存できる時間は、(現時点では)おおむね0.0001秒間くらいです(量子ビットのデバイスによって、0.1〜10倍程度の差はありますし、将来はもっと長くなるかもしれません)。

 そもそも、量子ビットをその場から動かしたら、直ちに量子状態が壊れて、”0”または”1”に確定してしまい、量子計算ができなくなります。つまり、量子ビットは、その誕生から死に至るまで、生まれた場所から、ほんのわずかでも移動することができないものなのです。

[Tさんツッコミ!]≫光子の量子ビットは光の速さで移動します(逆に止めるのが困難)

 前図の絵では、絶対零度まで冷却された”0猫”状態の2つの量子ビットが、その場所に固定されたまま、「否定ゲート」処理やら、「アダマールゲート」処理を加えられ、最後に観測することで、”0”または”1”を算出している様子が示されています。

 ゲート処理を施される前の猫は、一般的には”0猫”状態にしておきます。

 なぜなら、徹底的に冷却することで、”0猫”だけにするのが、いちばんラク(簡単)だからです。

 さて、図中の「否定ゲート」処理やら、「アダマールゲート」処理とは何をしているのかと言われれば、量子ビットの「力づくの制御」です。

 これを”0猫/1猫”を使って一言で説明すれば、「動物虐待」そのものです。

 「動物虐待」とは、かなり過激な表現ですが、しかし、量子ゲート処理を調べてみれば、あながち的外れの表現でもないのです(と、私は思っています)。

 というのは、”0猫”も”1猫”も自分の固有振動周期で自由に動き回っているところに、いきなり急ブレーキをかけられ、振動のタイミングをずらされ、必要以上に大きくあるいは小さく動き回るようにムチを打たれ、”0猫”←→”1猫”に強制変更させられるのです ―― これは、”虐待”そのものと言えそうです。

 下図は、もし「量子ビットを、量子状態のまま観測できたとしたら(できませんが)、何が見えるか」を記入してみたものです。

 まず、上図の量子ビットq[0]は、”0猫”状態から始まって、「アダマールゲート処理」を2回施されることで、”1猫”に姿を変えています。ですので、この状態のq[0]を観測して確定させると、ほぼ確実に”1”となっているはずです。

 また、量子ビットq[1]は、「否定ゲート処理」で、”1猫”にされた後、「アダマールゲート処理」を2回施されることで、”0猫”に姿を変えています。この状態のq[1]を観測して確定させると、ほぼ確実に”0”となっているはずです。

 おい、江端、その「ほぼ確実に」って何なのだ ―― と文句を言いたい方もいるかと思いますが、量子状態が観測によって、どの状態に確定するかは、本当に「観測するまで分からない」のです。

 この場合は、理論上は、q[0],q[1]は、それぞれ”0”、”1”で確定しますが、ノイズの影響や観測のタイミングによっては ――例えば、1万回に1回程度は ―― 逆の答が出ない、とは保証できないのです。

[Tさんツッコミ!]IBMが一般向けのサービスをしている”IBM Q”では、数%(!)の確率で間違えたりしています

 ちなみに量子ゲートに投入する量子ビットは、別に”0猫”でなければならないという訳ではありません。”0猫”と”1猫”を重ね合わせた状態の量子ビットを入力することもできるのですが ―― 多分、そういう使い方はしないと思います。そういう状態の初期の量子ビットを作るのは難しい(多分、不可能)からです。

 さて上記のケースでは、”0猫”と”1猫”を重ね合わせた状態の量子ビットを入力として、「アダマールゲート処理」を2回施すことで、”0猫”と”1猫”を重ね合わせた状態の量子ビットが計算結果として出てきます。この場合、“1”か”0”のどっちにはなるかは確率50%となります。100回計算すれば、ほぼ50回ずつ”1”か”0”の答えが得られることになります。

 ここで一度まとめます。

(1)量子コンピュータのアーキテクチャは、古典コンピュータのアーキテクチャの比較対象にはならない(というか、比較自体がナンセンスなのかもしれない)

(2)現状、量子コンピュータのハードウェア技術は、古典コンピュータのALUのさらに一部分にとどまっており、計算する装置としては完成していない(というか、時期尚早というのが正しいのかもしれない)

と言えます。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る