Только начинаете квантовое программирование? вы попали в нужное место. Будем ли мы болтаться с кубитами и вступать с ними в суперпозицию? Только если у вас нет осложнений

Посетите: amitnikhade.com

Амит Нихаде

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

Вступление

Необходимость перейти от классических вычислений к квантовым вычислениям не просто случайна и, следовательно, ускоряет технологическую революцию, раскрывая видение квантовой эры. Сочетание искусственного интеллекта и квантовых вычислений может творить чудеса. И это то, что появится у грядущих поколений. Поэтому мы обязаны быть готовыми и немного приблизиться к будущему компьютеров.

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

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

Предположение



Установка

Сделайте быструю установку pip

ПРИМЕЧАНИЕ. Библиотека поддерживает Python версии 3.6 или новее. ИЛИ если вы просматриваете эту статью позже с даты или на неделе, когда она была опубликована.

pip install pennylane --upgrade

Вы даже можете собрать его из исходников.

Краткий обзор кубита

Кубит - это не что иное, как основной строительный блок квантовых компьютеров, аналогичный двоичным битам компьютеров, которые мы используем каждый день. Давайте углубимся и наглядно визуализируем состояния кубитов с помощью сферы Блоха.

Вот сфера

Сфера Блоха - это геометрическое представление состояний кубитов. Операции с одним кубитом можно легко визуализировать с помощью сферы Блоха. Чистое состояние ψ можно записать как комплексную суперпозицию векторов ∣0⟩ и ∣1⟩

∣ψ⟩ = α∣0⟩ + β∣1⟩

Каждое состояние кубита можно представить как линейную комбинацию ∣0⟩ и ∣1⟩. Вышеприведенное уравнение представляет состояние кубита, только если сумма квадрата | α | и квадрата | β | равна 1 с радиусом (r) = 1. Вероятность кубита в состоянии 0⟩ равна α ∣2, а вероятность того, что он будет измерен в состоянии ∣1⟩, равна β ∣2. Следовательно, сумма наблюдаемой вероятности равна 1.

Где α и β - комплексные числа, они представляют собой не что иное, как амплитуды вероятности

Альтернативный символ, используемый для состояния 1, --⟩, а для состояния 2 +⟩. Оба состояния образуют ортонормированный базис, которые расположены с противоположной стороны блочной сферы. На рисунке сферы Блоха θ, φ - действительные числа. где числа 0 ≤ θ ≤ π и 0 ≤ φ ≤ 2π определяют точку на единичной трехмерной сфере. Это состояние кубита.

Разность фаз между 0⟩ и ∣1⟩ называется относительной фазой.

Произвольное одиночное состояние кубита можно записать как

В приведенном выше уравнении θ, φ и γ - действительные числа. Но произвольные значения γ и факториал e в степени iγ не демонстрируют наблюдаемого эффекта, а также определенная точка состояния кубита находится в том же месте. Поэтому уравнение состояния кубита в гильбертовом пространстве записывается как

Примечание: если θ увеличивается, мы с большей вероятностью наблюдаем состояние 1.

Операция вращения

Состояния кубита можно преобразовать, вращая его вокруг осей x, y и z.

Операция, используемая для вращения отдельного кубита вокруг оси X. Вентиль Rx реализует поворот на π, то есть на 180 градусов вокруг оси X блочной сферы. X-ворота также называются воротами НЕ. Что дает состояние ∣0⟩ для ∣1⟩ и ∣1⟩ для ∣0⟩ при прохождении через ворота.

Точно так же операция Ry используется для вращения отдельного кубита вокруг оси Y

И операция Z-gate, используемая для поворота отдельного кубита вокруг оси Z на π блочной сферы.

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

Шлюз Контролируемое НЕ представляет собой двухкубитовую операцию, в которой первый называется управляющим кубитом, а второй - целевым кубитом. Вентиль CNOT переворачивает целевой кубит, если контрольный кубит равен ∣1⟩

Измерения: это этап в конце квантовой схемы, который наблюдает или как бы измеряет выходы схемы, которые представляют собой вероятности в форме состояния, то есть вероятностные состояния.

Бра-кеты: (Изобрел Поль Дирак) Обозначение скобок - не что иное, как символический способ заключения битов и битовых строк в асимметричные скобки, называемые кеты, где вместо этого мы пишем | 0⟩ и | 1⟩ 0 и 1.

Реализация

Что ж, после долгой теоретической фазы давайте поиграемся с кодом.

Надеюсь, у вас установлен Pennylane. Это позволяет нам выполнять обратное распространение с тем же оптимизатором, который мы использовали в классическом машинном обучении.

Попробуем реализовать схему вращения кубита, пока кубит в основном состоянии | 0⟩. Сначала импортируйте библиотеку Pennylane с библиотекой NumPy, которая поставляется с интеграцией Pennylane для повышения производительности.

