機械学習・ディープラーニング系には若干乗り遅れた感あったけど、量子コンピュータならまだいけるんじゃないか?と思って少し前から挑戦してます。
そこで最近学んだ猟師コンピュータの知識について説明していきたいと思います。まだまだ浅い知識なのでわかりにくいところ不正確なところ等あると思いますが、都度指摘していただけると最高に嬉しいです。数式など使わないでなるべく簡潔に説明していきます。
量子ビット
一般のコンピュータと量子コンピュータの違いは扱う物理的なビットです。
一般のコンピュータの扱うビットは「0」「1」のどちらか一つを選択します。
一方量子状態にある量子ビットは「0」「1」の状態を”同時”に確率的に扱うことができます。これを重ね合わせと呼びます。
重ね合わせ
重ね合わせ状態の量子ビットが3つあった場合の足し算 a + b を考えて見ましょう。
今、各3つの量子ビットがそれぞれ「0」「1」を50%の確率でとるような重ね合わせ状態にあるとします。
3ビットある時は2進数で「000」〜「111」(※10進数だと0〜7)の値を表現できます。つまり
aの値は「000」〜「111」
bも同様に「000」〜「111」
の値を同時に扱うことができます。
a -> 000 001 010 011 100 101 110 111
b -> 000 001 010 011 100 101 110 111
2進数だとイメージしにくいと思うので10進数で書き直すと
a -> 0 1 2 3 4 5 6 7
b -> 0 1 2 3 4 5 6 7
この状態の量子ビットが行うa+bは、0+3 でもあるし 4+6 でもあるということです。
量子コンピュータのすごいところが少しわかってきたのではないでしょうか。
また量子コンピュータでは量子のもう一つ重要な性質を利用しています。それが量子もつれです。
量子もつれ
量子もつれが起こると、1つ目の量子ビットの状態が別の量子ビットに瞬時に影響が出るようになります。
この性質を利用した物のうちの一つがCNOTゲートと言われる物です。
CNOTゲートは指定したビット(これをターゲットビットと呼ぶ)が 0のときは何もせず1の時に別のビット(コントロールビット)の状態を反転させます。ターゲットビットが0、コントロールビットが0の状態を(0、0)と表現すると、
(0、0) →CNOTゲート→ (0、0)
(1、0) →CNOTゲート→ (1、1) ※コントロールビットを反転させる
(0、1) →CNOTゲート→ (0、1)
(1、1) →CNOTゲート→ (1、0) ※コントロールビットを反転させる
このような操作ができるようになります。
量子もつれを利用した操作は他にもいくつかあり、それらを組み合わせることで、計算結果を絞り込むことができるので、演算の回数を少なくすることができます。
量子コンピュータではこのように重ね合わせと量子もつれを利用して演算を行なっていきます。そして最後に全ての計算結果が得られるか、というと実はそうではありません。例えば先ほどのa+bの計算だと、0+0 〜 7+7 のうちのどれか一つの計算結果しか得られません。どういうことなのか説明していきます。
観測
「0」「1」の両方を同時に扱っているビットが、今どんな状態なのかを観測すると、同時に扱っている状態が崩れ、「0」もしくは「1」のどちらかが観測されます。
私たちが普段生活している中で何か対象を観測するときはその対象に何も影響を与えません。例えば机の上のスマホを見る(観測する)ということを考えて見ましょう。スマホを見るためには、それに光を当てて、その反射を目の網膜で感知する必要があります。私たちが生活しているスケールでは光がスマホに当たっても、スマホは壊れたり移動したりしません。
しかし量子といった非常にミクロな世界となると、この観測に用いる光でさえ、観測対象の状態に影響を与えてくるのです。そのため、量子コンピュータで行なった演算の結果を観測すると、同時に扱っていた状態のうちのどれか一つを得ることになります。
まとめ
量子コンピュータでは以上のように「重ね合わせ」「量子もつれ」で演算を行い、最後に「観測」で結果を得ます。
全くわからなかった量子コンピュータも少し馴染みが出てきたのではないでしょうか。
次回は、量子コンピュータで用いられるアルゴリズムについて説明していきます。