Вступ до квантового машинного навчання
Огляд і мотивація
Перш ніж розпочати, будь ласка, заповни це коротке опитування перед курсом, яке допоможе нам покращити наші матеріали та досвід користувача.
Ласкаво просимо до квантового машинного навчання!
Відео нижче дасть короткий вступ, доповнений текстом нижче.
Коротко підсумуємо та доповнимо відео:
- Ми бачили, як задачу вперше розв'язано на квантовому комп'ютері, а потім знаходили класичний спосіб розв'язати її на класичному суперкомп'ютері. Цей цикл взаємного підштовхування класичних і квантових обчислень до їхніх меж, мабуть, продовжуватиметься ще кілька років.
- Існують конкретні задачі, де квантові обчислення можуть мати доведену перевагу над класичними за умови прогресу у зменшенні помилок і збільшенні кількості доступних кубітів. Але зараз ще час дослідження — пошуку квантов о-придатних наборів даних та корисних квантових карт ознак.
- Квантове машинне навчання (QML) — одна з багатьох захопливих областей, де квантові обчислення можуть доповнювати існуючі класичні робочі процеси.
Машинне навчання (ML) застосовує алгоритми до наборів даних, тому QML може включати квантову механіку як у даних, так і в алгоритмічній стороні, або в обох. Всі ці можливості потенційно цікаві. Але ми переважно обмежуватимемося обговоренням квантових алгоритмів, застосованих до класичних даних. Одна причина — задачі ML з класичними даними вже настільки добре вивчені та широко доступні. Широкий інтерес до розв'язання задач, що починаються з класичних даних. Інша причина — відсутність QRAM. Без можливості зберігати великі обсяги квантових даних на відносно тривалий час методи, що починаються з квантових даних, ще далекі від застосовності в промисловості. Також незрозуміло, як ефективно «квантово-отримувати доступ» до класичних даних. Два типи ML, що особливо цікавлять, — це навчання з учителем, де алгоритм тренується на маркованому наборі даних, і навчання без учителя, де алгоритм намагається вивчити розподіл за немаркованими прикладами. Алгоритм без учителя може, наприклад, навчитися генерувати нові зразки з того самого розподілу або кластеризувати зразки у групи зі схожими характеристиками.

Ліве зображення показує два класи маркованих даних, як у навчанні з учителем. У цьому випадку класи лінійно розділені. Праве зображення показує кластери даних. У задачі без учителя ці дані спочатку не були б марковані, і алгоритм вивчав би розподіл, можливо, шукаючи кластери. Для наочності кластерів, які міг би ідентифікувати алгоритм, дані тепер позначені. Ключова відмінність між двома: у навчанні з учителем процес починається з уже маркованих даних, а без учителя — з немаркованих, навіть якщо дані маркуються в кінці.
Ті, хто знайомий з машинним навчанням, вже знають, що багато методів розв'язання передбачають відображення даних у простори вищої розмірності. Це особливо добре досліджено у контексті ядер (kernels). Коротко нагадаємо: іноді дані можна розділити на категорії лінією, площиною або гіперплощиною (ми часто будемо просто казати «гіперплощина» для стислості) у тій самій кількості вимірів, у якій надані дані. Це показано на першому зображенні вище. Іноді дані не можна розділити гіперплощиною в цих вимірах, як показано на другому зображенні. Але в даних може бути структура, яку можна використати при відображенні у простір вищої розмірності, де дані стають розділеними. Це ілюструється відображенням двовимірних даних з круговою симетрією у тривимірний простір, де точки даних розташовані на поверхні параболоїда.

