Help us understand the problem. What is going on with this article?

極座標で覚える量子コンピュータ

はじめに

量子コンピュータを実務で使うには、効率的に教育を行う必要もあり、見方を考えてみます。特に最近はNISQと呼ばれる近年利用される量子古典ハイブリッド方式の計算については角度パラメータを多用するため、最初から極座標で覚えてしまった方がいいのでは、とふと思いました。

今後勉強会を通じて資料をアップしたものをどんどん公開して行きます。

量子ビットとデータと量子状態

量子コンピュータは1量子ビットと呼ばれる単位でのデータは球上の点として表現できます。量子コンピュータは0と1に制約されず、ブロッホ球と呼ばれる球の上のどの点でもとることができます。

無題のプレゼンテーション.png

このデータは量子状態と呼ばれ、$\mid \psi \rangle$(プサイ)で表現されます。右向きの鍵かっこの向きは縦ベクトルを意味します。|0>と|1>にはそれぞれ、下記のようなベクトルが割り当てられます。

\mid 0 \rangle = \begin{bmatrix}1\\0\end{bmatrix}, \mid 1 \rangle = \begin{bmatrix}0\\1\end{bmatrix}

量子状態の|ψ>は、|0>と|1>を使って、

\mid \psi \rangle = \alpha \mid 0 \rangle + \beta \mid 1 \rangle = \alpha \begin{bmatrix}1\\0\end{bmatrix} + \beta \begin{bmatrix}0\\1\end{bmatrix} = \begin{bmatrix}\alpha \\ \beta \end{bmatrix}

と表せます。これら量子状態を表すベクトルのことを「状態ベクトル」と呼びます。波動関数とも呼ばれます。上記は|0>状態と|1>の状態を使って表現されるので、重ね合わせとも呼ばれます。あとは、今後角度をよく使うので、オイラーの公式は度々登場します。

e^{i\theta} = cos\theta + i sin\theta

初期状態と状態操作(量子ゲート)

上記の状態ベクトルは初期状態は通常量子コンピュータの場合には全て、

\mid 0 \rangle = \begin{bmatrix}1\\0\end{bmatrix}

の状態からスタートします。上記のように量子状態を変化させるには量子ゲートと呼ばれる操作を使います。量子ゲートは、先ほどのブロッホ球を思い出してみると、

無題のプレゼンテーション.png

xyz軸の3軸あります。量子ゲートはこれらの軸周りの回転操作に全て対応します。教科書にはたくさんの種類のゲートが出てきますが、基本的には3種類のパウリゲートから成り立ち、その他はその派生になります。

X=
\begin{bmatrix}
0&1 \\
1&0
\end{bmatrix},
Y=
\begin{bmatrix}
0&-i \\
i&0
\end{bmatrix},
Z=
\begin{bmatrix}
1&0 \\
0&-1
\end{bmatrix}

それぞれ、xyz軸周りの180度(π)の回転に相当します。これらを任意回転に展開したパウリ回転ゲートをよく使いますが、それはAをパウリ行列として、

R_A = e^{-iA\frac{\theta}{2}} = cos\frac{\theta}{2} I - i sin\frac{\theta}{2}A

と定義され、それぞれXYZゲートに関して、

Rx(\theta) = 
e^{-iX\frac{\theta}{2}} = 
cos\frac{\theta}{2} I - i sin\frac{\theta}{2}X = 
cos\frac{\theta}{2}
\begin{bmatrix}
1&0\\0&1
\end{bmatrix}
- i sin\frac{\theta}{2}
\begin{bmatrix}
0&1\\1&0
\end{bmatrix}
=
\begin{bmatrix} \cos\left(\frac{\theta}{2}\right) &
-i\sin\left(\frac{\theta}{2}\right)\\
-i\sin\left(\frac{\theta}{2}\right) &
\cos\left(\frac{\theta}{2}\right) \end{bmatrix}\\

