量子状態トモグラフィのチュートリアル(Qiskit)をやってみる

この記事は量子コンピュータ Advent Calendar 2020の12/9ぶんです。
qiita.com


こんにちは。Kumaです。
この記事では、量子状態を測定で特定する方法を考えたいと思います。
使う手法は「量子状態トモグラフィ」と呼ばれるものです。

量子状態トモグラフィ

量子状態トモグラフィ を説明するには、量子状態の密度演算子とそのパウリ行列展開を考える必要があります。
electrodynamics.hatenablog.com
qiita.com


量子状態は一般に複素ベクトル | \psi \rangle で表現できますが、密度演算子表示というものもあります。
密度演算子は、 \rho = | \psi \rangle \langle \psi | で定義されます。(ベクトルの外積なので、行列になります)
密度演算子はエルミート演算子であって、パウリ行列 \sigma_{x},  \sigma_{y},  \sigma_{z}を基底として展開できます。
その座標成分(展開したときの係数)は必ず実数となります。
注目したいのは、これらの係数が観測可能な物理量となっていることです。
たとえば1量子ビットの場合、係数は(定数を除けば)3つあるのですが、それぞれ x,y,z方向のスピンの期待値 \langle  \psi   | \sigma_{x,y,z} | \psi \rangleに対応します。
スピンの期待値を測ることで、係数が求まり、密度演算子が判明します。

ここで重要な注意ですが、 x,y,z方向のスピンの期待値は、同時には測定できません。
なぜならば、 x,y,z方向のスピンを表す演算子は可換ではないからです。
また、期待値を求めなければならないので、状態の生成と測定を繰り返す必要があります。(測定のつど、状態は射影されて変わってしまうので、再度生成が必要となる)
一般には、雑音もある実回路で毎回同じ状態を用意できるとは限りませんので、これも注意が必要なポイントです。

Qiskitによるチュートリアル

Qiskitには量子状態トモグラフィのチュートリアルもあります。
qiskit.org

これを実行してみます。まず、pip install qiskit , pip install pylatexenc の後に、importしていきます。

f:id:phymath1991:20201208031434p:plain

次に、推定してみたい量子状態を定義します。
f:id:phymath1991:20201208031556p:plain
f:id:phymath1991:20201208031623p:plain

量子状態トモグラフィをかける回路を作ります。
f:id:phymath1991:20201208031713p:plain
ここでわざわざ冗長な6qubitの回路を用いる意味がよくわかっていません。。

基底(パウリ行列)の期待値を測定します。
そして、StateTomographyFitterに引き渡します。
f:id:phymath1991:20201208031800p:plain

密度演算子の推定を実施します。
qiskitのhelpをみると、method='lstsq'は、「最小二乗規範で推定します」ということのようです。
このあたりもよくわかっていませんが。
推定した状態と、答えの状態のフィデリティを計算します。フィデリティは1に近いほどよいです。
f:id:phymath1991:20201208032017p:plain

だいたい1に近いので、推定できていると言えますね。
ちなみに、期待値測定の結果は、実行の度変わります。(無限回測定しているわけではないので、ゆらぎがある)
よって、フィデリティも微妙に変わります。
f:id:phymath1991:20201208032335p:plain
f:id:phymath1991:20201208032354p:plain

実機でもやってみたいですね。