Przejdź do głównej treści

Wprowadzenie do kwantowego uczenia maszynowego

Przegląd i motywacja

Przed rozpoczęciem wypełnij tę krótką ankietę przed kursem, która jest ważna dla ulepszania naszych treści i doświadczeń użytkownika.

Note: This survey is provided by IBM Quantum and relates to the original English content. To give feedback on doQumentation's website, translations, or code execution, please open a GitHub issue.

Witamy w kwantowym uczeniu maszynowym!

Poniższy film przedstawia krótkie wprowadzenie uzupełnione tekstem poniżej.

Krótkie podsumowanie i uzupełnienie filmu:

  • Widzieliśmy, jak problem został po raz pierwszy rozwiązany na komputerze kwantowym, a następnie ludzie znaleźli sposób na zrobienie tego na klasycznym superkomputerze. Ten cykl, w którym obliczenia klasyczne i kwantowe wzajemnie się napędzają do swoich granic, będzie prawdopodobnie trwał jeszcze przez kilka lat.
  • Istnieją konkretne problemy, w których obliczenia kwantowe mogą mieć udowodnioną przewagę nad klasycznymi, pod warunkiem postępów w takich obszarach jak redukcja błędów i liczba dostępnych kubitów. To wciąż jednak czas eksploracji – poszukiwania zbiorów danych przyjaznych obliczeniom kwantowym oraz użytecznych kwantowych feature map.
  • Kwantowe uczenie maszynowe (QML) to jeden z wielu ekscytujących obszarów, w których obliczenia kwantowe mogą uzupełniać lub wzbogacać istniejące klasyczne przepływy pracy.

Uczenie maszynowe (ML) stosuje algorytmy do zbiorów danych, więc QML może potencjalnie obejmować mechanikę kwantową po stronie danych, algorytmów lub obu naraz. Wszystkie te możliwości są potencjalnie interesujące. Jednak w większości ograniczymy się do omawiania algorytmów kwantowych stosowanych do danych klasycznych. Jednym z powodów jest to, że problemy ML z danymi klasycznymi są już tak dobrze zbadane i powszechnie dostępne. Istnieje szerokie zainteresowanie rozwiązywaniem problemów, które zaczynają się od danych klasycznych. Innym powodem jest brak QRAM. Bez możliwości przechowywania dużych ilości danych kwantowych przez stosunkowo długi czas metody opierające się na danych kwantowych są wciąż dość dalekie od zastosowań przemysłowych. Nie jest też jasne, jak efektywnie „kwantowo uzyskiwać dostęp" do danych klasycznych. Dwa szczególnie interesujące rodzaje ML to uczenie nadzorowane, w którym trenujesz algorytm na oznaczonym zbiorze danych, oraz uczenie nienadzorowane, w którym algorytm stara się nauczyć o rozkładzie na podstawie nieoznaczonych próbek. Algorytm nienadzorowany może na przykład nauczyć się generować nowe próbki z tego samego rozkładu lub grupować próbki w klastry o podobnych cechach.

QML_CR_background_Sup_Unsup.avif

Lewy obraz przedstawia dwie kategorie oznaczonych danych jak w uczeniu nadzorowanym. W tym przypadku kategorie są liniowo separowalne. Prawy obraz przedstawia klastry danych. W zadaniu uczenia nienadzorowanego dane te początkowo nie byłyby oznaczone, a algorytm badałby rozkład, szukając być może klastrów. Dla celów wizualizacji przykładowych klastrów, które algorytm mógłby zidentyfikować, punkty danych zostały teraz oznaczone. Kluczowa różnica między nimi polega na tym, że proces uczenia nadzorowanego zaczyna się od danych już oznaczonych, a proces nienadzorowany od danych nieoznaczonych – nawet jeśli dane są oznaczone na końcu.

