前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >混合量子-经典体系对量子数据的分类问题

混合量子-经典体系对量子数据的分类问题

作者头像
量子发烧友
发布2023-03-08 10:37:59
3780
发布2023-03-08 10:37:59
举报
文章被收录于专栏:量子发烧友量子发烧友

混合量子-经典体系对量子数据的分类问题

经典计算机中可以利用比特位和逻辑门进行二进制运算,在物理硬件方面,二进制运算主要通过半导体的特殊电性质实现。在量子计算机中,主要利用量子的纠缠和叠加特性通过量子比特位和量子逻辑门来实现运算。量子计算对算力的加速优势也在量子计算机不断发展中得到证实。但关于量子计算机与经典计算机的存在性问题,并非取而代之这么简单。目前,在物理硬件设备基础和量子技术的发展方面,依然无法制造出可以超越经典计算的通用量子计算机。

1.混合量子-经典机器学习

近年来,利用经典计算机实现人工智能技术也在探索之中,机器学习是人工智能领域较为典型的研究方向。为实现算力加速和量子计算的应用探索,也逐渐出现量子机器学习这一概念。对照经典的机器学习思路,量子机器学习即使用量子计算机加速传统的机器学习任务。如何利用现有的技术优势最大程度的实现和优化人工智能领域的计算任务成为学者和科技企业的一个研究焦点。下文将以Tensorflow Quantum为示例,演示三种不同模型对量子数据的分类。

2.监督分类任务实现

监督分类是经典机器学习中的一个典型任务,也是量子神经网络(QNNs)研究中最充分的应用之一。因此,监督分配也是探索机器学习应用的一个起点和契机。我们可以将具有层次模型的判别式机器学习理解为一种用于隔离包含有标签信息的压缩形式。在量子数据集中,隐藏的经典参数(回归时为实标量,分类时为离散标量)可以嵌入到量子系统的非局部系统或子空间中。然后必须执行一些分离量子变换以提取该非局部空间的信息。

我们可以从训练数据中的对称性获得一关于选择神经网络架构模型思路。例如,在计算机视觉中通常需要检测角和边缘而忽略这些元素在图中的位置。因此,我们假设检测这些特征的神经网络在平移下应该是不变的。在经典深度学习中,卷积神经网络就是这种平移不变的神经网络一个例子。这些网络可以跨空间连接参数,学习一组共享的过滤器,这些过滤器可均等的用于所有数据。

就现实情况而言,短时间内我们不应该寄期望于使用量子神经网络对经典数据分类能体现出量子优势。因此量子技术在神经网络中的应用主要在对量子数据的分类方面。有许多具有平移对称性的量子数据例如群集状态,这些状态是基于测量的量子计算的初始状态。

3.分类任务代码实现

监督分类任务:本次实践中的训练数据将由各种正确和错误准备的聚类状态组成,每个状态都有对应的标签匹配。由于简单集群状态是平移不变的,可以将卷积神经网络的空间参数扩展到量子神经网络中,此次操作中引入了量子卷积网络(QCNN)架构。QCNN本质是一个MERA网络版本的量子线路。本次操作中扩展了QCNN架构并结合了经典神经网络处理从而产生一个混合量子卷积神经网络(HQCNN)。

  • 目标问题:a.学习提取隐藏在量子系统相关性中的经典信息。b.通过混合经典神经网络使用浅层量子线路提取信息。
  • 所需TFQ功能:a.混合量子-经典网络模型 b.量子线路模拟器 c.基于量子期望的反向传播算法 d.快速经典梯度优化算法
  • 实现:

量子机器学习的pipeline的第一步是量子数据准备。在本例中,量子数据集是在8个量子位上的正确和错误准备的簇态,任务是对这些状态集合进行分类。数据集准备分为两个阶段。

阶段一:量子数据准备,生成正确制备的簇态

a.生成正确制备的簇态

代码语言:javascript
复制
def cluster_state_ circut(bits) :
	circuit = cirq . Circuit ()
	circuit.append(cirq.H.on_each(bits))
	for this_bit , next_bit in zip (
	bits , bits [1:] + [ bits [0]]) :
	circuit.append(
	cirq.CZ(this_bit,next_bit))
	return circuit

