なんちゃって量子コンピュータを作りたい③

表紙-3
前回①
前回②

さて、前回作成したなんちゃって量子コンピュータを思わせるスクリプトですが、
実行結果が、1分6秒でした! もちろん計算結果にも問題なし。
普通の計算が3分25秒なので、3倍速くなってます!!

うーん。期待していたほどではないですね。まあ、仕方ないか。

ちなみにですが、ちょっとサーバーのtopコマンドの結果が面白かったので、貼っておきます。
(量子コンピュータとは関係ないですが)

画像1-3
ちなみに、普通の計算の時のtop

画像2-4

やっぱり並列にCPUを酷使しているので負荷の度合いが全然違いますねえ。


とりあえず、本題に戻ります。
なんちゃって量子コンピュータを思わせるスクリプトは意図通り動き、
意図通り、計算結果が早くなったという結果になりました。

ただこのまま終わってしまうと、量子コンピュータ学会から大きなクレームを受けてしまいます。
(そんなものがあるのか知らんけど)
ということで、もうちょっと量子コンピュータについて説明できればと思います。

私のブログの説明だと、どうしても普通のコンピュータだと一つ一つ計算して、
量子コンピュータだと、同時に並列して計算ができるので早いのね。と思われてしまうと思います。
わかりやすくするためにそういう書き方になってしまってますので。

実際には、量子コンピュータは単純な並列処理とは全く違う仕組みで動いています。

むしろ重要なのは、「同時に計算する」ことではなく、
「確率をうまく操作する」という考え方になります。

前回、量子の性質として、「重ね合わせ」という話をしました。

量子ビットは0でもあり1でもある状態を同時に持つ、という不思議な状態になります。

これをもう少しだけ踏み込んで説明すると、

量子ビットは「0である可能性」と「1である可能性」を
それぞれ強さ(確率のようなもの)として持っています。

そして、この「強さ」は単純な確率ではなく、計算の過程で変化させることができます。


例えばイメージとして、

・正解の状態 → 強くする  
・間違いの状態 → 弱くする  

という操作を繰り返していくことで、
最終的に正解が出やすい状態に持っていきます。

そして最後に観測すると、
その強くした状態が高い確率で出てくる、というわけです。

一応、AIに作らせたイメージを共有します。
画像3
ふむ、わかるようなわからんような。


普通のコンピュータは1つずつ答えを試していきますが、

量子コンピュータは
最初からすべての可能性を持った状態を作り、
そこから「うまく当たりだけを引きやすくする」
というアプローチを取ります。

じゃあ「全部同時に試してるじゃん」と思うかもしれませんが、
実際にはそう単純ではありません。

すべての結果は最終的に1つしか観測できないため、
ただ並列に計算しているだけでは意味がありません。

重要なのは、「観測したときに正解が出るように調整すること」になります。

この辺りの仕組みには「干渉」という現象が関係してきます。
波のように強め合ったり、打ち消し合ったりすることで、
不要な答えを消し、必要な答えを強めています。

この調整が非常に難しいため、量子コンピュータでも間違った答えが出ることがあります。
また、得意な問題と不得意な問題がはっきり分かれているのも特徴です。

ある計算分野で、「量子コンピュータを実現した!実際のコンピュータよりも何億倍も速くなった!」
というような話が出たりするのは、この得意分野の特定の計算の話で、汎用性が高くなく、通常利用もできず、
まだコンピュータが量子コンピュータに置き換わる段階には行けていないのです。

後は、量子コンピュータには「量子ゲート方式」「量子アニーリング方式」みたいな
方式の違いみたいなものがあったりしますが、正直私には詳しく説明できそうにありません。

ということで、量子コンピュータのとっかかりというか、イメージみたいなものだけでも
このブログでつかんでもらえるなら幸いです。