Загальна мета в QML — знайти відображення з набору ознак нижчої розмірності у простір вищої розмірності, яке ефективно розділяє наші точки даних, щоб ми могли використовувати відображення для класифікації нових точок. Але це непросте завдання, і будь-яке обговорення потенційної корисності квантових обчислень у машинному навчанні має супроводжуватися відповідними застереженнями. Зокрема, слід розглянути нюанси у виборі набору даних і виклики досягнення масштабу корисності. Також потрібно відмовитися від спроб перевершити класичні алгоритми ML на даних, які вже ефективно та добре обробляються класичними алгоритмами, і переключитися на дослідження нових карт ознак, які можуть бути корисними.
Управління очікуваннями
Багато наборів даних у застосуваннях QML, описаних у літературі, є «спроєктованими за ознаками» (feature engineered): набір даних навмисно вибирається або генерується для демонстрації вузького випадку використання, де квантові обчислення корисні. Якщо це здається обманом — ми неправильно розуміємо завдання. Не йдеться про те, що деякі квантові карти ознак дозволяють нам ефективніше або масштабованіше розв'язувати всі або багато задач класифікації порівняно з класичними алгоритмами ML. Натомість деякі квантові карти ознак (не всі) поводяться інакше, ніж класичні. Завдання — досліджувати квантові схеми в контексті складних структур даних. Ось конкретні питання:
- Які квантові схеми найімовірніше поводяться по-новому порівняно з класичними альтернативами?
- Чи існують реальні задачі, що включають дані з властивостями, які найкраще досліджувати за допомогою таких нових квантових схем?
- Чи масштабуються ці квантові схеми на квантових комп'ютерах найближчого майбутнього?
Недостатнє пояснення
Часто зустрічається спрощене пояснення того, чому квантові обчислення можуть бути потужними:
Так само, як класичні комп'ютери використовують біти інформації, квантові комп'ютери використовують кубіти. При заданій кількості бітів, скажімо 4, класичний комп'ютер може перебувати в будь-якому з можливих станів, тоді як квантовий комп'ютер може існувати в суперпозиції всіх 16 станів одночасно, і операції можна виконувати над усією суперпозицією. У деяких випадках це природно дозволяє проєктувати потенційно цікаві алгоритми навчання на основі відображень у простори вищої розмірності.
Це твердження є правдивим, але воно неадекватне і трохи оманливе, як ми поясним. Також часто підкреслюють різницю між комплексними та дійсними коефіцієнтами:
Ймовірнісну класичну систему, де стан системи може бути описаний як така, що має певні ймовірності перебування в різних станах, можна описати так:
У такій системі коефіцієнти , , і так далі можуть бути осмисленими лише якщо вони є додатними дійсними числами. Стани в квантових комп'ютерах описуються амплітудами ймовірностей, які можуть бути комплексними числами.
Наведені твердження сформульовані дуже ретельно, щоб бути правдивими (багато поверхово схожих тверджень є неправильними). Але ці правильні твердження не пояснюють потужності квантових обчислень у машинному навчанні. По-перше, будь-яке застосування квантових обчислень до машинного навчання включатиме вимірювання, і ми не можемо виміряти кубіт як такий, що перебуває в кількох станах одночасно. Ми можемо підготувати кубіт у суперпозиції , але вимірювання дасть або , або . Тому щонайменше ця розповідь про збільшення розмірності є неповною. Крім того, у контексті ядер збільшена розмірність у квантових обчисленнях не може бути достатньою умовою обчислювальної потужності над класичними альтернативами, оскільки гауссівські ядра нескінченновимірні. Є тонкощі в тому, що гауссівські карти ознак використовуються лише разом із «kernel trick», що обходить необхідність обчислювати нескінченновимірний відображений вектор. Але суть залишається:
Висока розмірність заплутаних квантових станів — це не експоненціальний паралелізм і не достатня умова для збільшення потужності в машинному навчанні.
У наступних уроках ми представляємо робочі процеси для включення квантових схем у задачі машинного навчання, і робимо це з явною метою сприяти дослідженню потужності квантових обчислень. Жодна карта ознак або алгоритм у цьому курсі не подається як швидкий шлях до кращих результатів машинного навчання для загаль них задач, оскільки такої карти ознак або алгоритму не існує. Натомість ми представляємо широкий спектр квантових інструментів для використання у дослідженні корисних квантових обчислень.
Деквантизація
Деквантизація — це заміна квантового алгоритму класичним, який виконує схожі завдання з подібним масштабуванням. За деякими визначеннями, класичний алгоритм має бути лише поліноміально повільнішим за квантовий.
Кілька квантових алгоритмів машинного навчання (QML), які спочатку вважалися такими, що забезпечують значне прискорення над класичними, були деквантизовані останніми роками. Цей процес деквантизації привів до важливих висновків щодо потенційних переваг і обмежень квантових підходів до машинного навчання.
Один із найбільш помітних результатів деквантизації отримано з роботи Евіна Танга над системами рекомендацій. Танг відкрив класичний алгоритм, що виконує рекомендаційні завдання зі швидкостями, які раніше вважалися досяжними лише для квантових комп'ютерів. Це відкриття поставило під сумнів припущення про те, що квантові алгоритми мають експоненційну перевагу для цієї задачі. Більш нещодавня робота Шина та ін. зосереджена на виявленні умов деквантизовності класу функцій варіаційної моделі QML.
Один поширений підхід до деквантизації (хоча й не єдиний) — розгляд накладних витрат на завантаження даних. Тобто будь-який квантовий алгоритм, застосований до класичних даних, матиме крок, де класичні дані кодуються у квантовий комп'ютер. Якщо квантовий алгоритм припускає початкову точку, де квантові дані вже доступні, то фактично приховується час, необхідний для кодування. Є контексти, де припущення про квантові дані може бути розумним, але багато цікавих застосувань починатимуться з класичних даних. Деякі випадки деквантизації показали, що коли цей час кодування враховується і коли завантаження класичних даних може бути виконано ефективно, квантовий алгоритм більше не перевершує свій класичний аналог.
Навіть якщо алгоритм не може бути деквантизований, це не означає, що він ефективніший або масштабованіший за всі класичні алгоритми. Як крайній штучний приклад: уявімо алгоритм для вибору найбільших елементів із набору розміром . Можна написати квантовий алгоритм, що використовує алгоритм Шора для факторизації кожного з елементів на прості множники, а потім визначає найбільші елементи за допомогою простих множник ів. Такий алгоритм, мабуть, не може бути деквантизований, але він значно менш ефективний, ніж класичні алгоритми для тієї самої вибірки найбільших елементів (хоча не непотрібної частини факторизації).
Доказ існування
У 2021 році дослідники IBM Quantum® Юньчао Лю, Срінівасан Арунахалам та Крістан Темме опублікували статтю в Nature, «Строге та надійне квантове прискорення в навчанні з учителем». Відповідно до наведених вище застережень, задача класифікації була ретельно вибрана для цієї роботи як (1) відомо класично складна та (2) придатна для квантових алгоритмів для демонстрації прискорення.
Стаття розглядає класифікацію даних на основі дискретних логарифмів. Цитуючи статтю: «Для великого простого числа та генератора з широко вважається, що жоден класичний алгоритм не може обчислити на вході за час, поліноміальний у , кількості бітів, необхідних для представлення .» На противагу цьому, алгоритм Шора відомо розв'язує задачу дискретного логарифму за поліноміальний час. Цей вибір задач одночасно задовольняє обидва критерії: класична складність (малоймовірно деквантизований) та відомо придатний для квантових алгоритмів.
Завдяки такому вдалому вибору задачі класифікації, авторам вдалося продемонструвати експоненційне прискорення за допомогою квантових методів ядра (коротко описаних нижче і детально обговорених у подальших уроках), яке є як наскрізним, так і надійним. Тут «наскрізне» означає припущення про початок з класичних даних; автори в цьому випадку включають час кодування даних. «Надійне» означає, що дані для класифікації розділені широким полем при використанні квантового алгоритму, тому успіх класифікації є надійним до реальних міркувань, таких як кінцева похибка вибірки.
Усе це свідчить про те, що задачі, де квантові ядра можуть давати експоненційне прискорення, існують. Але поточний стан науки такий, що задачі вибираються на основі спостережень або теоретичного обґрунтування того, що вони мають бути придатними для квантових алгоритмів. Нереалістично очікувати квантового прискорення для задач ML, з якими класичні комп'ютери вже добре справляються.
Виявлення таких ідеальних випадків для дослідження квантової корисності — величезна відповідальність для тих, хто навчається в цьому курсі. І це завдання, яке неможливо виконати в межах такого курсу. Це дослідження — задача для всієї мережі IBM Quantum, що складається з дослідників, таких як ти. Цей курс демонструватиме робочі процеси QML та стратегії кодування, щоб ти міг розпочати дослідження квантової корисності у своїй предметній галузі.
Сподіваємося, цей вступ прояснив кілька речей щодо квантового машинного навчання:
- Квантові алгоритми можуть забезпечити експоненційне прискорення над класичними для дуже специфічних задач, які класично складні та добре підходять для квантових алгоритмів.
- Висока розмірність заплутаних станів у квантових обчисленнях важлива, але сама по собі недостатня для отримання переваги над класичними алгоритмами.
- Знаходження задач, добре придатних для квантових алгоритмів, — надзвичайно складне завдання, яке переважно випаде на долю тих, хто навчається в цьому курсі.
Питання для самоперевірки
Що відрізняє квантові стани від класичних?
Відповідь:
Багато чого. Зокрема: комплексні коефіцієнти та суперпозиція з одним примірником. Є багато інших відмінностей, які будуть розглянуті в майбутніх уроках, включаючи заплутаність та інтерференцію.
Правда чи неправда? Сильно заплутані квантові стани дозволяють нам ефективніше розв'язувати більшість задач машинного навчання на квантовому комп'ютері.
Відповідь:
Неправда. Більшість задач машинного навчання дуже ефективно розв'язуються класичними алгоритмами, і квантові алгоритми навряд чи запропонують суттєве прискорення. Мета в QML — знаходити набори даних з ознаками, які добре описуються квантовими станами та/або знаходити відображення ознак даних, що оптимізують точність моделей.
Цілі навчання курсу
Після завершення курсу ти зможеш опану вати наступні ключові навички та компетенції:
-
Пояснити, що таке QML і де квантові обчислення стикаються з класичним машинним навчанням.
-
Застосовувати квантову термінологію та ключові терміни до робочих процесів ML.
-
Визначати ключові компоненти робочого процесу QML (різних типів).
-
Визначати різні типи QML і розрізняти їх.
-
Реалізовувати квантові методи ядра та варіаційні квантові класифікатори, використовуючи примітиви Qiskit Runtime та дотримуючись шаблонів Qiskit.
-
Визначати, де QML найбільш перспективне, а де ні.
-
Адаптувати приклад задачі до власного набору даних.
-
Знати про проблеми в QML, такі як час навчання, шум та накопичена помилка при зчитуванні кількох станів.
-
Робити рекомендації щодо того, де QML може принести користь організації.
Структура курсу
Курс складається з кількох уроків. Кожен урок містить кілька питань для самоперевірки протягом тексту, щоб ти міг практикувати нові навички або перевіряти своє розуміння в процесі. Вони не є обов'язковими.
Наприкінці курсу є вікторина з 20 питань. Потрібно набрати щонайменше 70%, щоб отримати значок Квантового машинного навчання через Credly. Якщо ти набереш щонайменше 70%, твій значок буде автоматично надіслано тобі електронною поштою незабаром після цього. Ти можеш подати вікторину лише двічі. Після першої подачі у тебе буде можливість спробувати ще раз питання, на які ти відповів неправильно. Після другої подачі твій результат є остаточним.
Структура курсу:
- Урок 1: Вступ та огляд
- Урок 2: Повторення машинного навчання
- Урок 3: Кодування даних
- Урок 4: Квантові методи ядра та машини опорних векторів
- Урок 5: Варіаційні квантові класифікатори / нейронні мережі
- Іспит для значка
Запусти свій перший код QML
Часто корисно побачити, куди ми рухаємося, перш ніж розбивати на частини та заглиблюватися в передумови. Блоки коду нижче виконують простий приклад методу квантового ядра. Конкретно обчислюється один елемент матриці ядра. Тим, хто не знайомий з методами ядра або квантовими ядрами, не варто лякатися — кілька уроків цього курсу будуть присвячені детальному розбору того, що робиться в цих блоках.
За допомогою цього коду ми одночасно знайомимо з шаблонами Qiskit — фреймворком для підходу до квантових обчислень на масштабі корисності. Цей фреймворк складається з чотирьох кроків, які є дуже загальними і можуть бути застосовані до більшості задач (хоча в деяких робочих процесах певні кроки можуть повторюватися кілька разів).
Шаблони Qiskit:
- Крок 1: Відображення класичних входів на квантову задачу
- Крок 2: Оптимізація задачі для квантового виконання
- Крок 3: Виконання за допомогою примітивів Qiskit Runtime
- Крок 4: Аналіз / постобробка
У блоках нижче ми пропонуємо лише поверхневі пояснення різних кроків, рівно стільки, щоб допомогти знайти відповідний урок для поглибленого вивчення.
# 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
Хоча не потрібно розуміти всі кроки вище, слід спробувати зрозуміти результат, щоб знати, навіщо ми це робимо. Багато процесів у машинному навчанні використовують скалярні добутки як частину бінарної класифікації (серед іншого). Квантова механіка має очевидний зв'язок з цим, оскільки ймовірності вимірювання різних станів задаються скалярним добутком з початковим станом : . Отже, вище ми створили квантову схему, що містить ознаки двох точок даних, відображає їх у простір квантового вектора, а потім оцінює скалярний добуток у цьому просторі за допомогою вимірювань. Це приклад оцінки квантового ядра. Зверни увагу, що ми реалізували цей процес лише для двох точок даних (14-ї та 19-ї). Якби ми зробили це для всіх можливих пар, ми могли б взяти вихід (у цьому випадку число 0.821...) і заповнити матрицю результатів, що описує перекриття між усіма точками в навчальному наборі даних. Це і є «матриця ядра».
Перевір своє розуміння
Прочитай питання нижче, поміркуй над відповіддю, а потім натисни трикутник, щоб побачити рішення.
У наведеному процесі ми обчислили елемент матриці ядра для 14-ї та 19-ї точок даних. Яке значення ми маємо отримати, якщо використовуємо одну й ту саму точку даних двічі (наприклад, 14-ту і 14-ту знову)? Іншими словами, якими мають бути діагональні елементи матриці ядра? Дай відповідь за відсутності шуму, але зверни увагу, що відхилення від цієї відповіді можливі в присутності шуму.
Відповідь:
Діагональні елементи мають бути 1.0. Цей процес має обчислювати нормалізований скалярний добуток вектора з самим собою, який завжди дорівнює одиниці.