KHCの

KHC( https://twitter.com/we_can_panic )が140字を超えるツイートをするところ

量子コンピュータを解説してみる(1)

最近量子コンピュータにハマってるので,ここらでアウトプットを計る.
(*10/25追記 内容を補強しました。間違ってることは書いてない...ハズ)

量子について

普通のコンピュータではシミュレーションできない動きをする。 (後述の「重ね合わせ」「もつれ」など)
なので、既存の問題を量子の動きに落とし込むことで、コンピュータでは到達できなかった物量・速度の問題を解くことができる(かもしれない)。
 
簡単にメリットだけ言うと、
「分岐がエグい数になってコンピュータでは計算できないことを量子でシミュレーションできる。」
 
例を挙げると、SSL通信を解読できる。
SSL通信の仕組みを簡単に説明すると、(ネットで浅く調べただけだから間違ってるかもしれないけど、)以下の流れになる。

1. サーバー側で「A」というデータを使って暗号化する  
2. 暗号されたデータと、「X」というデータを、クライアント側に送る  
3. 「X」は、クライアント側で持ってるデータを「B」として、「X=A*B」という値になっている  
4. クライアント側は、「X/B」を計算して「A」を求め、その値を使ってデータを解読する  
5. Xは2048ビットのデータ(600桁くらいの数字らしい)になっていて、それからノーヒントでA, Bを求めるのは現実的に不可能である  

この5. の根拠になっているのが「600桁くらいの数字を素因数分解するのには数十年単位で時間がかかる」という法則なんだけど、量子コンピュータならこれを数分単位で解くことができる(かもしれない)。  
既に一部で実用化され始めている。:
https://www.google.com/search?q=%E9%87%8F%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF&tbm=nws  

重ね合わせ

量子の不思議な性質その1.
量子は観測するまでどういう状態なのかわからない.
昔は「観測の際に当たる光とか電磁波のせいでブレが生じる」とか言われてたけど, そうじゃなくてマジで観測によって結果が変わるらしい.不思議だね.
とは言え状態は完全にランダムという訳ではなくて,85%でこの状態,15%でこの状態, みたいな確率が決まっている.
この「何%の確率でこれが出てきて,何%の確率でこれが出てくる」という状態が「重ね合わせ」と呼ばれている.
この重ね合わせができるのが量子コンピュータの強みで,例えば100個の量子ビットの重ね合わせ状態を古典コンピュータで再現しようとすると,100ビット*2100通りのメモリが必要になるが,量子コンピュータでは重ね合わせにより100ビットの容量だけで全部の状態を表せる.
ビットの操作だけで考えたら,量子コンピュータは古典コンピュータに比べて2100倍速いことになる.すごい.  
 

もつれ

量子の不思議な性質その2.
2つの量子をペアリングさせれば,片方を操作することでもう一方の量子の結果も変わるらしい.
この同期の速度は光よりも速くて,例えば日本からブラジルへの通信だと,光だと直線距離でも0.05秒のところ,量子もつれを利用すると0秒で行ける.すごい.  
 

量子コンピュータの操作

量子コンピュータには大きく2つパターンがあって、それぞれ「イジング型」と「ゲート型」と呼ばれている。
「イジング型」の方は、沢山のもつれた量子を使って、ある条件下の最適解を見つけるものらしい。
交通量の最適化などの方面で使われているとか。
KHCはもう一つの「ゲート型」の方をメインで学んでおり、こちらは「量子ビット」という量子の情報に対して「ゲート」と呼ばれる操作を加え、いろいろなこと(素因数分解を解いたり、「量子コンピュータを使った安全な通信」の実装)を行う。
実際にはこの「いろいろなこと」はまだアルゴリズムの研究段階であり、成果の数自体も少なく、要求される量子コンピュータのスペックも現実的ではない。  

ゲート

 
ゲートは「ブロッホ球」というのを使って考えるとわかりやすい.
↓のサイトのやつがいいかな?
Try Bloch!  

f:id:we_can_panic:20200319201902p:plain
Try Bloch!のスクショ

 
量子ってなんか回転してて,回転の方向が大事らしい.
(回転の方向は右ねじの法則みたいなのをイメージすればいいかな?)
ブロッホ球はその回転の方向を表すやつで,最初は上向きに回転している.
これを真横から見たときの矢印の位置が0か1かの確率を表している.上に行くほど0が出やすくて,下に行くほど1が出やすい.
最初は上向きなので,0が100%の確率で出るようになっている.
 
図の下の方にある四角いボタンがゲートで,ブロッホ球の矢印に対していろいろな操作ができる.
簡単に説明していくと,
 
* Xゲート
X軸(手前の水色の軸)を180°回転させる.
最初の状態からこのゲートをかけると下向きになるので,NOT(反転)ゲートとも呼ばれたりする.
 
* Yゲート
Y軸(右側の赤色の軸)を180°回転させる.
最初の状態からこのゲートをかけても,Xゲートと同じような動きしかしない.
 
* Zゲート Z軸(上に向いている黄緑色の軸)を180°回転.
最初の状態からこのゲートをかけても変化がない.(いちおう矢印の上の方が動いてはいるが・・・)  
* Hゲート
アダマールゲートというゲート.
綴りはHadamard.フランス語読みなので最初のHは発音しない.
X軸とZ軸を入れ替えるみたいな操作ができる.
具体的には,Y軸を時計回りに90°,Z軸を180°回転させる.
最初の状態からHゲートをかけると,矢印がこっちを指してくる.(怖いね)この状態で観測を行うと,重ね合わせ状態といって,0と1が50%の確率で出てくる状態になる.  
* Sゲート
Z軸を反時計回りに90°回転させるゲート.
H→S→S→Hの順番でゲートをかけると,矢印は下側を向く.(面白いね)
 
* S†ゲート
Sゲートの反対.
Z軸を時計回りに90°回転させる.  
* Tゲート
Z軸を反時計回りに45°回転させるゲート.
H→T→Hの順番でゲートをかけると,矢印は斜め方向を向く.
この状態で観測を行うと,0が85%くらい,1が15%くらいの確率で出てくる.面白いね.  
* T†ゲート Tゲートの反対.
Z軸を時計回りに45°回転させる.
 
実際の操作は90°や45°だけじゃなくて,いろいろな角度で3つの軸をそれぞれ回転させることができる.
PythonでCirq(シルク)とかblueqat(ブルーキャット?)とかのライブラリを使って量子コンピュータの操作を体験できる.いい時代になったものだ・・・(シン)