Osoby z doświadczeniem w uczeniu maszynowym wiedzą już, że wiele metod rozwiązywania problemów polega na mapowaniu danych do przestrzeni o wyższych wymiarach. Jest to szczególnie dobrze zbadane w kontekście kerneli. Dla przypomnienia: czasami dane mogą być podzielone na kategorie linią, płaszczyzną lub hiperpłaszczyzną (często będziemy używać po prostu słowa „hiperpłaszczyzna" dla zwięzłości) w tej samej liczbie wymiarów, w której dane są podane. Pokazano to na pierwszym obrazie powyżej. Innym razem dane mogą nie być separowalne hiperpłaszczyzną w tych wymiarach, jak pokazano na drugim obrazie. Może jednak nadal istnieć struktura danych, którą można wykorzystać w odwzorowaniu na wyższe wymiary, co sprawia, że dane są separowalne w tej przestrzeni o wyższym wymiarze. Ilustruje to odwzorowanie dwuwymiarowych danych z symetrią kołową w przestrzeń trójwymiarową, w której punkty danych są ułożone wzdłuż powierzchni paraboloidy.

QML_CR_background_2D-3D.avif

Częstym celem w QML jest znalezienie odwzorowania z niskowymiarowego zbioru cech w przestrzeń o wyższym wymiarze, które skutecznie rozdziela punkty danych tak, abyśmy mogli użyć tego odwzorowania do klasyfikacji nowych punktów. Nie jest to jednak łatwe zadanie, a każda dyskusja o potencjalnej użyteczności obliczeń kwantowych w uczeniu maszynowym musi być opatrzona odpowiednimi zastrzeżeniami. W szczególności musimy odnieść się do subtelności w doborze zbiorów danych i wyzwań związanych z osiągnięciem skali użytkowej. Musimy też odejść od prób przewyższania klasycznych algorytmów ML na danych, które są już wydajnie i dobrze obsługiwane przez algorytmy klasyczne, i przeorientować dyskusję na badanie nowych feature map, które mogą okazać się użyteczne.

Zarządzanie oczekiwaniami

Wiele zbiorów danych używanych w aplikacjach QML opisanych w literaturze jest „inżynierowanych pod kątem cech" (ang. feature engineered), co oznacza, że zbiór danych jest wybierany lub generowany specjalnie w celu pokazania wąskiego przypadku użycia, w którym obliczenia kwantowe są przydatne. Jeśli wydaje się to oszustwem, to źle rozumiemy zadanie, które mamy do wykonania. Nie jest tak, że niektóre kwantowe feature mapy pozwalają nam rozwiązywać wszystkie lub wiele zadań klasyfikacyjnych efektywniej lub skalowalniej niż klasyczne algorytmy uczenia maszynowego. Raczej: niektóre kwantowe feature mapy (nie wszystkie) zachowują się inaczej niż klasyczne feature mapy. Zadaniem jest zatem eksploracja Circuit w kontekście złożonych struktur danych. Kilka konkretnych pytań, na które trzeba odpowiedzieć:

  1. Które Circuit mają największe szanse zachowywać się w nowatorski sposób w porównaniu z klasycznymi alternatywami?
  2. Czy istnieją rzeczywiste problemy obejmujące dane o właściwościach najlepiej eksplorowanych za pomocą takich nowatorskich Circuit?
  3. Czy te Circuit skalują się na komputerach kwantowych bliskiej przyszłości?

Niewystarczające wyjaśnienie

Często spotyka się uproszczone wyjaśnienie tego, dlaczego obliczenia kwantowe mogą być potężne. Brzmi ono mniej więcej tak:

Podobnie jak komputery klasyczne używają bitów informacji, komputery kwantowe używają qubitów/kubitów. Mając określoną liczbę bitów – powiedzmy 4 – komputer klasyczny może przyjąć jeden z 24=162^4 = 16 możliwych stanów, podczas gdy komputer kwantowy może istnieć w superpozycji wszystkich 16 stanów jednocześnie, a operacje mogą być wykonywane na tej całej superpozycji. W niektórych przypadkach pozwala to w naturalny sposób projektować potencjalnie interesujące algorytmy uczenia maszynowego oparte na odwzorowaniach w przestrzenie wyższych wymiarów.

To prawdziwe stwierdzenie, ale jest niewystarczające i trochę mylące – co zaraz wyjaśnimy. Podkreśla się też różnicę między współczynnikami zespolonymi a rzeczywistymi, na przykład:

Probabilistyczny system klasyczny, w którym układ można opisać jako mający pewne prawdopodobieństwa znajdowania się w różnych stanach, można przedstawić następująco.

s=a0000+b0001+c0010+...a,b,cR|s\rangle = a|0000\rangle+b|0001\rangle+c|0010\rangle+... a, b, c \in \reals

W takim systemie współczynniki aa, bb, cc itd. mają sens tylko wtedy, gdy są dodatnimi liczbami rzeczywistymi. Stany w komputerach kwantowych opisuje się przez amplitudy prawdopodobieństwa, które mogą być liczbami zespolonymi.

ψ=A0000+B0001+C0010+...A,B,CC|\psi \rangle = A|0000\rangle+B|0001\rangle+C|0010\rangle+... A, B, C \in \mathbb{C}

Powyższe stwierdzenia zostały sformułowane bardzo starannie, dzięki czemu są prawdziwe (wiele powierzchownie podobnych stwierdzeń jest niepoprawnych). Ale te poprawne stwierdzenia nie wyjaśniają mocy obliczeń kwantowych w uczeniu maszynowym. Po pierwsze, każde zastosowanie obliczeń kwantowych w uczeniu maszynowym będzie wiązało się z pomiarami – a qubitu/kubitu nie można zmierzyć jako znajdującego się jednocześnie w wielu stanach. Możemy przygotować qubit/kubit w superpozycji takiej jak ψ=12(0+1)|\psi\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle+|1\rangle\right), ale pomiar da w wyniku albo 0|0\rangle, albo 1|1\rangle. Tak więc ta historia o zwiększaniu wymiarowości jest co najmniej niekompletna. Co więcej, w kontekście kerneli zwiększona wymiarowość w obliczeniach kwantowych nie może być wystarczającym warunkiem przewagi obliczeniowej nad alternatywami klasycznymi, ponieważ kernele Gaussowskie są nieskończenie wymiarowe. Są tu pewne subtelności – Gaussowskie feature mapy są używane jedynie w połączeniu z „kernel trickiem", który pozwala uniknąć konieczności obliczania nieskończenie wymiarowego wektora po odwzorowaniu. Ale argument pozostaje aktualny:

