Quantum K-nearest neighbor
Contents
Quantum K-nearest neighbor#
Автор(ы):
Введение#
Если вы занимались машинным обучением, то, скорее всего, знакомы с классическим алгоритмом
Давайте немножко вспомним задачу классификации с использованием классического
У нас есть
Тогда мы пройдём следующие шаги:
Вычислим похожесть между тестовым образцом и каждым тренировочным образцом.
Найдем
ближайших к тестовому образцу соседей.Подсчитаем количество представителей для каждого класса и приписываем метку самого часто встречающегося класса к тестовому образцу.
Самой трудозатратным шагом является вычисление расстояния от тестового образца к каждому тренировочному. Также и в квантовой версии алгоритма.
Note
На текущий момент разработано несколько разных версий квантового алгоритма поиска ближайших соседей. Есть версия основанная расстоянии Хэмминга [LTG21]:
Расстояние Хэмминга между векторами
Но в данной работе мы обратим внимание на версию, которая вычисляет fidelity между двумя векторами состояниями.
Пусть задано Гильбертово пространство
Пусть
Определим fidelity между тестовым состоянием и
В свою очередь
Заметим, что задача нахождения
где
Алгоритм#
Далее мы алгоритм представленный в работе [BAG21].
Fig. 67 Принципиальная схема QkNN алгоритма. Взято из работы [BAG21].#
Квантовый алгоритм поиска
Используй оракул
(для алгоритма Гровера) мы находим состояний для которых значение fidelity с тестовым состоянием максимально.Найти преобладающую метку среди
найденных состояний и присвоить её тестовому состоянию.
Самой нетривиальной задачей для нас будет построение оракула
Вначале нужно составить оператор
, который выполняет преобразование вида:для
. – это одно из базисных состояний вычислительного базиса (выражающее двоичное представление числа ).Выполняется преобразование:
. В амплитуду состояния закодирована информация о числе Делается это с помощью Swap test.Swap test это применение контролируемой операции
, которым можно пользоваться для того, чтобы статистически определять fidelity: между двумя произвольными чистыми состояниями и .
Fig. 68 Схема Swap test#
Выполняется преобразование
И тогда
.
Берём 2 пары регистров
. Инициализируются они в формеПрименяется
на каждой паре:Теперь информация закодирована в регистры и нам нужно реализовать функцию
. И пусть это оператор, реализующий .
Теперь займёмся вопросом конструирования оракула
Вначале мы подготовим состояния. Но чтобы это сделать нам нужны оракулы
для всех
Инициализируем 4 регистра
, , , с соответствующим количеством кубитов в каждом , , , , где , .Применяем
Применяем
Применяем swap test между тренировочным регистром
и тестовым регистром , а регистр будет выступать в качестве контрольного.Определим
как унитарное преобразование, которое объединяет шаги 3-4. Кстати, если мы сейчас произведём измерение регистра , то будем иметьНа этом шаге информация о
теперь закодирована в амплитуды. Теперь же мы должны перевести из амплитуды в число.Теперь мы будем конструировать новый гейт G. Вообще говоря, он описан в работе [MKF19], где вы можете подробнее с ним ознакомиться.
где
– это действие гейта на регистре , .Текущее состояние
может быть представлено в виде композиции двух состоянийТеперь применяем алгоритм QPE (Quantum Phase Estimation), чтобы перевести значение фазы
в числовое представление.Применяем алгоритм квантовой арифметики:
Обнуляем регистры
и получаем На самом деле шаги 5-9 составляют оператор , который мы упоминали ранее.Теперь применяем оператор
Добавим кубит
для выполнения сравнениягде
По кубиту
мы сможем распознать все индексы для которых .Обнуляем регистры
, .Добавляем ещё один кубит
для каждого , применяя гейтна индексах регистра. И в результате получим состояние
О да… Теперь мы добавляем ещё один кубит
. Применяем гейт на кубите и гейт Тоффоли с контролирующими и целевойОбнуляем все регистры, кроме
Что ж, вот мы и построили преобразование
которое так хотели