2017/09/22

量子状態から情報を得る

1量子ビットがもつ、2つの複素数で表される連続的な情報から、0 もしくは 1 のデジタルな値を得るためには、
「測定(measure)」もしくは「観測(observe)」と呼ばれる操作を行います。

 1量子ビットの情報は、ブロッホ球の球面上でイメージできますが、この測定という行為は、 測定したい軸(ブロッホ球の原点を通る直線)を1つ選び、その軸に投影して、その位置により 確率的に、どちらの値になるかが決まるということになります。

 通常は、測定したい軸(ブロッホ球の原点を通る直線)として、\({\left| 0 \right\rangle}\) と、\({\left| 1 \right\rangle}\) の軸(「基底」と呼ばれる)が使われます。

\({\alpha\left|0\right\rangle+\beta\left|1\right\rangle}\) を、基底 \({ \left| 0 \right\rangle , \left| 1 \right\rangle }\) で測定すると、 \(|\alpha |^{2} \) の確率で \({ \left| 0 \right\rangle }\) が得られ、 \(|\beta |^{2} \) の確率で \({ \left| 1 \right\rangle }\) が得られます。

このように、測定する基底を使って表させた \( \alpha , \beta \) を「複素確率振幅」と呼び、その2乗の確率で、基底の値 \({ \left| 0 \right\rangle , \left| 1 \right\rangle }\) が得られます。

2017/09/21

量子コンピューターはデジタル?アナログ?

量子コンピューターが扱う情報は量子ビットです。量子ビットは、複素数を2つ含む情報で、連続的な情報です。

そのため、量子コンピューターが扱う情報は、アナログ的な情報と言えます。量子ビットの操作(演算)は、
アナログ的に進みます。その情報を観測すると、確率的に 0 もしくは 1 の値が得られることになり、結果としては
デジタルな情報となります。

アナログ機器かデジタル機器かの議論は様々な見解があります。
量子コンピューターは内部ではアナログ情報を扱っていますが、ここでは、アナログ機器ではないという解釈をとります。

量子コンピューターは、Shor 氏による「量子誤り訂正符号」の理論のもと、理論的に精度保証ができる機構を有すること
可能であると判明しています。これにより、情報を精度を高く保つことができるようになり、アナログ機器ではなく
演算精度をもつことができるデジタル機器であると考えられます。

2017/09/20

CNOT演算の行列表記

2量子ビットに対しての CNOT演算 を行列で表記すると、

\(\left(\begin{array}{cccc} 1 && 0 && 0 && 0 \\ 0 && 1 && 0 && 0 \\ 0 && 0 && 0 && 1 \\ 0 && 0 && 1 && 0 \end{array}\right)\)

となります。

2017/09/19

N個の量子ビットを表すためのベクトル

1量子ビットは、\(|\alpha |^{2}+|\beta |^{2}=1\) で規格化された \(\left(\begin{array}{c} \alpha \\ \beta \end{array}\right)\) と2要素のベクトルで表現されます。

2量子ビットをケット・ベクトルで表すと、\(|\alpha |^{2}+|\beta |^{2}+|\gamma |^{2}+|\delta |^{2}=1\) を満たす \(\alpha, \beta, \gamma, \delta \) で規格化された

\(\alpha{\left|00\right\rangle}+\beta{\left|01\right\rangle}+\gamma{\left|10\right\rangle}+\delta {\left|11\right\rangle}\)

となります。これをベクトル表記で表すと、

\(\left(\begin{array}{c} \alpha \\ \beta \\ \gamma \\ \delta \end{array}\right)\)

です。

一般的に、N個の量子ビットは、2N個の複素数を要素にもつベクトルで表現されます。

2017/09/18

ベクトルのノルムと規格化

任意のベクトル x について、 \({\left\langle x\middle|x \right\rangle \geqq 0}\) が成り立ちます。

その平方根、\({\left(\left\langle x\middle|x \right\rangle\right)^{1/2}}\) をノルムといい、\(\| x \|\) と表します。

