参照状態
このレッスンでは、参照状態を使ってシステムを初期化し、変分アルゴリズムの収束を早める方法を探ります。まず参照状態を手動で構築する方法を学び、次に変分アルゴリズムで利用できる標準的なオプションをいくつか見ていきます。
デフォルト状態
参照状態とは、問題に対する固定された初期出発点を指します。参照状態を準備するには、量子回路の先頭に適切な非パラメータ化ユニタリ を適用して となるようにする必要があります。根拠のある推測や、既存の最適解から得られたデータ点がある場合、それを出発点として使用することで変分アルゴリズムはより早く収束する可能性があります。
最もシンプルな参照状態はデフォルト状態で、 qubit の量子回路の初期状態 を使用します。デフォルト状態ではユニタリ演算子 となります。そのシンプルさゆえに、デフォルト状態は多くのシナリオで有効な参照状態として使用されます。
古典的な参照状態
3 qubit のシステムがあり、デフォルト状態 ではなく から始めたいとします。これは純粋に古典的な参照状態の例であり、構築するには Qiskit の qubit の順序に従って qubit に X Gate を適用するだけです。 となります。
この場合、ユニタリ演算子は であり、参照状態は となります。
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.x(0)
qc.draw("mpl")
量子参照状態
のような重ね合わせやエンタングルメントを含むより複雑な状態から始めることを目指す場合を考えます。
からこの状態を得る一つのアプローチは、qubit に Hadamard Gate()を適用し、qubit を制御 qubit、qubit をターゲット qubit とする CNOT (CX) Gate()を適用し、最後に qubit に Gate()を適用する方法です。
このシナリオでは、ユニタリ演算子は となり、参照状態は となります。
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 はデータ点()をこの特徴マップに渡すために利用できるパラメータ化された 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")
まとめ
このレッスンでは、以下を使ってシステムを初期化する方法を学びました。
-
デフォルト参照状態
-
古典的な参照状態
-
量子参照状態
-
アプリケーション固有の参照状態
高レベルの変分ワークロードは次のようになります。
参照状態は固定された初期出発点ですが、変分形式を使ってアンザッツを定義することで、変分アルゴリズムが探索するパラメータ化された状態の集合を表現することができます。