「量子コンピュータ − 超並列計算のからくり」
竹内繁樹 2005年 ブルーバックス
量子コンピュータに関する現役研究者の解説書。読まなきゃです!以下はこの本の要約と引用です。*印はWeb検索結果です。
■ プロローグ
量子コンピュータは、量子力学の原理=重ね合わせやもつれ合い(非局所性)に負っています。
■ 量子計算にできること
計算不可能な問題。問題が設定できない問題。解く手順が存在しない問題(例:コンピュータの停止問題)。膨大な手間がかかる問題(例:ナップザック問題や巡回セールスマン問題)。
RAS方式の公開鍵暗号は、因数分解の性質を利用している。公開鍵が情報の暗号化にだけ、秘密鍵が複合化にだけ用いられる。実際のRAS暗号は、数百桁の素数の積になっている。
量子コンピュタ―は、完成の見込みが立っていない。
*汎用量子コンピュータの誕生は、2040年以降。量子誤り訂正が完全に機能し、数百万〜数十億の論理量子ビットを持つ量子コンピュータが実現する可能性があります。ただし、技術的課題(ハードウェアの安定性、冷却技術、スケーラビリティ)や莫大なコストがあるため、商業的に広く普及するにはさらに時間がかかる可能性もあります。
量子コンピュタは、並列計算の特徴を生かせるような問題に対しては、高速で回答を得られる。
■ 量子とは何か
振幅と周期の3つと速度があれば、波の様子を伝えることができる。振幅と波長と速度でも波の様子は一つに定まる。
瞬間の様子を伝えようとすると、そのとき1周期のどの部分にあるかという情報=位相が必要になる。
ニュートリノ実験の「光電子増倍管」は、金属に光が当たったときに表面から電子が飛び出す=光電効果を応用したもの。一つの光子が一つの電子に吸収されて、そのエネルギーを得た電子が飛び出す」と考える。光子一つのエネルギーは波長だけで決まる。
水素原子は、通常、軌道の長さが電子の波長と一致した安定にある。
C60は、遺伝子を持つものとしては最小ブタサーコのウィルスの1/5の重さがある。
ある基本的な単位量のことを「量子」と呼ぶ。素粒子は、粒と波の性質を併せ持つ。「波」や「粒子」という考え方は、量子がたくさん集まった場合についてだけ正しい。
■ 量子の不思議
一定の方向に振動している光のことを「偏光」と呼ぶ。
偏向ビームスプリッターは、水平偏光を直角方向に反射する。
45°の斜め偏光を入射すると、でたらめに現れる(不確定原理)。
2つの経路の差は、片方の経路の鏡の位置を微動させることで調整できる。
2つの経路を全く同じ長さに設定した場合、半透鏡に入射した光は、全てAから出てくる。経路の差が、光の波長の半分だけずれるように設定すると、全てBから出てくる。
半透鏡を透過するときに比べて、反射したときは、波が1/4波長だけ遅れる。鏡で完全に反射される場合は、位相が反転する(半波長ずれる)。経路を同じ長さに設定すると、出力される光の強度は入力された光と同じになる。
半透鏡から出た直後に光子を検出した場合、透過側と反射側でそれぞれ光子を検出する確率は1/2。
光子はどちらの経路に存在するというわけではない。光子が2つに分かれて飛んでいるわけでもない。2つの確率波として表される「重ね合わせ状態」にある。
重ね合わせ状態は、観察すると壊れてしまう。重ね合わせ状態の破壊は、「デコヒーレンス」と呼ばれる。
量子計算は、「確率波」「重ね合わせ状態」を駆使して、膨大な並列計算を一気の行う。
■ 量子を使った計算機
1985年、デビッド・ドイチュは、重ね合わせの考え方を拡張した平行宇宙論に関心を持っていた。「重ね合わせ状態の中で並列に動くコンピュータ」というイメージを持った。
量子ビット(キュービット)は、0または1を確率的にとっているのではなく、その間にある確定した位相関係がある。2つの状態を同時にとっている。3個の量子ビットだと8つの状態、40個なら状態数は1兆に達する。
重ね合わせ状態で計算を行っても、観測してしまうと、計算結果の一つがランダムに得られるだけになる。量子コンピュータのアルゴリズム(量子アルゴリズム)では、重ね合わせ状態にある計算結果から、「特徴をうまく抽出する」処理により計算結果を得ている。
ビット(bit)は、binary digit を省略して作った造語。ピクセルは「画素」。
チューリングマシンの演算の3つの要素。ビットを読み込んだり書き込んだりする「処理装置」。いったん内容を保存するための「レズスタ」。データを貯える「メモリ」。
高級言語で書かれた手順は、変換規則(低級言語=アセンブラ)に、そして最終的にビット列に変換される。
論理ゲートは、与えられたビットの値に対して、ある一定の規則に従った値のビットを出力する。
与えられたビットを反転するノットゲート。アンドゲートは、2つの入力が両方とも1だった場合だけ、出力が1になる。ビット列から別のビット列へ任意の変換を表す論理回路は、ノットゲートとアンドゲートの2種類だけで実現できる。
重ね合わせの状態は、光子の確立波が、ある位相を保ちながら、干渉計の両方の経路を同時に辿っているような状態。量子ビットの状態を知るには、0である確率や1である確率に関する情報だけでなく、「位相」という情報が必要になる。
量子ビットの状態は、球面上の1点として表される。緯度は0と1のどちらに重みがかかった重ね合わせかを表している。
緯度の違いは、重ね合わせ状態の「位相」の違いに対応している。下図は、状態0と状態1の位相差が0と、半波長だけ位相がずれた状態である。位相さが無い状体は、[|a>=1/2|0>+1/2|1>]。半波長だけ位相がずれた状態は、[|a>=1/2|0>+(-1)1/2|1>]。位相の違いは、|1>にかかる正負の符号として取り込むことができる。
量子コンピュータは、量子ビットによって構成された量子メモリと量子レジスタを持つ。
論理回路の考え方を量子ビットに拡張したのが量子論回路。回転ゲートは、3次元で表された量子ビットを回転させる。2つの量子ビットに対して作用するのが制御ノットゲート。回転ゲートと制御ノットゲートは、量子回路における万能ゲートの組になっている。
回転ゲート。y軸回りに180°回転させると状態が0から1になる。古典ゲートのノットゲートに相当する。
アダマールゲートは回転ゲートの一種。z軸とx軸の中間に軸を中心に、180°回転する。|0>に作用させると、|0>と|1>が同位相で等しく重なった、重ね合わせ状態に変化する。これは、90°回転ゲートと同じ。もう一度同じ操作をすると、状態は|0>に戻る。状態|1>にアダマールゲートを作用させると、|0>と|1>が逆位相で等しく重なった状態に変化する。
制御ノットゲートは、2つの量子ビットの入力に対して、2つの量子ビットを出力する。一方を制御ビット、他方を信号ビットと呼ぶ。制御ビットが1(オン)の時だけ、信号ビットを反転させる。制御ノットゲートは、重ね合わせ状態にある二つの量子ビットを、別の重ね合わせ状態にある量子ビットへと変換する。
量子もつれ合い(エンタングル)状態は、「ある特定の状態をとっている1つ1つの量子ビットの集合」としては表せない。状態を切り離して考えることができない。
量子ゲートは、すべて「反転可能ゲート/可逆なゲート」。可逆性は演算に要するエネルギーと関係している。
2重制御ノットゲートは、2つの制御ビットが両方|1>のときだけ信号ビットを反転させる。
2つの量子ビットの|0>と|1>の重ね合わせ状態を入力すると、|0>|0>、|0>|1>、|1>|0>、|1>|1>の4通りの状態の重ね合わせになっている。つまり、4つの足算が並列で同時に行われたことになる。10個の量子ビットを用いれば、0から1023までの数どうしの足し算が可能なる。1024通りと1024通りの組み合わせで、100万通り以上のけいさんを、量子並列処理によって一度に行える。
■ 量子アルゴリズム
プログラムがあるコンピュータ言語で書かれているのに対して、アルゴリズムは動作そのものを指している。あるアルゴリズムに対して、複数のプログラムがある。
量子コンピュータには、量子プログラム言語が確立していない。
*量子コンピュータ向けの量子プログラミング言語
1. Qiskit(キスキット)
開発元: IBM
言語ベース: Python
特徴:IBMの量子コンピュータ(IBM Quantum)上で動作可能。シミュレータを使ってローカル環境でも動作可能。オープンソースで、広範なドキュメントとサポートがある。
2. Cirq(サーク)
開発元: Google
言語ベース: Python
特徴:Googleの量子コンピュータ(Sycamoreなど)向けに最適化。シンプルな回路設計が可能。量子アルゴリズムの研究向け。
3. Quipper(クイッパー)
開発元: アメリカの研究チーム
言語ベース: Haskell
特徴:関数型プログラミング言語のHaskellをベース。大規模な量子アルゴリズム開発向け。産業用途よりも研究向け。
4. Q#(キューシャープ)
開発元: Microsoft
言語ベース: 独自の言語(C#に似ている)
特徴:Microsoftの量子開発キット(QDK)で使用。クラウドシミュレーションやAzure Quantumで動作可能。量子ゲートや量子アルゴリズムを直感的に記述可能。
5. ProjectQ(プロジェクトQ)
開発元: スイスの研究チーム
言語ベース: Python
特徴:QiskitやCirqと同じくPythonベース。異なるバックエンド(IBM Q、Rigetti、シミュレータ)で実行可能。量子アルゴリズム開発向け。
・ドイチュ-ジョサのアルゴリズム
2^N個のビット列を隠し持つブラックボックスが与えられたとすると、最大で[2^N-1 + 1]回の検査が必要になる(古典ブラックボックス)。
隠されているビット列が2倍になっても、アドレスビットを1つ増やすだけ。2^N個のビット列に対して(2N+3)のステップ数で判断できる。
・データベースの検索アルゴリズム(クローバーの検索アルゴリズム)
1000件の電話帳。平均で500回の問い合わせが必要。量子コンピュータの場合、√N回で確実にできる。n個の量子ビットを用いれば、N=2^nまでのデータを処理できる。
・ショアのアルゴリズム
ユークリッドの互除法(2つの数の最大公約数の計算)
どのような正の数mに対しても、x^r+mの余りがx^mの余りに等しい。量子コンピュータを用いれば、この周期を高速に求められる。
フーリエ変換は「波形定規を当てて、周期を測る」方法。周期の波形定規と周期の一致度を見る。フーリエ変換を高速に行うことができれば、因数分解はできたことになる。量子フーリエ変換の対象となるのは、量子ビットの確率振幅。
巡回セールスマン問題やナップザック問題を量子コンピュータで高速に解決するアルゴリズムは見つかっていない。*様々なアプローチが行われてはいるが現在でも状況は変わっていない。
■ 実現に向けた挑戦
量子ビットの担い手は、電圧、電波の位相、光パルス、磁気 … 。重ね合わせ状態をとれさえすれば量子ビットの候補になり得る。光子の経路と偏光。電子の位置、エネルギー準位、スピン、量子ドット。原子でも可能。
量子コンピュータを作るには、その量子ビットに対する基本ゲート=回転ゲートと制御ノットゲートの操作ができなければならない。
・ディビンチェンツォが提唱する必要条件
量子ビットを初期化できる
量子ビットの状態を読み出せる
基本ゲートを構成できる
規模や動作回数が、量子ビットの数が増えた場合に急速に増大しない(スケーラブルである)
重ね合わせ状態が壊れるまでの時間(緩和時間)が、1つのゲート動作をするのに必要な時間に比べて十分に長い
・光子を用いた量子コンピュータ
単一光子を検出する技術が既に開発されている(光子検出器)。光子一つの状態を、容易に制御できる。偏光を高い精度で回転することができ、回転ゲートして用いることができる。量子ビットの初期化も容易である。量子状態を乱さずに長距離の伝送が可能。
量子ビットに対する回転ゲートの操作は、半透鏡によって行うことができる。半透鏡の反射率を調節することで、様々な回転ゲート操作を行うことができる。
制御ノットゲートの操作では、光子一つの量子状態に応じて別の光子の量子状態を変化させる。光子は真空中では、別の光子とは相互作用をしない。物質中では、光子は弱いながら互いに影響を与える。
全光通信を実現する素子「光位相スィッチ」。量子位相ゲートは、超高速通信のデバイスともなる。また、制御ノット操作も可能になる。
・核スピンを用いた量子計算
スピンは、「量子化された自転」。電子は「右回りの電子」と「左回りの電子」は、逆向きの磁石のように振舞う。「右回り」と「左回り」の重ね合わせ状態をとることができる。
MRI(核磁気共鳴画像化法)は、水素元素の「磁石」としての性質を用いて可視化する。電子スピンは上下2つしかとれなかったが、核スピンの場合には、原子の種類によっては、多くの状態をとれる。
核磁気共鳴装置を用いて量子計算を行う。磁力線と逆向きの状態は、より大きなエネエルギーを持っている(ゼーマンエネルギー)。エネルギー準位の差に対応した周波数の電磁波を照射すると、スピンは回転する。量子回路の回転ゲート操作になっている。
スケーラビリティの確保や初期化の方法が確立していない。
シリコン量子コンピュータ。シリコンは様々な不純物を混ぜる(ドープする)ことで、電気的な性質を変えることができる。量子ビットとしては、シリコン中にドープされたリン原子の核スピンを使う。量子ビットの操作実験に成功していない。
超電導量子ビット。筑波のNEC基礎研究所の中村氏らのよって研究されている。超伝導体の中の電子は、二つが対になって行動する(クーパー対)。
デコヒーレンスの本質は、2つの状態間のい操作の情報が壊されてしまうこと。デコヒーレンスが十分に起こった極限の世界が、古典的な世界だ。
大規模量子コンピュータの実現可能性には様々な意見がある。「計算に必要な時間、重ね合わせを維持することは不可能」という意見もある。
ゲート操作を行える回数は、「コヒーレンス時間」÷「ゲート時間」=「計算可能回数」。
ビット反転エラーの古典誤り訂正。論理ビットを実ビットの組に対応させる方法が「符号化」。1ビットの情報を送りたいときには[000]あるいは[111]の電気信号や光パルス=実ビットを伝送する。データを冗長化する。
量子誤り訂正符号は、量子ビットの誤りを検出し訂正する。直接観察し、誤りを検出することはできない。
誤りの検出は、もう一つの状態検出用の量子ビット(アンシラビット)に量子状態を乗せ換えることによって行う。観測はアンシラビットに対してだけ行う。
量子誤り訂正は、コヒーレンス時間を延長できることを示した。
■ 量子暗号
量子情報の応用が量子暗号。量子暗号は製品が商品化されている。
送りたいデータと同じ長さの乱数列を暗号化に用いることができれば解読できない。乱数列を他人に知られずに共有する方法が必要になる。
光子は分割することができないので、漏れずに受診者に届くか、漏れるかのどちらかしかない。漏れれば光子は消えてなくなる。しかし、情報を読みだした後に、別の光子に乗せ換えて送り直せばよい。
光子1粒を測定しただけでは、もともとどのような偏光が与えられていたのかを知ることは、不確定性原理によりできない。
1984年ベネットとブラッサードによって、乱数列=秘密鍵を共有(量子鍵配布)するBB84が開発された。秘密鍵を共有する際には、光子の受信機や光ファイバが必要になる。その後は、携帯電話でもインターネットでも、好きな方法でデータを送受信して構わない。量子暗号を用いれば、送信者と受信者と中継点だけ、情報管理を行えばよい。
■ エピローグ
量子力学と古典力学の境がどこにあるのか。「状態の重ね合わせ」は、おそらく近い将来ウィルスでも確認する実験が行われるかもしれない。
膨大な並列計算が実現しても、特殊な専用コンピュータとしての位置づけと考える研究者が多い。