주 콘텐츠로 건너뛰기

참조 상태

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

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

기본 상태​

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

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

고전적 참조 상태​

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

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를 정의할 수 있습니다.