Path: blob/main/translations/ja/ch-quantum-hardware/accessing_higher_energy_states.ipynb
3857 views
Qiskit Pulseで高エネルギー状態へアクセスする
物理学的背景
ここで、IBMの量子ハードウェアの多くの基礎となっている、トランズモンキュービットの物理学的な背景を説明します。このシステムには、ジョセフソン接合とコンデンサーで構成される超伝導回路が含まれています。超伝導回路に不慣れな方は、こちらのレビュー (Ref. 2)を参照してください。このシステムのハミルトニアンは以下で与えられます。
ここで、はコンデンサーのエネルギーとジョセフソンエネルギーを示し、は減衰した電荷数演算子で、はジャンクションのために減衰した磁束です。として扱います。
トランズモンキュービットはが小さい領域で定義されるため、をテイラー級数で展開できます(定数項を無視します)。
の二次の項は、標準の調和振動子を定義します。その他の追加の項はそれぞれ非調和性をもたらします。
の関係を使うと(は生成消滅演算子)、システムは以下のハミルトニアンを持つダフィング(Duffing)振動子に似ていることを示せます。
は、の励起周波数()を与え、はの周波数との周波数の間の非調和です。必要に応じて駆動の条件を追加できます。
標準の2次元部分空間へ特化したい場合は、 を十分に大きくとるか、高エネルギー状態を抑制する特別な制御テクニックを使います。
まず、依存関係をインポートし、いくつかのデフォルトの変数を定義します。量子ビット0を実験に使います。公開されている単一量子ビットデバイスであるibmq_armonkで実験を行います。
いくつか便利な関数を追加で定義します。
次に、駆動パルスと測定のためのいくつかのデフォルトパラメーターを含めます。命令スケジュールマップから(バックエンドデフォルトから)measureコマンドをプルして、新しいキャリブレーションでアップデートされるようにします。
このセクションでは、標準のとの状態の識別器を構築します。識別器のジョブは、meas_level=1の複素数データを取得し、標準ののの状態(meas_level=2)に分類することです。これは、前の章の多くと同じ作業です。この結果は、このNotebookがフォーカスしている高エネルギー状態に励起するために必要です。
識別器の構築の最初のステップは、前の章でやったのと同じように、我々の量子ビット周波数をキャリブレーションすることです。
データをローレンツ曲線に適合させ、キャリブレーションされた周波数を抽出します。
次に、パルスの振幅を計算するラビ実験を実行します。パルスは、からの状態へ移動させるパルス(ブロッホ球上での回転)だということを思い出してください。
この結果を使って、 パルスを定義します。
これで、キャリブレーションされた周波数とパルスを得たので、との状態の識別器を構築できます。識別器は、IQ平面においてmeas_level=1のデータを取って、それをまたはを判別することで機能します。
との状態は、IQ平面上で重心として知られているコヒーレントな円形の"ブロブ"を形成します。重心の中心は、各状態の正確なノイズのないIQポイントを定義します。周囲の雲は、様々なノイズ源から生成されたデータの分散を示します。
と間を識別(判別)するために、機械学習のテクニック、線形判別分析を適用します。この方法は量子ビットの状態を判別する一般的なテクニックです。
最初のステップは、重心データを得ることです。そのために、2つのスケジュールを定義します(システムがの状態から始まることを思い出しましょう。):
の状態を直接測定します(の重心を得ます)。
パルスを適用して、測定します(の重心を得ます)。
以下のように、IQプロットを表示します。青の重心は状態で、赤の重心は状態です。(注:プロットが見えないときは、Notebookを再実行してください。)
さて、実際に識別器を構築する時が来ました。先に述べたように、線形判別分析(Linear Discriminant Analysis, LDA)と呼ばれる機械学習のテクニックを使います。LDAは、任意のデータセットをカテゴリーのセット(ここではと)に分類するために、各カテゴリーの平均の間の距離を最大化し、各カテゴリーの分散を最小化します。より詳しくは、こちら (Ref. 3)をご覧ください。
LDAは、セパラトリックス(separatrix)と呼ばれるラインを生成します。与えられたデータポイントがどちら側のセパラトリックスにあるかに応じて、それがどのカテゴリーに属しているかを判別できます。我々の場合、セパラトリックスの片側が状態で、もう一方の側がの状態です。
我々は、最初の半分のデータを学習用に使い、残りの半分をテスト用に使います。LDAの実装のためにscikit.learnを使います:将来のリリースでは、この機能は、Qiskit-Ignisに直接実装されてリリースされる予定です(ここを参照)。
結果データを判別に適したフォーマットになるように再形成します。
次に、学習用データとテスト用データを分割します。期待される結果(基底状態のスケジュールは0の配列、励起状態のスケジュールは1の配列)を含む状態ベクトルを使ってテストします。
最後に、モデルを設定して、学習します。学習精度が表示されます。
最後のステップは、セパラトリックスをプロットすることです。
セラパトリックスのどちらのサイドがどの重心(つまり状態)に対応しているか確認します。IQ平面上の点が与えられると、このモデルはセラパトリックスのどちらの側にそれが置かれているかチェックし、対応する状態を返します。
の識別器をキャリブレーションしたので、高エネルギー状態の励起に移ります。特に、の状態の励起にフォーカスし、ととの状態をそれぞれのIQデータポイントから判別する識別器を構築することに焦点を当てます。さらに高い状態(、など)の手順も同様ですが、明示的にテストはしていません。
高い状態の識別器を構築する手順は以下の通りです:
周波数を計算します。
のためのパルスの振幅を得るためにラビ実験を行います。そのためには、まず、 パルスを適用して、からの状態にします。次に、上記で得た周波数において、駆動振幅のスイープを行います。
3つのスケジュールを構成します: a. 0スケジュール:基底状態を測定するだけです。 b. 1スケジュール: パルスを適用し、測定します。 c. 2スケジュール: パルスを適用し、次に パルスを適用し測定します。
各スケジュールのデータを学習用データとテスト用データのセットに分け、判別用のLDAモデルを構築します。
キャリブレーションの最初のステップは、 の状態に移行するために必要な周波数を計算することです。これを行うには2つの方法があります:
基底状態から周波数をスイープし、非常に高い電力をかけます。印加電力が十分に高い場合には、2つのピークが観測されます。1つはセクション 1で見つかった 周波数で、もう一つは、周波数です。周波数は2つの差を取ることで得られます。残念ながら、
ibmq_armonkでは、最大駆動電力はこの遷移を起こすのに十分ではありません。代わりに、2番目の方法を使います。パルスを適用して、状態を励起します。その後、状態のさらに上の励起に対して、周波数スイープを実行します。周波数より低いところで、周波数に対応した単一ピークが観測されるはずです。
上記の2番目の方法に従いましょう。 パルスを駆動するために、ローカル共振(local oscilattor, LO)周波数が必要です。これは、キャリブレーションされた周波数cal_qubit_freq(セクション1のラビパルスの構築を参照)によって与えられます。ただし、周波数の範囲をスイープするために、LO周波数を変化させる必要があります。残念ながら、Pulseのスペックでは、各スケジュールごとに、一つのLO周波数が必要です。
これを解決するには、LO周波数をcal_qubit_freqにセットし、をfreq-cal_qubit_freqでパルスの上にサイン関数を乗算します。ここでfreqは目的のスキャン周波数です。知られているように、正弦波サイドバンドを適用すると、プログラムのアセンブル時に手動で設定せずにLO周波数を変更可能です。
プログラムをアセンブルするためのロジックをメソッドにラップして、プログラムを実行します。
最小値が GHz近辺に見られます。いくつかの偽の最大値がありますが、それらは、周波数には大きすぎます。最小値が周波数に対応します。
相対最小関数を使って、この点の値を正確に計算します。これで、周波数の推定値が得られます。
上記で得られた推定値を使って、より正確な掃引を行います(つまり、大幅に狭い範囲で掃引を行います)。これによって、周波数のより正確な値を得ることができます。上下 MHzをスイープします。
標準ローレンツ曲線を用いて、このより正確な信号をプロットしてフィットします。
これで、周波数の良い推定が得られたので、遷移のためのパルス振幅を得るためのラビ実験を行います。そのために、 パルスを適用してから、周波数において駆動振幅をスイープします(サイドバンド法を使います)。
We plot and fit our data as before.
この情報を使って、 パルスを定義できます。(必ず、周波数でサイドバンドを追加してください。)
とうとう、 とと状態の識別器を構築できます。手順はセクション1と同様ですが、状態のためにスケジュールを追加します。
3つのスケジュールがあります。(再度、私たちのシステムがから開始することを思い出してください):
状態を直接測定します。(の重心を得ます。)
パルスを適用し、測定します。(の重心を得ます。)
パルスを適用した後、 パルスを適用しそして測定します。(の重心を得ます。)
プログラムを構築し、IQ平面上に重心をプロットします。
今回は、状態に対応した3個目の重心が観測されます。(注:プロットが見えない場合は、Notebookを再実行してください。)
このデータで、識別器を構築します。再びscikit.learn を使って線形判別分析(LDA)を使います。
LDAのためにデータを形成することから始めます。
次に、学習用データとテスト用データを分割します(前回と同じように半分ずつです)。テスト用データは、0スケジュールの場合、0の配列が含まれたベクトルで、1スケジュールの場合、1の配列が含まれたベクトルで、2スケジュールの場合2の配列が含まれたベクトルです。
最後に、モデルを設定して学習します。学習の精度が出力されます。
最後のステップは、セパラトリックスのプロットです。
3つの重心を得たので、セラパトリックスは線ではなく、2つの線の組み合わせを含む曲線になります。、との状態を区別するために、私たちのモデルは、IQ上の点がセラパトリックスのどの側にあるかどこにあるかチェックし、それに応じて分類します。
D. C. McKay, T. Alexander, L. Bello, M. J. Biercuk, L. Bishop, J. Chen, J. M. Chow, A. D. C ́orcoles, D. Egger, S. Filipp, J. Gomez, M. Hush, A. Javadi-Abhari, D. Moreda, P. Nation, B. Paulovicks, E. Winston, C. J. Wood, J. Wootton, and J. M. Gambetta, “Qiskit backend specifications for OpenQASM and OpenPulse experiments,” 2018, https://arxiv.org/abs/1809.03452.
Krantz, P. et al. “A Quantum Engineer’s Guide to Superconducting Qubits.” Applied Physics Reviews 6.2 (2019): 021318, https://arxiv.org/abs/1904.06560.
Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 2825-2830, 2011, https://scikit-learn.org/stable/modules/lda_qda.html#id4.