带你认识MindSpore量子机器学习库MindQuantum
摘要:MindSpore在3.28日正式开源了量子机器学习库MindQuantum,本文介绍MindQuantum的关键技术。
本文分享自华为云社区《MindSpore量子机器学习库MindQuantum》,作者:HWCloudAI 。
MindSpore在3.28日正式开源了量子机器学习库MindQuantum,本文介绍MindQuantum的关键技术。介绍MindQuantum前,先简单阐述下量子计算的相关概念。
量子计算基本概念
量子计算是当今世界最具颠覆性的技术之一,各个国家和公司都在加大该领域的研发投入。量子计算机的概念最早是由著名物理学家费曼于1981年提出,按照他的想法,利用量子力学原理运行的量子计算机,相比于经典计算机能够更快的对复杂量子系统进行模拟。由于量子系统的纠缠性、叠加性和并行性,人们可以以多项式级乃至指数级的加速来实现一些算法,如用于大数分解的Shor算法、用于量子搜索的Grover算法等。为了让大家快速步入量子计算大门,我们首先需要了解一些基本的概念,包括用于信息存储的量子比特和对量子比特进行逻辑操作的量子门。
量子比特
在经典计算机里,人们通常用电位的高低来表示二进制的0和1,然后利用三极管等半导体器件对电流进行操控,以完成通用逻辑运算。然而,在同一时间内,同一个比特只能处于低电位和高电位中的一种情况。在神奇的量子世界里,一些实体可以同时处于两种不同的状态。例如电子,它的自旋可以同时处于向上的状态和向下的状态,如果我们把这种向上和向下的状态分别记为0和1

量子逻辑门

量子线路


我们可以对量子线路演化后的量子态进行测量,从量子态中提取信息,并进行后续操作。
下面,我们利用MindQuantum来对上面的线路进行演化,并得到最终的量子态。首先,按照[安装指导](MindSpore/mindquantum)完成MindQuantum的安装,运行如下代码,将得到末态量子态。
import numpy as np
from mindquantum import Circuit
from mindquantum.highlevel import StateEvolution c = Circuit()
c.h(0)
c.x(1, 0)
c.ry('theta', 2) state = StateEvolution(c).final_state({'theta': np.pi/2}, ket=True)
print(state)
输出如下:
0.5¦000⟩
0.5¦011⟩
0.5¦100⟩
0.5¦111⟩
因此我们得到最终用的量子态为:

量子在机器学习中的应用
早在上个世纪,科学家就提出了用于机器学习的量子感知机概念。最近20年,越来越多的用于机器学习的量子算法被发掘出来,其中包括用于求解线性方程组的HHL算法,和基于此的量子主成分分析、量子支持向量机等。下图给出了各种量子机器学习算法对最好经典算法的加速效果。

然而,有意义地实用化这些算法需要成千上万,乃至百万量级的量子比特,在当前NISQ(Noisy Intermediate-Scale Quantum)阶段,真实量子计算机的比特数只能达到几十到几百的量级,且系统含有较多噪声。为了在NISQ阶段展现量子计算机的优势,人们发展出来了量子经典混合机器学习库,经典计算机与量子计算机相辅相成,共同完成一个复杂的任务,例如量子化学模拟和组合优化等。
量子机器学习库MindQuantum
MindQuantum是结合MindSpore和HiQ开发的量子机器学习库,支持多种量子神经网络的训练和推理。得益于华为HiQ团队的量子计算研发能力和MindSpore高性能自动微分能力,MindQuantum能够高效处理量子机器学习、量子化学模拟和量子优化等问题,性能达到业界TOP1,为广大的科研人员、老师和学生提供了快速设计和验证量子机器学习算法的高效平台。
下图是MindQuantum的架构图,当前我们利用量子模拟器算子来对量子体系进行模拟,它可以完成前向传播和梯度计算的功能,在此基础之上,我们有量子算法库,例如量子神经网络啊、量子化学模拟的VQE和量子优化算法的QAOA等,再往上就有了量子应用,我们可以利用MindQuantum的量子算法来进行机器学习、化学模拟和运筹优化等任务。

