猫、上手く描けました。
※この記事は、量子コンピュータがブロックチェーンの脅威となる可能性があると言われますが、量子コンピュータ側からのアプローチで、どのような原理で動いているのか、それを0から理解しようという記事です。
そして、ブロックチェーンに用いられる暗号技術がどのようなアルゴリズムで脅かされるのか触れていくという内容です。
前回記事を初めて載せてみて
自分の周りの何人かの学生にフィードバックいただいたところ、全員よくわからないと笑
ごめんなさい。
ですが中学生の知識で理解できるように書いているはずなのでいつでも質問してください。
また、その2を読むとその1がより理解し易くなると思うので、また読み返してみてください。
かなり専門的です。難しいと言っているわけではなく、かなりニッチな内容です。(難しいかも。)
高校教師はもちろん、アルゴリズムまで行ったりすると基本的に大学の物理学教授でも専門としていなければあまり知らないようなことです。
そして、分かりやすさと正確性は時に両立できません。
量子コンピュータもそう、ブロックチェーンもそう。
定義は難しい言葉、硬い言葉で書かれがちなのもそうです。
逆に簡単な表現で書かれていれば、それは正確性が欠如していると思った方がいいかもしれません。
なので定義を含めた正確性よりも分かりやすさを重視しています。(間違ったことを言ってるとは言ってない)
復習から
量子はなんだったでしょうか。
そうです、粒子であり、波でした。
これは実験でも示されている事実でしたね。
そんな特別な存在の量子は二つの性質を持ち合わせていました。
一つは重ね合わせです。
複数の状態を重ね合わせた表現が可能になります。
二つ目は量子もつれです。
二つ以上の量子があるとき、一つの量子の観測時に他の量子に影響を与えられるような状態を作ることができます。
これらを踏まえて、先は進みたいと思います。
結論から言うと、古典コンピュータでいう1ビットが量子コンピュータでは1量子ビットになります。
古典コンピュータでは、計算は全て二進法で行っています。(全ての数値(写真のデータ処理など全て)を0と1に変換して計算)
前回、データ等を0と1のみを用いて説明していたのもこのためです。
1ビットはつまり0と1のどちらかを表せると。これと1量子ビットはどう異なるでしょうか?
これを踏まえて下図を見てみましょう。
ここから先、(a)も(b)も上が0で下が1を意味してると考えてください。
(a)は上か下、つまり0か1か二つに一つです。
対して(b)は、0(上)でも1(下)でもなく、斜めに伸びているところを指していますよね?(図では|Ψ>で示されている)
前回、もたれで出てきた角度(位相)を変える、マイナスを変えるとか、いきなり難しくなったかもしれません。
角度を変えるとはつまり、矢印の向きを変えるということです。(高校生向けに説明するならベクトル)
この、角度を変えるという操作、これは古典コンピュータにはなく、量子コンピュータの特徴であります。
例えば矢印が次のような方向を示したらどのようなことが言えるでしょう?
スクロールせず、少し考えてみてください。
どうでもいいですがこの球の名前はブロッホ球と言います。(これを使った説明が最も分かりやすいと思ってるので、以下でも多用します。)
正解は、重ね合わせです。これは、球自体は1量子ビットを表していますが、矢印は|0>,|1>の真ん中を取っていますよね?
つまり|0>と|1>の重ね合わせ状態です。これをなんと1つの量子ビットで表しているということです。
しかしながら、この量子ビット、観測(結果を測定)すると|0>と|1>のどちらか一つの状態になります。
|0>と|1>のちょうど真ん中を向いているので50%の確率で|0>か|1>かが結果として測定されます。式で書くと、、
|Ψ> = 1/√2|0> + 1/√2|1>
となります。
1回測定すると、|0>か|1>のどちらか1つが結果として出てきます。(真ん中だからといって0.5みたいに0と1以外の数になることはないので注意しましょう。)
これを何回も繰り返して(今回は1024回)統計的に結果を出していきます。すると、、
0と1が大体50%ずつ観測されていることがわかります。500回ずつくらい観測されたんですね。予想通りです。
一応実機でも実行。
pprint(Circuit().h[0].m[0].run_with_ibmq(backend)) Counter({'1': 530, '0': 494})
もう一度確認しておきますが、上で行ったのは、1つの重ね合わせ状態になっている量子ビットを繰り返し観測した結果です。
余力のある人は、50%ずつではなく、|0>が75%、|1>が25%で観測されるような重ね合わせ状態はどのようになっているか考えてみてください。
ブロッホ球で表すと矢印はどのようになるでしょうか。
ふむふむ。普通の古典のビットだと上か下にしか矢印は向けませんが、量子ビットだと、上か下以外にも向くことができて、それは重ね合わせの状態なんですね〜。
なんとなく一つの量子ビットで重ね合わせを示すことができる原理はわかったような?
そしたら下の画像はどうでしょう。
1分前に学んだことを思い出してください。
上が0で下が1ということを考慮すると、、
この二つの量子ビット、矢印は真ん中を指しているので、実はどちらも観測したら0か1が50%の確率で出てきます。
んんん?そしたら何が異なるのでしょう。
式を見ると答えが分かります。
それぞれの右辺の➕と➖が異なっていることがわかるでしょうか?(それぞれの左辺、|+>、|一>は違いをわかりやすくしてるだけで特に気にしなくて大丈夫です。)
これが、角度(位相)が異なっているということです。
繰り返しになりますが、真ん中を向いた矢印は50%と言いましたが、真ん中ならどこを取っても(地球でいう赤道上なら)50%です。ならば何が異なるのか、それは角度(位相)が異なります。
現状、確率は変わらないのに何の意味があるのかわからないと思います。ですが、ブロックチェーンに用いられる暗号を破る可能性があると言われるアルゴリズムではこの角度(位相)の変化はとても重要な役割を果たします。
量子コンピュータで動かすアルゴリズム、いわゆる量子アルゴリズムはどのように作られているのか見てみます。
上図のような五線譜のようなものを量子回路と言います。そこにある障害物みたいなもの(いい例えあったら教えてください)を量子ゲートと言います。
プログラムとしては左から右に流れていき、スタート地点にある量子ビット(|0>)を、量子ゲートで操作し、任意のアルゴリズムを構成していきます。
分かりずらければ量子がゲートをくぐって操作されるくらいのイメージで良いとおもいます。
さて、上の回路を実際に深掘りしていきましょう。
一番左から注目していきます。
縦にq[0],q[1]...と並んでいますが、これはそれぞれが一つの量子ビットです。
つまり5つ量子ビットが並んでいることがわかります。
次にこの縦の列から一つ右を見てもらって、全て|0>となっているのがわかるでしょうか。
これはどういうことかというと、デフォルトで全て|0>と決まっています。つまり全ての量子ビットが、スタート地点では
この状態です。
この状態(|0>)の量子ビットから、障害物のようなゲート(Hとか+みたいなやつ)を通って量子の矢印の向きが変化しています。
代表的な二つを紹介します。例の回路の黒いゲートは測定に必要なゲートです。
①重ね合わせを作るアダマールゲート
|0>もしくは|1>のとき(重ね合わせ状態でない場合)の量子ビットを重ね合わせ状態にします。
今回の場合だと|0>ですので、以下のようになります。
|0> → H → 1/√2|0> + 1/√2|1>
矢印の向きを変化させるHゲートは図的に説明するとこのようにx軸とz軸に対して斜めの点線を軸にして180°回転させます。
そうです、矢印はx軸の方向を向き、耳が痛くなるほど聞いた重ね合わせ状態そのものを示しています。
ちなみにもう一度アダマールゲートを通すと、
このように点線で180°回転して元の|0>に戻ります。
Hゲートは重ね合わせを作るゲートと覚えておきましょう。
量子といえば、重ね合わせときたら、次はなんでしょうか?
そうです、量子もつれです。
②もつれを作る制御NOTゲート
名前から重いですね、、ですが前回の記事を理解していれば必ず理解できます。
量子もつれはどのようなものだったでしょうか?
前回の記事をチラ見しましょう。
量子もつれは二つ以上の量子の間に引き起こる不思議な現象でした。
最初の量子回路に戻ってみてください。いかにも!ってやつがありませんか?
二つの量子にまたがっているゲートがありますよね。
これは、
・上の量子ビットが|0>であれば下の量子には何もしない。
・上の量子ビットが|1>であれば下の量子ビットをx軸で180°回転させる。
というものです。カンニングした前回の記事の前者の方ではこいつのことを話していました。(もちろん後者もあります。次回の記事で、、)
上の量子ビットが|0>か|1>かで観測するのを制御、下の量子ビットを反転させることがNOTに相当します。
ちなみに紫のゲートはなんでしょうか。制御NOTゲートにかなり似ていますが、こちらは上二つの量子ビットが|1>なら下の量子ビットを反転させるというものです。
こんな結果が出てきました。この回路、実は意味があります。
その前に改めて量子回路と結果の見方を確認します。
量子ビットと結果に出ている「01...」の対応順を①、②...と書いておきました。
(⑤はゲートを通っていないので、無視してください。)
それぞれの量子は最後、計測されると、0か1かに確定しています。0か1かに確定したものが5量子bit並んでいるということです。ですが例えば①(量子回路でいうと一番上、結果で言うと一番右)の量子ビットに注目してみましょう。
0のときもあれば1のときもありますよね?
1024回観測を行いましたが、重ね合わせ状態のため、1回目では0でも2回目では1で観測されるかもしれないということです。
この回路一体何を意味しているのか。
結論から言うと足し算してる回路です。
⑤の量子ビット、つまり結果の一番左の量子ビットは無視して考えてください。
①と②が入力、③と④が計算結果と考えてください。
一番左の棒グラフからみてみます。00000
①と②は0ですので0+0=0で③、④は言うまでもなく0です。
左から2番目 00101
①が1、②が0ですので1+0=1
左から3番目 00110
①が0、②が1ですので0+1=1
左から4番目 01011
①が1、②が1ですので1+1=2 ですが結果は全て二進法なので1+1=10となります。
二進法
0と1のみで計算する手法
一応本物の量子コンピュータでも実行してみましょう。
こんなレベルです。ノイズだらけ。
いかがでしたでしょうか。
勉強色が強くなってしまいました。つまらなさすぎて見る人いない説。
結果は古典的な感覚でしたが、アルゴリズムのプロセスでは重ね合わせともつれが利用されていることが理解できていれば💮です!理解できなければ質問飛ばしてください。
次回はこれらのゲートを使って暗号技術を脅かす!?と言われるアルゴリズムを実装します。需要があれば量子コンピュータプログラミングの初め方からやってみます。(ないと思いますがw)
3/3 Try Bloch!のリンクを貼り付けました。