Основы квантового машинного обучения

Хотите начать работу с квантовым машинным обучением? Взгляните на Практическое квантовое машинное обучение с помощью Python.

Какой самый простой способ сделать обыденную тему интересной?

Правильный! Вы просто добавляете к нему слово «квант». Хочу видеть?

Как насчет линейной функции? Он описывает линию в системе координат — ничего страшного. Я бы перестал читать пост, если бы речь шла о линейной функции. Но что, если мы посмотрим, как создать квантовую линейную функцию?

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

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

Линейные функции имеют вид y=f(x)=ax+b.

Графически a обозначает наклон графика. Это изменение графика у при увеличении положения по оси абсцисс на единицу. b — точка пересечения — это точка, в которой график пересекает ось Y.

Первое заметное различие, которое мы видим, заключается в том, что классическая линейная функция непрерывна, тогда как ее квантовый аналог дискретен. Во-вторых, квантовая линейная функция работает только для положительных значений по обеим осям.

Начнем с концептуальной идеи квантовой линейной функции. У нас есть четыре пронумерованных состояния. Мы придерживаемся двоичного формата чисел.

Мы делим значение в каждой позиции на блоки одинакового размера. Так как наша функция возрастает, мы добавляем по одному блоку за шаг. Итак, мы начинаем с одного блока в нулевой позиции. Затем мы добавляем один блок в состоянии один и еще один на шагах три и четыре каждый.

Теперь давайте создадим соответствующую квантовую схему. Мы используем два кубита. Первый кубит представляет правый (нижний) номер состояния, а второй кубит представляет левый (верхний) номер состояния.

Сначала мы разделили состояния на основе их значения верхнего кубита и подсчитали блоки. Есть три блока, когда верхний кубит равен нулю, и семь блоков, когда верхний кубит равен 1.

Таким образом, мы переводим верхний кубит в состояние с вероятностью 7/10 в состоянии 1. Следовательно, он имеет вероятность 3/10 находиться в состоянии 0.

Далее мы смотрим только на те состояния, в которых верхний кубит равен 1. Затем мы разделяем эти состояния и подсчитываем блоки.

Затем мы переводим младший кубит в состояние с вероятностью 4/7 оказаться в состоянии 1 только в том случае, если младший кубит равен 0.

Мы делаем то же самое, чтобы разделить состояния, в которых верхний кубит находится в состоянии 0.

В следующем листинге показан полный код, который генерирует дистрибутив, который мы показали в самом верху.

Мы начинаем с импорта функций, которые мы используем, из Qiskit — это комплект для разработки квантовых вычислений IBM. Функция prob_to_angle принимает вероятность и возвращает соответствующий угол вектора состояния кубита. Этот пост объясняет эту функцию более подробно.

Затем мы определяем QuantumCircuit с двумя кубитами. Основная часть схемы состоит из вентилей RY (ry) и управляемых вентилей RY (cry). Они переводят указанный кубит в состояние, соответствующее указанному углу.

Мы следуем шагам, которые мы описали ранее. Вентиль qc.ry(prob_to_angle(7/10), 1) переводит верхний кубит (в позиции 1) в состояние, где угол соответствует вероятности 7/10.

Вентиль qc.cry(prob_to_angle(4/7), 1, 0) переводит нижний кубит (в позиции 0) в состояние, в котором угол соответствует вероятности 4/7, только если кубит в позиции 1 равен 1.

Вентиль qc.cry(prob_to_angle(2/3), 1, 0) также будет регулировать состояние нижнего кубита, если верхний кубит равен 1. Поэтому мы инкапсулируем его в X вентилей, которые меняют местами вероятности состояний 0 и 1 для этого кубита. Итак, мы применяем угол, который представляет вероятность 2/3, только если верхний кубит равен 0.

Когда вы запускаете код, вы получаете в результате следующее распределение.

Заключение

Этот подход может показаться вам знакомым, если вы читали мой предыдущий пост Распределения Multinoulli. Квантовая часть на самом деле такая же. Но концептуальный подход к разделению значений на блоки является новым. Мы будем использовать этот подход в следующем посте, когда будем обобщать квантовую линейную функцию.

Хотите начать работу с квантовым машинным обучением? Взгляните на Практическое квантовое машинное обучение с помощью Python.