めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

量子計算(量子回路)の考え方を理解するために最低限必要な量子力学の知識を(それなりに納得感のある形で)うまいこと導入する方法について考えてみた(その4)

何の話かというと

enakai00.hatenablog.com

の続編です。これまで、1つのスピンの状態を「表現」する方法を説明してきました。これは、数学的には、

 {\mid 0\rangle} = \begin{pmatrix} 1 \\ 0 \end{pmatrix},\ {\mid 1\rangle} = \begin{pmatrix} 0 \\ 1 \end{pmatrix} --- (1)

を基底ベクトルとする2次元の複素ベクトルですが、前回説明したように、ブロッホ球にマッピングすることで、古典的な3次元空間上のスピンと対応付けることができました。

今回は、1つのスピンを横にならべた状態、すなわち、「2量子ビット」を持つ量子計算機の「状態」を表現する方法を説明します。直感的には、2つのブロッホ球をならべればよい気がしますが、実は、そういうわけには行きません。あらかじめ注意をしておくと、ブロッホ球を用いた直感的な表現は、あくまで「1量子ビット」が孤立して存在する場合の話であり、複数の量子ビットの状態を単純にブロッホ球を並べて表すことはできません。そこには、量子計算機の本質とも言える「エンタングルメント」に関わる理由が存在するのです・・・・。

2量子ビットの状態空間

1つのスピン、すなわち、1量子ビットの状態は、2次元の複素ベクトル空間で表現されました。それでは、2量子ビットの状態は、何次元の複素ベクトル空間でしょうか?

「2次元と2次元だから、合わせて4次元!」

えーと。。。。

すいません。微妙にツッコミづらい回答例をあげてしまいました。。。。

4次元というのは正解ですが、2+2=4 と考えているとすれば、これは間違いです。正確には、2^2=4 で4次元が正解になります。

 ( ゚д゚) なにいってんだこいつ

いや、これからちゃんと説明しますがな。

まず、1量子ビットの場合、z軸方向のスピンを観測すると、観測値は、z_0=\pm 1 の2種類で、それぞれの固有状態(観測すると、確率 1 で z_0=\pm 1 が得られる状態)として、「状態空間」の2つの基底ベクトル (1) が得られました。一方、2量子ビットに対して、それぞれのz軸方向のスピンを「同時に」観測すると、観測値はどうなるでしょうか。(この「同時に観測する」というのが重要なので注意してください。どちらか一方だけ観測した場合については、あとからゆっくり考えることにします。)

この場合、それぞれの量子ビットのz軸方向のスピンを z_0,\,z_1 とすると、どちらも \pm 1 の2種類の値を取るので、組み合わせを考えると、

  (z_0,\,z_1) = (+1,\,+1),\ (+1,\,-1),\ (-1,\,+1),\ (-1,\,-1)

の4種類が考えられます。この「4種類」は、2^2=4 で得られるものですよね。そして、結論から言うと、この4種類の観測結果に対応する4つの固有状態があり、それぞれを次の記号で表します。

 {\mid 00\rangle}:確率 1 で (z_0,\,z_1) = (+1,\,+1) が得られる状態
 {\mid 01\rangle}:確率 1 で (z_0,\,z_1) = (+1,\,-1) が得られる状態
 {\mid 10\rangle}:確率 1 で (z_0,\,z_1) = (-1,\,+1) が得られる状態
 {\mid 11\rangle}:確率 1 で (z_0,\,z_1) = (-1,\,-1) が得られる状態

2量子ビットの状態は、これらを基底ベクトルとする4次元の複素ベクトル空間になっており、一般の状態は、

 {\mid\psi\rangle} = c_{00} {\mid 00\rangle} + c_{10} {\mid 01\rangle} + c_{01} {\mid 10\rangle} +c_{11} {\mid 11\rangle} --- (2)

と表現されます。つまり、上記の4種類の状態についての重ね合わせとなるのです。この状態について、z軸方向のスピンを観測すると、

(z_0,\,z_1) = (+1,\,+1) が得られる確率は、|c_{00}|^2
(z_0,\,z_1) = (+1,\,-1) が得られる確率は、|c_{01}|^2
(z_0,\,z_1) = (-1,\,+1) が得られる確率は、|c_{10}|^2
(z_0,\,z_1) = (-1,\,-1) が得られる確率は、|c_{11}|^2

となります。全確率は1なので、1量子ビットの場合と同様に、次の束縛条件が付きます。

 |c_{00}|^2 +|c_{01}|^2+|c_{10}|^2+|c_{11}|^2=1 --- (3)

量子ビット操作

さきほど、2量子ビットの状態空間は、 {\mid 00\rangle},\,{\mid 01\rangle},\,{\mid 10\rangle},\,{\mid 11\rangle} が基底ベクトルになると言いましたが、これは、通常の数ベクトルで表すと、

  {\mid 00\rangle} = \begin{pmatrix}1 \\  0 \\ 0 \\ 0\end{pmatrix},\ {\mid 01\rangle} = \begin{pmatrix}0 \\  1 \\ 0 \\ 0\end{pmatrix},\ {\mid 10\rangle} = \begin{pmatrix}0 \\  0 \\ 1 \\ 0\end{pmatrix},\ {\mid 11\rangle} = \begin{pmatrix}0 \\  0 \\ 0 \\ 1\end{pmatrix}

