HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

【量子コンピュータ】量子計算の初歩の初歩

 

 

follow us in feedly

https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png

はじめに

量子コンピュータにはずっと興味を抱いていました。 ただ、量子力学に挑んでこれは難しい!と挫折した経験が私にはあります。 きっと自分のレベルでは量子コンピュータのことなど到底学ぶことはできないだろうと感じ、外からずっとその発展を眺めることをしてきました。

$$ \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}} $$ 

量子アニーリング方式

量子コンピュータにはいろいろな種類があります。 既に実機として存在しているD-WAVEの量子コンピュータは「量子アニーリング方式」と呼ばれており、私達が普段使っているコンピュータとはちょっと違うようです。 どう違うのかというと、ある特定の計算しか行えないのです。ある特定の計算しかできないとしても、それが有用ならば価値のあるものです。

 

量子アニーリング方式の量子コンピュータが計算できるのは、ある物理モデルの振る舞いに関してです。すなわちある物理モデルをシミュレーションし、その解を得られるということです。 それが何の役に立ちそうかというと、現実の問題がある物理モデルと同じなのであれば、あとは量子アニーリングマシンでそのシミュレーションを実行すれば、現実の問題の解が分かるということになります。 これは機械学習などで表れる最適化問題が、そのとある物理モデルにマッピングできたときに、従来のコンピュータより効率良く解が求められる可能性があるということです。

 

この辺の話は割と進んでしまっているように私には見えており、今更立ち入っても追いつけない気がするので、ひたすら傍観してきたという状態になります。 例えば既に量子アニーリングの実機は存在しているので、それを動かすためのプログラミングの話題などが挙がっています。

www.slideshare.net

 

量子ゲート方式

今回記事が想定している量子コンピュータは量子ゲート方式と呼ばれるもので、次世代の汎用コンピュータの候補になりうるものです。 こちらは現在、GoogleやIntelなどがかなり本腰で取り組んでいるものになります。

 

jp.techcrunch.com

www.itmedia.co.jp

 

とりあえず、こちらはまだまだ研究段階であろうと思われますし、いつか、本当に現在のコンピュータに取って代わるかもしれません。 ということで、早い段階からその基礎を学んでおけば、将来かなりのエキスパートとして君臨できるかもしれないという妄想に浸りながら、勉強を始めようと思いました。(あと単純にロマンあるよね)

量子論とは一体?

まず量子論がどのような考え方のものなのかを理解しなければ、量子コンピュータなるものを考えるメリットも想像がつかないでしょう。 ということで(自分自身も本当に理解しているとは言えないが)量子論について簡単に述べておきたいと思います。

 

量子論の奇妙な考え方

 

まず壁に穴が2つあって、その2つの穴を$A$,$B$と名づけておくことにしましょう。 この壁にボールを投げつけて、ボールは穴を抜けて壁の向こう側に通り抜けたとします。

 

もしも、ボールが$A$の穴を抜けたならば、そのボールの状態を$\ket A$と書くことにして、$B$を抜けたなら$\ket B$と書くことにします(この表記は、なんかそう書くのが通例ですというくらいに思ってください)。 さて、ボールが穴を抜けて壁の向こう側に通り抜けたとしたら、今のボールの状態はどうなっているでしょうか。

 

常識的に考えると、「どちらかの穴を抜けたのだが、$\ket A$か$\ket B$のどっちだろう?」と思うはずです。

 

しかし、量子論から言わせてみれば、その常識的な考え方は間違っています。 「どちらかの穴を抜けた、どっちだろう?」が間違っており、量子論では「$c_A$くらいの重みで$\ket A$であり、$c_B$くらいの重みで$\ket B$である」と述べます。 つまり、 $ \ket A $ or $ \ket B $ ではなくて、

$$ c_A\ket A + c_B \ket B $$

なのです。そして、ボールが穴を通り抜けるのを壁の向こう側で(何らかの方法で)観測すると、$\ket A$か$\ket B$のいずれかが確定します。

 

『ちょっと待って!おいおいふざけるな。どっちかを確かに通ったはずだが、それが実際どっちなのか分からないから係数で重み付けしておいて、 結論を先延ばしにしているだけじゃないか!! ほらみろ、観測したらどっちかを確かに通っているではないか!何が「常識的な考え方は間違っています」だこの野郎!!』

 

と感じるかもしれません。私は量子力学を知った時そう思いました。

 

