{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 量子神经网络初体验\n", "\n", "[![下载Notebook](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_notebook.svg)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/master/mindquantum/zh_cn/advanced/mindspore_initial_experience_of_quantum_neural_network.ipynb) \n", "[![下载样例代码](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_download_code.svg)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/master/mindquantum/zh_cn/advanced/mindspore_initial_experience_of_quantum_neural_network.py) \n", "[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindquantum/docs/source_zh_cn/advanced/initial_experience_of_quantum_neural_network.ipynb)\n", "\n", "## 量子神经网络的结构\n", "\n", "在MindSpore Quantum中,量子神经网络(Quantum Neural Network, QNN)的结构如下图所示,其通常由三部分构成:\n", "\n", "(1)一个(或多个)编码线路,用于将经典数据编码到量子数据(通常称为Encoder);\n", "\n", "(2)一个(或多个)训练线路,用于训练带参量子门中的参数(通常称为Ansatz);\n", "\n", "(3)一个(或多个)测量,用于检测测量值(例如在`Z`方向上测量,就是某个量子比特的量子态在`Z`轴上的投影,该测量得到的是量子态关于泡利`Z`算符(不限定于泡利`Z`算符,换成其它的算符亦可)的期望值)是否接近于目标期望值。\n", "\n", "![mindquantum](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/docs/mindquantum/docs/source_zh_cn/images/mindquantum_cn.png)\n", "\n", "下面,我们通过一个简单的例子来体验一下如何使用MindSpore Quantum。\n", "\n", "## 简单的例子\n", "\n", "![example circuit](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/docs/mindquantum/docs/source_zh_cn/images/example_circuit.png)\n", "\n", "我们搭建如上图所示的量子神经网络,其中Encoder由一个 [H](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/core/gates/mindquantum.core.gates.HGate.html) 门,1个 [RX](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/core/gates/mindquantum.core.gates.RX.html) 门、1个 [RY](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/core/gates/mindquantum.core.gates.RY.html) 门和1个 [RZ](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/core/gates/mindquantum.core.gates.RZ.html) 门构成,Ansatz由1个 [RX](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/core/gates/mindquantum.core.gates.RX.html) 门和1个 [RY](https://www.mindspore.cn/mindquantum/docs/zh-CN/master/core/gates/mindquantum.core.gates.RY.html) 门构成,测量则是作用在第0位量子比特上的泡利`Z`算符。\n", "\n", "问题描述:我们将Encoder看成是系统对初始量子态的误差影响(参数$\\alpha_0, \\alpha_1$和$\\alpha_2$是将原经典数据经过预处理(可选)后得到的某个固定值,即为已知值,在此分别设为0.2, 0.3和0.4)。我们需要训练一个Ansatz来抵消掉这个误差,使得最后的量子态还是处于$|0\\rangle$态。\n", "\n", "思路:对末态执行泡利`Z`算符测量,此时的测量值就是此时的量子态关于泡利`Z`算符的期望值。由于$|0\\rangle$是算符`Z`的本征态,且本征值为1,容易知道\n", "\n", "$$\n", "\\langle 0|Z|0\\rangle=1.\n", "$$\n", "\n", "也就是说,目标期望值为1。可以通过测量得到的期望值来验证此时的状态是否为$|0\\rangle$。\n", "\n", "解决方案:通过训练Ansatz中的参数,希望测量值接近于目标期望值,换句话说,我们只需让测量值尽可能接近于$|0\\rangle$态关于泡利`Z`算符对应的期望值,那么此时的状态就是$|0\\rangle$,即Ansatz抵消了Encoder对初始量子态产生的误差。\n", "\n", "## 环境准备\n", "\n", "导入本教程所依赖的模块" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np # 导入numpy库并简写为np\n", "from mindquantum.core.circuit import Circuit # 导入Circuit模块,用于搭建量子线路\n", "from mindquantum.core.gates import H, RX, RY, RZ # 导入量子门H, RX, RY, RZ\n", "from mindquantum.core.parameterresolver import PRGenerator # 导入参数生成器模块" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 搭建Encoder\n", "\n", "根据图示的量子线路图,我们可以在MindSpore Quantum中搭建Encoder。" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/html": [ "
Circuit Summary \n", "╭──────────────────────┬────────────────────────╮\n", "│ Info │ value │\n", "├──────────────────────┼────────────────────────┤\n", "│ Number of qubit │ 1 │\n", "├──────────────────────┼────────────────────────┤\n", "│ Total number of gate │ 4 │\n", "│ Barrier │ 0 │\n", "│ Noise Channel │ 0 │\n", "│ Measurement │ 0 │\n", "├──────────────────────┼────────────────────────┤\n", "│ Parameter gate │ 3 │\n", "│ 3 encoder parameters │ alpha0, alpha1, alpha2 │\n", "╰──────────────────────┴────────────────────────╯\n", "\n" ], "text/plain": [ "\u001b[1;38;2;255;0;0m Circuit Summary \u001b[0m\n", "╭──────────────────────┬────────────────────────╮\n", "│\u001b[1m \u001b[0m\u001b[1;38;2;59;59;149mInfo\u001b[0m\u001b[1m \u001b[0m\u001b[1m \u001b[0m│\u001b[1m \u001b[0m\u001b[1;38;2;59;59;149mvalue\u001b[0m\u001b[1m \u001b[0m\u001b[1m \u001b[0m│\n", "├──────────────────────┼────────────────────────┤\n", "│ \u001b[1mNumber of qubit\u001b[0m │ 1 │\n", "├──────────────────────┼────────────────────────┤\n", "│ \u001b[1mTotal number of gate\u001b[0m │ 4 │\n", "│ Barrier │ 0 │\n", "│ Noise Channel │ 0 │\n", "│ Measurement │ 0 │\n", "├──────────────────────┼────────────────────────┤\n", "│ \u001b[1mParameter gate\u001b[0m │ 3 │\n", "│ 3 encoder parameters │ \u001b[38;2;255;200;87malpha0, alpha1, alpha2\u001b[0m │\n", "╰──────────────────────┴────────────────────────╯\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/svg+xml": [ "" ], "text/plain": [ "
Software | \n", "Version | \n", "
---|---|
mindquantum | 0.9.11 |
scipy | 1.10.1 |
numpy | 1.23.5 |
System | \n", "Info | \n", "
Python | 3.9.16 |
OS | Linux x86_64 |
Memory | 8.3 GB |
CPU Max Thread | 8 |
Date | Sun Dec 31 21:28:06 2023 |