此页面由 Cloud Translation API 翻译。
Switch to English

TensorFlow Quantum设计

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

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

Cirq

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

TensorFlow Quantum基本体

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

  • 量子电路 :这表示TensorFlow中Cirq定义的量子电路( cirq.Circuit )。创建不同大小的电路批次,类似于不同的实值数据点的批次。
  • Pauli sum :表示在Cirq( cirq.PauliSum )中定义的Pauli运算符的张量积的线性组合。像电路一样,创建一批大小不一的运算符。

基本操作

TensorFlow Quantum使用tf.Tensor的量子电路图元实现了处理这些电路并产生有意义的输出的操作。

TensorFlow操作使用优化的C ++编写。这些运算从电路采样,计算期望值,并输出给定​​电路产生的状态。编写灵活而高效的操作会遇到一些挑战:

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

由于性能原因,Eigen(许多TensorFlow操作中使用的C ++库)不适用于量子电路仿真。取而代之的是,将量子至上实验中使用的电路仿真器用作验证器,并扩展为TFQ ops的基础(均使用AVX2和SSE指令编写)。使用物理量子计算机创建具有相同功能签名的操作。在模拟和物理量子计算机之间切换就像更改一行代码一样容易。这些操作位于circuit_execution_ops.py

层数

TensorFlow Quantum层使用tf.keras.layers.Layer接口向开发人员提供采样,期望和状态计算。创建用于经典控制参数或读取操作的电路层很方便。此外,您可以创建具有高度复杂性的图层,以支持批处理电路,批处理控制参数值以及执行批读取操作。有关tfq.layers.Sample ,请参见tfq.layers.Sample

差异化因素

与许多TensorFlow操作不同,量子电路中的可观察对象没有相对容易计算的梯度公式。这是因为传统计算机只能从量子计算机上运行的电路中读取样本。

为了解决此问题, tfq.differentiators模块提供了几种标准的区分技术。用户还可以定义自己的方法来计算梯度-在基于样本的期望计算的“真实世界”设置和精确的分析世界中。在分析/精确环境中,像有限差分之类的方法通常是最快的(挂钟时间)。尽管比较慢(挂钟时间),但更实用的方法(例如参数移位随机方法)通常更有效。将tfq.differentiators.Differentiator实例化并使用generate_differentiable_op附加到现有的op,或传递给tfq.layers.Expectationtfq.layers.SampledExpectation的构造tfq.layers.SampledExpectation 。要实现自定义区分tfq.differentiators.Differentiator ,请继承tfq.differentiators.Differentiator类。要定义用于采样或状态向量计算的梯度运算,请使用tf.custom_gradient

数据集

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

希望随着社区的大量贡献, tfq.datasets模块将不断发展,以使研究更加透明和可重现。精心设计的问题包括:量子控制,铁电模拟,相变附近的分类,量子感测等,都是添加到tfq.datasets 。要提出新的数据集,请打开GitHub问题