戻る


量子コンピュータの原理

目次

量子力学と量子コンピュータ、量子ビット

量子というのは、粒子と波の両方の性質を両方もつ原子、電子、中性子、陽子、光を粒子とみんなした光子などが量子の代表的なものです。量子力学的な現象を用いているわけですから、量子力学とは切っても切れない関係にあるわけです。ここでは、まず、量子コンピュータで様々な問題を解く際に押さえておくべき基本的な概念をみてみます。

量子の振る舞いは、次のシュレディンガーの波動方程式を解くことによってもとまります。

iddtψ(x,t)=Hψ(x,t)(1)

この式の両辺はエネルギーであって、粒子が持つエネルギーは、波動関数にハミルトニアンという運動エレルギーと位置エネルギーの和からなる演算子Hを作用させることによって計算できます。波動関数の時間微分がエネルギーに等しいということです。つまり、量子状態が時間的に変化するには、エネルギーが必要で、時間変化の原因となるものがエネルギーだということができます。

波動関数に作用する演算子であるハミルトニアンの固有値と固有関数を求めれば、波動関数が解け、量子力学的な状態がわかります。ハミルニアンという名称は、1830年代に活躍したウィリアム・ローワン・ハミルトンにちなんでいます。ハミルトニアンを、波動関数に作用させるとエネルギーが計算できます。ハミルトニアンは行列ですから、エネルギー変換行列とでも呼んだほうが分かりやすいかも知れません。

ハミルトニアンの固有値と固有関数を求め、最低エネルギー状態とそれより一つエレルギーが高い状態が求まったとします。

Hψ0(x)=E0ψ0(x)(2)Hψ1(x)=E1ψ1(x)

2つの状態だけを考えて、量子状態は、この2つの状態に対応する波を重ね合わせたものとして記述できます。複素数 αβ を用いて、以下のように書けます。

αψ0(x)+βψ1(x)(3)

ψ0(x)ψ1(x) は、定数ですから、それを明示的に書く必要はなく、係数だけで表す ことができます。これが量子ビットです。

(αβ)(4)

ハミルトニアンとエネルギー

量子状態にハミルトニアンをかけるとエネルギーになるということは重要です。たとえば、量子古典ハイブリッドアルゴリズム(NISQアルゴリズム)で解くことの出来る問題の典型は、問題がハミルトニアン、つまり状態をエネルギーに変換する行列が与えられ、安定なエネルギー状態を求めることに置き換えることができます。つまり、固有値と固有ベクトルを求めることになります。または、言い換えると安定なエネルギー状態のうち、一番エネルギーが小さいものを求めるということになります。

量子コンピュータの動作原理

量子コンピュータは、「重ね合わせ」や「量子もつれ」と言った量子力学的な現象を用いて従来のコンピュータでは現実的な時間や規模で解けなかった問題を解くことが期待されるコンピュータです。量子コンピュータの世界では、従来のコンピュータは、量子力学的な現象に基づいていないという意味で、古典コンピュータと呼ばれます。

量子コンピュータは、量子力学的な重ね合わせによって、n個の量子ビットを用いて2nの状態を同時に処理できるため、古典コンピュータでは、時間がかかりすぎ解くことが著しく困難な問題が解けることが期待されています。

古典ビットと量子ビットの違い

図1にしめすように、古典コンピュータでは、ビットは、0と1かのどちらか値をとります。量子ビットでは、基底ベクトル |0⟩ |1⟩ に係数を掛けて足し合わせた状態ベクトル |ψ=α|0+β|1 を用いて計算が行われます。量子ビットの状態ベクトルは、直接知ることはできなくて、測定という操作をすると、状態ベクトルの要素、αβ に応じて、結果が0になる確率と1になる確率が決まります。測定という操作を複数回繰り返すことによって、量子ビットの状態が得られます。測定を行うと、状態ベクトルが変化してしまうのも忘れてはいけません。

図1 古典ビットと量子ビット

1量子ビット

式(1)、(2)で示すように、一つの量子ビットは、2つの基底ベクトル、 |0,|1 を用いて量子状態を表します。

|0=(10)(1)|1=(01)(2)
|ψ=(αβ)=α|0+β|1 (3)

