Квантовый дизайн TensorFlow

TensorFlow Quantum (TFQ) предназначен для решения проблем квантового машинного обучения эпохи NISQ. Он привносит примитивы квантовых вычислений, такие как построение квантовых схем, в экосистему TensorFlow. Модели и операции, созданные с помощью TensorFlow, используют эти примитивы для создания мощных квантово-классических гибридных систем.

Используя TFQ, исследователи могут построить граф TensorFlow, используя набор квантовых данных, квантовую модель и классические параметры управления. Все они представлены в виде тензоров в одном вычислительном графе. Результат квантовых измерений, приводящих к классическим вероятностным событиям, получается с помощью операций TensorFlow. Обучение проводится с помощью стандартного Keras API. Модуль tfq.datasets позволяет исследователям экспериментировать с новыми и интересными наборами квантовых данных.

Цирк

Cirq — это платформа квантового программирования от Google. Он обеспечивает все основные операции, такие как кубиты, вентили, схемы и измерения, для создания, изменения и вызова квантовых схем на квантовом компьютере или смоделированном квантовом компьютере. TensorFlow Quantum использует эти примитивы Cirq для расширения TensorFlow для пакетных вычислений, построения моделей и вычисления градиентов. Чтобы быть эффективным с TensorFlow Quantum, рекомендуется быть эффективным с Cirq.

Примитивы TensorFlow Quantum

TensorFlow Quantum реализует компоненты, необходимые для интеграции TensorFlow с оборудованием для квантовых вычислений. С этой целью TFQ вводит два примитива типа данных:

  • Квантовая схема : представляет квантовые схемы, определенные Cirq ( cirq.Circuit ) в TensorFlow. Создавайте пакеты схем различного размера, аналогичные пакетам различных точек данных с действительным знаком.
  • Сумма Паули : представляет линейные комбинации тензорных произведений операторов Паули, определенных в Cirq ( cirq.PauliSum ). Подобно схемам, создавайте группы операторов разного размера.

Фундаментальные операции

Используя примитивы квантовой схемы в tf.Tensor , TensorFlow Quantum реализует операции, которые обрабатывают эти схемы и производят значимые выходные данные.

Операции TensorFlow написаны на оптимизированном C++. Эти операции производят выборку из цепей, вычисляют ожидаемые значения и выводят состояние, созданное заданными цепями. Написание операций, которые являются гибкими и производительными, имеет некоторые проблемы:

  1. Цепи не одного размера. Для смоделированных цепей вы не можете создавать статические операции (такие как tf.matmul или tf.add ), а затем подставлять разные числа для цепей разных размеров. Эти операции должны допускать динамические размеры, которые не позволяет вычислительный граф TensorFlow со статическими размерами.
  2. Квантовые данные могут индуцировать совершенно другую структуру цепи. Это еще одна причина для поддержки динамических размеров в операциях TFQ. Квантовые данные могут представлять собой структурное изменение основного квантового состояния, которое представлено модификациями исходной схемы. Поскольку новые точки данных заменяются во время выполнения, граф вычислений TensorFlow не может быть изменен после его построения, поэтому требуется поддержка этих различных структур.
  3. cirq.Circuits похожи на вычислительные графы тем, что представляют собой серию операций, а некоторые из них могут содержать символы/заполнители. Важно сделать это максимально совместимым с TensorFlow.

По соображениям производительности Eigen (библиотека C++, используемая во многих операциях TensorFlow) плохо подходит для моделирования квантовых схем. Вместо этого симуляторы схем, используемые в квантовом эксперименте за пределами классического , используются в качестве верификаторов и расширяются в качестве основы операций TFQ (все они написаны с помощью инструкций AVX2 и SSE). Были созданы операции с идентичными функциональными сигнатурами, использующие физический квантовый компьютер. Переключиться между смоделированным и физическим квантовым компьютером так же просто, как изменить одну строку кода. Эти операции находятся в circuit_execution_ops.py .

Слои

Слои TensorFlow Quantum предоставляют разработчикам выборку, ожидание и вычисление состояния с помощью интерфейса tf.keras.layers.Layer . Слой схемы удобно создавать для классических параметров управления или для операций считывания. Кроме того, вы можете создать слой с высокой степенью сложности, поддерживающий пакетную схему, значение параметра пакетного управления и выполнение операций пакетного считывания. См. tfq.layers.Sample .

Дифференциаторы

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

Для решения этой проблемы модуль tfq.differentiators . Differentiators предоставляет несколько стандартных методов дифференцирования. Пользователи также могут определить свой собственный метод вычисления градиентов — как в «реальном мире» при расчете математического ожидания на основе выборки, так и в точном аналитическом мире. Такие методы, как конечная разность, часто являются самыми быстрыми (время настенных часов) в аналитической/точной среде. Хотя они медленнее (время настенных часов), более практичные методы, такие как сдвиг параметров или стохастические методы , часто более эффективны. Объект tfq.differentiators.Differentiator . Differentiators.Differentiator создается и присоединяется к существующей операции с помощью generate_differentiable_op Differentiable_op или передается в конструктор tfq.layers.Expectation или tfq.layers.SampledExpectation . Чтобы реализовать собственный дифференциатор, наследуйте его от класса tfq.differentiators.Differentiator . Differentiators.Differentiator. Чтобы определить операцию градиента для выборки или вычисления вектора состояния, используйте tf.custom_gradient .

Наборы данных

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

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