https://blog.tensorflowcn.cn/2020/08/layerwise-learning-for-quantum-neural-networks.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiCYI86seHoodyoMHUK8-KhH329Ks5A5XQvhTFNAFwvZHlBhiquq6nMf9AIn7i23w1JzohE3Apxs8jQbVzSw1qIhz1mmeowjg3m7T4HLYxpMAh1z4FprWSQi6hztEwmK6hSwJxq8PrPJQ/s1600/QNN.png
发布者 Andrea Skolik,大众汽车集团和莱顿大学
3 月初,谷歌与
滑铁卢大学 和
大众汽车集团 共同发布了
TensorFlow Quantum (TFQ)。 TensorFlow Quantum 是一个用于量子机器学习 (QML) 的软件框架,它允许研究人员共同使用来自
Cirq 和
TensorFlow 的功能。 Cirq 和 TFQ 都旨在模拟目前可用的嘈杂的中等规模量子 (NISQ) 设备,但这些设备仍处于实验阶段,因此没有错误校正,并且输出存在噪声。
在本文中,我们介绍了一种训练策略,该策略解决了量子神经网络 (QNN) 中的梯度消失问题,并更好地利用了 NISQ 设备提供的资源。 如果你想自己尝试这个例子代码,请查看
TFQ 研究库中的分层学习笔记本,我们将在模拟的量子计算机上训练一个 QNN!
量子神经网络
训练 QNN 与训练经典神经网络并没有太大区别,只是我们优化的是量子电路的参数而不是网络权重。 量子电路看起来如下
|
具有四个量子位的分类任务的简化 QNN |
该电路从左到右读取,每条水平线对应于量子计算机寄存器中的一个量子位,每个量子位都初始化为零状态。 方框表示对量子位的参数化操作(或“门”,这些操作按顺序执行。 在这种情况下,我们有三种不同的操作类型,X、Y 和 Z。 垂直线表示双量子位门,可以用来在 QNN 中生成
纠缠 - 这是一种可以让量子计算机超越经典计算机的资源。 我们将一层定义为对每个量子位的一次操作,然后是一系列连接量子位对以生成纠缠的门。
上图显示了用于学习 MNIST 数字分类的简化 QNN。
首先,我们需要将数据集编码为量子态。 我们使用数据编码层来完成此操作,该层在上图中用橙色标记。 在这种情况下,我们将输入数据转换为向量,并使用向量值作为数据编码层操作的参数
d。 基于此输入,我们执行用蓝色标记的电路部分,该部分表示我们的 QNN 的可训练门,用
p 表示。
量子电路中的最后一个操作是测量。 在计算过程中,量子设备对
叠加 的经典比特串执行操作。 当我们在电路中执行读数时,叠加状态会坍缩成一个经典比特串,这就是我们获得的计算输出。 所谓量子态坍缩是概率性的,为了获得确定性的结果,我们需要对多个测量结果进行平均。
在上图中,用绿色标记的部分,我们在第三个量子位上执行测量,并使用这些测量结果来预测我们 MNIST 示例的标签。 我们将此与真实数据标签进行比较,并计算损失函数的梯度,就像在经典 NN 中一样。 这些类型的 QNN 被称为“混合量子-经典”,因为参数优化由经典计算机处理,例如使用 Adam 优化器。
梯度消失,也称为贫瘠高原
事实证明,QNN 也会像经典 NN 一样遇到梯度消失问题。 由于 QNN 中梯度消失的原因与经典 NN 根本不同,因此人们用一个新词来表示它们:贫瘠高原。 本文无法涵盖这个重要现象的所有细节,因此我们建议感兴趣的读者参考首次介绍
QNN 训练景观中的贫瘠高原 的论文或
TFQ 网站上的关于贫瘠高原的教程,以了解实践示例。
简而言之,当量子电路被随机初始化时,就会出现贫瘠高原 - 在上面说明的电路中,这意味着随机选择操作及其参数。 这是训练参数化量子电路的一个根本性问题,并且随着电路中量子位数和层数的增加而变得更糟,如下图所示。
|
梯度方差随随机电路中量子位数和层数的变化而衰减 |
对于我们将在下面介绍的算法,这里要理解的关键是,我们向电路添加的层越多,梯度方差就越小。 另一方面,与经典 NN 类似,QNN 的表示能力也随着其深度的增加而增加。 这里的问题是,随着我们增加电路的大小,优化景观在许多地方也会变平,因此即使找到局部最小值也变得更加困难。
请记住,对于 QNN,输出是从对多次测量的平均值进行估计得到的。 我们要估计的量越小,为了获得准确的结果,我们就需要进行的测量次数越多。 如果这些量比测量误差或硬件噪声造成的效应小得多,则无法可靠地确定这些量,电路优化基本上会变成随机游走。
为了成功训练 QNN,我们必须避免参数的随机初始化,还必须阻止 QNN 在训练过程中随着其梯度变小而随机化,例如当它接近局部最小值时。 为此,我们可以限制 QNN 的架构(例如,通过选择某些门配置,这需要根据手头的任务来调整架构),或者控制对参数的更新,以使其不会变得随机。
分层学习
在我们的论文
量子神经网络的分层学习 中,该论文是
大众数据:实验室(Andrea Skolik、Patrick van der Smagt、Martin Leib)和
谷歌 AI 量子(Jarrod R. McClean、Masoud Mohseni)的合作成果,我们介绍了一种方法来避免在高原上初始化,以及在训练过程中网络最终停留在高原上。 让我们看一个分层学习 (LL) 的实际例子,它用于学习 MNIST 数字的二元分类任务。 首先,我们需要定义要堆叠的层的结构。 由于我们对手头的学习任务没有做出任何假设,因此我们为我们的层选择与上图相同的布局:一层包含每个量子位上的随机门,这些门初始化为零,以及连接量子位以实现纠缠生成的双量子位门。
我们指定了一些
起始层,在本例中只有一层,该层在训练过程中始终保持激活,并指定训练每一组层所需的时期数。 另外两个超参数是我们每一步添加的新层数,以及一次最多训练的层数。 在这里,我们选择了一种配置,在每一步中添加两层,并冻结除起始层以外的所有先前层的参数,这样我们每一步只训练三层。 我们训练每一组层 10 个时期,并重复此过程十次,直到我们的电路总共包含 21 层。 通过这样做,我们利用了浅层电路产生比深层电路更大的梯度这一事实,并以此避免在高原上初始化。
这为我们在优化景观中提供了一个良好的起点,以便继续训练更大规模的连续层集。 作为另一个超参数,我们定义了在算法的第二阶段一起训练的层的百分比。 在这里,我们选择将电路分成两半,并交替训练这两个部分,其中非活动部分的参数始终保持冻结。 我们将所有分区都训练一次的训练序列称为
扫描,我们对该电路执行扫描,直到损失收敛。 当始终训练参数的完整集时,我们将此称为“完整深度学习”(CDL),一次糟糕的更新步骤会影响整个电路,并使其进入随机配置,因此进入贫瘠高原,而它无法从中逃脱。
让我们将我们的训练策略与 CDL 进行比较,CDL 是用于训练 QNN 的标准技术之一。 为了获得公平的比较,我们使用了与 LL 策略之前生成的电路架构完全相同的架构,但现在在每一步中同时更新所有参数。 为了让 CDL 有机会训练,我们使用零而不是随机值来优化参数。 由于我们还没有访问真实的量子计算机,因此我们模拟了 QNN 的概率输出,并为我们用来估计 QNN 做出的每个预测所需的测量次数选择了一个相对较低的值 - 本例中为 10。 假设真实的量子计算机上的采样率为 10kHZ,我们可以估计训练运行的实验时钟时间,如下所示
|
分层学习和完整深度学习的比较,使用不同的学习率 η。 我们为每种配置训练了 100 个电路,并对那些最终测试误差低于 0.5 的电路进行了平均(图例中的成功运行次数)。 |
通过这少量测量,我们可以研究 LL 和 CDL 方法不同梯度幅度的影响:如果梯度值更大,我们从 10 次测量中获得的信息比较小的值更多。我们用于执行参数更新的信息越少,损失的方差就越高,并且执行错误更新的风险也越高,这将随机化更新的参数并将 QNN 引入高原。可以通过选择更小的学习率来降低这种方差,因此我们在上图中比较了具有不同学习率的 LL 和 CDL 策略。
值得注意的是,CDL 运行的测试误差随着运行时间的增加而增加,这可能看起来像过拟合。然而,此图中的每条曲线都是对许多运行的平均值,实际上这里发生的是越来越多的 CDL 运行在训练期间随机化,无法恢复。在图例中,我们显示了与 CDL 相比,更大的 LL 运行比例在测试集上实现了低于 0.5 的分类误差,并且也花费了更少的时间。
总之,逐层学习增加了成功训练 QNN 的概率,在更短的训练时间内获得更好的泛化误差,这对于 NISQ 设备尤其重要。有关逐层学习的实现和理论的更多详细信息,
查看我们最近的论文!
如果您想了解有关量子计算和量子机器学习的更多信息,下面提供一些其他资源