となります。したがって、(2) の一般の状態は、次になります。

 {\mid\psi\rangle} =  \begin{pmatrix}c_{00} \\  c_{01} \\ c_{10} \\ c_{11}\end{pmatrix} --- (4)

(3) の束縛条件を考えると、これは、4次元の複素ベクトル空間(実数に換算すると8次元!)における単位球面上の1点に対応します。1量子ビットの場合は、グローバルフェーズの任意性を用いて、3次元空間の球面(ブロッホ球)にうまくマッピングすることができましたが、残念ながら、この2量子ビットの状態空間を単純に可視化することはできません。

特に、2量子ビットの状態 (4) は、それぞれの量子ビットの状態(2次元ベクトル)を縦に並べたものではない点に注意してください。(4) の各成分は、2個の量子ビットが全体としてどういう状態にあるのか(z軸方向のスピンの値の組み合わせがどうなっているのか)という、4種類の「多体系としての全体状態」に対応しているのです。やや抽象的な言い方をすると、2個の量子ビットは、個別に量子化されるのではなく、あくまで、「2個の量子ビットを結合した1つの状態」として量子化されているのです。(今なんか奥深いこと言った気がする。)

次に、これらのベクトルに対する線形演算子、すなわち、これらを1次変換する行列を考えます。一般には、次のような 4\times 4 行列になります。今は複素ベクトル空間を考えているので、各成分 U_{ij} は複素数になります。

  U = \begin{pmatrix}
U_{00} & U_{01} & U_{02} & U_{03} \\
U_{10} & U_{11} & U_{12} & U_{13} \\
U_{20} & U_{21} & U_{22} & U_{23} \\
U_{30} & U_{31} & U_{32} & U_{33}
\end{pmatrix}

一般に、このような行列 U によって、2量子ビットを持つ量子計算機に対する演算が表されます。

 ( ゚д゚) なにいってんだこいつ

ああああああああ。すいません。そもそも1量子ビットに対する演算を説明していませんでした。

(脱線)1量子ビットの演算操作

前回の記事で、1量子ビットからなる量子計算機は、ブロッホ球上の点をくるくる回転させて計算するといいました。これは、より正確に言うと、

 {\mid \psi\rangle} = c_0{\mid 0\rangle} + c_1{\mid 1\rangle} = \begin{pmatrix} c_0 \\ c_1\end{pmatrix} --- (5)

という状態ベクトルに対して、線形演算、すなわち、2\times 2 行列を掛けることで行われます。一例として、以前に登場した、パウリ行列の1つ

 \sigma_x = \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}

を考えます。この時、次の関係が成り立つことが、直接の計算ですぐにわかります。

 \sigma_x {\mid 0\rangle} = {\mid 1\rangle}
 \sigma_x {\mid 1\rangle} = {\mid 0\rangle}

つまり、これは、スピンの上下を反転する「フリップ演算子」になっています。一般の (5) の状態について演算した場合は、次のようになります。

 \sigma_x (c_0{\mid 0\rangle} + c_1{\mid 1\rangle}) = c_0{\mid 1\rangle} + c_1{\mid 0\rangle}

一般に、量子状態を変化させる操作は、このような行列演算で表されることが知られています。この時、変化後の状態についても |c_0|^2 + |c_1|^2 = 1 が成り立つ必要があることから、行列 U は、次の条件を満たす「ユニタリ行列」に限定されます。

 U^{\dagger} = U^{-1}

U^\dagger というのは、行列 U を転置して、さらに各成分の複素共役をとったものです。(証明のあらましは、こんな感じです。 1 = |U{\mid \psi\rangle}|^2 = {\langle\psi\mid}U^\dagger U{\mid\psi\rangle} が任意の {\mid\psi\rangle} について成り立つので、U^\dagger U = 1。)

それでは、次のパウリ行列はどのような変換に対応するでしょうか?

 \sigma_z = \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}

この演算により、基底ベクトル {\mid 0\rangle},\,{\mid 1\rangle} は次のように変化します。

 \sigma_z {\mid 0\rangle} = {\mid 0\rangle}
 \sigma_z {\mid 1\rangle} = -{\mid 1\rangle}

いずれも(グローバルフェーズを除いて)物理状態の変化はありません。しかしながら、次のような「重ね合わせ状態」を考えると、すこし様子が違います。

 \displaystyle\sigma_z \frac{1}{\sqrt{2}}\left({\mid 0\rangle} + {\mid 1\rangle}\right) = \frac{1}{\sqrt{2}}\left({\mid 0\rangle} - {\mid 1\rangle}\right)

前回に少し強調した、「相対位相」の変化が発生していることがわかります。実は、これは、以前に説明した、

 \displaystyle {\mid 0_x\rangle} = \frac{1}{\sqrt{2}}\left(
{\mid 0\rangle} + {\mid 1\rangle}
\right)

 \displaystyle {\mid 1_x\rangle} = \frac{1}{\sqrt{2}}\left(
{\mid 0\rangle} - {\mid 1\rangle}
\right)

