Сегодня мы соответствуем критериям входа для участия

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

Как узнать, стоит ли продолжать карьеру в области квантовых вычислений? Почти три месяца назад я утверждал, что лучший способ — работать над IBM's Quantum Open Science Prize.

Именно это мы и сделали. В моих предыдущих постах мы рассмотрели мельчайшие детали этой задачи. IBM хочет, чтобы мы смоделировали гамильтониан модели Гейзенберга для трехчастичной системы на 7-кубитной системе Джакарты IBM Quantum, используя Trotterization. Во-первых, мы узнали, что настоящая проблема заключается не в моделировании гамильтониана модели Гейзенберга для трехчастичной системы. Вместо этого речь идет о том, как это сделать на шумном устройстве. Итак, мы настроили нашу среду разработки, посмотрели, как использовать настоящий квантовый компьютер, и познакомились с методами уменьшения квантовых ошибок.

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

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

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

Итак, теперь мы готовы собрать все вместе.

Концептуально мы следуем подходу метода CDR.

  1. Генерация обучающих данных
  2. Обучите модель шума
  3. Предсказать бесшумные измерения от зашумленных

Сгенерируйте обучающие данные

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

  • Бесшумный (классический) тренажер
  • Шумное квантовое устройство или шумный симулятор

Сегодня мы используем Qiskit QasmSimulator в качестве обеих сред. Во-первых, мы инициализируем класс QasmSimulator Python без каких-либо параметров, чтобы получить бесшумный симулятор. Во-вторых, мы используем нашу учетную запись IBM Quantum для создания моделируемой серверной части на основе профиля шума устройства Jakarta.

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

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

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

Однако для дрессировки даже четыре рысистых ворота слишком велики. Нам нужны более короткие цепи. К счастью, каждые ворота рысака состоят из трех подсхем: XX, YY и ZZ ворот. Итак, план состоит в том, чтобы построить тренировочные схемы, содержащие только две из трех подсхем в одном вороте для рыси.

Следующая функция предоставляет нам эти схемы.

В общем, это неизменная рысистая схема IBM. Функция get_circuit предоставляет параметризуемый интерфейс для создания на его основе обучающих схем. Идея состоит в том, что мы можем настроить, какие подсхемы мы хотим включить, с помощью параметров X, Y и Z. Если мы не включим все три подсхемы, мы добавим только один троттеризационный затвор. Например, если у нас есть ворота XX и YY, функция создает цепь с этими воротами для одного шага рысака. Важно отметить, что нам нужно использовать предполагаемое количество шагов троттинга, потому что мы используем это число в качестве параметризации вращения кубита. Таким образом, схемы с разным количеством шагов рысака совершенно разные.

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

Мы создаем три набора схем. Это цепи с

  • XX и YY ворота
  • YY и ZZ ворота
  • ZZ и XX ворота

Конечно, вы также можете играть с комбинациями ворот.

Более того, мы создаем не по одной цепи, а по 27! Причина в томографии квантового состояния, которую IBM использует для оценки производительности нашего моделирования. Томография квантового состояния воссоздает квантовое состояние, рассматривая квантовую систему со всех исключительных углов. Для трехкубитной системы это 3^3=27 углов. Каждый угол приводит к немного отличающейся квантовой схеме. Но эти небольшие различия существенно влияют на измерения. По сути, мы рассматриваем каждую из этих схем отдельно.

Итак, на следующем этапе мы создаем 27 цепей для каждой указанной комбинации.

Мы создаем две вспомогательные функции, прежде чем сможем выполнить все эти схемы (см. этот предыдущий пост). В двух словах, функция sorted_counts сортирует счетчики измерений из выполненной схемы и гарантирует, что все возможные состояния существуют, даже если их счетчик равен нулю.

Функция get_modifiers берет схему, выполняет ее на нашем бесшумном и шумном симуляторе и вычисляет список модификаторов. Наша схема может привести к одному из восьми состояний. Они варьируются от 000 до 111. Для каждого из этих значений существует один модификатор. Итак, мы получаем восемь модификаторов на контур. Модификатор — это число, которое превращает зашумленный счет в правильный счет без шума, когда мы умножаем на него.

Мы превращаем все наши схемы в соответствующие модификаторы, применяя функцию get_modifiers. Переменные modifiers_xy, modifiers_yz и modifiers_zx представляют собой списки по 27 цепей каждая. Каждый элемент представляет собой список из восьми модификаторов.

Мы zip объединяем их в один список (modifiers_zipped). Результатом является список из 27 цепей, содержащих кортежи из трех элементов из 8 модификаторов.

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

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

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

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

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

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

noisy state tomography fidelity = 0.2861 ± 0.0000
noise-free state tomography fidelity = 0.9699 ± 0.0000
mitigated state tomography fidelity = 0.7518 ± 0.0000

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

Однако из-за неустраненного (симулированного) шума томография состояния падает до 0.29. Но как только мы уменьшим шум с помощью наших модификаторов, мы получим точность томографии состояния 0.75. Критерием участия в конкурсе IBM Quantum Open Science Prize является верность 0.3. Итак, я бы сказал, что у нас все хорошо.

Глядя на статистику, можно увидеть эффективность нашего подхода. Мы уменьшаем около 68% шума.

Error (unmitigated): 0.6838963295732885
Error (mitigated): 0.21813650699579556
Relative error (unmitigated): 0.7050850779029165
Relative error (mitigatedR): 0.22489489909174665
Error reduction: 68.1%.

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

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