Пармит Сингх Чани, Ходжун Ли, Эмилио Пелаес, Ануранан Дас и Даниэль Сьерра-Соса

В этом руководстве мы сосредоточимся на реализации Гибридной квантовой классической нейронной сети, предложенной Rongxin Xia и Saber Kais, с использованием Qiskit. Эта нейронная сеть состоит из параметризованных квантовых цепей (PQC), где вентили зависят от некоторого входного параметра. Сначала мы определим схему кодирования данных для отображения классических данных в квантовые состояния, затем создадим архитектуру нейронной сети. Наконец, мы будем использовать его для расчета энергии основного состояния молекулярного водорода (H₂) на различных межатомных расстояниях. К концу этого блога вы узнаете, как реализовать нейронные сети для расчета энергий основного состояния, как оптимизировать параметры PQC для определенной стоимости гамильтониана, и увидите, как использование нейронной сети сравнивается с использованием PQC без промежуточного измерение цепи.

Примечание редактора. Хотя мы пытались максимально упростить язык этого блога, он по-прежнему предполагает практические знания нейронных сетей и квантовых вычислений. Чтобы начать работу с обеими темами, обратитесь к прошлогодней Глобальной летней школе Qiskit, посвященной квантовому машинному обучению.

Введение

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

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

На изображении выше синяя часть — это PQC, верхняя оранжевая часть — кодирование длины связи, а верхняя желтая часть — место, где мы вычисляем ожидаемые значения b_i оператора Паули z для каждого кубита:

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

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

Реализация квантовой схемы

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

Кодирование

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

где:

Тогда кодирование может быть математически записано как

Или, проще говоря, к каждому кубиту в основном состоянии мы применяем вентиль Адамара и параметризованное вращение вокруг оси y, где каждая точка данных о длине связи преобразуется в параметр для Ry:

Параметризованная квантовая схема

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

Эти параметры используются для получения вариационного состояния |ψ(θ)›, которое мы будем использовать вместе с гамильтонианом молекулы для расчета ожидаемого значения и получения энергии молекулы. Мы выясним эти параметры позже, обучая нашу схему на точных значениях, которые мы находим с помощью обычных методов квантовой химии.

Схема нейронной сети

Итак, далее нам нужно рассчитать ожидаемые значения. Этого можно добиться путем вычисления вероятности получения каждого из базисных состояний. Наш пример — двухслойная нейронная сеть — такой глубины более чем достаточно для получения приблизительных значений основного состояния молекулы. Для создания схемы нейронной сети мы объединим две функции, которые мы создали выше, encode и apply_ansatz, затем мы вычислим математическое ожидание оператора Паули Z для каждого кубита после каждого слоя. После каждого слоя мы используем команду qc.reset() для инициализации следующего слоя схемы. В конце всех слоев мы вычисляем энергию.

Схема нейронной сети для некоторых случайных параметров приведена ниже.

Данные

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

Точные решения, полученные с помощью классического Eigensolver, представлены ниже.

Данные обучения и тестирования

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

гамильтониан

Оператор кубита можно получить с помощью Qiskit Nature. Мы преобразуем фермионный гамильтониан данной молекулы в оператор кубита с помощью преобразователя. В этом уроке мы использовали Parity Mapper. Функция, определенная ниже, возвращает оператор кубита, который зависит от длины связи молекулы водорода.

Энергия

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

Примечание — Qiskit также предоставляет нам метод вычисления ожидаемого значения с использованием StateFn(), но для этого требуется, чтобы в нашей схеме были только квантовые биты, а это невозможно, поскольку мы ввели нелинейность на основе классических битов.

Обучение

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

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

Теперь мы получили оптимизированные параметры. Используя их, мы получим энергию тестовых входов.

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

Без нелинейности

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

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

Схему со случайными параметрами можно увидеть ниже. Все осталось по-прежнему, но часть промежуточных измерений и переинициализации удалена.

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

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

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

Это руководство было создано в рамках программы наставничества Qiskit Advocate Пармитом Сингхом Чани, Ходжуном Ли, Эмилио Пелаесом и Анурананом Дасом под руководством Даниэля Сьерра-Сосы.