という関係を思い出すと、x軸方向のスピンの固有状態を入れ替える操作に相当することに気がつきます。同様に、y軸方向のスピンの固有状態も入れ替わりますので、これはブロッホ球で言うと、z軸のまわりに180度回転する操作にほかなりません。

結果から言うとそれだけのことなのですが、なんだかうまくできていませんか?

つまり、x, y 方向の固有状態は、{\mid 0\rangle},\,{\mid 1\rangle} の重ね合わせであり、それぞれに相対位相の違いがあったわけです。したがって、{\mid 1\rangle} の符号を変えて相対位相を変化させることにより、これらの状態が入れ替わるというわけです。さらにまた、グローバルフェーズは状態に影響しないという性質から、うまいぐあいに、z 方向の固有状態には(物理的な)影響が発生しないというわけです。

ちなみに、このちょっとした応用例として、\sigma_z{\mid 0\rangle}{\mid 1\rangle} の重ね合わせ状態を検出するために利用できることがわかります。\sigma_z を演算した結果、物理状態が変化した場合、もとの状態は、{\mid 0\rangle}{\mid 1\rangle} の重ね合わせ状態であった(z 方向の固有状態ではなかった)ということがわかるのです。

(あらためて)量子ビット操作について

・・・という1量子ビットの操作を自然に拡張したものが、前述の 4\times 4 行列による2量子ビットの操作となります。ひつこく強調しますが、それぞれの量子ビットを個別に操作するのではなくて、4次元複素ベクトルとして表される「2個の量子ビットを結合した1つの状態」を変換すると考えてください。これにより、量子ビット間の「相関」を考えた操作が可能となるのです。

たとえば、次のユニタリ行列を考えます。

  U = \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0& 0 & 1 & 0 
\end{pmatrix}

基底ベクトル  {\mid 00\rangle},\,{\mid 01\rangle},\,{\mid 10\rangle},\,{\mid 11\rangle} に演算すると、それぞれ、次の結果が得られます。

 U{\mid 00\rangle}={\mid 00\rangle}
 U{\mid 01\rangle}={\mid 01\rangle}
 U{\mid 10\rangle}={\mid 11\rangle}
 U{\mid 11\rangle}={\mid 10\rangle}

この結果を見ると、「1個目の量子ビットが 1 であれば、2個目の量子ビットを反転する」という条件付き操作が実現されていることがわかります。これは、一般に「Controlled-NOT (CNOT)」と呼ばれる演算になります。

このような複数の量子ビットにまたがる演算、ようするに、量子ビットの「状態変化」をほどこすことで量子計算機の計算は進みます。

なお、現実の電子スピンに対して、このような任意の演算操作を施すことができるのか、という疑問もあるやもしれません。ここでは理論的な説明のために「電子スピン」を例として説明していますが、現実の量子計算機では、電子スピン以外のさまざまな物質が用いられます。そして、ここが量子力学(というか、量子論の根本原理)の恐ろしいところなのですが、どのような物質であれ、ある物理量に対する2種類の固有状態(電子スピンで言えば、z方向のスピン z_0=\pm 1 に対応する2つの状態)があれば、そのふるまいは、2次元の複素ベクトル空間によって記述されて、ここまで説明した内容をすべてそのまま当てはめることができるのです。

そして、その量子状態を変化させる方法、つまり、行列演算の物理的な実装方法は、利用する物質によって異なります。最近流行りのジョセフソン素子を用いた超電導量子デバイスであれば、超電導状態にある微小な電気回路における電気振動が「量子状態」に対応しており、2種類の振動パターンが基底ベクトル {\mid 0\rangle},\,{\mid 1\rangle} を構成します。そして、その回路にマイクロ波を照射することで、状態を操作することができます。この場合は、マイクロ波のパターンが変換行列の内容と対応することになり、所望の変換に相当するマイクロ波のパターンを見つけることが、量子計算機の物理設計の1つのステップとなります。

で・・・、そろそろ気づいたかもしれませんが、量子計算機における「計算処理」というのは、結局のところ、(マイクロ波を照射するなどの)外部からの操作によって量子ビットの状態をどんどん変換していくという作業にほかなりません。量子ビットの並びを「メモリー」と考えるならば、メモリー上の値を直接に書き換えていくことで計算が進みます。古典計算機のように、「メモリーから値を読み出してCPU上で計算して、またメモリーに書き戻す」という処理をするわけではありません。

また、古典計算機の場合、「プログラム」の内容もまたメモリー上に保存されますが、量子計算機におけるプログラムというのは、どのような順番で量子ビットを変換していくかという変換手順であり、これは、外部の古典計算機で管理する必要があります。つまり、外部の古典計算機は、指定された手順にしたがって、「量子ビットの状態を変換する」という作業を行います。先の例であれば、マイクロ波の照射パターンを決めて、指定の変換に相当するマイクロ波を順番に照射していく、という処理を行います。

次回予告

次回は、2量子ビットに対する演算をもうちょっと見通しよく記述する「ブラケット記法」を紹介します。