Wysoka wymiarowość splątanych stanów kwantowych to nie jest równoległość wykładnicza i nie jest wystarczającym warunkiem zwiększonej mocy w uczeniu maszynowym.

W kolejnych lekcjach przedstawiamy przepływy pracy umożliwiające włączanie Circuit kwantowych do zadań uczenia maszynowego – i robimy to z wyraźnym celem ułatwienia eksploracji możliwości obliczeń kwantowych. Żaden feature map ani algorytm w tym kursie nie jest przedstawiany jako szybka droga do lepszych wyników uczenia maszynowego dla ogólnych problemów, bo taki feature map ani algorytm nie istnieje. Zamiast tego prezentujemy szeroki wachlarz narzędzi kwantowych do wykorzystania w poszukiwaniu użytecznych zastosowań obliczeń kwantowych.

Dekwantyzacja

Dekwantyzacja odnosi się do zastąpienia danego algorytmu kwantowego algorytmem klasycznym, który działa podobnie do algorytmu kwantowego dla określonego zestawu zadań, zazwyczaj biorąc pod uwagę skalowanie. Według niektórych definicji algorytm klasyczny powinien działać tylko wielomianowo wolniej niż algorytm kwantowy.

Kilka algorytmów QML, które początkowo uważano za zapewniające znaczące przyśpieszenie w stosunku do algorytmów klasycznych, zostało zdekwantyzowanych w ostatnich latach. Ten proces dekwantyzacji doprowadził do ważnych spostrzeżeń na temat potencjalnych zalet i ograniczeń kwantowych podejść do uczenia maszynowego.

Jeden z najbardziej znaczących wyników dekwantyzacji pochodzi z pracy Ewina Tanga na temat systemów rekomendacyjnych. Tang odkrył klasyczny algorytm, który może wykonywać zadania rekomendacyjne z prędkościami, które wcześniej uważano za osiągalne tylko przez komputery kwantowe. To odkrycie podważyło założenie, że algorytmy kwantowe mają wykładniczą przewagę dla tego problemu. Nowsze prace autorstwa Shin i in. skupiają się na identyfikowaniu warunków dekwantyzowalności klasy funkcji wariantowego modelu QML.

