Edited at

事前知識0の方のための量子コンピュータ入門の入門


事前知識0の方のための量子計算入門の入門

$$

\def\bra#1{\mathinner{\left\langle{#1}\right|}}

\def\ket#1{\mathinner{\left|{#1}\right\rangle}}

\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}\\

$$


1.はじめに


1.0その他リンク

量子計算とpython$\to$「量子コンピュータと量子計算まとめ」


1.1この記事の目的

事前知識が0の方でも量子コンピュータに興味を持ってもらうことです。この記事を読むことで、量子コンピュータはどのように動作するものなのかを理解することが目的です。


1.2前書き

前回の記事では、入門と言うことで数学的に基礎を扱ったあと、量子コンピュータをqiskitで実際動かして見ました。しかしながら、前回の記事では線型代数学とテンソル積空間など、数学に関する知識を前提に話を進めていたため、わかりづらい内容となっていました。そのため、さらに量子コンピュータに興味を持ってもらうためにはもうワンクッション必要と感じ今回の記事を書きました。


1.3お願い

量子は不思議な世界です。実際、この記事でも不可思議に思うことが多々あると思いますが、そう言うものだと割り切って考えながら、読んでいただけると助かります。


2.量子コンピュータと量子計算の初歩の初歩


2.1量子ビット

 量子コンピュータは、今まで使っていたコンピュータに比べて、ミクロな世界で情報を取り扱うコンピュータです。量子コンピュータでは、今まで使っていた0,1ではなく、不思議な性質をもつ量子ビットによって情報が記述されます。この量子ビットは、「0,1」と言う文字をさらにケットと呼ばれるもので囲います。つまり

$$\ket{0},\ket{1}$$

と書きます。

同様に00000111のようなビット列は量子ビットでは

$$\ket{00000111}$$

と書きます。

 今までのビット(古典ビット)と量子ビットとの違いは重ね合わせができると言うことです。つまり、1ビットに以下のようなパターンも作ることができます。

$$\frac{1}{\sqrt{2}}(\ket{0}+\ket{1})$$

ここで、え?$\ket{0}+\ket{1}=\ket{1}$になるんじゃないの?だって普通のビットの時は0+1=1じゃん!と思われるかもしれません。量子ビットでは残念ですが$\ket{1}$と$\ket{0}$は足して$\ket{1}$にはなりません。上記の書き方が最小の記法で$\frac{1}{\sqrt{2}}(\ket{0}+\ket{1})$という量子ビットなのです。そう覚えていただくか、少しベクトルに詳しい方でしたら、前回の記事をご覧ください。


2.2量子計算ってどうやるのか?

量子計算のモデルと計算方法自体は実は簡単なんです。


1.初期状態としてnビット分の量子ビットを用意します。

2.ユニタリ演算子と言うものをかけて計算を進めて行きます。

3.最後に(途中でもok)測定します。測定値は量子ビットの状態に応じて確率的に得られます。


専門用語がたくさん出てきましたね...解説して行きます。


ユニタリ演算子

量子状態を変化させることができるアイテム。従来のコンピュータで言う「AND」「OR」「NOT」のようなもので一番簡単なものだとNOT演算子という$\ket{0}$を$\ket{1}$にすることができるユニタリ演算子がある。 

測定

量子ビットに「測定」と言う操作を施すことで、値を得ることができる。測定値は量子ビットの状態によって変わる確率に従って得られる。(例)「$\ket{1}$なら確率1/2で測定値「1」,確率1/2で測定値「0」が得られ、$\ket{0}$なら確率1/3で測定値「1」,確率2/3で測定値「0」が得られる」という感じ



3量子計算をやってみよう!


3.1IBM-Qのガイド

IBM-experienceにアクセスして、5-量子ビットの量子回路を実行できます。登録の仕方などはIBM公式に掲載されているので、参照してください。以下をクリックすると、量子回路構成画面に移ります。

スクリーンショット 2018-02-05 1.38.06.png

●量子回路構成画面

スクリーンショット 2018-02-05 1.33.00.png

見ていただけるとわかりますが$\ket{0}$というのが5つ用意されていますね。次の節でユニタリ演算子の一つNOT演算子をかけて見ちゃいましょう!


3.2NOT演算子を使ってみる

NOT演算子というユニタリ演算子をかけてみたいと思います。まずはじめにNOT演算子の性質を確認!


ユニタリ演算子図鑑No.1

名前:NOT演算子

性質:量子ビットを反転させる

備考:別名「X」「パウリ演算子X」「$\sigma_x$」


それでは、かけてみたいと思います。ドラッグアンドドロップで、Xというやつを一番上の部分に配置しましょう。次に「測定」マークのピンクのメーターのようなマークを持って行きましょう。

スクリーンショット 2018-02-05 1.50.02.png

かけて見て測定した結果!!

スクリーンショット 2018-02-05 1.46.02.png

はい。こんな風になります。棒グラフの部分をみてみてください。00001が「0.902」で00000が「0.098」と出ていますね。これは「大量に同じ量子計算を実行してみたら、測定値00001の確率が「0.902」で00000「0.098」です」という意味です。

ここで行っておかなければいけないことがあります。実は$\ket{(中身)}$みたいな単体の量子ビットの場合は、測定値は確率1で、$\ket{(中身)}$の中身の値を得ることができます。

だから今回ははじめの$\ket{0}$をNOT演算子で反転させて$\ket{1}$にして測定しているのだから確率1で測定値「1(00001)」が得られるはずなんです。

 しかしながら、上のグラフでは、なぜか0.9くらいかそこら...。こうなってしまった理由は、量子コンピュータの雑音の弱さにあります。雑音のせいで、確率1ではなく、0.9かそこらになってしまうのです。


3.3アダマール演算子

次に、アダマール演算子を紹介します。


ユニタリ演算子図鑑No.2

名前:アダマール演算子

性質:まぜこぜの量子ビット$\frac{1}{\sqrt{2}}(\ket{0}\pm\ket{1})$を作る。元が$\ket{0}$の時符号+、$\ket{1}$の時符号-

備考:別名「Hadamard演算子」「アダマール変換」


早速実行して行きましょう!

スクリーンショット 2018-02-05 2.13.22.png

おっと、確率は半分に割れました!

アダマール演算子をかけたことで今回$\frac{1}{\sqrt{2}}(\ket{0}\pm\ket{1})$という量子ビットが得られたわけですが、この時測定をすると、確率0.5で測定値0、確率0.5で測定値1を得られます。

実は、測定をした時の測定確率は、$\ket{(中身)}$を二乗した値なのです。

今回は、$\ket{0}$の係数から確率は$\left(\frac{1}{\sqrt{2}}\right)^2$、$\ket{1}$の係数から確率は$\left(\frac{1}{\sqrt{2}}\right)^2$となり、どちらも0.5で半々であることがわかります。


4.まとめ

読んでいただきありがとうございます。今回は、量子計算ってどう動くんだろうか?という部分にのみ扱いました。まとめると


・量子コンピュータでは量子ビットというものが使われる。

・量子コンピュータでの計算、すなわち量子計算ではユニタリ演算子と測定を行なって計算を進める

・$\ket{(中身)}$の測定値は(中身)であり、測定確率は、それぞれの$\ket{(中身)}$の「係数の2乗」で与えられる。


実際に量子コンピュータがなぜ早いのか?ということに関しては、また別の記事で触れたいと思います。