しかし、量子論のこの表記の仕方は、単に「どちらの状態であるのか分からないから、係数で重み付けしている」のではなく、 「実際に両方の状態がとある係数で重み付けされている」というのです。

 

実際に観測した時には、我々にはボールが$\bra A$か$\bra B$のどっちかに確定した状態で見えますが、 観測する前までは本当に$c_A\ket A + c_B \ket B$という状態であるというのです。 今「ボール」を使ってお話を進めていますが、これを「電子」でやると本当に状態が重ね合わさっている(これを波動性と呼ぶ)ということを 認めざる得ない実験結果が出てくるようです。これは二重スリット実験として本当によく知られているものです。

 

これは常識的には私達の直感に反するものではありますが、むしろ私達の常識や直感などは経験してきた事柄で構成されているにすぎなく、 今まで経験してきたことのない量子論の世界では本当にこうだと信じられています(そして信じるに値する実験結果がある多数ある)。

 

常識的な考え方で記述してみる

一旦、$c_A\ket A + c_B \ket B$なる状態が本当にあるのかどうかについてはさておいて、 このように考えられる2つの状態を係数で重み付けして重ね合わせておくという表記を、便利な道具として考えてみましょう。

 

実際、 $$c_A\ket A + c_B \ket B$$ という表記は、ボールが$\ket A$か$\ket B$の状態にあるがどちらなのか分かりませんという状況を表すのに便利だと思いませんか?

 

例えば状態$\ket A$である確率を$p_A$として、状態$\ket B$である確率を$p_B$として、$A,B$いずれかの穴を通っているので $$ \begin{align} p_A + p_B &= 1 \\ p_A, p_B &\geq 0 \end{align} $$ としておいて、壁の向こう側のボールの状態$\ket \psi$を $$ \ket \psi = p_A\ket A + p_B \ket B $$ って書いてると思えば、なるほど、状態の重ねあわせをしたときの係数は、確率みたいなものだなと考えておけば良いことになります。

 

このような表記は以下のようにベクトルだと思っても差し支えないでしょう。

$$ \ket \psi = p_A \ket A + p_B \ket B = (p_A, p_B)^T $$

いつでも第一成分は$\ket A$のことを表しており、第二成分は$\ket B$のことを表しているとお約束しておくのです。 これはすなわち、

$$ \begin{align} \ket A = (1,0)^T \\ \ket B = (0,1)^T \end{align} $$

と置いていることになります。$\ket A$という状態と$\ket B$という状態がそれぞれ直交基底になっているところが味噌です。 決して交わることのない状態を直交基底として置いておくことで、これらがどれくらい混ぜ合わさっているのかを係数で重み付けしておくことが 単なるベクトルの成分表記で行えるようになりました。

 

しかも、このように置いたことの利点はこれだけではありません。もしも$\ket \psi$が$\ket A$である確率がどれくらいかを知りたければ、単に内積を取るだけでよくなります。

$$ \ket A \cdot \ket \psi = (1,0)\cdot (p_A, p_B)^T = p_A $$

と取り出せるのです。

 

今、具体的に計算をしてみて内積を取ることが確率を計算する手段であることを確認しましたが、実際にはこのようなベクトルの表記を簡略化するために$\ket A$などの表記を使うようにします。 つまり、実際の物事の発展は今の話とは逆であるということに注意しておいてください。$\ket A$が単なる縦ベクトルなんだと思ったら、急に馴染みが出てきたのではないでしょうか。

 

一方で実は$\bra A$なるものもあります。これは横ベクトル($\ket A$の転置)です。このような表記を許しておけば、先ほどの内積は

$$ \bra A \ket \psi = (1,0)\cdot (p_A, p_B)^T = p_A $$

のように書けます。$\bra A \ket \psi$の縦棒が2本入っているのは目がチカチカしてしまうので、普通は$\braket {A}{\psi}$と略記します。

 

これで私達は、確率的な根源事象が$\ket A$と$\ket B$のように複数あるときに、それを

$$ \ket \psi = p_A \ket A + p_B \ket B $$

と表記しておき、各々の確率を取り出したい時には、

$$ \braket {A}{\psi} = p_A $$

などと計算する便利な表記を獲得したのです。

 

 

さて、だからどうしたというのでしょう? 私達は今、馴染みのあるベクトルの表記を捨てて謎の表記で書くことを約束しただけです。 何もできることに変わりはありません。実はこの表記は特に必然性などありません。慣習的にこれが使われているというだけです。 きっと機械学習も普通の確率論も、線形代数で記述できることはこの表記でも書き表すことができるでしょう(記号が違うだけだから)。

 