Jednym z powszechnych podejść do dekwantyzacji (choć nie jedynym trikiem) jest uwzględnienie narzutu związanego z ładowaniem danych. Oznacza to, że każdy algorytm kwantowy stosowany do danych klasycznych będzie miał etap, w którym dane klasyczne są kodowane w komputerze kwantowym. Jeśli algorytm kwantowy zakłada punkt startowy, w którym dane kwantowe są już dostępne, to ukrywa się w ten sposób czas potrzebny na kodowanie. Istnieją konteksty, w których założenie o danych kwantowych może być uzasadnione, ale wiele interesujących zastosowań będzie zaczynać od danych klasycznych. Niektóre przypadki dekwantyzacji pokazały, że gdy ten czas kodowania jest uwzględniony, a klasyczne ładowanie danych może być wykonane wydajnie, algorytm kwantowy nie przewyższa już swojego klasycznego odpowiednika.

Nawet jeśli algorytm nie może być zdekwantyzowany, nie oznacza to, że jest bardziej wydajny lub skalowalny niż wszystkie algorytmy klasyczne. Jako skrajny, sztuczny przykład: wyobraź sobie algorytm wybierający największe jj elementów ze zbioru o rozmiarze kk. Można napisać algorytm kwantowy, który używa algorytmu Shora do faktoryzacji każdego z kk elementów na czynniki pierwsze, a następnie wyznacza największe elementy na podstawie tych czynników. Takiego algorytmu prawdopodobnie nie można zdekwantyzować, ale jest on drastycznie mniej wydajny niż klasyczne algorytmy służące do tego samego wyboru największych elementów (choć nie do zbędnej części faktoryzacji).

Dowód istnienia

W 2021 roku naukowcy IBM Quantum® — Yunchao Liu, Srinivasan Arunachalam i Kristan Temme — opublikowali w Nature artykuł A rigorous and robust quantum speed-up in supervised machine learning. Zgodnie z powyższymi zastrzeżeniami, do tej pracy starannie dobrano problem klasyfikacji, który (1) jest uważany za trudny klasycznie oraz (2) nadaje się do wykazania przyśpieszenia przez algorytmy kwantowe.

Artykuł dotyczy klasyfikacji danych opartej na logarytmach dyskretnych. Cytując autorów: „Dla dużej liczby pierwszej pp i generatora gg grupy Zp={1,2,,p1}\mathbb{Z}^*_p = \{1, 2, \ldots, p - 1\} powszechnie przyjmuje się hipotezę, że żaden klasyczny algorytm nie jest w stanie obliczyć logg(x)\text{log}_g(x) na wejściu xZpx \in \mathbb{Z}^*_p w czasie wielomianowym względem n=log2(p)n = \lceil{\text{log}_2(p)}\rceil, czyli liczby bitów potrzebnych do reprezentacji pp." Natomiast algorytm Shora rozwiązuje problem logarytmu dyskretnego w czasie wielomianowym. Taki wybór problemu spełnia oba kryteria jednocześnie: klasyczną trudność (mało prawdopodobna dekwantyzacja) oraz znane przystosowanie do algorytmów kwantowych.

Dzięki temu przemyślanemu doborowi problemu klasyfikacji autorom udało się wykazać wykładnicze przyśpieszenie z użyciem kwantowych metod kernel (pokrótce opisanych poniżej i omówionych w późniejszych lekcjach), które jest zarówno kompleksowe, jak i odporne. Słowo „kompleksowe" (ang. end-to-end) odnosi się tu do założeń dotyczących pracy z klasycznymi danymi — autorzy uwzględnili czas potrzebny na kodowanie danych. Słowo „odporne" (ang. robust) oznacza, że dane podlegające klasyfikacji są szeroko rozdzielone przy użyciu algorytmu kwantowego, dzięki czemu skuteczność klasyfikacji jest odporna na realne czynniki, takie jak skończone błędy próbkowania.

Wszystko to oznacza, że istnieją problemy, w których kwantowe metody kernel mogą przynieść wykładnicze przyśpieszenie. Jednak obecny stan nauki jest taki, że problemy tego rodzaju są wybierane na podstawie obserwacji lub teoretycznego uzasadnienia sugerującego ich podatność na algorytmy kwantowe. Nie jest realistyczne oczekiwanie kwantowego przyśpieszenia w zadaniach uczenia maszynowego, które klasyczne komputery realizują już bardzo dobrze.

