メインコンテンツへスキップ

参照状態

このレッスンでは、参照状態を使ってシステムを初期化し、変分アルゴリズムの収束を早める方法を探ります。まず参照状態を手動で構築する方法を学び、次に変分アルゴリズムで利用できる標準的なオプションをいくつか見ていきます。

参照状態のオプション(デフォルト、アプリケーション固有、量子)を示す図

デフォルト状態

参照状態とは、問題に対する固定された初期出発点を指します。参照状態を準備するには、量子回路の先頭に適切な非パラメータ化ユニタリ URU_R を適用して ρ=UR0|\rho\rangle = U_R |0\rangle となるようにする必要があります。既存の最適解から得られた推測値やデータ点がある場合、それを出発点として使用することで変分アルゴリズムはより早く収束する可能性があります。

最もシンプルな参照状態はデフォルト状態で、nn Qubit の量子回路の初期状態 0n|0\rangle^{\otimes n} を使用します。デフォルト状態ではユニタリ演算子 URIU_R \equiv I となります。そのシンプルさゆえに、デフォルト状態は多くのシナリオで有効な参照状態として使用されます。

古典的な参照状態

3 Qubit のシステムがあり、デフォルト状態 000|000\rangle ではなく 001|001\rangle から始めたいとします。これは純粋に古典的な参照状態の例であり、構築するには Qiskit の Qubit の順序に従って Qubit 00X Gate を適用するだけです。001=X0000|001\rangle = X_0 |000\rangle となります。

この場合、ユニタリ演算子は URX0U_R \equiv X_0 であり、参照状態は ρ001|\rho\rangle \equiv |001\rangle となります。

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.x(0)

qc.draw("mpl")

前のコードセルの出力

量子参照状態

12(100+111)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle) のような重ね合わせやエンタングルメントを含むより複雑な状態から始めることを目指す場合を考えます。

000|000\rangle からこの状態を得る一つのアプローチは、Qubit 00Hadamard GateH0H_0)を適用し、Qubit 00 を制御 Qubit、Qubit 11 をターゲット Qubit とする CNOT (CX) Gate(CNOT01CNOT_{01})を適用し、最後に Qubit 22XX Gate(X2X_2)を適用する方法です。

このシナリオでは、ユニタリ演算子は URX2CNOT01H0000U_{R} \equiv X_2CNOT_{01}H_0|000\rangle となり、参照状態は ρ12(100+111)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle) となります。

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)

qc.draw("mpl")

前のコードセルの出力

テンプレート Circuit を使った参照状態の構築

複数の調整可能なパラメータとエンタングルメントを簡単に表現できる TwoLocal などのさまざまなテンプレート Circuit を使用することもできます。これらのテンプレート Circuit については次のレッスンで詳しく説明しますが、パラメータをバインドすることで参照状態に使用することができます。

from qiskit.circuit.library import TwoLocal
from math import pi

reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]

reference_circuit = reference_circuit.assign_parameters(theta_list)

reference_circuit.decompose().draw("mpl")

前のコードセルの出力

アプリケーション固有の参照状態

量子機械学習

変分量子分類器(VQC)のコンテキストでは、トレーニングデータは特徴マップと呼ばれるパラメータ化された Circuit によって量子状態にエンコードされます。ここで各パラメータ値はトレーニングデータセットのデータ点を表します。zz_feature_map はデータ点(xx)をこの特徴マップに渡すために利用できるパラメータ化された Circuit の一種です。

from qiskit.circuit.library import zz_feature_map

data = [0.1, 0.2]

zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")

前のコードセルの出力

まとめ

このレッスンでは、以下を使ってシステムを初期化する方法を学びました。

  • デフォルト参照状態
  • 古典的な参照状態
  • 量子参照状態
  • アプリケーション固有の参照状態

高レベルの変分ワークロードは次のようになります。

参照状態を準備するユニタリ演算子の Circuit 図

参照状態は固定された初期出発点ですが、変分形式を使ってアンザッツを定義することで、変分アルゴリズムが探索するパラメータ化された状態の集合を表現することができます。