はじめに
量子コンピュータを実務で使うには、効率的に教育を行う必要もあり、見方を考えてみます。特に最近はNISQと呼ばれる近年利用される量子古典ハイブリッド方式の計算については角度パラメータを多用するため、最初から極座標で覚えてしまった方がいいのでは、とふと思いました。
量子ビットとデータと量子状態
量子コンピュータは1量子ビットと呼ばれる単位でのデータは球上の点として表現できます。量子コンピュータは0と1に制約されず、ブロッホ球と呼ばれる球の上のどの点でもとることができます。

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

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>の確率を見て測定をします。ただ、ブロッホ球を再々度確認してみると、

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のゲートと、測定の変換(今後見ます)を覚えれば、主に機械学習などはほぼ事足りてしまいます。