范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

QuTrunk与MindSpore量子神经网络初探

  1、概述
  QuTrunk 是启科量子开发和已经开源的一款量子编程框架软件产品,关于QuTrunk的详细介绍,用户可以访问启科的开发者社区站点详细了解,也可以进入github上此项目下进行查询。
  QuTrunk开发框架是可以与第三方AI框架深度结合进行量子计算程序开发的,前面一篇中我们已经使用QuTrunk+Paddle在VQA算法实现上做了一个小的尝试。本篇中我们将使用华为的MindSpore(昇思)与QuTrunk的结合实践来展示QuTrunk的量子计算程序开发的方法和流程。本示例类似于VQA算法的实现,我们将采用一个更简单单量子比特的量子神经网络训练程序来说明。  2、量子神经网络2.1 简介
  量子神经网络是基于量子力学原理的计算神经网络模型。1995年,Subhash Kak和Ron Chrisley独立发表了关于量子神经计算的第一个想法,他们致力于量子思维理论,认为量子效应在认知功能中起作用。然而,量子神经网络的典型研究涉及将经典的人工神经网络模型(在机器学习中广泛用于模式识别的重要任务)与量子信息的优势相结合,以发展更高效的算法。这些研究的一个重要动机是经典神经网络难以训练,特别是在大数据应用中更是如此。希望可以利用量子计算的特性,如量子并行性或干涉和纠缠效应作为资源。由于量子计算机的技术实现还处于早期阶段,此类量子神经网络模型大多是理论建议,有待在物理实验中充分实现。
  大多数量子神经网络是作为前馈网络开发的。与它们的经典结构类似,这种结构从一层量子位中获取输入,并将输入传递到另一层量子位。这一层量子位评估这些信息,并将输出传递给下一层。最终,这条路径通向量子比特的最后一层层不必具有相同的宽度,这意味着它们不必具有与层之前或之后相同数量的量子比特。量子神经网络研究仍处于起步阶段,已经提出了一系列不同范围和数学严谨性的建议和想法。其中大多数都是基于用量子位(可以称为"量子位")取代经典的二进制或McCulloch-Pitts神经元的想法,从而产生可以处于"激发"和"休息"状态叠加的神经单元。
  在较广泛的领域内,研究人员试图将神经网络推广到量子环境中。构建量子神经元的一种方法是首先将经典神经元泛化,然后再将其进一步泛化,以形成幺正门。神经元之间的相互作用可以通过单一门进行量子控制,也可以通过网络状态的测量进行经典控制。通过采用不同类型的网络和量子神经元的不同实现,大多数学习算法遵循训练人工神经网络的经典模型,以学习给定训练集的输入输出函数,并使用经典反馈环路来更新量子系统的参数,直到它们收敛到最优配置。量子神经网络可以应用于算法设计:给定具有可调谐相互作用的量子位,可以尝试从期望的输入输出关系的训练集中学习遵循经典反向传播规则的相互作用,这被认为是期望的输出算法的行为。
  量子神经网络在理论上可以类似于训练经典/人工神经网络。关键区别在于神经网络各层之间的通信。对于经典神经网络,在给定操作结束时,当前感知器将其输出复制到网络中的下一层感知器。然而,在量子神经网络中,每个感知器都是一个量子位,这将违反无克隆定理。对此提出的广义解决方案是用一个任意幺正来代替经典扇出方法,该幺正将一个量子位的输出扩展到下一层量子位中,但不会复制。使用这种扇出酉()和处于已知状态的伪态量子位,来自量子位的信息可以传输到下一层量子位。该过程符合可逆性的量子操作要求。
  使用这种量子前馈网络,可以有效地执行和训练深度神经网络。深度神经网络本质上是一个具有许多隐藏层的网络,如上面的示例模型神经网络所示。由于正在讨论的量子神经网络使用扇出酉算子,并且每个算子只作用于其各自的输入,所以在任何给定时间都只使用两层。换句话说,在任何给定的时间,没有酉算子作用于整个网络,这意味着给定步骤所需的量子位数量取决于给定层中的输入数量。由于量子计算机以其在短时间内运行多次迭代的能力而臭名昭著,量子神经网络的效率仅取决于任何给定层中的量子比特数,而不取决于网络的深度。  2.2 量子神经网络基本结构
  量子神经网络中,其量子线路结构通常由三个部分组成。  Encoder线路即编码线路,用于将经典数据编码到量子数据  Ansatz即训练线路,用于训练带参量子门的参数  Measurement及测量,用于检测测量值(例如在  Z   方向上测量,就是某个量子比特的量子态在 Z   轴上的投影,该测量得到的是量子态关于泡利 Z   算符(不限定于泡利 Z   算符,换成其它的算符亦可)的期望值)是否接近于目标期望值。
  量子神经网络的基本结构如下图所示,左右两边均为经典网络,中间方框内为量子网络。
  3、QuTrunk+MindSpore量子神经网络示例
  为便于理解和上手,本文参考MindQuantum教程的这个简单例子示例来展示如何使用QuTrunk+Minspore构建量子神经网络。
  我们搭建如上图所示的量子神经网络,其3个部分的组成如上图所示,Encoder由和,,组成,Ansatz由和组成,Measment为  PauliZ   算符。
  问题描述:我们将Encoder看成是系统对初始量子态的误差影响(参数α0,α1和α2是将原经典数据经过预处理后得到的某个固定值,即为已知值,本示例中我们之间设置为0.2, 0.3和0.4)。我们需要训练一个Ansatz来抵消掉这个误差,使得最后的量子态还是处于态。
  解决思路:对末态执行泡利  PauliZ   算符测量,此时的测量值就是此时的量子态关于泡利 Z   算符的期望值。由于是算符 Z   的本征态,且本征值为1,容易知道.也就是说,目标期望值为1。可以通过测量得到的期望值来验证此时的状态是否为。
  解决方案:通过训练Ansatz中的参数,希望测量值接近于目标期望值,换句话说,我们只需让测量值尽可能接近于态关于泡利  PauliZ   算符对应的期望值,那么此时的状态就是,即Ansatz抵消了Encoder对初始量子态产生的误差。
  下面我们将展示采用QuTrunk量子编程框架结合mMindSpore如何一步步完成量子神经网络的应用。  3.1 导入需要的模块
  程序使用到了numpy,matplotlib,mindspore和qutrunk等,首先导入这些使用到的模块  import mindspore as ms import numpy as np from matplotlib import pyplot as plt from mindspore import nn, Tensor, Parameter, ops from mindspore.nn import Adam from qutrunk.circuit import QCircuit from qutrunk.circuit.gates import PauliZ, Rx, Ry, H, Rz
  设置生成随机数的种子  ms.set_seed(12)  # 设置生成随机数的种子 ms.set_context(mode=ms.PYNATIVE_MODE, device_target="CPU") 3.2 搭建Encoder
  构建编码线路 Encoder,将经典数据编码到量子数据,这里我们定义了一个encoder的函数如下:  def circuit_encoder(encoder_data):     alpha0, alpha1, alpha2 = [float(f) for f in encoder_data]#定义角度参数     circuit = QCircuit()   #初始化量子线路     qreg = circuit.allocate(1) #分配量子比特,申请一个量子寄存器     H * qreg[0]                #对0位量子比特执行H操作     Rx(alpha0) * qreg[0]  #Rx(alpha_0)门作用在第0位量子比特     Ry(alpha1) * qreg[0]  #Ry(alpha_1)门作用在第0位量子比特     Rz(alpha2) * qreg[0]  #Rz(alpha_2)门作用在第0位量子比特     return circuit  #返回线路
  构建的线路如下:
  该量子线路由4个量子门组成,其中有3个含参量子门且参数为α0,α1,α2(3个参数值通过encoder_data这个形参传入),该量子线路调控的量子比特数为1。  3.3 定义Ansatz
  Ansatz训练线路的函数定义如下:  def circuit_ansatz():     circuit = QCircuit()     q = circuit.allocate(1)     angles = ["theta-0", "theta-1"]     params = circuit.create_parameters(angles)     Rx(params[0]) * q[0]     Ry(params[1]) * q[0]     return circuit
  其线路图为:
  函数定义了一个量子比特线路,对这个比特实施参数化的和操作,其角度分别是和.这两个角度值通过训练优化得到。  3.4 定义用于测量/投影的哈密顿量
  这里哈密顿量构建主要用于线路末态的测量,函数定义如下:  def hamiltonian():     circuit = QCircuit()     qreg = circuit.allocate(1)     return PauliZ(qreg[0])
  对0位的量子比特执行PauliZ算符并返回。  3.5 连接线路并绑定参数值
  前面定义了Encoder和Ansatz的线路,整个量子神经网络线路即为Encoder+Ansatz,如下即为定义整个线路构建的函数,并绑定了当前的参数值:  def join_circuit(encoder, ansatz, inputs):     params = {"theta-" + str(i): inputs[i] for i in range(len(inputs))}     ansatz.bind_parameters(params)     encoder.append_circuit(ansatz)     return encoder 3.6 定义梯度计算函数
  本示例同样使用参数化移位法则(parameter-shift rule)来计算梯度,参数偏移量指定为π/2,程序实现如下:  def parameter_shift(inputs, exp_op, params, shift=np.pi / 2):     """     Backward pass computation, calculate the gradient of quantum circuit by parameter shift rule.     """     params = np.array(params)     gradients = []     for i in range(len(params)):         shift_right = np.copy(params)         shift_right[i] += shift         shift_left = np.copy(params)         shift_left[i] -= shift         circuit = join_circuit(circuit_encoder(inputs), circuit_ansatz(), shift_right)         expectation_right = -1 * circuit.expval_pauli(exp_op)         circuit = join_circuit(circuit_encoder(inputs), circuit_ansatz(), shift_left)         expectation_left = -1 * circuit.expval_pauli(exp_op)         gradient = np.array([expectation_right]) - np.array([expectation_left])         gradients.append(gradient)     gradients = np.squeeze(np.array(gradients).T)     return gradients 3.7 自定义训练网络的类
  针对训练网络定义了一个类  CustomTrainOneStepCell   ,这个类包含2个函数,其中 _init_   用于定义优化器及其参数, construct   用于计算损失函数,具体实现如下: class CustomTrainOneStepCell(nn.Cell):     def __init__(self, optimizer, exp_op):         super(CustomTrainOneStepCell, self).__init__(auto_prefix=False)         self.optimizer = optimizer  # 定义优化器         self.exp_op = exp_op         self.weights = self.optimizer.parameters  # 待更新参数         self.grad = parameter_shift     def construct(self, *inputs):         inputs = inputs[0]         # 前向计算输出         circuit = join_circuit(circuit_encoder(inputs), circuit_ansatz(), self.weights[0])         loss = -1 * circuit.expval_pauli(self.exp_op)         # 用参数位移计算梯度         grads = self.grad(inputs, self.exp_op, self.weights[0])  # 进行反向传播,计算梯度         loss = ops.depend(loss, self.optimizer((Tensor(grads),)))  # 使用优化器更新梯度         return loss 3.8 执行训练首先设置训练网络参数的初始化值,迭代次数ITR设置为240,学习速率LR设置为0.02。  然后设置构建Encoder量子线路的参数在值:, 其初始化值分别设置为0.2,0.3和0.4  最后定义测量的算符  op   为 hamiltonian   函数, 并指定优化器使用MindSpore的Aadm优化器 #设置训练参数 ITR = 240 LR = 0.02 #设置Encoder线路角度初始化值 enc_d = np.array([0.2, 0.3, 0.4]) #设置测量操作符及优化器 op = hamiltonian() opt = Adam([Parameter(Tensor(np.random.rand(2)), name="ansatz-theta")], learning_rate=LR)
  然后通过自定义训练函数进行参数化训练,并将损失函数保存到列表中.  train_net = CustomTrainOneStepCell(opt, op) loss_list = [] for i in range(ITR):     res = train_net(Tensor(enc_d))     loss_list.append(res)     if i % 10 == 0:         print(i, ": ","%.4f" % res)
  通过迭代训练,打印输出的结果如下,可以看到通过230迭代后,loss不断变小收敛,并达到目标值-1。  0 :  0.7668 10 :  0.5777 20 :  0.3326 30 :  0.0474 40 :  -0.2464 50 :  -0.5100 60 :  -0.7138 70 :  -0.8490 80 :  -0.9264 90 :  -0.9651 100 :  -0.9826 110 :  -0.9901 120 :  -0.9936 130 :  -0.9956 140 :  -0.9969 150 :  -0.9979 160 :  -0.9986 170 :  -0.9991 180 :  -0.9994 190 :  -0.9996 200 :  -0.9998 210 :  -0.9999 220 :  -0.9999 230 :  -1.0000 3.9 结果呈现
  由于测量值接近收敛于-1,所以我们可以打印此时Ansatz中的参数。  ans_d = train_net.weights[0] print("final theta: ", ans_d.value())
  得到的的值为2.19643544。的值为-1.07710791  final theta:  [ 2.19642544-1.07710791]
  同时也可以获取到此时最优参数下的量子线路的状态向量和fidelity值及打印最终线路图,程序实现如下:  circ = join_circuit(circuit_encoder(enc_d), circuit_ansatz(), ans_d) state = circ.get_statevector() print("state: ", str(state)) fid = np.abs(np.vdot(state, [1, 0])) ** 2 print("fidelity", ": ", fid) circ.draw()
  得到的结果如下:  state:  [0.38983534-0.92082061j0.0097964 +0.00467482j] fidelity :  0.999882176674514
  打印的线路图为:
  为了更形象的展示损失函数的下降趋势,我们也可以通过matplot打印出其损失函数的曲线,程序如下:  plt.figure(1) ITR_list = [] for i in range(ITR):     ITR_list.append(i) func = plt.plot(ITR_list, loss_list, alpha=0.7, marker="", linestyle="-", color="r") plt.xlabel("iterations") plt.ylabel("loss") plt.legend(labels=["loss function during iteration"], loc="best") plt.show()
  打印的曲线图如下:
  4、总结
  以上的示例只是QuTrunk与MindSpore结合的一次小的尝试,通过这次QuTrunk的量子编程框架和MindSpore AI深度学习框架的结合实践的探索,也为后续的深结合使用提供了较好的参考。
  作者:黄文、潘彦宽、邵伟、郭梦洁
  注:本文已优先投稿于MindSpore公众号

