Руководство для начинающих по квантовому машинному обучению

Природа не является классической, черт возьми, и если вы хотите смоделировать природу, вам лучше сделать ее квантово-механической!

- Ричард Фейнман

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

Например: Квантовый процессор Google Sycamore, имеющий около 50 кубитов, смог выполнить расчет за несколько сотен секунд, на выполнение которого у суперкомпьютера ушло бы более 9000 лет! Это начало эры вычислений шумного промежуточного квантового масштаба (NISQ), и в ближайшие годы ожидается появление квантового оборудования с сотнями кубитов, расширяющего возможности различных квантовых алгоритмов, таких как алгоритм факторинга Шора или Алгоритм поиска Гровера будет реализован в значительных масштабах.

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

Что такое квантовое машинное обучение (QML)?

Квантовое машинное обучение ускоряет и улучшает машинное обучение, осуществляемое на «классическом» компьютере, который мы используем каждый день, за счет использования потенциала квантовых вычислений. Они используют алгоритмы, которые выполняются на квантовых устройствах, таких как квантовые компьютеры, для дополнения, ускорения или поддержки работы, выполняемой традиционной программой машинного обучения. Вот несколько приложений квантового машинного обучения:

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

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

Кубиты и суперпозиция

В отличие от классического компьютера, квантовый компьютер использует квантовые биты или кубиты для хранения своих данных, которые управляются с использованием законов квантовой физики. Кубит может иметь сразу несколько состояний со значениями от 0 до 1, в отличие от бита, который может иметь только два состояния (0 или 1). Давайте разберемся с этим на примере:

Представьте, что вы подбрасываете монету с двумя сторонами — орлом (1) и решкой (0). Пока монета подбрасывается, мы не можем решить, какая у нее сторона, если только мы не остановим ее или она не упадет на землю. Ссылаясь на бросок монеты ниже, мы можем сказать, что он имеет оба состояния в зависимости от нашей точки зрения.

Эта способность квантовой системы находиться в нескольких состояниях до тех пор, пока она не будет измерена, называется суперпозицией двух состояний. Вероятность измерения 0 или 1 во время наложения не равна ни 0,0, ни 1,0. Кубит находится в нескольких состояниях одновременно и может быть только в одном состоянии, когда суперпозиция рушится, проще говоря (орел или решка в случае эксперимента с подбрасыванием монеты).

Обозначение скобы

В квантовой механике нотация Бракета (также известная как нотация Дирака) используется для описания квантовых состояний, состоящих из угловых скобок (〈 〉). и вертикальные полосы ( | ) и используются для создания бюстгалтеров и кесетов.

Например:

〈x|

Это называется бюстгальтер и математически обозначает линейную функцию

x: V → C

которая представляет собой линейную карту, отображающую каждый вектор в V на число в комплексной плоскости C.

|y

Это называется ket и математически обозначает вектор y в комплексном векторном пространстве В.

Вот как это выглядит, когда линейная функция (〈x|) применяется к вектору (|y).

x|y⍷ C

Используя нотацию Бракета, мы можем обозначить состояние суперпозиции кубитов:

  • До измерения: | Ψ= α|0+ β|1
  • После измерения: |0〉или |1

Сфера Блоха

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

Квантовая запутанность

Жуткое действие нарасстоянии!

— Альберт Эйнштейн

Одно из странных явлений, которое происходит, когда объекты становятся чрезвычайно маленькими или достигают квантового мира, — это квантовая запутанность. Давайте используем пример, чтобы понять это для кубитов: представьте, что есть коробка с парой обуви внутри. Мы вынимаем обувь из коробки, а оставшуюся коробку отправляем в другую страну. Позже выяснилось, что выбранный ботинок был правильным; следовательно, куда бы мы ни взяли туфлю в коробке, она всегда будет левой.

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

Квантовая декогеренция

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

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

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

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