在MindQuantum中,量子神经网络的结构如下图所描述,其中的量子线路由三大块构成,编码线路会将经典数据编码到量子态上,然后是待训练线路,我们可以通过调节线路中逻辑门的参数来使得最后的测量结果符合预期。

通过MindQuantum中的MindQuantumLayer,我们可以很容易的搭建量子机器学习层,并且可以无缝的跟MindSpore中其他的算子构成一张更大的机器学习网络。下面,我们结合一个简单的例子来体验一下MindQuantum量子机器学习库。
MindQuantum量子神经网络初体验


1. 量子线路的搭建
import numpy as np
from mindquantum.ops import QubitOperator
from mindquantum import Circuit, Hamiltonian encoder = Circuit().rx('alpha', 0).ry('beta', 0).no_grad()
ansatz = Circuit().rx('a', 0).ry('b', 0)
circ = encoder + ansatz
ham = Hamiltonian(QubitOperator('Z0'))
alpha, beta = 0.5, 1.2
encoder_data = np.array([[alpha, beta]]).astype(np.float32)
2. 搭建训练网络
from mindquantum.nn import MindQuantumLayer
import mindspore as ms class Net(ms.nn.Cell):
def __init__(self, pqc):
super(Net, self).__init__()
self.pqc = pqc def construct(self, x):
return -self.pqc(x) pqc = MindQuantumLayer(['alpha', 'beta'], ['a', 'b'], circ, ham)
train_net = Net(pqc)
3. 训练
opti = ms.nn.Adam(train_net.trainable_params(), 0.2)
net = ms.nn.TrainOneStepCell(train_net, opti)
for i in range(100):
print(net(ms.Tensor(encoder_data)))
最后收敛结果为-0.993。同时我们也可以求得最后量子态与目标态的保真度。
from mindquantum.highlevel import StateEvolution
a, b = pqc.weight.asnumpy()
pr = {'alpha': alpha, 'beta': beta, 'a': a, 'b': b}
state = StateEvolution(circ).final_state(pr)
fid = np.abs(np.vdot(state, [1, 0]))**2
通过上面的训练,我们利用量子神经网络抵消了系统的误差,使得最后的量子态的保真度达到99.9999%。
更多样例
除了上面简单的例子外,我们还给出了利用MindQuantum来进行自然语言处理、量子化学模拟、组合优化求解和手写体识别等案例,具体请参考下面链接:https://gitee.com/mindspore/mindquantum/tree/master/tutorials
未来展望
未来我们将不断丰富量子神经网络模型,支持更多的硬件后端。也欢迎广大量子机器学习爱好者有兴趣能够加入我们,共同开发和维护MindQuantum开源社区。
了解完MindSpore的关键技术是不是很心动呢!赶紧【点击链接】并【立即报名】,即可在 ModelArts 平台学习到一个经典案例掌握基于MindSpore的深度学习!
带你认识MindSpore量子机器学习库MindQuantum的更多相关文章
- sklearn:Python语言开发的通用机器学习库
引言:深入理解机器学习并全然看懂sklearn文档,须要较深厚的理论基础.可是.要将sklearn应用于实际的项目中,仅仅须要对机器学习理论有一个主要的掌握,就能够直接调用其API来完毕各种机器学习问 ...
- 常用python机器学习库总结
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
- 机器学习库shark安装
经过两天的折腾,一个对c++和机器学习库的安装都一知半解的人终于在反复安装中,成功的将shark库安装好了,小小纪念一下,多亏了卡门的热心帮忙. shark的安装主要分为以下几个部分: (1)下载 s ...
- [Python & Machine Learning] 学习笔记之scikit-learn机器学习库
1. scikit-learn介绍 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上.值得一提的是,scikit-learn最 ...
- [Python] 机器学习库资料汇总
声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...
- 《Spark 官方文档》机器学习库(MLlib)指南
spark-2.0.2 机器学习库(MLlib)指南 MLlib是Spark的机器学习(ML)库.旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib由一些通用的学习算法和工具组成,包括分 ...
- Python_sklearn机器学习库学习笔记(一)_Feature Extraction and Preprocessing(特征提取与预处理)
# Extracting features from categorical variables #Extracting features from categorical variables 独热编 ...
- Python机器学习库scikit-learn实践
原文:http://blog.csdn.net/zouxy09/article/details/48903179 一.概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得 ...
- [resource]Python机器学习库
reference: http://qxde01.blog.163.com/blog/static/67335744201368101922991/ Python在科学计算领域,有两个重要的扩展模块: ...
- mlpack:可伸缩C++机器学习库(转)
摘要:mlpack是一个可伸缩C++机器学习库,它的目的是让新用户通过简单.一致的API使用机器学习,同时为专业用户提供C++的高性能和最大灵活性. mlpack是一个直观.快速.可伸缩的C++机器学 ...
随机推荐
- Java进程(基础)
基本概念 1.进程:程序的执行过程 2.线程:一个进程可以有单个线程也就是我们说的单线程,还可以有多个线程也就是我们说的多线程, 线程 1.当一个类继承了Thread类就可以当成一个线程用 2.我们会 ...
- Redis7
Redis是基于内存的K-V键值对内存数据库 浅谈Redis7新特性 主要是自身底层性能和资源利用率上的提高和优化. 多AOF文件支持 config命令增强 限制客户端内存使用 listpack紧凑列 ...
- AB32VG1系列之手把手入门与RTC简单评测
说是评测, 时间仓库仅仅是玩了一下例程而已. 后面有时间打算移植 CoreMark 看看与Cortex-M3的对比. AB32VG1系列之手把手入门与RTC简单评测
- 二叉搜索树 & 平衡树
二叉搜索树 & 平衡树 专题 0x00 前言 我 AFO 了,但不代表不写 Code 了... CSP-S 在数据结构上吃了大亏,就差这一点就一等了,所以觉得好好整整. 本篇博客主要研究二叉搜 ...
- offline RL | TD3+BC:在最大化 Q advantage 时添加 BC loss 的极简算法
题目:A Minimalist Approach to Offline Reinforcement Learning ,NeurIPS 2021,8 7 7 5. pdf 版本:https://arx ...
- MAUI Blazor 如何通过url使用本地文件
前言 上一篇文章 MAUI Blazor 显示本地图片的新思路 中, 提出了通过webview拦截,从而在前端中显示本地图片的思路.不过当时还不完善,随后也发现了很多问题.比如, 不同平台上的url不 ...
- .net中优秀依赖注入框架Autofac看一篇就够了
Autofac 是一个功能丰富的 .NET 依赖注入容器,用于管理对象的生命周期.解决依赖关系以及进行属性注入.本文将详细讲解 Autofac 的使用方法,包括多种不同的注册方式,属性注入,以及如何使 ...
- SQL动态化多个分组查询
现有以下三张表,分别为:diqu(地区表),zhiye(职业表),info(信息表) 最基本的分组查询 1 select dqID,jbID,COUNT(1) from info group by d ...
- [GDOIpj222A] 点指兵兵
第一题 点指兵兵 提交文件: bing.cpp 输入文件: bing.in 输出文件: bing.out 时间空间限制: 1 秒, 256 MB 你一定有过在两个物品之间犹豫不决的时候,想要借助一些方 ...
- 聊一聊 C# 线程切换后上下文都去了哪里
一:背景 1. 讲故事 总会有一些朋友是不是问一个问题,在 Windows 中线程做了上下文切换,请问被切的线程他的寄存器上下文都去了哪里?能不能给我挖出来?这个问题其实比较底层,如果对操作系统没有个 ...