Identyfikowanie takich idealnych przypadków do eksploracji użyteczności kwantowej to ogromna odpowiedzialność spoczywająca na uczestnikach tego kursu. Nie jest to zadanie, które można wykonać w ramach jednego kursu. Taka eksploracja jest zadaniem dla całej Sieci IBM Quantum, złożonej z badaczy takich jak Ty. Ten kurs zaprezentuje przepływy pracy QML i strategie kodowania, abyś mógł/mogła zacząć poszukiwać użyteczności kwantowej w swojej dziedzinie.

Mamy nadzieję, że to wprowadzenie wyjaśniło kilka kwestii dotyczących kwantowego uczenia maszynowego:

  1. Algorytmy kwantowe mogą oferować wykładnicze przyśpieszenie w stosunku do algorytmów klasycznych dla bardzo specyficznych problemów, które są klasycznie trudne i dobrze przystosowane do algorytmów kwantowych.
  2. Wysoka wymiarowość splątanych stanów kwantowych ma znaczenie, ale sama w sobie nie wystarcza, aby uzyskać przewagę nad algorytmami klasycznymi.
  3. Znalezienie problemów dobrze przystosowanych do algorytmów kwantowych jest niezwykle trudnym zadaniem, które w dużej mierze spocznie na uczestnikach tego kursu.

Pytania sprawdzające

Czym stany kwantowe różnią się od stanów klasycznych?

Odpowiedź:

Pod wieloma względami. W szczególności: zespolone współczynniki oraz superpozycja przy pojedynczej kopii. Istnieje wiele innych różnic, które zostaną omówione w przyszłych lekcjach, m.in. splątanie i interferencja.

Prawda czy fałsz? Silnie splątane stany kwantowe pozwalają nam efektywniej rozwiązywać większość problemów uczenia maszynowego na komputerze kwantowym.

Odpowiedź:

Fałsz. Większość problemów uczenia maszynowego jest rozwiązywana bardzo efektywnie przez algorytmy klasyczne i algorytmy kwantowe nie przyniosą tu żadnego istotnego przyśpieszenia. Celem w QML jest znajdowanie zbiorów danych o cechach dobrze opisywanych przez stany kwantowe i/lub szukanie odwzorowań cech danych optymalizujących dokładność modeli.

Cele kursu

Ukończenie tego kursu pozwoli Ci rozwinąć następujące podstawowe umiejętności i kompetencje. Po jego ukończeniu będziesz potrafić:

  1. Wyjaśnić, czym jest QML i w jaki sposób obliczenia kwantowe łączą się z klasycznym uczeniem maszynowym.

  2. Stosować słownictwo kwantowe i kluczowe pojęcia w przepływach pracy ML.

  3. Identyfikować kluczowe elementy przepływu pracy QML (różnych typów).

  4. Rozróżniać różne typy QML i wskazywać różnice między nimi.

  5. Implementować kwantowe metody kernel i wariantowe klasyfikatory kwantowe z wykorzystaniem prymitywów Qiskit Runtime oraz zgodnie z wzorcami Qiskit.

  6. Wskazywać obszary, w których QML jest najbardziej obiecujące, oraz te, w których tak nie jest.

  7. Dostosowywać przykładowy problem do własnego zestawu danych.

  8. Być świadomym problemów w QML, takich jak czas trenowania, szum i kumulacja błędów w odczytach wielu stanów.

  9. Formułować rekomendacje dotyczące tego, gdzie QML może przynieść korzyści swojej organizacji.

Struktura kursu

Kurs składa się z kilku lekcji. Każda lekcja zawiera pytania sprawdzające rozmieszczone w tekście, dzięki którym możesz ćwiczyć nowe umiejętności lub sprawdzać swoje rozumienie na bieżąco. Nie są one obowiązkowe.