#import libs
import pennylane as qml
from pennylane import numpy as np

Затем мы инициализируем квантовое устройство. Вы можете инициализировать его с помощью аппаратного устройства, используя API квантового опыта IBM или альтернативы.

device = qml.device("default.qubit", wires=2)

Где wire - количество используемых подсистем, поскольку мы используем 2-кубитную операцию, а также 2-проводную. И default.qubit - это симулятор по умолчанию, который мы будем использовать.

нам понадобится функция для применения квантовых операций над кубитами, которая включает определенные квантовые вентили.

def circuit(params):
    qml.RX(params[0], wires=0)
    qml.RY(params[1], wires=1)
    return qml.expval(qml.PauliZ(0))

Первая инструкция - это вентиль RX, который мы видели выше в теоретической части, он поворачивает кубит на 180 градусов по оси X, вторая инструкция - вентиль RY будет вращать кубит вокруг оси y. expval выполнит окончательное измерение над значением, выводимым вентилем Pauli Z, который вращает кубит вокруг оси Z до π. Это также среди наблюдаемых, которые нам нужно добавить декоратор перед функцией в сделать его узлом Q и запустить на устройстве, которое мы инициализировали ранее.

@qml.qnode(device)
def circuit(params):
    qml.RX(params[0], wires=0)
    qml.RY(params[1], wires=1)
    return qml.expval(qml.PauliZ(0))

Создание функции стоимости аналогично тому, как мы создаем в классическом машинном обучении.

def cost(x, y):
    return np.sin(np.abs(circuit(x, y))) - 1

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

opt = qml.grad(cost, argnum=[0, 1])

Здесь мы наконец оптимизировали наши вращения с помощью оптимизатора градиентного спуска с функцией стоимости, передав значения типа bool в качестве параметров функции стоимости. Он вернет вывод типа объекта.

Так что это было только начало квантового машинного обучения. Теперь мы попробуем выполнить квантовое машинное обучение с помощью пакета, который мы обычно используем, например PyTorch. Так что давайте копаться.

Реализация PyTorch

Сделайте установку Pytorch и импортируйте библиотеки

Make sur that you've installed PyTorch
For PyTorch latest release - Here
import pennylane as qml
from pennylane import numpy as np
import torch
from torch.autograd import Variable

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

dev = qml.device('default.qubit', wires=2)

Как обычно, мы создадим квантовую функцию, которая будет включать инструкции по вращению кубита. И мы также превратим его в qnode, инициализировав его квантовым устройством.

@qml.qnode(dev, interface='torch')
def circuit(phi1, phi2):
 qml.RX(phi1, wires=0)
 qml.RY(phi2, wires=1)
 return qml.expval(qml.PauliZ(0))

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

def cost(phi1, phi2):
 expval = circuit(phi1, phi2)
 return torch.abs(expval - (-1))**2

Функция стоимости такая же, как и в классической обработке.

phi = torch.tensor([0.011, 0.012], requires_grad=True)
theta = torch.tensor(0.05, requires_grad=True)

это 2 входных параметра в тензорном формате PyTorch, которые необходимо передать в схему.

opt = torch.optim.Adam([phi, theta], lr = 0.1)

Наконец-то мы будем использовать оптимизатор Adam, который мы обычно используем в машинном обучении, со скоростью обучения, мы можем использовать и другие оптимизаторы. Оптимизаторы автоматически обновляют параметры модели машинного обучения.

steps = 200
def closure():
    opt.zero_grad()
    loss = cost(phi, theta)
    loss.backward()
    return loss
for i in range(steps):
    opt.step(closure)

И вот начинается тренировка, с 200 шагов

Что такое вариационные схемы?

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

Алгоритм предполагает определенные этапы:

  1. Составление начального состояния или основного состояния, то есть состояния 0. Подготовка состояния кубита выполняется с использованием таких классов, как BasisState или QubitStateVector, которые мы здесь не использовали. мы только что попытались понять основную идею квантового машинного обучения.
  2. Квантовая схема, в которой должны быть переданы параметры.
  3. И последний шаг включает в себя измерения наблюдаемых от каждого провода в цепи.

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

Гибридные вычисления - это комбинация классических и квантовых вычислений, например, вариационные квантовые собственные преобразователи

Итак, наконец, вы готовы погрузиться в квантовое машинное обучение. Я надеюсь, что вы, возможно, все поняли кристально ясно, я все же сделал это намного проще для понимания, и если вы этого не сделали, вы можете оставить комментарий и связаться со мной. В следующих статьях я собираюсь углубиться, так что держитесь ближе. Пожалуйста, не забывай хлопать в ладоши и следовать за мной по среднему. Спасибо.

Что стоит попробовать

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

использованная литература

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







Обо мне