TensorFlow Quantum (TFQ) предназначен для решения задач квантового машинного обучения эпохи NISQ. Он привносит в экосистему TensorFlow примитивы квантовых вычислений, такие как построение квантовых схем. Модели и операции, созданные с помощью TensorFlow, используют эти примитивы для создания мощных квантово-классических гибридных систем.
Используя TFQ, исследователи могут построить график TensorFlow, используя квантовый набор данных, квантовую модель и классические управляющие параметры. Все они представлены в виде тензоров в одном вычислительном графе. Результаты квантовых измерений, приводящие к классическим вероятностным событиям, получаются с помощью TensorFlow ops. Обучение проводится с помощью стандартного API Keras . Модуль tfq.datasets
позволяет исследователям экспериментировать с новыми и интересными наборами квантовых данных.
Цирк
Cirq — это фреймворк квантового программирования от Google. Он обеспечивает все основные операции, такие как кубиты, вентили, схемы и измерения, для создания, изменения и запуска квантовых схем на квантовом компьютере или моделируемом квантовом компьютере. TensorFlow Quantum использует эти примитивы Cirq для расширения TensorFlow для пакетных вычислений, построения моделей и вычислений градиентов. Чтобы быть эффективным с TensorFlow Quantum, полезно быть эффективным с Cirq.
TensorFlow Квантовые примитивы
TensorFlow Quantum реализует компоненты, необходимые для интеграции TensorFlow с оборудованием квантовых вычислений. С этой целью TFQ вводит два примитива типа данных:
- Квантовая схема : представляет квантовые схемы, определенные Cirq (
cirq.Circuit
) в TensorFlow. Создавайте пакеты схем разного размера, аналогичные пакетам различных точек данных с действительными значениями. - Сумма Паули : представляет линейные комбинации тензорных произведений операторов Паули, определенных в Cirq (
cirq.PauliSum
). Подобно схемам, создавайте группы операторов разного размера.
Фундаментальные операции
Используя примитивы квантовых схем внутри tf.Tensor
, TensorFlow Quantum реализует операции, которые обрабатывают эти схемы и производят значимые выходные данные.
Операции TensorFlow написаны на оптимизированном C++. Эти операции производят выборку из схем, вычисляют ожидаемые значения и выводят состояние, создаваемое данными схемами. Написание гибких и производительных операций сопряжено с некоторыми проблемами:
- Цепи не одинакового размера. Для моделируемых схем вы не можете создавать статические операции (например
tf.matmul
илиtf.add
), а затем подставлять разные числа для схем разных размеров. Эти операции должны учитывать динамические размеры, которые не допускает вычислительный граф TensorFlow со статическим размером. - Квантовые данные могут создать совершенно другую структуру схемы. Это еще одна причина поддерживать динамические размеры в операциях TFQ. Квантовые данные могут представлять собой структурное изменение основного квантового состояния, которое представлено модификациями исходной схемы. Поскольку новые точки данных заменяются во время выполнения, граф вычислений TensorFlow не может быть изменен после его построения, поэтому требуется поддержка этих изменяющихся структур.
-
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
предоставляет несколько стандартных методов дифференцирования. Пользователи также могут определить свой собственный метод расчета градиентов — как в «реальном мире» расчета ожиданий на основе выборки, так и в точном аналитическом мире. Такие методы, как конечная разность, часто являются самыми быстрыми (время настенных часов) в аналитической/точной среде. Более практичные методы, такие как сдвиг параметров или стохастические методы , хотя и медленнее (время настенных часов), часто более эффективны. Экземпляр tfq.differentiators.Differentiator
создается и прикрепляется к существующей операции с помощью generate_differentiable_op
или передается конструктору tfq.layers.Expectation
или tfq.layers.SampledExpectation
. Чтобы реализовать собственный дифференциатор, наследуйте его от класса tfq.differentiators.Differentiator
. Чтобы определить операцию градиента для выборки или расчета вектора состояния, используйте tf.custom_gradient
.
Наборы данных
По мере роста области квантовых вычислений будет появляться больше квантовых данных и комбинаций моделей, что затрудняет структурированное сравнение. Модуль tfq.datasets
используется в качестве источника данных для задач квантового машинного обучения. Это обеспечивает структурированное сравнение модели и производительности.
Есть надежда, что благодаря большому вкладу сообщества модуль tfq.datasets
будет расширяться, чтобы сделать исследования более прозрачными и воспроизводимыми. Тщательно подобранные задачи в области квантового управления, фермионного моделирования, классификации вблизи фазовых переходов, квантового зондирования и т. д. — все это отличные кандидаты для добавления в tfq.datasets
. Чтобы предложить новый набор данных, откройте задачу на GitHub .