Ry(\theta) =
e^{-iY\frac{\theta}{2}} = 
cos\frac{\theta}{2} I - i sin\frac{\theta}{2}Y = 
cos\frac{\theta}{2}
\begin{bmatrix}
1&0\\0&1
\end{bmatrix}
- i sin\frac{\theta}{2}
\begin{bmatrix}
0&-i\\i&0
\end{bmatrix}
=
\begin{bmatrix} \cos\left(\frac{\theta}{2}\right) &
-\sin\left(\frac{\theta}{2}\right)\\
\sin\left(\frac{\theta}{2}\right) &
\cos\left(\frac{\theta}{2}\right) \end{bmatrix}\\

Rz(\theta) =
e^{-iZ\frac{\theta}{2}} = 
cos\frac{\theta}{2} I - i sin\frac{\theta}{2}Z = 
cos\frac{\theta}{2}
\begin{bmatrix}
1&0\\0&1
\end{bmatrix}
- i sin\frac{\theta}{2}
\begin{bmatrix}
1&0\\0&-1
\end{bmatrix}
=
\begin{bmatrix} e^{-i\frac{\theta}{2}} & 0\\ 0 & e^{i\frac{\theta}{2}} \end{bmatrix}

グローバル位相と言って、ブロッホ球全体を回転させても相対的な回転は変わらないので、Rzは、

Rz(\theta) =
\begin{bmatrix} 1 & 0\\ 0 & e^{i\theta} \end{bmatrix}

とかかることもありますが、同じことです。

量子ゲートは、状態ベクトルにかけることで計算できます。

X
\begin{bmatrix}
1 \\
0
\end{bmatrix}
=
\begin{bmatrix}
0&1 \\
1&0
\end{bmatrix}
\begin{bmatrix}
1 \\
0
\end{bmatrix}
=
\begin{bmatrix}
0 \\
1
\end{bmatrix}

1量子ビットの任意量子状態の表現

上記の操作を利用して1量子ビットの任意の量子状態を表現する場合、球上の点は角度2つで表現することができる。初期状態は|0>からスタートするので、Rzは便宜上簡単な方を使って、

\mid \psi \rangle
=
Rz(\phi)Ry(\theta)\mid 0 \rangle
=
\begin{bmatrix} 1 & 0\\ 0 & e^{i\phi} \end{bmatrix}
\begin{bmatrix} \cos\left(\frac{\theta}{2}\right) &
-\sin\left(\frac{\theta}{2}\right)\\
\sin\left(\frac{\theta}{2}\right) &
\cos\left(\frac{\theta}{2}\right) \end{bmatrix}
\begin{bmatrix}
1 \\
0
\end{bmatrix}
=
\begin{bmatrix}
\cos\left(\frac{\phi}{2}\right)\\
e^{i\theta}\sin\left(\frac{\theta}{2}\right)
\end{bmatrix}

となりました。ここでは角度は2パラメータ利用しましたが、便宜上Rx,Ry,Rzあると便利なので3つ使います。1量子ビットの状態表現は、上記を基本として、

RzRyRz とか RxRyRz とかいろいろありますが、どれでもいいと思います。

2量子ビット以上の量子状態

2量子ビット以上の量子状態は上記の重ね合わせ表現を拡張します。テンソル積という計算を使います。

\begin{bmatrix}
a \\
b
\end{bmatrix}
\otimes
\begin{bmatrix}
c \\
d
\end{bmatrix}
=
\begin{bmatrix}
a*
\begin{bmatrix}
c\\
d
\end{bmatrix}
 \\
b*
\begin{bmatrix}
c\\
d
\end{bmatrix}
\end{bmatrix}
=
\begin{bmatrix}
ac \\
ad \\
bc \\
bd
\end{bmatrix}

3量子ビットでも同様です。

\begin{bmatrix}
a \\
b
\end{bmatrix}
\otimes
\begin{bmatrix}
c \\
d
\end{bmatrix}
\otimes
\begin{bmatrix}
e \\
f
\end{bmatrix}
=

