メインコンテンツへスキップ
このプロジェクトはベータ版です。バグを見つけましたか?GitHub Issueを開く。質問やアイデアがありますか?Discussionsで質問する — フィードバックをお待ちしています!
このページの翻訳品質はいかがですか?

参照状態

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

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

デフォルト状態​

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

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

古典的な参照状態​

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

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

# 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")

前のコードセルの出力

量子参照状態​

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

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

このシナリオでは、ユニタリ演算子は UR≡X2CNOT01H0∣000⟩U_{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 図

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