Na końcu kursu znajduje się quiz składający się z 20 pytań. Aby uzyskać odznakę Quantum Machine Learning za pośrednictwem Credly, musisz zdobyć co najmniej 70% punktów. Jeśli osiągniesz wynik co najmniej 70%, odznaka zostanie automatycznie przesłana na Twój adres e-mail wkrótce po zakończeniu. Quiz można wypełnić maksymalnie dwa razy. Po pierwszym podejściu będziesz mieć możliwość ponownego odpowiedzenia na pytania, na które udzieliłeś/udzieliłaś błędnych odpowiedzi. Po drugim podejściu wynik jest ostateczny. Szczegóły znajdziesz w quizie.

Struktura kursu jest następująca:

  • Lekcja 1: Wprowadzenie i przegląd
  • Lekcja 2: Powtórka z uczenia maszynowego
  • Lekcja 3: Kodowanie danych
  • Lekcja 4: Kwantowe metody kernel i maszyny wektorów nośnych
  • Lekcja 5: Wariantowe klasyfikatory kwantowe / sieci neuronowe
  • Egzamin na odznakę

Run your first QML code

Często pomocne jest zobaczenie celu, zanim podzielimy go na części i zagłębimy się w szczegóły. Poniższe komórki kodu wykonują prosty przykład kwantowej metody kernel. Konkretnie obliczany jest pojedynczy element macierzy kernel. Użytkownicy, którzy nie znają metod kernel ani kwantowych kerneli, nie powinni się tym przejmować — kilka lekcji w tym kursie będzie poświęconych dokładnemu omówieniu tego, co dzieje się w tych komórkach.

Przy okazji tego kodu zapoznajemy się z Qiskit patterns: frameworkiem do podejścia do obliczeń kwantowych na skalę użytkową. Framework ten składa się z czterech kroków, które są bardzo ogólne i można je zastosować do większości problemów (choć w niektórych przepływach pracy pewne kroki mogą być iterowane wielokrotnie).

Qiskit patterns:

  • Krok 1: Odwzoruj klasyczne dane wejściowe na problem kwantowy
  • Krok 2: Zoptymalizuj problem pod kątem wykonania kwantowego
  • Krok 3: Wykonaj przy użyciu Qiskit Runtime Primitives
  • Krok 4: Analiza / przetwarzanie końcowe

W poniższych komórkach oferujemy jedynie pobieżne wyjaśnienia poszczególnych kroków — wystarczające, abyś mógł/mogła znaleźć odpowiednią lekcję i dowiedzieć się więcej.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy pandas qiskit
# Import some qiskit packages required for setting up our quantum circuits.
from qiskit.circuit import Parameter, ParameterVector, QuantumCircuit
from qiskit.circuit.library import unitary_overlap

# Import StatevectorSampler as our sampler.
from qiskit.primitives import StatevectorSampler

# Step 1: Map classical inputs to a quantum problem:

# Start by getting some appropriate data. The data imported below consist of 128 rows or data points.
# Each row has 14 columns that correspond to data features, and a 15th column with a label (+/-1).
!wget https://raw.githubusercontent.com/qiskit-community/prototype-quantum-kernel-training/main/data/dataset_graph7.csv

# Import some required packages, and write a function to pull some training data out of the csv file you got above.
import pandas as pd
import numpy as np

def get_training_data():
"""Read the training data."""
df = pd.read_csv("dataset_graph7.csv", sep=",", header=None)
training_data = df.values[:20, :]
ind = np.argsort(training_data[:, -1])
X_train = training_data[ind][:, :-1]

return X_train

# Prepare training data
X_train = get_training_data()

# Empty kernel matrix
num_samples = np.shape(X_train)[0]

# Prepare feature map for computing overlap between two data points.
# This could be pre-built feature maps like ZZFeatureMap, or a custom quantum circuit, as shown here.
num_features = np.shape(X_train)[1]
num_qubits = int(num_features / 2)
entangler_map = [[0, 2], [3, 4], [2, 5], [1, 4], [2, 3], [4, 6]]
fm = QuantumCircuit(num_qubits)
training_param = Parameter("θ")
feature_params = ParameterVector("x", num_qubits * 2)
fm.ry(training_param, fm.qubits)
for cz in entangler_map:
fm.cz(cz[0], cz[1])
for i in range(num_qubits):
fm.rz(-2 * feature_params[2 * i + 1], i)
fm.rx(-2 * feature_params[2 * i], i)