\begin{bmatrix}
ac *
\begin{bmatrix}
e \\
f
\end{bmatrix} \\
ad*
\begin{bmatrix}
e \\
f
\end{bmatrix} \\
bc*
\begin{bmatrix}
e \\
f
\end{bmatrix} \\
bd*
\begin{bmatrix}
e \\
f
\end{bmatrix}
\end{bmatrix}
=
\begin{bmatrix}
ace\\
acf\\
ade\\
adf\\
bce\\
bcf\\
bde\\
bdf
\end{bmatrix}

ゲートもテンソル積を活用できます。

\begin{bmatrix}
a&b \\
c&d
\end{bmatrix}
\otimes
\begin{bmatrix}
e&f \\
g&h
\end{bmatrix} \\
=
\begin{bmatrix}
a*
\begin{bmatrix}
e&f \\
g&h
\end{bmatrix}
&b*
\begin{bmatrix}
e&f \\
g&h
\end{bmatrix}
\\
c*
\begin{bmatrix}
e&f \\
g&h
\end{bmatrix}
&d*
\begin{bmatrix}
e&f \\
g&h
\end{bmatrix}
\end{bmatrix}
=
\begin{bmatrix}
ae&af&be&bf\\
ag&ah&bg&bh\\
ce&cf&de&df\\
cg&ch&dg&dh
\end{bmatrix}

上記テンソル積で書いたり分解したりできるのは状態がもつれていない時だけで、もつれを見てみます。

もつれ

もつれは2量子ビット以上の複数の量子状態がテンソル積で表現できない場合です。量子ゲートとしてCXゲートを見てみます。CUゲート、コントロールユニタリーゲートは、条件付きの2量子ビットゲートです。

CU = 
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&a&b\\
0&0&c&d
\end{bmatrix}

a,b,c,dの部分は上でのXYZゲートの要素にあたります。

CX = 
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{bmatrix}

のような感じです。状態の重ね合わさった量子状態1と重ね合わさっていない量子状態2のテンソル積を条件付きのCXで操作してみると、

CX
\begin{bmatrix}
1\\0\\1\\0
\end{bmatrix}
=
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{bmatrix}
\begin{bmatrix}
1\\0\\1\\0
\end{bmatrix}
=
\begin{bmatrix}
1\\0\\0\\1
\end{bmatrix}

これはテンソル積では表現できなくなりました。このようにもはや2つのブロッホ球で表現できない形となりました。

測定

通常測定は、|0>と|1>の確率を見て測定をします。ただ、ブロッホ球を再々度確認してみると、

無題のプレゼンテーション.png

XY平面上にデータがある場合、Z軸で測定をするとデータがどこにあっても|0>と|1>が50%ずつ出てしまってきちんと測定できません。その際には軸を変更して測定をするということがあります。まず普通の測定から考えてみましょう。

通常の測定はZ軸上で行います。

\langle \psi \mid Z \mid \psi \rangle

という値を計算することによって、

\begin{bmatrix}\alpha^*&\beta^*\end{bmatrix}\begin{bmatrix}1&0\\0&-1\end{bmatrix}\begin{bmatrix}\alpha\\\beta\end{bmatrix}  = \mid \alpha \mid ^2 - \mid \beta \mid ^2

となり、|0>の出現確率-|1>の出現確率の期待値を計算できます。これは量子状態をZ軸上で測定したときにある目安になります。しかし、確率振幅がほぼ等しい時は、期待値が0になります。実際には量子状態はXY平面にあるので、その量子状態をとるためには、X軸もしくはY軸で測定をする必要があります。

その際に、状態ベクトル全体を90度回転させること、もしくは軸を90度回転させるということに該当するため、X軸で測定をしたいときには、

\langle \psi \mid X \mid \psi \rangle = \langle \psi \mid HZH \mid \psi \rangle = \langle \psi' \mid Z \mid \psi' \rangle

のようにできます。Yも同様です。

まとめ

基本的に、XYZとCXのゲートと、測定の変換(今後見ます)を覚えれば、主に機械学習などはほぼ事足りてしまいます。

mdrft
量子コンピュータのアプリケーション、ミドルウェア、ハードウェアをフルスタックで開発
https://blueqat.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした