TensorFlow Quantum 设计

TensorFlow Quantum (TFQ) 专为 NISQ 时代的量子机器学习问题而设计。它将量子计算基本元素(例如构建量子电路)引入 TensorFlow 生态系统。使用 TensorFlow 构建的模型和操作使用这些基本元素来创建强大的量子经典混合系统。

使用 TFQ,研究人员可以使用量子数据集、量子模型和经典控制参数构建 TensorFlow 图。这些都表示为单个计算图中的张量。量子测量的结果(导致经典概率事件)由 TensorFlow 操作获得。训练使用标准 Keras API 完成。tfq.datasets 模块允许研究人员试验新的有趣的量子数据集。

Cirq

Cirq 是 Google 推出的量子编程框架。它提供了所有基本操作(例如量子位、门、电路和测量),以便在量子计算机或模拟量子计算机上创建、修改和调用量子电路。TensorFlow Quantum 使用这些 Cirq 原语来扩展 TensorFlow,以进行批处理计算、模型构建和梯度计算。要有效使用 TensorFlow Quantum,最好有效使用 Cirq。

TensorFlow Quantum 原语

TensorFlow Quantum 实现了将 TensorFlow 与量子计算硬件集成的所需组件。为此,TFQ 引入了两个数据类型原语

  • 量子电路:这表示 TensorFlow 中由 Cirq 定义的量子电路 (cirq.Circuit)。创建不同大小的电路批处理,类似于不同实值数据点的批处理。
  • 泡利和:表示 Cirq 中定义的泡利算符张量积的线性组合 (cirq.PauliSum)。与电路类似,创建不同大小的算符批处理。

基本操作

TensorFlow Quantum 在 tf.Tensor 中使用量子电路原语,实现了处理这些电路并生成有意义的输出的操作。

TensorFlow 操作是用经过优化的 C++ 编写的。这些操作从电路中进行采样,计算期望值,并输出给定电路产生的状态。编写灵活且高效的操作具有一些挑战

  1. 电路大小不相同。对于模拟电路,您无法创建静态操作(例如 tf.matmultf.add),然后用不同大小电路的不同数字进行替换。这些操作必须允许静态大小的 TensorFlow 计算图不允许的动态大小。
  2. 量子数据可以完全诱导不同的电路结构。这是支持 TFQ 操作中动态大小的另一个原因。量子数据可以表示对底层量子态的结构性更改,该更改由对原始电路的修改表示。由于在运行时会交换新数据点,因此 TensorFlow 计算图在构建后无法修改,所以需要支持这些不同的结构。
  3. cirq.Circuits 与计算图类似,因为它们是一系列操作,其中一些可能包含符号/占位符。重要的是尽可能使其与 TensorFlow 兼容。

出于性能原因,Eigen(许多 TensorFlow 操作中使用的 C++ 库)不适合量子电路仿真。相反,超越经典的量子实验 中使用的电路模拟器用作验证器,并作为 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.Expectationtfq.layers.SampledExpectation 的构造函数。要实现自定义微分器,请从 tfq.differentiators.Differentiator 类继承。要为采样或状态向量计算定义梯度操作,请使用 tf.custom_gradient

数据集

随着量子计算领域的不断发展,将出现更多量子数据和模型组合,这使得结构化比较变得更加困难。tfq.datasets 模块用作量子机器学习任务的数据源。它确保了模型和性能的结构化比较。

希望通过大量的社区贡献,tfq.datasets 模块将不断发展,以实现更透明、更可重复的研究。精心策划的问题包括:量子控制、费米子模拟、相变附近的分类、量子传感等,所有这些都是添加到 tfq.datasets 中的绝佳候选。要提出新的数据集,请打开 GitHub 问题