なので、あえてこんなふうに不慣れな表記に書き換える意義などほとんどありません。

 

後に述べるように、量子論ではこのような表記(ブラケット表記)を使っていきますが、今考えたように常識的な確率が係数として掛かっているという考え方はしません。 全く異なった概念が導入されます。なので、もしも巷でブラケット表記を見かけたら、それは量子論の話をしていると考えていいでしょう。

 

どのような話も、ベクトルだろうがブラケットだろうが、記述できてしまうため、だからこそブラケットが出てきたら極めて非常識的な振る舞いをする量子論の話であると認知することができます。 (もしも、こぞっていろんな分野でブラケット表記を使うようになったら、ひと目で量子論の話であると分からないので価値がなくなるでしょう…と私は思っています)

 

常識を量子論へ変える

量子論では「$c_A$くらいの重みで$\ket A$であり、$c_B$くらいの重みで$\ket B$である」と述べます。 と言いましたが、この重みの部分を常識的な話のように「確率」という言葉で書き換えられるならば、最初からそうしています。すなわち、量子論は

 

状態$\ket A$である確率を$p_A$として、状態$\ket B$である確率を$p_B$として、$A,B$いずれかの穴を通っているので $$ \begin{align} p_A + p_B &= 1 \\ p_A, p_B &\geq 0 \end{align} $$ としておいて、壁の向こう側のボールの状態$\ket \psi$を $$ \ket \psi = p_A\ket A + p_B \ket B $$ と表し、各々の確率を取り出したい時には、

$$ \braket {A}{\psi} = p_A $$

などと計算する。

 

というような形式にはなっていません。

 

結論を申すと、 $$ \begin{align} |c_A|^2 + |c_B|^2 &= 1 \\ \end{align} $$ としておいて、壁の向こう側のボールの状態$\ket \psi$を $$ \ket \psi = c_A\ket A + c_B \ket B $$ としておいて、状態$\ket A$の確率$p_A$を取り出したい時には $$ |\braket {A}{\psi}|^2 = c_A^2 = p_A $$ となっています。 すなわち、

 

「$c_A$くらいの重みで$\ket A$であり、$c_B$くらいの重みで$\ket B$である」ような状態のボールが、 $\ket A$の状態として観測される確率は$|c_A|^2$であり、$\ket B$の確率は$|c_B|^2$となっているのです。

 

係数が直接的に確率を表しているのではなく、係数の二乗が確率を表しているのです。しかも係数$\c_A,c_B$は複素数でも構いません。二乗して正の実数になって確率を表現してくれれば良いのです。 そして係数を取り出す方法は内積を取ることでしたから、内積の二乗によって確率が取り出せるということになります。

 

形式的にはあまり難しいところは無いと感じたのではないでしょうか。常識的な確率の話しをちょっと改造したら、量子論の話に変えられます。 しかしこれはあくまで形式的な話です。

 

では二乗にしたら確率になるような係数$c_A,c_B$とは一体何のことなのでしょうか?実はこれが物理的に何なのかは分かっていません。 人間が意味のあるものとして認識できるのは、$c_A^2$などの確率の方だけなのです。

 

また、

$$ \ket \psi = c_A\ket A + c_B \ket B $$

などという、私達が認知できるような状態が、複素数を係数として重ね合わさっているなんて信じられません。意味が分かりません(ただ、複素数が本質的かは謎ですし、量子コンピュータに関して言えば複素数を2次元実数ベクトルで表せるようです)。 しかも、これらは単に「どちらの状態かわからないから」このように表記しているのではなく、「観測するまでは実際にこのような状態にある」というのですからますます意味不明です。

 

ココらへんの問題が、多くの物理の量子論の本では先に出てきたりするので、 シュレディンガーの猫だのの話で頭がいっぱいになってしまう人もたくさんいるのではないでしょうか。

 

今回はなにはともわれ、量子論とはこのような形式で表され、そしてこれは実際に世の中で実現している現象を(今のところ)ピッタリと表すのに成功していると認めましょう。

 

最後に

本当は量子計算の話に入ろうと思いましたが、一旦疲れたのでココで切ります…。

 

量子計算の話はenakai00さんの以下のブログで絶賛公開中なので、こっちを見たほうが早いです…(笑)

enakai00.hatenablog.com

私自身は量子計算はここ数日で始めた話なので、もっと基本的なことをカバーしていくことになると思います(なると思うっていっても続くかは謎)。