量子コンピュータに入門はしたが、ショアのアルゴリズムのような本堂に到達するには程遠いという気がする。
それでも、シンプルな例題で量子コンピュータの動作を記述してみたいということで、このブログを作成することにした。
例題は、
F=(x or y) and (x゛ or y゛) (1)
を計算するものである。(x,y)は、1(真)または0(偽)の値をとる変数である。x゛,y゛は、x,yのnotを表す。
この量子コンピュータは、2キュービットの量子をもつ。量子は、核磁気共鳴法の原子スピン、イオントラップ法の電子スピンなどによって実現できる。スピンが上向き状態のとき0を表し、下向き状態のとき1を表すものとする。これらの量子に適当な磁場がかけてあれば、スピンが0状態のときを基底状態、1状態のときを励起状態とみなすことができる。
まず、2キュービット系の量子に適当なエネルギーをもつレーザ・パルスを当てると、この系を2ビットの0が並ぶ状態に初期化することができる。
次に、(x,y)のデータを入力する。(x,y)がとり得る値は(0,0);(0,1);(1,0);(1,1)の4通りしかないので、各々の状態に4次元空間中の独立した基底ベクトルを割り当てるのが正式な方法である。これらの基底ベクトルを、各々[00>;[01>;[10>;[11>と表現することにする。初期化された2キュービット系は[00>の状態にある。
初期化された2キュービット系に次のユニタリ行列U;
|1 1 1 1 |
1/2|1 1-1-1|
|1-1-1 1|
|1-1 1-1|
を作用させると、これら4つの状態を重ね合わせることができる。式で書くと、
1/2U[00>=1/2([00>+[01>+[10>+[11>) (2)
となる。
行列Uがユニタリであるとは、実数の行列Uにその転置行列を掛けたものが単位行列Iになるようなものをいう。ここでは、Uとその転置行列が同じ行列Uになる。すなわち、行列UはUの逆行列でもある。そこで、上式の右辺に再び行列Uを作用させると、元の初期化された状態[00>に戻る。行列Uによるこの状態遷移のプロセスが可逆的であることを示している。
[00>;[01>;[10>;[11>は、互いに直交する基底ベクトルである。行列Uは、次のユニタリ行列U(1)とU(2);
|1 0 1 0|; |0 1 0 1|
1/2|0 1 0-1| 1/2 |1 0-1 0|
|1 0-1 0| |0-1 0 1|
|0-1 0-1| |1 0 1 0|
の和でもある。
そこで、(2)式は、U(1)とU(2)を使って次のようにも書ける。
1/2U[00>=1/2U(1)[00>+1/2U(2)[00>
=1/2([00>+[10>)+1/2([01>+[11>) (2)”
各状態ベクトルに掛けられた1/2は、その状態を独立した波束とみなすときの振幅に相当するものであり、その振幅を二乗した1/4は、その状態が確定する確率を示す。
右辺の第1項は、ベクトル[00>と[10>を重ね合わせたベクトルであり、その方向は[00>の方向と[10>の方向との中間、45度傾いた方向にあり、その[00>成分は[00>の半分の大きさ、[10>成分は[10>の半分の大きさとなる。右辺の第2項についても、ベクトル[01>と[11>に関して同様である。つまり、4つの状態の重ね合わせは、縮退した2つの状態の重ね合わせとみることもできる。
このことを定常状態の量子がもつ上向き、下向きのスピンの方向に読み替えると、第1キュービットと第2キュービットが共に各々重ね合わせ状態のスピンの方向は水平方向(真横の方向)となる。
各キュービットとなる量子について、基底状態のスピンを励起状態のスピンにもっていくに必要なエネルギーの半分のエネルギーをもつレーザ光を照射すると、各量子は0状態と1状態が重ね合わされた状態になる。
重ね合わせの不確定な状態にあるスピンの大きさが確定状態にあるスピンの大きさより縮小しているか否か不明であるが、理論通り縮小していると考えても構わないであろう。
この結果をみると、2キュービット系の第1ビット、第2ビット各々に2行2列のユニタリ行列を作用させる計算木の結果と同じになる。各キュービットが0状態を[0>、1状態を[1>で表現し、初期化された第1ビットに次のユニタリ行列u;
*|1 1|
|1-1|
を作用させると、これら2つの状態を重ね合わせることができる。*は1/ルート2を示す。式で書くと、
*u[[0>=*[0>+*[1>
となる。
第2ビットについても同じ操作をすると、2つの状態の重ね合わせを追加でき、合計4つの状態の重ね合わせをつくることができる。しかし、この4つの状態を各々独立した基底ベクトルによって区別することはできない。
次に、(1)式のFを計算するための関数を設定する。計算結果は分からないが、この関数は次のユニタリ行列U(f);
|1 0 0 0|
|0 1 0 0|
|0 0 0 1|
|0 0 1 0|
で表現できるものとする。
重ね合わせの状態にある2キュービット系に行列U(f)を作用させると、
1/2U(f)([00>+[10>+[01>+[11>)
=1/2([00>+[11>+[01>+[10>)
これは、[00>,[01>のデータ入力についてはそのまま計算結果になっているが、[10>として入力したデータの出力は[11>となり、[11>として入力したデータの出力は[10>となることを示している。結局、この計算結果は、基底ベクトルの読み替えを行うだけであり、計算前の重ね合わせ状態は変わらないことになる。つまり、2キュービットの量子系に何ら物理的操作を加える必要がないことになる。
この演算は、制御NOTゲートを模していて、第1キュービットは制御スイッチの役割をすると考えられるので、計算結果は第2キュービットによって表示される。
最後に、計算結果を読みだす操作となる。数学的には、重ね合わせ状態にある状態ベクトルと目的の基底ベクトル、例えば[01>、とのスカラー積、
1/2([00>+[11>+[01>+[10>)・1/2[01>=1/4
をとると、どの入力データについてもその答えが真である確率が1/4であることが分かる。
これでは、コイン投げを2回続けて行ったときに、目的の目が出る確率を求めるのと同じであり、何ら有意な結果を求めたことにはならない。
しかし、[11>状態の2キュービット量子系に適当なエネルギーをもつレーザ光を照射したとき光子を放出して[00>状態に遷移するのを検出できれば、これら量子系は[11>状態を保持していたことを確率1で読み取れるだろう。もし量子系が[00>状態を保持していたなら、光子の放出がないので、[00>状態を保持していたことを読みとれるだろう。
量子系が[01>または[10>状態のときには、そのいずれかが分かっても両者を識別するのは困難であろう。このとき1/4の確率が1/2に上がるだけである。
ユニタリ・ゲートと制御NOTゲートがあれば、すべての量子回路を設計できると言われる。
しかし、量子コンピュータでは、現行のコンピュータのようにメモリに記憶された情報を読み出し、量子ワイヤを介してこれら量子論理ゲートによって構成される演算回路に導くという操作が非常に困難である。
そのため、当面は、nキュービットの量子系をメモリとして用いるとともに、その量子系に直接ユニタリ変換や制御NOTゲートに相当する物理的操作を加えなければならない。
また、関数計算のユニタリ変換の結果、目的の入力データに対応する出力データをできるだけ高い確率で読み出せる必要がある。
最近では、最新の量子コンピュータであるD-Waveも発売され、話題となっている。ここで使われている量子アニーリング法などの技術にまで深入りするのも次の課題となる。
一方、脳の神経細胞(ニューロン)の演算動作は、ニューラルネットと呼ばれる数学的モデルによってシミュレートされている。このモデルの各ニューロンは、メモリ機能を備えた論理ゲートとして動作すると考えられている。
そうであれば、ニューロンが一種の量子コンピュータであると考えてもよいのではなかろうか、という考えが思い浮かぶ。万能量子チューリング・マシンと呼ばれるものは、どのような計算機械もシミュレーションできるのであれば、ニューロンを量子コンピュータとしてシミュレートすることも理論上は可能なのである。
参考文献
ジョージ・ジョンソン著「量子コンピュータとは何か」(早川書房)
西野哲郎著「量子コンピュータ入門」(東京電機大学出版局)
竹内薫著「量子コンピュータが本当にすごい」(PHP新書)
それでも、シンプルな例題で量子コンピュータの動作を記述してみたいということで、このブログを作成することにした。
例題は、
F=(x or y) and (x゛ or y゛) (1)
を計算するものである。(x,y)は、1(真)または0(偽)の値をとる変数である。x゛,y゛は、x,yのnotを表す。
この量子コンピュータは、2キュービットの量子をもつ。量子は、核磁気共鳴法の原子スピン、イオントラップ法の電子スピンなどによって実現できる。スピンが上向き状態のとき0を表し、下向き状態のとき1を表すものとする。これらの量子に適当な磁場がかけてあれば、スピンが0状態のときを基底状態、1状態のときを励起状態とみなすことができる。
まず、2キュービット系の量子に適当なエネルギーをもつレーザ・パルスを当てると、この系を2ビットの0が並ぶ状態に初期化することができる。
次に、(x,y)のデータを入力する。(x,y)がとり得る値は(0,0);(0,1);(1,0);(1,1)の4通りしかないので、各々の状態に4次元空間中の独立した基底ベクトルを割り当てるのが正式な方法である。これらの基底ベクトルを、各々[00>;[01>;[10>;[11>と表現することにする。初期化された2キュービット系は[00>の状態にある。
初期化された2キュービット系に次のユニタリ行列U;
|1 1 1 1 |
1/2|1 1-1-1|
|1-1-1 1|
|1-1 1-1|
を作用させると、これら4つの状態を重ね合わせることができる。式で書くと、
1/2U[00>=1/2([00>+[01>+[10>+[11>) (2)
となる。
行列Uがユニタリであるとは、実数の行列Uにその転置行列を掛けたものが単位行列Iになるようなものをいう。ここでは、Uとその転置行列が同じ行列Uになる。すなわち、行列UはUの逆行列でもある。そこで、上式の右辺に再び行列Uを作用させると、元の初期化された状態[00>に戻る。行列Uによるこの状態遷移のプロセスが可逆的であることを示している。
[00>;[01>;[10>;[11>は、互いに直交する基底ベクトルである。行列Uは、次のユニタリ行列U(1)とU(2);
|1 0 1 0|; |0 1 0 1|
1/2|0 1 0-1| 1/2 |1 0-1 0|
|1 0-1 0| |0-1 0 1|
|0-1 0-1| |1 0 1 0|
の和でもある。
そこで、(2)式は、U(1)とU(2)を使って次のようにも書ける。
1/2U[00>=1/2U(1)[00>+1/2U(2)[00>
=1/2([00>+[10>)+1/2([01>+[11>) (2)”
各状態ベクトルに掛けられた1/2は、その状態を独立した波束とみなすときの振幅に相当するものであり、その振幅を二乗した1/4は、その状態が確定する確率を示す。
右辺の第1項は、ベクトル[00>と[10>を重ね合わせたベクトルであり、その方向は[00>の方向と[10>の方向との中間、45度傾いた方向にあり、その[00>成分は[00>の半分の大きさ、[10>成分は[10>の半分の大きさとなる。右辺の第2項についても、ベクトル[01>と[11>に関して同様である。つまり、4つの状態の重ね合わせは、縮退した2つの状態の重ね合わせとみることもできる。
このことを定常状態の量子がもつ上向き、下向きのスピンの方向に読み替えると、第1キュービットと第2キュービットが共に各々重ね合わせ状態のスピンの方向は水平方向(真横の方向)となる。
各キュービットとなる量子について、基底状態のスピンを励起状態のスピンにもっていくに必要なエネルギーの半分のエネルギーをもつレーザ光を照射すると、各量子は0状態と1状態が重ね合わされた状態になる。
重ね合わせの不確定な状態にあるスピンの大きさが確定状態にあるスピンの大きさより縮小しているか否か不明であるが、理論通り縮小していると考えても構わないであろう。
この結果をみると、2キュービット系の第1ビット、第2ビット各々に2行2列のユニタリ行列を作用させる計算木の結果と同じになる。各キュービットが0状態を[0>、1状態を[1>で表現し、初期化された第1ビットに次のユニタリ行列u;
*|1 1|
|1-1|
を作用させると、これら2つの状態を重ね合わせることができる。*は1/ルート2を示す。式で書くと、
*u[[0>=*[0>+*[1>
となる。
第2ビットについても同じ操作をすると、2つの状態の重ね合わせを追加でき、合計4つの状態の重ね合わせをつくることができる。しかし、この4つの状態を各々独立した基底ベクトルによって区別することはできない。
次に、(1)式のFを計算するための関数を設定する。計算結果は分からないが、この関数は次のユニタリ行列U(f);
|1 0 0 0|
|0 1 0 0|
|0 0 0 1|
|0 0 1 0|
で表現できるものとする。
重ね合わせの状態にある2キュービット系に行列U(f)を作用させると、
1/2U(f)([00>+[10>+[01>+[11>)
=1/2([00>+[11>+[01>+[10>)
これは、[00>,[01>のデータ入力についてはそのまま計算結果になっているが、[10>として入力したデータの出力は[11>となり、[11>として入力したデータの出力は[10>となることを示している。結局、この計算結果は、基底ベクトルの読み替えを行うだけであり、計算前の重ね合わせ状態は変わらないことになる。つまり、2キュービットの量子系に何ら物理的操作を加える必要がないことになる。
この演算は、制御NOTゲートを模していて、第1キュービットは制御スイッチの役割をすると考えられるので、計算結果は第2キュービットによって表示される。
最後に、計算結果を読みだす操作となる。数学的には、重ね合わせ状態にある状態ベクトルと目的の基底ベクトル、例えば[01>、とのスカラー積、
1/2([00>+[11>+[01>+[10>)・1/2[01>=1/4
をとると、どの入力データについてもその答えが真である確率が1/4であることが分かる。
これでは、コイン投げを2回続けて行ったときに、目的の目が出る確率を求めるのと同じであり、何ら有意な結果を求めたことにはならない。
しかし、[11>状態の2キュービット量子系に適当なエネルギーをもつレーザ光を照射したとき光子を放出して[00>状態に遷移するのを検出できれば、これら量子系は[11>状態を保持していたことを確率1で読み取れるだろう。もし量子系が[00>状態を保持していたなら、光子の放出がないので、[00>状態を保持していたことを読みとれるだろう。
量子系が[01>または[10>状態のときには、そのいずれかが分かっても両者を識別するのは困難であろう。このとき1/4の確率が1/2に上がるだけである。
ユニタリ・ゲートと制御NOTゲートがあれば、すべての量子回路を設計できると言われる。
しかし、量子コンピュータでは、現行のコンピュータのようにメモリに記憶された情報を読み出し、量子ワイヤを介してこれら量子論理ゲートによって構成される演算回路に導くという操作が非常に困難である。
そのため、当面は、nキュービットの量子系をメモリとして用いるとともに、その量子系に直接ユニタリ変換や制御NOTゲートに相当する物理的操作を加えなければならない。
また、関数計算のユニタリ変換の結果、目的の入力データに対応する出力データをできるだけ高い確率で読み出せる必要がある。
最近では、最新の量子コンピュータであるD-Waveも発売され、話題となっている。ここで使われている量子アニーリング法などの技術にまで深入りするのも次の課題となる。
一方、脳の神経細胞(ニューロン)の演算動作は、ニューラルネットと呼ばれる数学的モデルによってシミュレートされている。このモデルの各ニューロンは、メモリ機能を備えた論理ゲートとして動作すると考えられている。
そうであれば、ニューロンが一種の量子コンピュータであると考えてもよいのではなかろうか、という考えが思い浮かぶ。万能量子チューリング・マシンと呼ばれるものは、どのような計算機械もシミュレーションできるのであれば、ニューロンを量子コンピュータとしてシミュレートすることも理論上は可能なのである。
参考文献
ジョージ・ジョンソン著「量子コンピュータとは何か」(早川書房)
西野哲郎著「量子コンピュータ入門」(東京電機大学出版局)
竹内薫著「量子コンピュータが本当にすごい」(PHP新書)
※コメント投稿者のブログIDはブログ作成者のみに通知されます