これは状態ベクトルや量子ビットと呼ばれます。式(3)でしめす足し合わせた状態のことを重ね合わせ状態と呼びます。αβ は、複素確率振幅と呼ばれます。もともと、αβ は、2つの波の重ね合わせの状態を表すものなので、状態ベクトル|ψ も波の性質をもち、干渉するということは、量子プログラミングを理解するにあたって重要なことです。

測定

残念ながら、量子力学では、この複素確率振幅は、直接知ることができません。測定という操作をしたときに、0か1かが確率的に決まります。また、測定を行うと、状態ベクトルは、測定結果が 0 の場合は|01 の場合は|1に変化してしまいます。したがって、量子ビットを初期状態に設定し、操作し、測定を行うということを、繰り返すことによって、01 の分布を求めます。

状態ベクトル|ψを、基底ベクトル|0,|1で測定したときに、測定結果が0になる確率 p0と1になる確率 p1 は、式(4),(5)のように、複素確率振幅の絶対値の2乗になります。すべての確率の和は1ですので、複素確率振幅は、式(6)の関係を満たします。

 p0=|α|2(4)p1=|β|2(5)|α|2+|β|2=1(6)

このような表現の方法は、ディラック記法と呼ばれ、|ψ は、ケットベクトル、α, β の複素共役(複素数の虚数部の符号を反転したもの)を要素とした行ベクトル ψ|=(α β) を、ブラベクトルと呼びます。

ψ||ψの行列積をとると、内積になります。ψ||ψは、ψ|ψとも、表記されます。ブラベクトルとケットベクトルの内積をもちいると、上の条件は、式(7)のように表記できます。

ψ||ψ=ψ|ψ=(α β)(αβ)=αα+ββ=|α|2+|β|2=1 (7)

2量子ビット

2個の量子ビットの状態ベクトル |ψ は、基底ベクトル |00,|01,|10,|11 と、4個の複素数を用いて、式(8)、式(9)のように表せます。

|00=(1000),|01=(0100),|10=(0010),|11=(0001) (8)
|ψ=c00|00+c01|01+c10|10+c11|11=(c00c01c10c11) (9)

ここでも、状態ベクトルの絶対値が量子の存在確率を表しますので、cij は、式(10)のような関係を満たす複素数とします。

ψ|ψ=|c00|2+|c01|2+|c10|2+|c11|2=1 (10)

1量子ビットの場合と同様、cij を複素確率振幅と呼び、基底ベクトルで測定すると、確率を得ることができます。

2つの1量子ビット

2 のの1量子ビット |ψ,|ϕ に対して、テンソル積 |ψ|ϕを、式(11)、式(12)のように定義します。

|ψ=(a0a1), |ϕ=(b0b1)(11)
|ψ|ϕ:=(a0|ϕa1|ϕ):=(a0b0a0b1a1b0a1b1) (12)

基底ベクトル|0,|1に対しては、式(12)がなりたちます。

|0|0=(1000),|0|1=(0100),|1|0=(0010),|1|1=(0001) (12)

つまり、上の2量子ビットの基底ベクトル |00,|01,|10,|11|0|0, |0|1,|1|0,|1|1 と、テンソル積を用いて表すことができるということです。

エンタングルメント(量子もつれ)

重ね合わせ状態に加えて、重要な量子ビット間の関係に、エンタングルメント(量子もつれ)があります。2つの1量子ビットが、上のテンソル積で記述できない状態が存在します。例えば、式(13)のような状態です。この状態のことをエンタングルメント(量子もつれ)といい、量子コンピュータにおいては、非常に重要な役割を果たします。

12(|00+|11)(13)

量子もつれとは、複数の量子ビットがつくられるときや、相互作用するとき、空間的に近接した場合に起こる物理現象です。量子ビットが大きく離れている場合も含めて、量子ビットの量子状態が他の量子ビットの状態に依存するという不思議な現象です。

状態ベクトルを視覚化するブロッホ球

量子ビットを単位球面上の点として視覚化するのが、Bloch(ブロッホ)球です。状態ベクトル |ψ を式(14)のように変形して、長さ1のベクトルとして表示したものです。ここでは、下の式の右辺全体にかかるグローバル位相と呼ばれる項(eiλ )を、省略しています。量子ビットを複数もちいた量子回路における量子ビットの回転操作を視覚化するのに用いられます。