任意のケットベクトル x を、そのノルムで割った \({ \left| x \right\rangle / \| x \|}\) を計算し、 \({\left| x \right\rangle}\) と改めることを、ケット・ベクトル x の規格化といいます。

量子情報科学では、物理状態に対応するケット・ベクトル(とそれに対応するブラ・ベクトル)は、常に規格化しておくことにします。すると、任意のケット・ベクトルについて、

 \({\left\langle x\middle|x \right\rangle = 1}\)

が常に成り立ちます。

2017/09/17

量子ビット操作と行列演算

量子ビットは \({\alpha\left|0\right\rangle+\beta\left|1\right\rangle}\) と表現しますが、これをベクトル表記で表すと、

\({\alpha\left(\begin{array}{c} 1 \\ 0 \end{array}\right)+\beta\left(\begin{array}{c} 0 \\ 1 \end{array}\right)=\left(\begin{array}{c} \alpha \\ \beta \end{array}\right)}\) となります。

量子ビット操作は、この量子ビットを別の量子ビットに変換することを意味します。
この操作は、\( 2 \times 2\) 行列で表わせます。

例えば、ユニタリー変換は変数 \(\theta,\phi,\lambda\) を使って

\({\left(\begin{array}{cc} e^{-i(\phi+\lambda)/2}cos(\theta/2) && -e^{-i(\phi-\lambda)}sin(\theta/2) \\ e^{i(\phi-\lambda)/2}sin(\theta/2) && e^{-i(\phi+\lambda)/2}cos(\theta/2) \end{array}\right)}\)

となります。

2017/09/16

2量子ビットの量子演算:CNOT演算

1量子ビットの重要な量子操作がユニタリー変換でした。
2量子ビットの重要な量子操作として、CNOT演算があります。"CNOT" の "C" は、制御(Controlled)の "C" です。日本語では「制御NOT」とも呼ばれます。

"NOT" は、古典計算でイメージされるとおり、1を 0 に、0 を 1 に変換する否定演算です。2つの量子ビットの操作では、一方の量子ビットが制御のための量子ビットの役割を務め、もう一方の量子ビットが操作対象の量子ビットとなります。
制御ビットの値(0 または 1)により、操作対象となる量子ビットに NOT操作を行うかが影響して作用します。

上位ビットが制御ビットの CNOT を操作すると、次のようになります。

\({CNOT \left|0\right\rangle\left|0\right\rangle=\left|00\right\rangle}\)
\({CNOT \left|0\right\rangle\left|1\right\rangle=\left|01\right\rangle}\)
\({CNOT \left|1\right\rangle\left|0\right\rangle=\left|11\right\rangle}\)
\({CNOT \left|1\right\rangle\left|1\right\rangle=\left|10\right\rangle}\)

CNOT が作用する前(左辺)と、CNOT が作用した後(右辺)では敢えて、ケット・ベクトルの記載を変えてあります。専門書では、左辺も2量子ビットを1つのケットの中で表現しています。

CNOT の特徴は、量子もつれ(エンタングルメント)状態を作るのに用います。


2017/09/15

量子ビットを実現する方式

量子ビットをつくるには、1 qubit あたり最低 2つの量子状態があれば良く、原理的にはどんな量子系を用いても構いません。
量子ビットを実現する方式としては、様々なアプローチがされております。そのいくつかを紹介します。

・超電導 Qubit
 超電導回路で量子ビットを捕獲する方式です。
 現在、最も研究されており、この方式での実現化をめざしているチームが多いのがこの方式です。

・イオントラップ Qubit
 イオン(原子)を電極で捕獲し、レーザーによって振動させ、電子状態を制御する方式です。

・シリコン Qubit
 シリコン内に量子ドットを捕獲する方式です。
 従来からある半導体技術を「flip flop」方式はこの方式です。

・マヨラナ Qubit
 半導体ナノワイヤーと超電導の組み合わせた Majorana と呼ばれる構造で量子ビットを作る方式です。
 実現すると、トポロジーで保護された頑丈な量子ビットとなると予想されています。

2017/09/14

ブロッホ球