# Pick two data points, here 14 and 19, and assign the features to the circuits as parameters.
x1 = 14
x2 = 19
unitary1 = fm.assign_parameters(list(X_train[x1]) + [np.pi / 2])
unitary2 = fm.assign_parameters(list(X_train[x2]) + [np.pi / 2])

# Create the overlap circuit
overlap_circ = unitary_overlap(unitary1, unitary2)
overlap_circ.measure_all()
overlap_circ.draw("mpl", scale=0.6, style="iqp")

# Step 2: Optimize problem for quantum execution

# Use Qiskit Runtime service to get the least busy backend for running on real quantum computers.
# from qiskit_ibm_runtime import QiskitRuntimeService

# service = QiskitRuntimeService(channel="ibm_quantum")
# backend = service.least_busy(
# operational=True, simulator=False, min_num_qubits=overlap_circ.num_qubits
# )

# Transpile the circuits optimally for the chosen backend using a pass manager.
# from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
# overlap_ibm = pm.run(overlap_circ)

# Step 3: Execute using Qiskit Runtime Primitives

# Specify the number of shots to use.
num_shots = 10_000

## Evaluate the problem using statevector-based primitives from Qiskit
sampler = StatevectorSampler()
counts = (
sampler.run([overlap_circ], shots=num_shots).result()[0].data.meas.get_int_counts()
)

# Step 4: Analyze and post-processing

# Find the probability of 0.
counts.get(0, 0.0) / num_shots
--2025-05-09 10:04:28--  https://raw.githubusercontent.com/qiskit-community/prototype-quantum-kernel-training/main/data/dataset_graph7.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.109.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 49405 (48K) [text/plain]
Saving to: ‘dataset_graph7.csv.2’

dataset_graph7.csv. 100%[===================>] 48.25K --.-KB/s in 0.03s

2025-05-09 10:04:29 (1.37 MB/s) - ‘dataset_graph7.csv.2’ saved [49405/49405]
0.8199

Choć nie musisz rozumieć wszystkich powyższych kroków, warto postarać się zrozumieć wynik — żeby wiedzieć, po co to robimy. Wiele procesów w uczeniu maszynowym korzysta z iloczynów skalarnych m.in. przy klasyfikacji binarnej. Mechanika kwantowa ma tu oczywisty związek: prawdopodobieństwa pomiaru różnych stanów ϕi|\phi_i\rangle wyraża się przez iloczyn skalarny ze stanem początkowym ψ|\psi\rangle wzorem Pi=ϕiψ2P_i = |\langle\phi_i|\psi\rangle|^2. To, co zrobiliśmy powyżej, to stworzenie obwodu kwantowego zawierającego cechy dwóch punktów danych i odwzorowującego je w przestrzeni wektora kwantowego — a następnie oszacowanie iloczynu skalarnego w tej przestrzeni za pomocą pomiarów. Jest to przykład kwantowego szacowania kernela (quantum kernel estimation). Zauważ, że przeprowadziliśmy ten proces tylko dla dwóch punktów danych (14. i 19.). Gdybyśmy wykonali to dla wszystkich możliwych par, moglibyśmy wziąć wynik (w tym przypadku liczbę 0,821...) i wypełnić macierz wyników opisującą stopień nakładania się wszystkich punktów w zbiorze treningowym. To właśnie jest "macierz kernela" (kernel matrix).

Check your understanding

Przeczytaj poniższe pytanie, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, żeby zobaczyć rozwiązanie.

W powyższym procesie obliczyliśmy element macierzy kernela dla 14. i 19. punktu danych. Jaką wartość powinniśmy uzyskać, używając dwa razy tego samego punktu danych (np. 14. i 14.)? Innymi słowy, jakie powinny być elementy na przekątnej macierzy kernela? Odpowiedz na to pytanie przy założeniu braku szumów, pamiętając jednak, że w obecności szumów możliwe są odchylenia od tej wartości.

Odpowiedź:

Elementy na przekątnej powinny wynosić 1,0. Proces ten powinien obliczać znormalizowany iloczyn skalarny wektora z samym sobą, który zawsze musi być równy jeden.