|ψ=cos(θ/2)|0+eiϕsin(θ/2)|1=cos(θ/2)|0+(cosϕ+isinϕ)sin(θ/2)|1 (14)

図2 ブロッホ球

量子ゲート

古典コンピュータでは、論理ゲートは、AND, OR, NOTなどですが、量子コンピュータでは、量子ビットの回転操作を行う量子ゲートによって、計算が行われます。量子ゲートの回転操作は行列によて表わされます。式(15)のように、状態ベクトル|ψ に行列をかける演算を繰り返すことによって計算が行われます。1量子ビットの操作は、 2行×2列の 行列 U で表されます。 この行列Uを量子ゲートと呼び、量子ゲートを状態ベクトルにかけることによって、状態ベクトルに回転操作をすることができます。

|ψ=U|ψ (15)

この行列 U は、状態ベクトルにUをかけた後のベクトルも量子ビットでなければなりませんので、任意のα,β についてϕ|UU|ϕ=1 がなりたつ必要があり、そのためには、UU=UU=I である必要があります。このU は、Uの随伴行列で、行列U に対して、U の転置と成分の複素共役(実部はそのままで虚部の符号を反転する)をとったものです。このような行列 U は、ユニタリ行列と呼ばれます。以下で説明する各量子ビットゲートは、ユニタリ行列になっており、特に意識する必要はありません。

1量子ビットゲート

1量子ビットゲートには、パウリゲート、アダマールゲート、Sゲート、Tゲート、位相ゲート、回転ゲートなどがあります。

パウリゲート

ブロッホ球のX軸、Y軸、Z軸で、180°回転させるゲートで、Xゲート、Yゲート、Zゲートと呼ばれます。

X=(0110),Y=(0ii0),Z=(1001) (16)

図3 Xゲート、Yゲート、Zゲート

アダマールゲート

Z軸とX軸にたいして45度傾く軸で180°させるゲートで、Hゲートと呼ばれます。アダマールゲートを使うことにより、量子ビット |0,|1 の重ね合わせ状態を作ることができます。

H=12(1111) (17)

|0 に、アダマールゲートを作用させたときは、以下のよう操作になります。

図4 アダマールゲート

S, Tゲート

位相を回転させるゲートです。

S=(100i),S=(100i),T=(100eiπ4),T=(100eiπ4) (17)

S ゲートは π2T ゲートは π4 位相を回転します。 S,T は位相を逆に回転します。

図5 sゲート、Tゲート

位相ゲート

量子ビットを任意の位相だけ回転させるゲートです。

P(ϕ)=(100eiϕ) (18)

図6 位相ゲート

回転ゲート

各軸にたいして量子ビットを回転させるゲートです。

Rx(θ)=(cos(θ2)isin(θ2)isin(θ2)cos(θ2))(19) Ry(θ)=(cos(θ2)sin(θ2)sin(θ2)cos(θ2))(20)Rz(θ)=(eiθ200eiθ2)(21)

図7 回転ゲート

2量子ビットゲート

2量子ビットゲートには、CNOTゲート、制御ユニタリゲート、SWAPゲートなどがあります。SWAPゲートを除く、2量子ビットゲートは制御タイプです。制御2量子ビットゲートは 最初の量子ビットが |1⟩ の時に、2番目の量子ビットに対して単独の量子ビットゲートを適用します。このとき最初の量子ビットを制御量子ビットと呼び、2番目の量子ビットをターゲット量子ビットと呼びます。

基底ベクトル表記の順番

通常、状態をケットであらわすときに、「1番目」の量子ビット、「2番目」の量子ビットの状態に対応する0と1を左から順番に並べて表記されます。例えば、最初の qubit が |0⟩ 状態で、2番目のものが |1⟩ 状態の場合、その結合状態は |01⟩ です。ところが、今回、プログラミングにもちいるQiskit では、古典コンピューター上でのビット列表現と同じ順序同様にし、測定が実行された後のビット文字列から整数への変換を容易にするという理由から、 最上位ビット (Most Significant Bit - MSB) を左にとり、最下位ビット (Least Significant Bit - LSB) が右にとられます。つまり、「1番目」の量子ビット、「2番目」の量子ビットの状態に対応する0と1を右から順番に並べて表記されます。上の例でいえば、最初の qubit が |0⟩ 状態で、2番目のものが |1⟩ 状態の場合、その結合状態は |10⟩ となります。この点は、注意が必要です。 今回は、Qiskitをもちいたプログラミングを紹介しますので、以下では、Qiskitの基底ベクトル表記を用います。

