Stany referencyjne
W tej lekcji zbadamy, jak możemy zainicjalizować nasz układ za pomocą stanu referencyjnego, aby pomóc naszemu algorytmowi wariacyjnemu szybciej osiągnąć zbieżność. Najpierw nauczymy się, jak ręcznie zbudować stan referencyjny, a następnie poznamy kilka standardowych opcji, które można wykorzystać w algorytmie wariacyjnym.
Stan domyślny
Stan referencyjny to stały punkt startowy dla naszego problemu. Aby przygotować stan referencyjny, musimy zastosować odpowiedni, nieparametryzowany operator unitarny na początku naszego Circuit kwantowego, tak że . Jeśli masz uzasadnione przypuszczenie lub punkt danych z istniejącego optymalnego rozwiązania, algorytm wariacyjny prawdopodobnie szybciej osiągnie zbieżność, jeśli użyjesz go jako punktu startowego.
Najprostszym możliwym stanem referencyjnym jest stan domyślny, w którym korzystamy ze stanu startowego -qubitowego Circuit kwantowego: . Dla stanu domyślnego nasz operator unitarny . Dzięki swojej prostocie stan domyślny jest prawidłowym stanem referencyjnym stosowanym w wielu scenariuszach.
Klasyczny stan referencyjny
Załóżmy, że masz układ trzech qubitów i chcesz zacząć od stanu zamiast domyślnego stanu . Jest to przykład czysto klasycznego stanu referencyjnego, a żeby go skonstruować, wystarczy zastosować bramkę X do qubitu (zgodnie z porządkiem qubitów w Qiskit), gdyż .
W tym przypadku nasz operator unitarny to , co prowadzi do stanu referencyjnego .
# 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")
Kwantowy stan referencyjny
Załóżmy, że chcesz zacząć od bardziej złożonego stanu, który obejmuje superpozycję i/lub splątanie, na przykład .
Aby uzyskać ten stan z , jednym z podejść jest zastosowanie bramki Hadamard na qubicie (), bramki CNOT (CX) z qubitem jako qubitem kontrolnym i qubitem jako qubitem docelowym (), a na końcu bramki zastosowanej do qubitu ().
W tym scenariuszu nasz operator unitarny to , a nasz stan referencyjny to .
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)
qc.draw("mpl")
Tworzenie stanów referencyjnych za pomocą szablonów Circuit
Możemy również korzystać z różnych szablonów Circuit, takich jak TwoLocal, który pozwala na łatwe wyrażenie wielu sterowalnych parametrów i splątań. Omówimy te szablony Circuit bardziej szczegółowo w następnej lekcji, ale możemy ich używać dla naszych stanów referencyjnych pod warunkiem przypisania parametrów:
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")
Stany referencyjne specyficzne dla aplikacji
Kwantowe uczenie maszynowe
W kontekście kwantowego klasyfikatora wariacyjnego (VQC) dane treningowe są kodowane w stan kwantowy za pomocą parametryzowanego Circuit zwanego feature map, gdzie każda wartość parametru reprezentuje punkt danych ze zbioru treningowego. zz_feature_map to rodzaj parametryzowanego Circuit, który można wykorzystać do przekazywania naszych punktów danych () do tej feature map.
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")
Podsumowanie
Dzięki tej lekcji nauczyłeś się, jak inicjalizować swój układ przy użyciu:
- Domyślnego stanu referencyjnego
- Klasycznych stanów referencyjnych
- Kwantowych stanów referencyjnych
- Stanów referencyjnych specyficznych dla aplikacji
Nasz ogólny wariant wariacyjny wygląda następująco:
Choć stany referencyjne są stałymi, początkowymi punktami startowymi, możemy używać formy wariacyjnej do zdefiniowania ansatz, aby reprezentować zbiór parametryzowanych stanów, które nasz algorytm wariacyjny będzie eksplorował.