b.由于制备的簇态总是相同的,可以将其视为piepline中的初态,并附加与各种错误状态对应的激励线路。模拟在簇态制备中的错误可以通过采用Rx(θ)门,围绕布洛赫球体的X轴旋转一个量子位,旋转量为0≤θ≤2π。如果旋转量大于某一个阈值,这些激励将被标记为1,否则被标记为-1。

代码语言:javascript
复制
	cluster_state_bits = cirq . GridQubit . rect (1 , 8)
	excitation_input =tf.keras.Input (
	shape =() , dtype =tf.dtypes.string )
	cluster_state = tfq.layers.AddCircuit ()(
	excitation_input , prepend =
	cluster_state_circuit (cluster_state_bits ))

阶段二:定义量子卷积和量子池操作记录excitation_input是一个标准的Keras数据摄取器。可以用输入数据类型string计算线路序列化机制。准备好数据集,开始构建模型。所有模型中的量子部分将被执行相同的操作,即量子卷积和量子池。量子卷积层通过采用一个步长为1的2量子比特的酉U(θ)。类比经典的卷积层,酉的参数是绑定的,因此相同的操作被应用于每个最近的量子比特对。池是使用不同的2量子比特酉G(Φ)(解纠缠)。下面的代码定义了量子卷积和量子池操作:

代码语言:javascript
复制
def quantum_conv_circuit( bits , syms ) :
	circuit = cirq . Circuit ()
	for a,b in zip ( bits [0::2] , bits [1::2]) :
	circuit += two_q_unitary ([ a , b ] , syms )
	for a,b in zip ( bits [1::2] , bits [2::2] + [bits [0]]) :
	circuit += two_q_unitary ([ a , b ] , syms )
	return circuit
	def quantum_pool_curcuit( srcs , snks , syms ) :
	circuit = cirq.Circuit ()
	for src , snk in zip ( srcs , snks ) :
	circuit += two_q_pool ( src , snk , syms )
	return circuit

图为 分类器的量子部分显示在4个量子位上。量子卷积(蓝色)和量子池(橙色)的结合将系统大小从4量子位减少到2量子位。

在以上代码段中two_q_unitary构造了一个一般的参数化双量子位酉。two_q_pool表示在控制和目标量子位上具有一般单量子位酉的CNOT,允许对控制和目标基进行可变选择。

定义了模型的量子部分后,我们进入QML pioeline的第三和第四阶段,即测量和经典后处理。

阶段三:测量

研究者考虑了三种变分器,每种变分器都包含与经典网络不同程度的混合:纯量子CNN、混合CNN(其中一个截断的QCNN的输出被馈送到标准紧密地连接神经网络)、混合CNN(其中多个截断QCNN的输出被馈送到标准密集连接的神经网络中)。

a.构建模型。我们构建的第一个模型仅使用量子操作来解相关输入。在N=8量子位上准备集群状态数据集后,再重复应用量子卷积和池层,直到系统大小减少到1量子位。最后通过测量Pauli-Z对这个最终量子位的期望来平均量子模型的输出。通过tfq.layers.PQC实现测量和参数控制。该模型代码如下:

代码语言:javascript
复制
    readout_operators = cirq . Z (
    cluster_state_bits[-1])
    quantum_model = tfq . layers . PQC (
    create_modle_circuit(cluster_state_bits),
    readout_operators) ( cluster_state )
    qcnn_model = tf . keras . Model (
    inputs =[ excitation_input ],
    outputs =[ quantum_model ])

以上代码中create_model_circuit是一个应用量子卷积和量子池的连续层的函数。

b.训练和验证。模型构建好以后开始转向训练和验证。这些步骤可以通过标准的Keras工具完成。在训练期间,将每个量子数据点上的模型输出与标签进行比较;使用的成本函数是模型输出和标签之间的均方误差,其中平均值取每个批次的自数据集。培训和验证代码如下所示:

代码语言:javascript
复制
    qcnn_model . compile ( optimizer = tf . keras . Adam ,
    loss = tf . losses . mse )
    ( train_excitations , train_labels ,
    test_excitations , test_labels
    ) = generate_data ( c l us te r _s t at e _b i ts )
    history = qcnn_model . fit (
    x = train_excitations ,
    y = train_labels ,
    batch_size =16 ,
    epochs =25 ,
    validation_data =(
    test_excitations , test_labels ) )
    

以上代码块中generate_data主要作用是构建应用于初始群集状态输入的励磁电路以及相关标签。可以通过运行相关示例笔记本来生成训练和验证数据集的损失图。

现在开始考虑一种混合分类器,我们可以截断QCNN并测量剩余量子位上的算子向量,而不是使用量子层将所有量子点汇聚到一个量子位,然后将得到的期望值向量输入经典神经网络。该想法可在Tensorflow Quantum中实现,具体代码可以对之前的模型进行简单修改,如下:

代码语言:javascript
复制
     # Build multi - readout quantum layer
     readouts = [ cirq . Z ( bit ) for bit in
     cluster_state_bits[4:]]
     quantum_model_dual= tfq . layers . PQC (
     multi_readout_model_circuit(
     cluster_state_bits) ,
     readouts ) ( cluster_state )
     # Build classical neural network layers
    d1_dual = tf.keras.layers.Dense (8) (
    quantum_model_dual)
    d2_dual = tf.keras.layers.Dense (1) ( d1_dual )
    hybrid_model = tf.keras.Model( inputs =[excitation_input ] , outputs =[ d2_dual ])

在以上代码中multi_readout_model_circuit只应用了一轮卷积和池,将系统大小从8个量子位减少到4个量子位。这种混合模型可以使用与纯量子模型相同的Keras工具进行训练。

第三种架构创建了三个独立的量子过滤器,并将三种过滤器的输出与单个经典神经网络相结合。这种过滤器架构可以在Tensorflow Quantum中实现,代码示例如下:

代码语言:javascript
复制
    # Build 3 quantum filters
    QCNN_1 = tfq . layers . PQC (
    multi_readout_model_circuit(
    cluster_state_bits ) ,
    readouts ) ( cluster_state )
    QCNN_2 = tfq . layers . PQC (
    multi_readout_model_circuit(
    cluster_state_bits) ,
    readouts ) ( cluster_state )
    QCNN_3 = tfq . layers . PQC (
    multi_readout_model_circuit(
    cluster_state_bits )  ,
    readouts ) ( cluster_state )
    # Feed all QCNNs into a classical NN
    concat_out = tf . keras . layers . concatenate (
    [ QCNN_1 , QCNN_2 , QCNN_3 ])
    dense_1 = tf . keras . layers . Dense (8) ( concat_out )
    dense_2 = tf . keras . layers . Dense (1) ( dense_1 )
    multi_qconv_model= tf . keras . Model (
    inputs =[ excitation_input ] ,
    outputs =[ dense_2 ])

由以上实验发现,对于相同的优化设置,纯量子模型训练速度最慢,三量子过滤器混合模型最快。该实验证明了探索混合量子经典体系结构对量子数据进行分类的优势。

图为 混合量子经典体系对量子数据结构的分类优势。三种不同混合分类器训练时间的函数。纯量子分类器训练最慢,而带有多个量子滤波器的混合架构训练最快。

结尾

TensorFlow Quantum 集成了开源量子计算框架Cirq和机器学习框架 TensorFlow, 提供了与现有的TensorFlow API 兼容的量子计算原语和高性能模拟器,为量子经典机器学习的判别和生成模型的设计实现提供了高层次的抽象。QuTrunk为启科自研的Python量子编程语言框架,包括量子编程API、量子命令转译、量子计算后端接口等。所有支持Python编程的IDE均可安装QuTrunk使用。目前QuTrunk以QuSprout作为后端,可扩展支持更多后端。QuTrunk正在拓展在AI方面的研发应用工作。启科量子也将在后续研究中不断完善产品的功能和应用领域。

— 完 —

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子发烧友 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 混合量子-经典体系对量子数据的分类问题
    • 1.混合量子-经典机器学习
      • 2.监督分类任务实现
        • 3.分类任务代码实现
          • 结尾
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档