CNOTゲート

制御Xゲートとも呼ばれます。制御量子ビットが、|1 のとき、対象となる量子ビットを反転、つまりXゲートを作用させます。MSBを制御ビットとしたときは、以下のようになります。Qiskitでは、 cx(q[1],q[0])

CX=(1000010000010010)(22)

LSBを制御にした場合は、以下のようになります。Qiskitではcx(q[0],q[1])

CX=(1000000100100100)(23)
制御ユニタリゲート

CNOTでは、ターゲット量子ビットに、Xゲートを作用させましたが、その他の量子ゲート U を作用させることができます。

制御Zゲート

制御量子ビットが |1⟩ である場合には、Z ゲートがターゲット量子ビットの位相を反転させます。 この行列は、制御量子ビットが、MSBでも、LSBでも、同じになります。

CZ=(1000010000100001)(24)
制御アダマールゲート

制御量子ビットが |1⟩ のとき、ターゲット量子ビットに H ゲートを作用させます。制御がLSB量子ビットの時は、以下のようになります。

CH=(10000120120010012012)(25)
SWAPゲート

SWAPゲートは2量子ビットの値を交換します。

SWAP=(1000001001000001)(26)

主な量子ゲートまとめ

ゲート回路行列
パウリXゲートimage-20211206135707260(0110)
パウリZゲートimage-20211206135839572(1001)
アダマールゲートimage-2021120614105062912(1111)
Tゲートimage-20211206141308744(100eiπ4)
CNOTゲート(1000010000010010)

図8 主な量子ゲートのまとめ

量子コンピュータはどのように計算をするのか

これまで、量子ビットとはなにか、量子ゲートにはどのようなものがあるかを見てきました。では、量子コンピュータは、量子ビット、量子ゲートを用いて、どのように計算をするのでしょうか。

量子コンピュータでは、まず、すべての状態の重ね合わせを準備します。この状態に、量子ビット間を干渉させるための操作つまり量子ゲートによる操作を順次施します。状態ベクトルつまり量子ビットは、波の性格をもつため干渉するというのがポイントです。量子ビットの間の干渉の結果を測定することによって計算が行われます。複数の量子ビットの状態を同時に操作できるのも量子コンピュータの大きな特徴の一つです。

図9 量子コンピュータの基本

量子ビットの操作は具体的にどうするのか

これまで、量子ビットや量子ゲートを、ベクトルや行列で説明してきましたが、量子コンピュータでは、具体的に、どのように量子ビットを操作しているのかでしょうか。代表的な量子ビットである超電導量子ビットの場合で、見てみたいとおもいます。

超電導量子ビットは、図10に示すように、2つの超電導電極を薄い絶縁膜でつないだものです。

図10 超電導量子ビットの構造

これは、非線形インダクタとコンデンサによるLC共振回路とみなせます。量子状態 |0|1 を持ち、2つの状態の間のエネルギー差のマイクロ波(典型的には4~6GHz)を印加することによって、量子状態を、 |0 から |1 に変化させることができます。

図11 超電導量子ビットの操作 (12)

重ね合わせ状態をつくるには、|0 から|1への操作を途中でやめます。様々な量子ゲート操作を行うには、それにしたがったパルス操作を行います。ゲート操作を順次繰り返し、最後に測定をすることによって、計算が行われます。また、量子もつれ操作を行うため、量子ビットの間が共振器で結ばれます。

図12 超電導量子チップの構造 (13)

出所: https://www.ibm.com/blogs/research/2017/11/qubit-explained/

ゲート操作の例

図13の上の縦軸は電磁波の強度を表しています。実線が1量子ビットの操作で、破線が2量子ビットの操作です。まず、初期状態を準備し、量子回路を通した後、計測を行います。このように、マイクロ波や交流パルスを、順次、印加することによって、量子ビットを操作し、計算を行っていきます。図13の下に対応するゲートからなる量子回路をしめしています。