Квантовая принципиальная схема может выглядеть увлекательно, но если бы нам пришлось создавать диаграммы для каждого квантового вычисления, выполняемого на квантовом компьютере, и если бы наши квантовые программы были особенно длинными, это стало бы чрезвычайно трудно выполнить. Чтобы решить эту проблему, исследователи создали фреймворки для создания более традиционных программ, описывающих квантовую схему. Мы можем построить квантовую схему, используя различные фреймворки, включая Qibo, Pennylane, Qiskit, Cirq и Strawberry Fields. Сегодня мы научимся создавать квантовую схему с помощью Cirq!

Давайте построим такую ​​же квантовую схему, которую мы видели раньше!

Примечание.

Приведенная выше квантовая принципиальная схема описывает пример алгоритма Бернштейна-Вазирани.

Прежде чем начать, убедитесь, что вы установили cirq с помощью следующей команды:

Кроме того, его импорт позволит вам определить, правильно ли он установлен:

Начнем со структуры схемы. Как мы видим, всего имеется 6 кубитов, давайте создадим их один за другим:

Примечание.

Поскольку в Python индексация начинается с 0, я назвал свои кубиты qubit_0, qubit_1 и так далее.

Вы можете проверить свой инициализированный кубит, просто напечатав его:

Этот метод создания кубитов не всегда осуществим. Что, если мы хотим создать сотни кубитов вместо пары?

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

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

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

В Cirq мы можем создать сетку кубитов с помощью следующей команды:

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

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

Точно так же мы создаем кубиты сетки в квадратной форме:

Здесь мы видим, что кубиты генерируются в форме прямоугольной и квадратной сетки, где x и y в «cirq.GridQubit(x, y)» указывают координату x и координату y.

Вернемся к построению нашей квантовой схемы. В нашей квантовой схеме мы видим, что есть два типа квадратных блоков, помеченных H — что означает ворот Адамара, и >X –обозначает ворота CNOT (контролируемое НЕ). Если вы хотите узнать больше о квантовых вентилях, обратитесь к этому.

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

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

Далее мы видим, что существует ряд вентилей CNOT, которые идут от кубита-4 к кубиту-5, от кубита-1 к кубиту-5 и от кубита-0 к кубиту-5.

Наконец, мы применяем шесть вентилей Адамара.

Что ж, эта принципиальная схема выглядит не так, как ожидалось, верно? Мы видим, что все ворота Адамара расположены максимально левее. Это произошло потому, что Cirq использует эту стратегию вставки по умолчанию всякий раз, когда мы добавляем новые операции к кубитам. Но что, если мы не хотим использовать эту стратегию вставки по умолчанию?

Мы можем сделать это, явно определив количество требуемых моментов. Начнем с нуля:

Теперь мы видим, что наша квантовая схема в точности совпадает с той, что изображена на диаграмме!

Поскольку наша квантовая схема готова, давайте смоделируем ее на идеальном квантовом компьютере! Моделирование в основном дает информацию о состояниях кубитов после применения соответствующих вентилей, поэтому наши требуемые результаты должны быть 1, 1, 0, 0, 1 и 1.

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

Начнем с установки и настройки необходимых пакетов!!

Примечание. TensorFlow Quantum требует TensorFlow версии 2.7.0, поэтому его можно использовать в виртуальной среде или Google Colab.

Импорт необходимых пакетов:

Обновление ресурсов пакета для управления изменениями версии:

Учитывая, что набор данных MNIST содержит 60 000 изображений, мы будем иметь дело с бинарной классификацией, которая будет классифицировать цифры 3 и 6, а не с множественной классификацией (цифры 0–9), чтобы сэкономить время.

Примечание.

Следующая модель квантовой нейронной сети основана на этой исследовательской работе, опубликованной в сотрудничестве с Google и Массачусетским технологическим институтом (MIT).

Предварительная обработка данных:

Давайте теперь создадим функцию, которая будет хранить только числа 3 и 6. Кроме того, поскольку эта классификация является двоичной, мы переведем ее в True (3) и False (6). Преобразование его в 0 и 1 - еще один способ добиться этого.

Давайте посмотрим на наш первый пример:

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

Согласно разделу 3.3 этой исследовательской работы, цифра 3 состоит из 797 различных 16-битных строк, цифра 6 состоит из 617 различных 16-битных строк, а 197 различных изображений помечены как 3, так и 6. Следовательно, нам нужно фильтровать набор данных, удаляя противоречивые примеры или изображения, принадлежащие обоим классам.

Примечание.

Результаты могут не обязательно совпадать с заявленными результатами, как указано в исследовательской статье.

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

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

Примечание:

Мы можем изобразить наши квантовые схемы гораздо более привлекательным образом, используя SVGCircuit

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

Модель квантовой нейронной сети:

Теперь, когда часть предварительной обработки данных завершена, давайте начнем с создания нашей собственной модели квантовой нейронной сети!

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

Давайте создадим пример слоя схемы:

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

Оберните схему в модель tfq-keras, где модель будет получать квантовые данныеот x_train_circuit, которые будут кодировать классические данные. Он использует слой Параметризованная квантовая схема для обучения схемы модели на квантовых данных. Мы не будем явно моделировать модель, поскольку моделирование происходит каждый раз, когда модель используется (для обучения или тестирования). За моделирование отвечает слой Параметризованная квантовая схема (tfq.layers.PQC ).

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

  1. Поскольку мы собираемся использовать потерю шарнира, нам нужно преобразовать метки из логического (Истина/Ложь) в [-1,1], как и ожидалось при потере шарнира.

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

Примечание:

Другой возможной стратегией является изменение выходного диапазона на [0, 1] и обработка его как вероятности, которую модель присваивает классу 3. Для этого подхода можно использовать tf.losses.BinaryCrossentropy потерь.

Обучение модели:

Примечание.

Если у вас недостаточно времени или вычислительной мощности, не стесняйтесь тренироваться с подмножеством данных.

Оценим точность нашей модели:

Слава!🥳

Теперь у нас есть модель квантовой нейронной сети, которая может классифицировать изображения рукописных цифр с точностью около 91%!

Вывод:

Давайте опробуем нашу модель на зашифрованном изображении, теперь, когда модель создана, обучена и оценена!

Перед выполнением вывода напишем несколько необходимых функций:

Импорт:

Функции для шифрования, дешифрования, представления изображений и логического вывода:

Примечание:

Ради статьи я буду шифровать и расшифровывать изображение, но на самом деле данные могут быть уже зашифрованы.

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

Зашифровать изображение:

Примечание:

Секретный ключ показан только для этой статьи; на самом деле это должно быть конфиденциальным.

После шифрования мы получим зашифрованное изображение и приватный ключ:

Теперь, когда у нас есть зашифрованное изображение, давайте расшифруем его и выполним вывод:

Давайте проверим, получили ли мы наше расшифрованное изображение:

Изменение размера изображения:

Примечание:

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

Предварительная обработка и вывод (предсказание):

Браво!🥳

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

Весь код, используемый в этой статье, доступен на моем GitHub.

Ссылка на репозиторий GitHub: https://github.com/saurav935/Quantum-Machine-Learning

Если вы хотите узнать больше по этой теме, не стесняйтесь изучить следующие ресурсы:

Тензорфлоу Квантум

Классификация с помощью квантовых нейронных сетей на процессорах ближнего времени

Квантовые сверточные нейронные сети

Quanvolutional Neural Networks: усиление распознавания изображений с помощью квантовых схем

Квантово-оптическая сверточная нейронная сеть

Квантовая обработка изображений: возможности и вызовы

Фернет (симметричное шифрование)

Наслаждайтесь квантовыми вычислениями! ✌️