韦德儿子变性成功!15岁成品牌模特,白人男友健硕,欲望加入女篮世界之大无奇不有,有的男性虽是男儿身,但灵魂上却认为自己是女性,这一部分男性甚至直接做手术变为女儿身,还会与其他男性谈恋爱。美国篮球巨星韦德,一共有三个孩子,大儿子和小儿子是与前妻淡斑效果最好的护肤品有哪些?分享这三款可考虑淡斑效果最好的护肤品有哪些?最近有不少网友在问淡斑效果最好的护肤品有哪些,其实这个问题很难回答,因为每个人的肤质和皮肤状况都不同,所以建议大家还是要根据自己的情况进行选择。不过,今功率大了耗电,功率小了效果不好,空调应该如何选购呢?空调是家里最常见的电器之一,随着生活水平的提高,人们对空调的要求也越来越高了,更多的方向是考虑舒适性。空调能够为我们带来制冷制热除湿和换气的功能,已经成为家用电器利用率非常高的电器普京强硬反击取得效果,美官员坦言对俄制裁收效甚微,十分失望据CNN报道,最近这段时间,已经有多名美国官员向他们透露,他们对美国主导的对俄制裁,最终却未能对俄罗斯经济产生重大影响而感到失望,目前展现出来的制裁效果并不理想。按照专家预测,西方男孩打了一年生长激素,放弃打针后科学干预,比预期还高11厘米上周末,老刘的儿子带女朋友回家,一家人开开心心地吃了一顿饭,看着儿子自信阳光的模样,让他觉得自己和妻子所做的努力是正确的。老刘和妻子两人个头都不高,一个167厘米,一个154厘米,老婆让我把烟戒了买假发看看补发效果怎样?假发戴久了不舒服,容易出汗瘙痒?遇到这样的问题通常是因为假发设计不够合理产品质量太次造成的唐风采假发假发到底应该怎么选?消费者往往纠结选择高端假发还是低端廉价假发男士戴假发主要是为生姜干姜炮姜姜炭,到底有什么区别?生姜生姜是老百姓日常餐桌上最常见的佐料,它作为一种调味品,我们常用来祛除食物中的腥味。然而很多人却不知道,生姜也是一味中药。生姜为姜科植物姜ZingiberofficinaleRo幼儿园的孩子到底该不该识字?资深小学老师用经验,总结出真相大家好,我是家庭教育指导师果妈关于孩子识字这个问题,其实挺困扰家长的。要是在学龄前识字,幼儿园又不教,那么谁教?怎么教?教多少字?会不会是超前教育,破坏孩子未来学习力?要是在学龄前家长与老师有效沟通,也在教育之中九派时评苑广阔作者系职员近日,全国中小学及幼儿园开学,许多新入园幼儿的家长也陪着孩子开始适应幼儿园的新生活。9月19日,记者调查发现,一些新入园家长会给幼儿园老师发很长的消息,将孩子过去几多人同时爆发中国女足铿锵玫瑰海外纷纷绽放京报体育记者赵晓松张琳艳打入个人瑞士联赛首球王霜送出在美国联赛首次助攻并拿下首胜沈梦露射进个人在女足苏超首球过去一周,留洋的中国女足姑娘们捷报频传,她们在海外联赛不断突破进步,为中武汉周边5个徒步登山的宝藏地,总有一座山是你喜欢的武汉秋天徒步爬山就安排这5座山!心八分山八分山在江夏县东南50里,即今武昌县城(现江夏区)纸坊附近。此山有水分流如八字,故名。建康录曰武昌有山无林,政可图始,不可居终,山分八字,数
欧洲三大金童级球员,谁更优秀?欧洲金童奖由意大利都灵体育报于2003年创办,由欧洲各国重要媒体进行投票,包括欧洲20个国家媒体,30名记者组成。评选对象必须是欧洲俱乐部21岁以下的青年球员。首届金童奖得主为范德扫地出门!曼联当家球星将被解约!有望签下23进球11助攻射手对于曼联来说,从过去的这一段时间来看,他们已经回到了正确的轨道上。从联赛当中的形势来看,他们的排名已经上升到了第4位,距离前4名只有一步之遥。在赛季初期球队状态低迷的时候,很难有人皇马有意引进拉什福德,准备为球员提供合同曼联阵中的主力前锋拉什福德已经处于自己的合同年当中,尽管曼联方面希望能够激活他合同中续约一年的条款,但是就现在来看他们也并没有为他准备好新的合同,所以他的未来如今也是未知数。而近日王楚钦力挫德国名将,进8强静等马龙来战,韩乒男女队皆墨北京时间10月21日,WTT澳门冠军赛晚间时段还有6场比赛,陈幸同对田志希,孙颖莎对杨晓欣,陈梦对斯佐科斯,王楚钦对奥恰洛夫,樊振东对卡纳克,马龙对邱党,今晚将决出8强所有席位及对闲鱼这碗饭,不好吃了深燃(shenrancaijing)原创作者邹帅编辑唐亚华闲鱼也支持七天无理由退货了?据闲鱼官方通知,10月8日起,闲鱼规范要求从事商业经营活动的经营性卖家应按法律法规及规范要求提为什么您的身边那么多恶人人非纯善,也非纯恶而是善中有恶,恶中有善人分四类纯阳弱阳弱阴纯阴纯阳之人像太阳,喜欢给予帮助他人纯阴之人像黑洞,只顾索取,不付出弱阳之人乐观正直,但也会冷血自私弱阴之人自我自私,但这些留住秋天的活动,不允许你还没做幼儿园最偏爱的季节一定是深秋老师们恨不得带着娃儿们整天整天泡在户外,浪在自然因为深秋的户外是孩子们最生动的学习空间让我们带着孩子充分发动全身感官去链接自然的美好开启自然的奥妙吧!发快递小哥宋学文客户把装着价值几百万元产品的仓库钥匙交给我保管中国青年报客户端北京10月22日电(中青报中青网记者张国刘世昕王鑫昕胡春艳)今天,在二十大闭幕后的党代表通道采访活动中,二十大代表快递小哥宋学文回忆了跟客户之间的温暖故事。在回顾过绝了!金球奖第6,姆巴佩失望,巴黎将引进锋霸球迷看上本泽马足球助力团金球奖评选已经尘埃落定,姆巴佩的排名出人意料地排在了第6位,原本他以为可以至少挤进前三名,看起来姆巴佩非常失望,现在真的是绝了,他要求大巴黎引进一名锋霸来帮助他实现自己的曼联VS切尔西首发曝光胖虎坐镇B费领衔今夏标王搭档锋线妖星北京时间10月23日凌晨0030,英超联赛第13轮将上演一场强强对话,红魔曼联做客挑战实力强劲的蓝军切尔西。在几天前结束的一场强强对话中,曼联没有让球迷失望,以20的比分拿下实力强英超切尔西VS曼联,切尔西换帅如换刀,曼联绝处求生北京时间10月23日凌晨0点30分,英超联赛第13轮,切尔西主场迎战曼联,两支球队本赛季的积分排名差距越来越小,切尔西仅仅只领先曼联1个积分,另外两支球队最近四场交手中,全部打成了