図13 量子ビットゲート操作の例 (14)

出所: https://journals.aps.org/prx/pdf/10.1103/PhysRevX.6.031007

量子コンピュータは万能

古典コンピュータが、NANDゲートをくみあわせれば任意の計算が可能なように、CNOT、アダマールゲート、Tゲートがあれば任意の計算が可能なことがわかっています。ただし、ノイズの影響により正しい計算ができるかどうか、その計算が早いかどうかは別問題だということに注意が必要です。

図14 古典コンピュータと量子コンピュータ

量子コンピュータの制約事項・課題

理想的な量子コンピュータは万能であり、古典コンピュータを凌ぐ能力があることはわかっています。ただし、まだまだ、多くの制約事項や課題をかかえています。

このように、現時点のハードウェアでは、演算中に発生するエラーで正しい計算を行うことが困難なことに加えて、コヒーレンス時間の制約から、深い量子回路の計算も困難です。誤り訂正ありの量子コンピュータが実現されて初めて、実用的な計算を行うことができると言われています。

量子コンピュータの現在

誤り訂正ありの量子コンピュータの実現は、まだまだ先のことです。現在実現されているハードウェアは、エラーの原因となるノイズがある中規模量子デバイス、Noisy Intermediate-Scale Quantumです。今後は、NISQと呼びます。現時点では、性能・機能に制約が多いNISQのうまい使い方の研究開発が進められていたり、誤り訂正ありの量子コンピュータの応用研究がすすめられている段階です。また、現在のNISQで解ける問題の規模は限られており、古典コンピュータで十分高速に解くことができます。

規模が大きくなると古典コンピュータで解くことが困難な問題の一つに、巡回セールスマン問題などの組み合わせ最適化問題があります。セールスマン巡回問題とは、セールスマンが所定の複数の都市を1回だけ巡回する最短経路を計算するというものです。都市数が増加すると計算量が急速に増加しますので、都市数が多くなると現実的な時間で計算が終わりません。このような問題を現実的な時間で解くことが、量子コンピュータに期待されていますが、残念ながら、現状では、量子コンピュータで扱える都市数が少ないとともに、古典コンピュータに勝る計算速度が実現されているわけではありません。今後の量子コンピュータの発展が期待されています。

量子アルゴリズムの種類

量子コンピュータでは、すべての状態の重ね合わせを準備し、順次、量子ゲートの操作を加えていき、量子ビット間の干渉を起こさせ、回答が高確率で得られるような特別なアルゴリズムが必要です。これは古典コンピュータで、様々なアルゴリズムが作られているのと同じです。量子アルゴリズムは、大きく2つに分類されます。

FTQCアルゴリズム

FTQCアルゴリズムの代表的なものには、以下のようなものがあります。

NISQアルゴリズム

NISQアルゴリズムには、以下のものがあります。

 

参考文献

(1)IBM Quantumで学ぶ量子コンピュータ 湊雄一郎他著

(2)インターフェース 2019年3月号

(3)Quantum Native Dojo https://dojo.qulacs.org/ja/latest/

(4)Qmedia https://www.qmedia.jp/

(5)量子コンピューターの基礎 藤井 啓祐 オペレーションズ・リサーチ 2018 年 6 月号 http://www.orsj.or.jp/archive2/or63-6/or63_6_311.pdf

(6)量子コンピュータの応用 - QAOAの仕組みとこれを応用した組合せ最適化問題のプログラミング https://blueqat.com/tetsurotabata/3a8425d5-68a3-4a8b-9773-2c3940bf5898

(7)Solving combinatorial optimization problems using QAOA https://qiskit.org/textbook/ch-applications/qaoa.html

(8)QC — How to build a Quantum Computer with Superconducting Circuit? https://jonathan-hui.medium.com/qc-how-to-build-a-quantum-computer-with-superconducting-circuit-4c30b1b296cd

(9)IBM Research Blog What’s in a qubit? https://www.ibm.com/blogs/research/2017/11/qubit-explained/

(10)P. J. J. O’Malley et al., Scalable Quantum Simulation of Molecular Energies, PHYSICAL REVIEW X 6, 031007 (2016)


Copyright © AiSpirits All Rights Reserved.