Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

Референтні стани

У цьому уроці ми розглянемо, як ініціалізувати систему за допомогою референтного стану, щоб пришвидшити збіжність варіаційного алгоритму. Спочатку навчимося будувати референтний стан вручну, а потім розглянемо кілька стандартних варіантів, які можна використовувати у варіаційному алгоритмі.

Діаграма варіантів референтних станів: стандартний, прикладний та квантовий.

Стандартний стан​

Референтний стан — це початкова фіксована точка старту для нашої задачі. Щоб підготувати референтний стан, потрібно застосувати відповідний непараметризований унітарний оператор URU_R на початку квантової схеми так, щоб ∣ρ⟩=UR∣0⟩|\rho\rangle = U_R |0\rangle. Якщо є обґрунтована здогадка або точка з відомого оптимального розв'язку, варіаційний алгоритм, скоріш за все, збіжиться швидше, якщо використати її як початкову точку.

Найпростіший референтний стан — стандартний, де початковим є стан nn-кубітної квантової схеми: ∣0⟩⊗n|0\rangle^{\otimes n}. Для стандартного стану унітарний оператор UR≡IU_R \equiv I. Завдяки простоті стандартний стан є прийнятним референтним станом у багатьох сценаріях.

Класичний референтний стан​

Припустимо, у тебе трикубітна система і ти хочеш почати зі стану ∣001⟩|001\rangle замість стандартного ∣000⟩|000\rangle. Це приклад суто класичного референтного стану: щоб його побудувати, достатньо застосувати гейт X до кубіта 00 (згідно з порядком кубітів у Qiskit), оскільки ∣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, можна використати гейт Адамара на кубіті 00 (H0H_0), гейт CNOT (CX) з кубітом 00 як контрольним і кубітом 11 як цільовим (CNOT01CNOT_{01}), і, нарешті, гейт XX на кубіті 22 (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")

Вивід попередньої комірки коду

Побудова референтних станів за допомогою шаблонних схем​

Можна також використовувати різноманітні шаблонні схеми, наприклад TwoLocal, яка дозволяє зручно виражати багато настроюваних параметрів та заплутаностей. Ці шаблонні схеми детальніше розглядаються в наступному уроці, але їх можна застосовувати для референтних станів за умови фіксації параметрів:

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) навчальні дані кодуються у квантовий стан за допомогою параметризованої схеми, відомої як карта ознак, де кожне значення параметра відповідає точці з навчального набору даних. zz_feature_map — тип параметризованої схеми, що дозволяє передавати точки даних (xx) до цієї карти ознак.

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

Вивід попередньої комірки коду

Підсумок​

З цього уроку ти дізнався, як ініціалізувати систему за допомогою:

  • Стандартного референтного стану

  • Класичних референтних станів

  • Квантових референтних станів

  • Прикладних референтних станів

Загальний варіаційний робочий процес виглядає так:

Схема унітарного оператора, що підготовлює референтний стан.

Хоча референтні стани є фіксованими початковими точками, ми можемо використовувати варіаційну форму, щоб визначити анзац — набір параметризованих станів для дослідження варіаційним алгоритмом.