주 콘텐츠로 건너뛰기

참조 상태

이 강의에서는 변분 알고리즘이 더 빠르게 수렴하도록 돕기 위해 참조 상태로 시스템을 초기화하는 방법을 살펴봅니다. 먼저 참조 상태를 수동으로 구성하는 방법을 배우고, 이어서 변분 알고리즘에서 사용할 수 있는 몇 가지 표준적인 선택지를 탐구합니다.

Diagram of options for references states including default, application-specific, and quantum.

기본 상태

참조 상태는 우리 문제의 고정된 초기 시작 상태를 의미합니다. 참조 상태를 준비하려면 Quantum Circuit의 시작 부분에 적절한 비매개변수 유니타리 URU_R을 적용하여 ρ=UR0|\rho\rangle = U_R |0\rangle이 되도록 해야 합니다. 만약 기존 최적해에서 얻은 유용한 추측이나 데이터 포인트가 있다면, 이를 시작점으로 사용할 때 변분 알고리즘이 더 빠르게 수렴할 가능성이 높습니다.

가장 간단한 참조 상태는 기본 상태로, nn-Qubit Quantum Circuit의 시작 상태인 0n|0\rangle^{\otimes n}을 사용합니다. 기본 상태의 경우 유니타리 연산자는 URIU_R \equiv I가 됩니다. 단순성 덕분에 기본 상태는 많은 상황에서 유효한 참조 상태로 사용됩니다.

고전적 참조 상태

세 개의 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")

Output of the previous code cell

양자 참조 상태

12(100+111)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle)처럼 중첩 및/또는 얽힘을 포함하는 더 복잡한 상태에서 시작하려 한다고 가정해 봅니다.

000|000\rangle에서 이 상태를 얻는 한 가지 방법은 Qubit 00Hadamard gate(H0H_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")

Output of the previous code cell

템플릿 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")

Output of the previous code cell

응용 분야별 참조 상태

양자 기계 학습

변분 양자 분류기(VQC)의 맥락에서 훈련 데이터는 *특성 맵(feature map)*으로 알려진 매개변수화된 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")

Output of the previous code cell

요약

이 강의를 통해 다음을 이용해 시스템을 초기화하는 방법을 배웠습니다.

  • 기본 참조 상태
  • 고전적 참조 상태
  • 양자 참조 상태
  • 응용 분야별 참조 상태

고수준의 변분 워크로드는 다음과 같이 보입니다.

A circuit diagram of a unitary operator preparing a reference state.

참조 상태는 고정된 초기 시작점이지만, *변분 형식(variational form)*을 사용하여 변분 알고리즘이 탐색할 매개변수화된 상태의 집합을 나타내는 ansatz를 정의할 수 있습니다.