introduction_cn.ipynb 35.1 KB
Notebook
Newer Older
1 2 3 4
{
 "cells": [
  {
   "cell_type": "markdown",
5
   "id": "0b1a3a86",
6 7 8 9
   "metadata": {},
   "source": [
    "## 1. VSQL 模型简介\n",
    "\n",
10
    "变分影子量子学习(Variational Shadow Quantum Learning, VSQL)是一个在监督学习框架下的量子–经典混合算法。它使用了参数化量子电路(Parameterized Quantum Circuit, PQC)和经典影子(classical shadow),和通常使用的变分量子算法(Variational Quantum Algorithm, VQA)不同的是,VSQL 只从子空间获取局部特征,而不是从整个希尔伯特空间获取特征。"
11 12 13 14
   ]
  },
  {
   "cell_type": "markdown",
15
   "id": "6aa97879",
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
   "metadata": {},
   "source": [
    "## 2. 模型原理简介\n",
    "\n",
    "VSQL 的流程图如下:\n",
    "\n",
    "![pipeline](https://ai-studio-static-online.cdn.bcebos.com/36c5194bc48a4af88560172fdd7ec15b8fd3225c27b644acad1981046a48d1ec \"VSQL 流程图\")\n",
    "<div style=\"text-align:center\">VSQL 流程图</div>\n",
    "\n",
    "其训练步骤为:\n",
    "\n",
    "1. 将经典数据 $\\mathbf{x}^i$ 编码到量子态 $\\left|\\mathbf{x}^i\\right>$。\n",
    "2. 准备一个参数化局部量子电路 $U(\\mathbf{\\theta})$ 并且初始化它的参数 $\\mathbf{\\theta}$。\n",
    "3. 在前几个量子比特上作用 $U(\\mathbf{\\theta})$,然后通过测量局部可观测量(比如说泡利 $X\\otimes X\\cdots \\otimes X$ 算符)来获取一个局部影子特征。\n",
    "4. 每次将 $U(\\mathbf{\\theta})$ 向下移动一个量子比特,重复步骤3直到 $U(\\mathbf{\\theta})$ 作用到最后一个量子比特上。\n",
    "5. 将步骤3–4中得到的所有局部影子特征传入经典 FCNN 并通过激活函数得到预测的标签 $\\tilde{\\mathbf{y}}^i$。对于多分类问题来说,我们使用归一化指数函数 (softmax) 作为激活函数。\n",
    "6. 重复步骤3–5直到数据集内所有的数据点都经过了处理。然后计算损失函数 $\\mathcal{L}(\\mathbf{\\theta}, \\mathbf{W}, \\mathbf{b})$。\n",
    "7. 通过梯度下降等优化方法调整参数 $\\mathbf{\\theta}$、$\\mathbf{W}$ 和 $\\mathbf{b}$ 的值,从而最小化损失函数。这样我们就得到了优化后的模型 $\\mathcal{F}$。\n",
    "\n",
    "由于 VSQL 只获取局部影子特征,所以它可以比较容易地在有拓扑连接限制的量子设备上实现。除此之外,因为我们用同一个 $U(\\mathbf{\\theta})$ 来获取整个电路上的局部影子特征,所以需要训练的参数数量相对于通常使用的变分量子分类器来说大大减少。\n",
    "\n",
    "### 2.1 局部影子电路介绍\n",
    "\n",
    "在讲电路的细节之前,我们需要说明几个参数:\n",
    "- $n$:编码后量子态的量子比特数目。\n",
    "- $n_{qsc}$:量子影子电路的宽度。我们每次只在连续 $n_{qsc}$ 个量子比特上作用 $U(\\mathbf{\\theta})$。\n",
    "- $D$:电路的深度,表示 $U(\\mathbf{\\theta})$ 门中某一层电路重复的次数。\n",
    "\n",
    "这里我们给出 $n=4$、$n_{qsc}=2$ 时的一个例子:\n",
    "\n",
    "我们首先在前两个量子比特上作用 $U(\\mathbf{\\theta})$,并且获取第一个影子特征 $O_1$。\n",
    "\n",
    "![qubit0](https://ai-studio-static-online.cdn.bcebos.com/a544360d2b864cd2882c6965bf30e1a0f5fbf089173043cd95a5821b1cdbd799 \"获取第一个影子特征\")\n",
    "<div style=\"text-align:center\">获取第一个影子特征</div>\n",
    "\n",
    "然后我们准备一样的输入态 $\\left|\\mathbf{x}^i\\right>$,在中间两个量子比特上作用 $U(\\mathbf{\\theta})$,得到第二个影子特征 $O_2$。\n",
    "\n",
    "![qubit1](https://ai-studio-static-online.cdn.bcebos.com/9cdb70da3e5f47c2bd089f020975a987e1348d71d724418d890591f298786d4c \"获取第二个影子特征\")\n",
    "<div style=\"text-align:center\">获取第二个影子特征</div>\n",
    "\n",
    "最后,我们再准备一个一样的输入态,在最后两个量子比特上作用 $U(\\mathbf{\\theta})$,得到影子特征 $O_3$。这样我们就处理完了这个数据点!\n",
    "\n",
    "![qubit2](https://ai-studio-static-online.cdn.bcebos.com/6a404995be1141bc9fd6ca36b5e394e00fbe302621c4413bbf86554de6bfc964 \"获取第三个影子特征\")\n",
    "<div style=\"text-align:center\">获取第三个影子特征</div>\n",
    "\n",
    "通常来说,处理一个数据点需要重复以上步骤 $n - n_{qsc} + 1$ 次。有一点需要指出的是,在上面这个例子中我们只使用了一个影子电路,在获取这三个影子特征时我们使用同样的参数 $\\mathbf{\\theta}$。你可以选择增加影子电路的数量来解决更复杂的问题,这里需要注意的是不同影子电路中的参数 $\\mathbf{\\theta}$ 不同。  \n",
    " \n",
    "在后面的 MNIST 二分类任务中,我们将使用2–局部影子电路,即 $n_{qsc}=2$。下图展示了这个影子电路的结构。\n",
    "\n",
    "![2-local](https://ai-studio-static-online.cdn.bcebos.com/0c1035262cb64f61bd3cc87dbf53253aa6a7ecc170634c4db8dd71d576a9409c \"local数为2时的影子电路结构\")\n",
    "<div style=\"text-align:center\">local数为2时的影子电路结构</div>\n",
    "\n",
    "为了增强量子电路的表达能力,我们将重复 $D$ 次虚线框中的结构。$U(\\mathbf{\\theta})$ 的设计并不是唯一的,这里展示的仅仅是一个例子,也可以设计别的电路结构。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f0070ae",
   "metadata": {},
   "source": [
    "## 3. 模型效果\n",
    "\n",
    "VSQL 在 MNIST 数据集上的二分类效果如下:\n",
    "\n",
    "![binary-classification](https://ai-studio-static-online.cdn.bcebos.com/03c38b174d0e47ae9dbeea6dfda1333d6d3aa74209594324b78c9159b72e7e8a \"二分类效果图\")\n",
    "<div style=\"text-align:center\">二分类效果图</div>\n",
    "\n",
    "VSQL 在 MNIST 数据集上的十分类效果如下:\n",
    "\n",
    "![10-classification](https://ai-studio-static-online.cdn.bcebos.com/54a0273672ad4ec5ba6b7d73b3b225f8d97380c43ceb495a82d16a258117182b \"十分类效果图\")\n",
    "<div style=\"text-align:center\">十分类效果图</div>\n",
    "\n",
    "由表可见,相比于其它的量子神经网络,VSQL 可以使用很少的参数实现更高的分类准确率。而与经典神经网络相比,在十分类任务上,VSQL 也可以使用较少的参数达到相近的效果。当数据量较小时,VSQL 比经典神经网络的效果会更好。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17661d06",
   "metadata": {},
   "source": [
    "## 4. 模型如何使用\n",
    "\n",
98
    "按照如下代码来安装量桨:"
99 100 101 102
   ]
  },
  {
   "cell_type": "code",
103
   "execution_count": null,
104 105
   "id": "eb7a2be4",
   "metadata": {},
106
   "outputs": [],
107 108
   "source": [
    "# 安装量桨\n",
109
    "%pip install --user paddle-quantum\n",
110
    "# 下载预训练模型\n",
111
    "!wget https://release-data.cdn.bcebos.com/PaddleQuantum/vsql.pdparams -O vsql.pdparams"
112 113 114 115
   ]
  },
  {
   "cell_type": "markdown",
116
   "id": "9be7e030",
117 118
   "metadata": {},
   "source": [
119
    "成功安装量桨之后,我们来加载 VSQL 模型和要预测的图片:"
120 121 122 123 124
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
125
   "id": "3e883450",
126
   "metadata": {},
127
   "outputs": [],
128 129 130 131 132 133 134
   "source": [
    "import os\n",
    "import warnings\n",
    "\n",
    "warnings.filterwarnings('ignore')\n",
    "os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python'\n",
    "\n",
135
    "import toml\n",
136
    "import matplotlib.pyplot as plt\n",
137
    "from paddle_quantum.qml.vsql import inference"
138 139 140 141 142
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
143
   "id": "1ac0fbb3",
144 145 146 147 148 149
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
150 151 152
      "--2023-01-18 15:25:40--  https://ai-studio-static-online.cdn.bcebos.com/088dc9dbabf349c88d029dfd2e07827aa6e41ba958c5434bbd96bc167fc65347\n",
      "Resolving ai-studio-static-online.cdn.bcebos.com (ai-studio-static-online.cdn.bcebos.com)... 112.132.208.35, 116.177.239.35, 119.188.176.35, ...\n",
      "Connecting to ai-studio-static-online.cdn.bcebos.com (ai-studio-static-online.cdn.bcebos.com)|112.132.208.35|:443... connected.\n",
153 154
      "HTTP request sent, awaiting response... 200 OK\n",
      "Length: 290 [image/png]\n",
155
      "Saving to: ‘data_0.png’\n",
156
      "\n",
157
      "data_0.png          100%[===================>]     290  --.-KB/s    in 0s      \n",
158
      "\n",
159
      "2023-01-18 15:25:40 (5.66 KB/s) - ‘data_0.png’ saved [290/290]\n",
160 161 162 163 164 165
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
166
       "<matplotlib.image.AxesImage at 0x7fe0b4d39fd0>"
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 加载手写数字0\n",
186 187
    "!wget https://ai-studio-static-online.cdn.bcebos.com/088dc9dbabf349c88d029dfd2e07827aa6e41ba958c5434bbd96bc167fc65347 -O data_0.png\n",
    "image0 = plt.imread('data_0.png')\n",
188 189 190
    "plt.imshow(image0)"
   ]
  },
191 192 193 194 195 196 197 198
  {
   "cell_type": "markdown",
   "id": "13aea688",
   "metadata": {},
   "source": [
    "接下来,我们来配置模型参数:"
   ]
  },
199 200 201
  {
   "cell_type": "code",
   "execution_count": 4,
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
   "id": "aedae237",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_toml = r\"\"\"\n",
    "# 模型的整体配置文件。\n",
    "# 输入当前的任务,可以是 'train' 或者 'test',分别代表训练和预测。这里我们使用 test,表示我们要进行预测。\n",
    "task = 'test'\n",
    "# 要预测的图片的文件路径。\n",
    "image_path = 'data_0.png'\n",
    "# 上面的图片路径是否是文件夹。对于文件夹路径,我们会对文件夹里面的所有图片文件进行预测。这种方式可以一次测试多个图片。\n",
    "is_dir = false\n",
    "# 训练好的模型参数文件的文件路径。\n",
    "model_path = 'vsql.pdparams'\n",
    "# 量子电路所包含的量子比特的数量。\n",
    "num_qubits = 10\n",
    "# 影子电路所包含的量子比特的数量。\n",
    "num_shadow = 2\n",
    "# 电路深度。\n",
    "depth = 1\n",
    "# 我们要预测的类别。这里我们对 0 和 1 进行分类。\n",
    "classes = [0, 1]\n",
    "\"\"\""
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "abf2951f",
   "metadata": {},
   "source": [
    "然后,我们使用 VSQL 模型来进行预测。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "316ff898",
   "metadata": {},
   "outputs": [],
   "source": [
    "config = toml.loads(test_toml)\n",
    "task = config.pop('task')\n",
    "prediction, prob = inference(**config)\n",
    "prob = prob[0]\n",
    "msg = '对于输入的图片,模型有'\n",
    "for idx, item in enumerate(prob):\n",
    "    label = config['classes'][idx]\n",
    "    msg += f'{item:3.2%} 的信心认为它是 {label:d}'\n",
    "    msg += '。' if idx == len(prob) - 1 else ','\n",
    "print(msg)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cbd83c5b",
   "metadata": {},
   "source": [
    "接下来,我们来测试另外一个图片:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fb4c9ced",
267 268 269 270 271 272
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
273 274 275
      "--2023-01-18 15:25:46--  https://ai-studio-static-online.cdn.bcebos.com/c755f723af3d4a1c8f113f8ac3bd365406decd1be70944b7b7b9d41413e8bc7a\n",
      "Resolving ai-studio-static-online.cdn.bcebos.com (ai-studio-static-online.cdn.bcebos.com)... 116.95.27.35, 116.177.239.35, 119.188.176.35, ...\n",
      "Connecting to ai-studio-static-online.cdn.bcebos.com (ai-studio-static-online.cdn.bcebos.com)|116.95.27.35|:443... connected.\n",
276 277
      "HTTP request sent, awaiting response... 200 OK\n",
      "Length: 173 [image/png]\n",
278
      "Saving to: ‘data_1.png’\n",
279
      "\n",
280
      "data_1.png          100%[===================>]     173  --.-KB/s    in 0s      \n",
281
      "\n",
282
      "2023-01-18 15:25:46 (82.5 MB/s) - ‘data_1.png’ saved [173/173]\n",
283 284 285 286 287 288
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
289
       "<matplotlib.image.AxesImage at 0x7fe0b4f24eb0>"
290 291
      ]
     },
292
     "execution_count": 5,
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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P/3JrVy50mVkZLiWlhbr0e6pH/zgB66qqso1NTW53//+9664uNhlZWW5ixcvWo+WUO3t7e7EiRPuxIkTTpLbsmWLO3HihPvrX//qnHPuZz/7mcvIyHD79+93p06dcvPmzXP5+fnu008/NZ48vr7oOLS3t7vnn3/e1dTUuKamJvf++++7r3/96+7hhx92165dsx49blavXu0CgYCrqqpyzc3N0e3q1avRfVatWuVGjRrlDh8+7I4fP+6KiopcUVGR4dTxd6fj0NDQ4H784x+748ePu6amJrd//343ZswYN336dOPJYyVFgJxz7o033nCjRo1ygwYNclOnTnW1tbXWI91zixcvdrm5uW7QoEFuxIgRbvHixa6hocF6rIQ7cuSIk3TbtnTpUufczVuxX375ZZeTk+P8fr+bOXOmq6+vtx06Ab7oOFy9etXNmjXLDR8+3KWmprrRo0e7FStW9Ls/pHX33y/Jbd++PbrPp59+6r773e+6L33pS27o0KFuwYIFrrm52W7oBLjTcTh79qybPn26y8zMdH6/3z300EPuhz/8oWtra7Md/Bb8cwwAABN9/j0gAED/RIAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCY+G/lgUw3G3htogAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 加载手写数字1\n",
309 310
    "!wget https://ai-studio-static-online.cdn.bcebos.com/c755f723af3d4a1c8f113f8ac3bd365406decd1be70944b7b7b9d41413e8bc7a -O data_1.png\n",
    "image1 = plt.imread('data_1.png')\n",
311 312 313 314 315
    "plt.imshow(image1)"
   ]
  },
  {
   "cell_type": "code",
316 317
   "execution_count": 6,
   "id": "ecb2ba3d",
318 319 320 321 322 323
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
324
      "对于输入的图片,模型有18.29% 的信心认为它是 0,81.71% 的信心认为它是 1。\n"
325 326 327 328
     ]
    }
   ],
   "source": [
329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
    "test_toml = r\"\"\"\n",
    "# 模型的整体配置文件。\n",
    "# 输入当前的任务,可以是 'train' 或者 'test',分别代表训练和预测。这里我们使用 test,表示我们要进行预测。\n",
    "task = 'test'\n",
    "# 要预测的图片的文件路径。\n",
    "image_path = 'data_1.png'\n",
    "# 上面的图片路径是否是文件夹。对于文件夹路径,我们会对文件夹里面的所有图片文件进行预测。这种方式可以一次测试多个图片。\n",
    "is_dir = false\n",
    "# 训练好的模型参数文件的文件路径。\n",
    "model_path = 'vsql.pdparams'\n",
    "# 量子电路所包含的量子比特的数量。\n",
    "num_qubits = 10\n",
    "# 影子电路所包含的量子比特的数量。\n",
    "num_shadow = 2\n",
    "# 电路深度。\n",
    "depth = 1\n",
    "# 我们要预测的类别。这里我们对 0 和 1 进行分类。\n",
    "classes = [0, 1]\n",
    "\"\"\"\n",
    "\n",
    "config = toml.loads(test_toml)\n",
    "task = config.pop('task')\n",
    "# 代码还需要修改\n",
    "prediction, prob = inference(**config)\n",
    "if config['is_dir']:\n",
    "    print(f\"对输入图片的预测结果分别是 {str(prediction)[1:-1]}。\")\n",
    "else:\n",
    "    prob = prob[0]\n",
    "    msg = '对于输入的图片,模型有'\n",
    "    for idx, item in enumerate(prob):\n",
    "        label = config['classes'][idx]\n",
    "        msg += f'{item:3.2%} 的信心认为它是 {label:d}'\n",
    "        msg += '。' if idx == len(prob) - 1 else ','\n",
    "    print(msg)"
363 364 365 366 367 368 369 370 371
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f6f3b91",
   "metadata": {},
   "source": [
    "## 5. 注意事项\n",
    "\n",
372 373 374 375 376
    "我们提供的模型为二分类模型,仅可以用来分辨手写数字0和1。对于其它分类任务,需要重新进行训练。\n",
    "\n",
    "更详细的使用介绍可以参考:https://github.com/PaddlePaddle/Quantum/blob/master/applications/handwritten_digits_classification/introduction_cn.ipynb\n",
    "\n",
    "VSQL 模型的具体介绍可以参考:https://github.com/PaddlePaddle/Quantum/blob/master/tutorials/machine_learning/VSQL_CN.ipynb"
377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4857182b",
   "metadata": {},
   "source": [
    "## 6. 相关论文以及引用信息\n",
    "\n",
    "```\n",
    "@inproceedings{li2021vsql,\n",
    "  title={VSQL: Variational shadow quantum learning for classification},\n",
    "  author={Li, Guangxi and Song, Zhixin and Wang, Xin},\n",
    "  booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},\n",
    "  volume={35},\n",
    "  number={9},\n",
    "  pages={8357--8365},\n",
    "  year={2021}\n",
    "}\n",
    "```"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
402
   "display_name": "pq-dev",
403 404 405 406 407 408 409 410 411 412 413 414 415
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
416
   "version": "3.8.15"
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "vscode": {
   "interpreter": {
433
    "hash": "5fea01cac43c34394d065c23bb8c1e536fdb97a765a18633fd0c4eb359001810"
434 435 436 437 438 439
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}