1量子ビットは、 \({\alpha\left|0\right\rangle+\beta\left|1\right\rangle}\) と表現し、その複素係数 \(\alpha, \beta\) には、\(|\alpha |^{2}+|\beta |^{2}=1\) という関係があります。

この1量子ビットは、幾何的にイメージしやすくする手法として、「ブロッホ球」と呼ばれる半径が 1 の球面上の任意の 1 点で視覚的に表現することができます。

2017/09/13

1量子ビットの量子演算:ユニタリー変換

ゲート方式においては、\(2\times 2\) の虚ユニタリー行列で表される作用素による変換(ユニタリー変換という)が1量子ビットの重要な量子操作になります。
ユニタリー変換は、変換元のベクトルの長さを変化させない等長変換です。

\(U^{\dagger}U=UU^{\dagger}=I\)

ここで、\(I\)は単位行列、\(U^{\dagger}\) は行列 \(U\) の随伴行列です。

2017/09/12

量子ビットの表現:ブラ・ケット記法

量子ビットは、0 と 1 の情報が重ね合わせされた状態を表現しなければなりませんが、その表現には、「ブラ・ケット記法」という量子力学の記法を用いることが多いです。
イギリスの理論物理学者 Paul  Dirac が発明したため、ディラックの記法とも呼びます。
$$
\newcommand{\bra}[1]{\left\langle #1 \right|}
\newcommand{\ket}[1]{\left|#1 \right\rangle}
\newcommand{\bracket}[2]{\left\langle #1 \middle|#2 \right\rangle}
$$
横ベクトルを、左側にカッコがある「\({\left\langle\psi\right|}\)」と表記するブラ・ベクトル (bra-vetor) で表し、
縦ベクトルを、右側にカッコがある「\({\left|\phi\right\rangle}\)」と表記するケット・ベクトル (ket-vetor) で表します。
そして、その内積を「\({\left\langle\psi\middle|\phi\right\rangle}\)」のように表現します。

* \(\psi,\phi\)は状態を表す文字


量子ビットは、このケット・ベクトルを用いて、0 の状態を \({\left|0\right\rangle}\)、
1 の状態を \({\left|1\right\rangle}\) と表現し、重ね合わせの状態は

\({\alpha\left|0\right\rangle+\beta\left|1\right\rangle}\)

と表現します。このときの \(\alpha,\beta\) は、それぞれの状態の確率を複素数で表しています。
その確率は合わせて 1 になる \(|\alpha |^{2}+|\beta |^{2}=1\) という関係があります。

また、2量子ビットは、 \({\left|00\right\rangle}\) 、 \({\left|01\right\rangle}\) 、 \({\left|10\right\rangle}\) 、 \({\left|11\right\rangle}\) のように、カッコのなかにビット列を記載して表現します。

2017/09/11

コヒーレンス時間

量子ビットを実現するための方式は、様々な手法が研究開発されています。

電子スピンや原子核スピンを用いるものが実現されており、光子を使うものまで、様々です。
これまでに実現化を検討されていた対象と異なる下記論文にある新しい方式を
Guilherme Tosi  氏を中心とするオーストラリアのグループが提唱しています。
https://arxiv.org/abs/1509.08538

今後、更に新方式が現れるかもしれません。
このときに、どの方式が優れているかを判断するときには、「量子状態が維持される時間」が重要な指標となります。現実的に、量子もつれ状態や量子状態を維持するのはとても難しく、その維持時間が長ければ長いほど、より多くの計算ができる可能性があります。

この量子状態を維持できる時間を「コヒーレンス時間」と呼びます。


2017/09/10

量子もつれ

複数の量子ビットを考えるとき、その量子ビットが独立した量子状態をとらず、互いに影響する量子状態にあるとき、これらの量子ビットは、もつれの状態にあると言います。
「量子もつれ」は、「量子絡み合い」、「量子エンタングルメント」または単に「エンタングルメント」とも呼ばれます。

例えば、2つの量子ビットを考えます。
それぞれの量子ビットがとる 0 でもあり、 1 でもあるという量子情報が干渉し合い、重ね合わさることで、0 でもあり、 1 でもあり、2 でもあり、3 でもある、という状態をとります。

2017/09/09

量子ビット

従来型コンピューターのための情報の最小単位を、ビットといいます。
このビットに習って、量子コンピューターのための情報の最小単位を「量子ビット(Qビット、キュービット、qubit、Qbit)」と言います。

量子ビットという呼称が登場したため、量子情報科学では、従来型のビットを「古典ビット(Cビット、Cbit)」と呼んで区別するようになりました。

古典ビットは、0 と 1 の2つの値を表現できるものでした。
一方、量子ビットは、2つの独立した量子状態を量子情報の最小単位とします。

量子ビットは、古典ビットのような 0 か 1 で情報を表すのではなく、0 と 1 の情報が重ね合わせされた状態を扱います。
つまり、0 でもあり、 1 でもあるという状態が情報の単位として存在し、その量子ビットを観測すると、その状態に応じて確率的に、0 か 1 を得られます。

確率的に 0 か 1 を表す情報が、デジタル社会である現在の生活に役立つのかという疑問はあります。
量子力学という理論的な背景のもと、その確率が論理的に変化する特性を生かして、近年では、役立つ計算処理が、数多く研究・提案されております。

2017/09/08

量子プログラミング言語

量子状態を扱うための「量子プログラミング言語」は既にいくつか開発されたものがあります。しかし、量子コンピューターが実現可能となった現在では、利用しづらい状態のものも多く存在します。ここでは、そのいくつかをご紹介します。

・QuTip

GitHubで盛んに開発が進んでいる Python ベースの量子プログラムのためのシミュレーター。ライセンスはBSD。Paul D. Nation、Robert J. Johansson 氏による。Robert J. Johansson 氏は理化学研究所に所属。
http://qutip.org/

・QISKit

IBM Q を扱うための Toolkit。
https://developer.ibm.com/open/openprojects/qiskit/

・dwavesystrms / qbsolv

量子アニーリング D-wave マシンを扱うための量子ライブラリ。
https://github.com/dwavesystems/qbsolv

・pyquil

Riggetti Computing 社が開発している量子プログラムのための Python ライブラリ。
https://github.com/rigetticomputing/pyQuil


・Quantum++(qpp)

C++11向けの量子プログラムのためのライブラリ。GitHubで盛んに開発が進んでいる 。


・Quipper

2013年に公開された Haskell をホスト言語とした埋め込み言語として実装された言語。
http://www.mathstat.dal.ca/~selinger/quipper/

 ・libquantum

Debian系や macOS の brew でパッケージ化されている唯一の量子ライブラリ。実装はC言語。ライセンスはGPLv3。ドイツの Bjoern Butscher、Hendrik Weimer 氏による。現在、更新は停滞している模様。
http://www.libquantum.de/

・ QCL(Quantum Computation Language)

最初に実装された量子プログラミング言語。C言語の構文に似た言語。
Bernhard Ömer 氏(オーストリア)による。古典的(量子プログラミング以前の)コードと量子プログラミングのコードを組み合わせることが可能。2014年5月以降更新なし。
http://tph.tuwien.ac.at/~oemer/qcl.html

2017/09/07

量子コンピューターの種類

量子コンピューターは、実用化されて間もないコンピューターです。実用化されたものも、液体窒素で冷却するような機構で動作しており、未だ実用検証段階で発展途上のハードウェアです。

2017年4月現在、商用として実用化されている量子コンピューターは、IBM社の量子ゲート方式の「IBM Q」と、D-Wave Systems社の量子アニーリング方式の「D-Wave」です。

量子コンピューターには、この2種類の方式があり、その他の方式も研究されております。



量子ゲート方式(量子回路モデル)
量子アニーリング方式
目的
すべての計算(通常のコンピューターの上位互換)
組み合わせ最適化問題とサンプリング
強み
指数関数的な高速化が保証されているアルゴリズムがある。
最適化問題やサンプリングは実社会での応用範囲が極めて広い。ノイズに比較的強い。
弱み
ノイズに極めて弱い。誤り訂正によりノイズの影響を除去できることが保証されているが、実装には非常に多くの量子ビットを必要とし現実性に欠ける。高速化が保証されている数個の問題(素因数分解、量子シミュレーションなど)以外では通常のコンピューターを上回る性能は出ないため、実用的な用途が極めて限定された特殊な装置である。
指数関数的な高速化が保証されている実用的な問題が見つかっていない。 
実装状況
10量子ビット(超伝導、イオン、フォトン、量子ドットなど)
1000量子ビット(超伝導)

2017/09/06

量子コンピューターを扱うソフトウェアの状況

NASA、Google、IBM のような先進企業では、ソフトウェア開発も進んでいることでしょう。

しかし、ゲート型と呼ばれる量子コンピューターの開示されている情報によれば、一般的に想像する複雑な計算の機能ではなく、量子ビットを扱う「QPU」の回路設計のための「量子回路」が検討されている段階です。いまの CPU で例えると、CPU の内部構造であるプロセッサー回路を模索しているような状況です。

また、量子コンピューターの応用分野の広さから、その適用分野ごとのアルゴリズムの発見が期待されています。しかし、ハードウェアの利用は一部の企業に限定されており、現時点での実用性はなく、アルゴリズムの開発は未だ始まっていません。更に、量子アルゴリズムの開発には、物理学・数学の深い知識も必要となり、現在活躍しているプログラマーでも、専門性を高める必要があります。

このような状況から、量子コンピューターの利用を促進するためには、量子アルゴリズムの研究開発を進め、その道具として、C言語に代表する従来のプログラミング言語に、量子コンピューターを扱うための言語仕様を追加するなどのプラットフォームの整備が求められると予想されます。

2017/09/05

期待される量子コンピューターの応用分野

量子コンピューターの利用が実現すると、様々な分野に利用が広がることが期待されています。
  • 量子暗号による安全な通信の研究
  • 新薬、新素材開発
  • 量子機械学習
  • ビックデータ検索

ムーアの法則の限界?

ムーアの法則のもと、小型化、高速化してきたノイマン型 CPU は、近年限界に近づきつつあると言われています。

  • 小型化により、CPU 内部の配線は、nm(10の-9乗メートル)単位となり、量子的なトンネル効果の影響を考慮しなければならないまで、小型になりつつあります。・・・小型化の限界
  • 高速化により、CPUクロックは、GHz(10の9乗ヘルツ)となり、光速でも数10cmしか動かないほどの高速な処理速度に至っております。・・・高速化の限界

このように現実世界には「10の9乗限界」が存在していると私たちは考えております。今後、更なるプロセッサーの処理速度の成長には、次に挙げるパラダイムシフトが必要になるのは必然ではないでしょうか。

2017/09/04

量子コンピューター

現行の CPU とは全く異なるアーキテクチャーで動作するプロセッサーを開発し、コンピューターの進化を目指す手法があります。そのアーキテクチャーも複数研究されておりますが、もっとも良く研究されており、実用化が現実的な段階となりつつあるのが「量子コンピューター」です。

2017年4月には、既に、D-Wave System社が量子アニーリング方式の量子コンピューター「D-Wave」を商用化しております。Google、NASAが、この D-Wave System社から購入した量子コンピューターを使って「組み合わせ最適化問題」を高速に解決したのは、2014年12月のことでした。また、2016年5月からIBM社も5量子ビットのコンピューターをクラウドサービスで実験的に提供しており、2017年4月から商用化することも公表しており、実際、「IBMQ」として商用利用が開始されております。

更に、この状況も日進月歩で実現性が増しています。おそらく、2020年頃までには、先進企業では日常的に利用することができる量子コンピューター・システムが登場することでしょう。その後には、量子コンピューターの開発も進み、「QPU」(Quantum Processing Unit)なる新たなプロセッサーが登場し、現在の「GPU」(科学計算を得意とするプロセッサー)のごとく、特定の用途で利用されるようになり、広がっていくことでしょう。