VQE_CN.ipynb 46.0 KB
Notebook
Newer Older
Q
Quleaf 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 变分量子本征求解器\n",
    "\n",
    "<em> Copyright (c) 2021 Institute for Quantum Computing, Baidu Inc. All Rights Reserved. </em>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 概览\n",
    "\n",
    "目前普遍认为,量子计算在近期很有前景的一个应用是处理量子化学问题 [1-2]。**变分量子本征求解器** (VQE)作为这个研究方向的核心应用之一,为研究者们提供了可以在目前含噪的中等规模量子设备(NISQ device)上研究量子化学的可能 [1-4]。其核心任务是求解一个量子尺度上封闭物理系统的哈密顿量 $\\hat{H}$ 的基态能量及其对应的量子态。主要的实现方法是通过在量子设备上准备一个参数化的试探波函数 $|\\Psi(\\boldsymbol\\theta)\\rangle$ 然后结合经典机器学习中的优化算法(例如梯度下降法)去不断地调整、优化参数 $\\boldsymbol\\theta$ 使得期望值  $\\langle \\Psi(\\boldsymbol\\theta)|\\hat{H}|\\Psi(\\boldsymbol\\theta)\\rangle$ 最小化。这套方案的基本原理是基于 **Rayleigh-Ritz 变分原理**。 \n",
    "\n",
    "$$\n",
    "E_0 = \\min_{\\boldsymbol\\theta} \\langle \\Psi(\\boldsymbol\\theta)|\\hat{H}|\\Psi(\\boldsymbol\\theta)\\rangle.\n",
    "\\tag{1}\n",
    "$$\n",
    "\n",
Q
Quleaf 已提交
25
    "其中 $E_0$ 表示该系统的基态能量。从数值分析的角度来看,该问题可以被理解为求解一个**离散化**哈密顿量 $H$(埃尔米特矩阵)的最小本征值 $\\lambda_{\\min}$ 和其对应的本征向量 $|\\Psi_0\\rangle$。具体的离散化过程是如何通过建立模型实现的,这属于量子化学的专业领域范畴。精确地解释该过程需要很长的篇幅,这超过了本教程所能处理的范围。我们会在下一节背景知识模块粗略的介绍一下相关知识,感兴趣的读者可以参考 `量子化学: 基本原理和从头计算法`系列丛书 [5]。通常来说,为了能在量子设备上处理量子化学问题,哈密顿量 $H$ 会被表示成为泡利算符 $\\{X,Y,Z\\}$ 的加权求和形式。\n",
Q
Quleaf 已提交
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
    "\n",
    "$$\n",
    "H = \\sum_k c_k ~ \\bigg( \\bigotimes_{j=0}^{M-1} \\sigma_j^{(k)} \\bigg),\n",
    "\\tag{2}\n",
    "$$\n",
    "\n",
    "其中 $c_k$ 表示权重系数, $\\sigma_j^{(k)} \\in \\{I,X,Y,Z\\}$ 并且 $M$ 表示所需的量子比特个数。这样一种哈密顿量的表示形式被称为 **泡利字符串**。以下为一个2量子比特的具体例子,\n",
    "\n",
    "$$\n",
    "H= 0.12~Y_0 \\otimes I_1-0.04~X_0\\otimes Z_1.\n",
    "\\tag{3}\n",
    "$$\n",
    "\n",
    "在下一节,我们会补充一些关于电子结构问题的背景知识。本质上讨论的就是上述哈密顿量 $H$ 究竟是从哪里来的。对于熟悉相关背景的读者,或者主要关心如何在量桨上实现 VQE 的读者,请直接跳转至第三节分析氢分子($H_2$)基态的具体例子。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 背景: 电子结构问题\n",
    "\n",
    "这本小节,我们集中讨论下量子化学中的一个基本问题 -- **电子结构问题**。更准确的说,我们关心的是给定分子(molecule)的低位能量本征态。这些信息可以帮助我们预测化学反应的速率和分子的稳定结构等等 [6]。假设一个分子由 $N_n$ 个原子核和 $N_e$ 个电子组成,描述该分子系统总能量的哈密顿量算符 $\\hat{H}_{mol}$ 在一次量子化表示下可以写为,\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\hat{H}_{\\text{mol}} & = -\\sum_{i}\\frac{\\nabla_{R_i}^2}{2M_i} - \\sum_{i} \\frac{\\nabla_{r_i}^2}{2} -\\sum_{i,j}\\frac{Z_i}{\\lvert R_i - r_j\\lvert} + \\sum_{i,j>i}\\frac{Z_iZ_j}{\\lvert R_i - R_j\\lvert} + \\sum_{i, j>i}\\frac{1}{\\lvert r_i - r_j\\lvert}, \n",
    "\\tag{4}\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "其中 $R_i、M_i$ 和 $Z_i$ 分别表示第 $i$ 个原子核的位置、质量和原子序数(原子核内质子数),第 $i$ 个电子的位置则表示为 $r_i$。以上公式右边前两项分别代表原子核和电子的总动能。第三项表示带正电的质子和带负电的电子之间的库伦相互吸引作用。最后两项则表示原子核-原子核之间,电子-电子之间的相互排斥作用。这里,分子哈密顿量 $\\hat{H}_\\text{mol}$ 使用的是原子单位制能量 **哈特里能量**(Hartree),记为 Ha。1哈特里能量的大小为 $[\\hbar^2/(m_ee^2a_0^2)] = 27.2$ 电子伏或 630 千卡/摩尔,其中 $m_e、e$ 和 $a_0$ 分别表示电子质量、基本电荷和玻尔半径。\n",
    "\n",
    "**注释1:** 在这个图景下,我们不考虑自旋-轨道耦合以及超精细结构。如果出于计算需要,可以作为微扰加入。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 玻恩-奥本海默近似\n",
    "\n",
    "由于一般原子核的质量要远大于电子,因而在同样的相互作用下电子的运动速度会比原子核快很多。所以,将原子核所处的位置看成固定 $R_i =$常数 是一种合理的近似。这种通过在时间尺度上将电子行为和原子核行为去耦合的近似处理思想被称为玻恩-奥本海默近似。作为近似的直接结果,公式(4)中原子核的动能项会被消去并且表示原子核-原子核相互排斥作用的项可以被认为是一个能量移位(这个项是与电子位置 $r_i$ 无关的)从而也可以作为常数项被忽略。经过这些步骤后,我们可以把哈密顿量近似为:\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "\\hat{H}_{\\text{electron}} & =  - \\sum_{i} \\frac{\\nabla_{r_i}^2}{2} -\\sum_{i,j}\\frac{Z_i}{\\lvert R_i - r_j\\lvert} + \\sum_{i, j>i}\\frac{1}{\\lvert r_i - r_j\\lvert} \n",
    "\\tag{5},\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "在经过以上近似后,分子中多电子结构的能级在理论上可以通过求解以下不含时薛定谔方程获得:\n",
    "\n",
    "$$\n",
    "\\hat{H}_{\\text{electron}} |\\Psi_n \\rangle = E_n |\\Psi_n \\rangle,\n",
    "\\tag{6}\n",
    "$$\n",
    "\n",
    "其中 $n$ 指代能级。值得注意的是,电子哈密顿量中电子-电子相互排斥作用的求和项数会随着电子数 $N_e$ 的增多至 $N_e(N_e-1)/2$ 项。这意味着对于一个含有16个电子的氧分子($O_2$)我们需要计算多达120项的相互排斥作用项。 一般来说,这样的问题是无法从理论上精确求解的。正如狄拉克在 [Quantum mechanics of many-electron systems](https://royalsocietypublishing.org/doi/10.1098/rspa.1929.0094) [7] 所指出的那样,\n",
    "\n",
    "> *The underlying physical laws necessary for the mathematical theory of a large part of physics and the whole of chemistry are thus completely known, and the difficulty is only that the exact application of these laws leads to equations much too complicated to be soluble.* \n",
    "> \n",
    "> -- Paul Dirac (1929)\n",
    "\n",
    "既然解析的做法因为太复杂了不太可行,那么我们可以采用数值方法来处理。一个最简单的数值方法(离散化方法)就是把上述作用中无限维度希尔伯特空间离散化为等间距排开的立方体晶格点。在这样一个离散化的空间里,主要运算规则为复数域的线性代数。假设空间的每个轴都离散为等间距排开的 $k$ 个点,则 $N$-电子(为了方便去掉下标 $e$)的多体波函数可以写为 [2]:\n",
    "\n",
    "$$\n",
    "|\\Psi \\rangle = \\sum_{\\mathbf{x_1}, \\ldots, \\mathbf{x_N}} \\psi(\\mathbf{x_1}, \\ldots, \\mathbf{x_N}) \\mathcal{A}(|\\mathbf{x_1}, \\ldots, \\mathbf{x_N}\\rangle).\n",
    "\\tag{7}\n",
    "$$\n",
    "\n",
Q
Quleaf 已提交
97
    "其中坐标 $|\\mathbf{x_j}\\rangle = |r_j\\rangle |\\sigma_j\\rangle$ 记录第 $j$ 个电子的空间位置信息和自旋,$|r_j\\rangle  = |x_j,y_j,z_j\\rangle$ 且 $j\\in \\{1,2,\\cdots,N\\}$, $x_j,y_j,z_j \\in \\{0,1,\\cdots,k-1\\}$ 同时 $\\sigma_j \\in \\{\\downarrow,\\uparrow\\}$ 表示自旋向下和向上。这样一种离散化方式共计需要 $k^{3N}\\times 2^{N}$ 个数据来表示波函数。在这里,$\\mathcal{A}$ 表示反对称化操作(出于泡利不相容原理)并且 $\\psi(\\mathbf{x_1}, \\mathbf{x_2}, \\ldots, \\mathbf{x_N})=\\langle\\mathbf{x_1}, \\mathbf{x_2}, \\ldots, \\mathbf{x_N}|\\Psi\\rangle$。 可以看出,经典计算机存储这样一个波函数需要的内存是随着电子个数呈指数增长的。这使得基于这种离散化的经典数值方法,无法模拟超过几十个电子的系统。那么,我们是不是能够通过量子设备来存储和准备这样一个波函数然后求解基态能量 $E_0$ 呢?在下一节中,我们将以最简单的分子系统 -- 氢分子($H_2$)为例,讲解 VQE 算法。\n",
Q
Quleaf 已提交
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
    "\n",
    "**注释2:** 关于量子化学和现有数值计算方法的综述也超过了本教程的处理范围,我们推荐感兴趣的读者去查阅以下经典教材 Helgaker 等人撰写的 *'Molecular Electronic-Structure Theory'* [6] 以及 Szabo & Ostlund 撰写的 *'Modern Quantum Chemistry: Introduction to Advanced Electronic Structure Theory'* [8]。 如果需要弥补量子计算和量子化学之间知识空缺,请参考以下综述文章 [Quantum chemistry in the age of quantum computing](https://pubs.acs.org/doi/10.1021/acs.chemrev.8b00803) [1] 和  [Quantum computational chemistry](https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.92.015003) [2] 。\n",
    "\n",
    "**注释3:** 对于量子化学中的能量计算,我们期望能够达到 **化学精度**(chemical accuracy)$1.6\\times10^{-3}$ Ha 或者 1 千卡/摩尔。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 氢分子 $H_2$ 基态能量\n",
    "\n",
    "### 构造电子哈密顿量\n",
    "\n",
    "首先,让我们通过下面几行代码引入必要的 library 和 package。"
   ]
  },
  {
   "cell_type": "code",
Q
Quleaf 已提交
118
   "execution_count": 1,
Q
Quleaf 已提交
119 120
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
121 122
     "end_time": "2021-04-30T09:13:45.528201Z",
     "start_time": "2021-04-30T09:13:43.385553Z"
Q
Quleaf 已提交
123 124 125 126 127 128 129 130 131 132 133 134 135 136
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import platform\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import clear_output\n",
    "\n",
    "import numpy\n",
    "from numpy import concatenate\n",
    "from numpy import pi as PI\n",
    "from numpy import savez, zeros\n",
    "\n",
Q
Quleaf 已提交
137
    "import paddle\n",
Q
Quleaf 已提交
138 139
    "from paddle_quantum.circuit import UAnsatz\n",
    "from paddle_quantum.utils import pauli_str_to_matrix\n",
Q
Quleaf 已提交
140
    "from paddle_quantum.VQE.chemistrysub import H2_generator"
Q
Quleaf 已提交
141 142 143 144 145 146 147 148 149 150 151
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于具体需要分析的分子,我们需要其**几何构型** (geometry)、**基组**(basis set,例如 STO-3G 基于高斯函数)、**多重度**(multiplicity)以及**分子的净电荷数** (charge) 等多项信息来建模获取描述系统的哈密顿量。具体的,通过我们内置的量子化学工具包可以利用 fermion-to-qubit 映射的技术来输出目标分子的量子比特哈密顿量表示(泡利字符串)。"
   ]
  },
  {
   "cell_type": "code",
Q
Quleaf 已提交
152
   "execution_count": 2,
Q
Quleaf 已提交
153 154
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
155 156
     "end_time": "2021-04-30T09:13:45.545018Z",
     "start_time": "2021-04-30T09:13:45.531302Z"
Q
Quleaf 已提交
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
    }
   },
   "outputs": [],
   "source": [
    "Hamiltonian, N = H2_generator()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "面向更高级的用户,我们这里提供一个简单的生成氢分子 (H2)哈密顿量的教程。先安装以下两个package (**仅Mac/Linux用户可使用,Windows用户暂时不支持**):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
176 177
     "end_time": "2021-04-30T09:13:49.924911Z",
     "start_time": "2021-04-30T09:13:45.604181Z"
Q
Quleaf 已提交
178 179 180 181
    }
   },
   "outputs": [],
   "source": [
Q
Quleaf 已提交
182
    "!pip install openfermion\n",
Q
Quleaf 已提交
183 184 185 186 187 188 189 190
    "clear_output()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
191 192
     "end_time": "2021-04-30T09:13:57.494843Z",
     "start_time": "2021-04-30T09:13:55.235443Z"
Q
Quleaf 已提交
193 194 195 196
    }
   },
   "outputs": [],
   "source": [
Q
Quleaf 已提交
197
    "!pip install openfermionpyscf\n",
Q
Quleaf 已提交
198 199 200 201 202 203 204 205
    "clear_output()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
206 207
     "end_time": "2021-04-30T09:14:00.836635Z",
     "start_time": "2021-04-30T09:13:58.092862Z"
Q
Quleaf 已提交
208 209 210 211 212 213 214 215
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The generated h2 Hamiltonian is \n",
Q
Quleaf 已提交
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
      " -0.042078976477822494 [] +\n",
      "-0.04475014401535163 [X0 X1 Y2 Y3] +\n",
      "0.04475014401535163 [X0 Y1 Y2 X3] +\n",
      "0.04475014401535163 [Y0 X1 X2 Y3] +\n",
      "-0.04475014401535163 [Y0 Y1 X2 X3] +\n",
      "0.17771287465139946 [Z0] +\n",
      "0.17059738328801055 [Z0 Z1] +\n",
      "0.12293305056183797 [Z0 Z2] +\n",
      "0.1676831945771896 [Z0 Z3] +\n",
      "0.17771287465139946 [Z1] +\n",
      "0.1676831945771896 [Z1 Z2] +\n",
      "0.12293305056183797 [Z1 Z3] +\n",
      "-0.24274280513140462 [Z2] +\n",
      "0.1762764080431959 [Z2 Z3] +\n",
      "-0.24274280513140462 [Z3]\n"
Q
Quleaf 已提交
231 232 233 234 235 236 237 238 239 240 241 242 243 244
     ]
    }
   ],
   "source": [
    "# 操作系统信息\n",
    "sysStr = platform.system()\n",
    "\n",
    "# 判断操作系统\n",
    "if sysStr in ('Linux', 'Darwin'):\n",
    "\n",
    "    import openfermion\n",
    "    import openfermionpyscf\n",
    "\n",
    "    # 请检查是否正确下载了 h2 的几何构型文件\n",
Q
Quleaf 已提交
245 246 247
    "    geometry = 'h2.xyz'\n",
    "    # geometry = [('H', (0.0, 0.0, 0.0)), ('H', (0.0, 0.0, 0.74))]\n",
    "    basis = 'sto-3g'\n",
Q
Quleaf 已提交
248 249 250 251
    "    charge = 0\n",
    "    multiplicity = 1\n",
    "\n",
    "    # 生成哈密顿量\n",
Q
Quleaf 已提交
252 253
    "    molecular_hamiltonian = openfermionpyscf.generate_molecular_hamiltonian(geometry, basis, multiplicity, charge)\n",
    "    qubit_op = openfermion.transforms.jordan_wigner(molecular_hamiltonian)\n",
Q
Quleaf 已提交
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
    "\n",
    "    # 打印结果\n",
    "    print(\"The generated h2 Hamiltonian is \\n\", qubit_op)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**注释4:** 生成这个哈密顿量的几何构型中,两个氢原子间的原子间隔(interatomic distance)为 $d = 74$ pm。\n",
    "\n",
    "除了氢分子 (H2) 之外, 我们也提供了氟化氢 (HF) 分子的几何构型文件 `hf.xyz`。如果你需要测试更多分子的几何构型,请移步至这个[数据库](http://smart.sns.it/molecules/index.html)。此外,我们还需要把这些本质上由泡利算符表示的哈密顿量转化成量桨支持的数据格式,这里我们提供这个接口。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
273 274
     "end_time": "2021-04-30T09:14:00.852699Z",
     "start_time": "2021-04-30T09:14:00.842277Z"
Q
Quleaf 已提交
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
    }
   },
   "outputs": [],
   "source": [
    "def Hamiltonian_str_convert(qubit_op):\n",
    "    '''\n",
    "    将上述提供的哈密顿量信息转为量桨支持的泡利字符串\n",
    "    H = [[1.0, \"z0,x1\"], [-1.0, \"y0,z1\"], ...]\n",
    "    '''\n",
    "    info_dic = qubit_op.terms\n",
    "    \n",
    "    def process_tuple(tup):\n",
    "        if len(tup) == 0:\n",
    "            return 'i0'\n",
    "        else:\n",
    "            res = ''\n",
    "            for ele in tup:\n",
    "                res += ele[1].lower()\n",
    "                res += str(ele[0])\n",
    "                res += ','\n",
    "            return res[:-1]\n",
    "    H_info = []\n",
    "    \n",
    "    for key, value in qubit_op.terms.items():\n",
    "        H_info.append([value.real, process_tuple(key)])\n",
    "    \n",
    "    return H_info\n",
    "\n",
    "if sysStr in ('Linux', 'Darwin'):\n",
    "    Hamiltonian = Hamiltonian_str_convert(qubit_op)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 搭建量子神经网络(QNN)和试探波函数\n",
    "\n",
    "在实现VQE的过程中,我们首先需要设计量子神经网络QNN(也可以理解为参数化量子电路)来准备试探波函数 $|\\Psi(\\boldsymbol\\theta)\\rangle$。这里,我们提供一个预设好的的深度为 $D$ 层的 4-量子比特的量子电路模板,图中的虚线框内为一层:\n",
    "\n",
    "![Utheta.jpg](https://release-data.cdn.bcebos.com/PIC%2FUtheta.jpg)\n",
    "\n",
    "- 我们预设一些该参数化电路的参数,比如宽度为 $N = 4$ 量子位。\n",
    "\n",
    "- 初始化其中的变量参数,${\\bf{\\theta }}$ 代表我们量子神经网络中的参数组成的向量。\n",
    "\n",
    "接下来我们根据上图中的电路设计,通过 Paddle Quantum 的 `UAnsatz` 函数和内置的 `real_entangled_layer(theta, D)` 电路模板来高效搭建量子神经网络。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
329 330
     "end_time": "2021-04-30T09:14:01.746172Z",
     "start_time": "2021-04-30T09:14:01.738712Z"
Q
Quleaf 已提交
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
    }
   },
   "outputs": [],
   "source": [
    "def U_theta(theta, Hamiltonian, N, D):\n",
    "    \"\"\"\n",
    "    Quantum Neural Network\n",
    "    \"\"\"\n",
    "    \n",
    "    # 按照量子比特数量/网络宽度初始化量子神经网络\n",
    "    cir = UAnsatz(N)\n",
    "    \n",
    "    # 内置的 {R_y + CNOT} 电路模板\n",
    "    cir.real_entangled_layer(theta[:D], D)\n",
    "    \n",
    "    # 铺上最后一列 R_y 旋转门\n",
    "    for i in range(N):\n",
    "        cir.ry(theta=theta[D][i][0], which_qubit=i)\n",
    "        \n",
    "    # 量子神经网络作用在默认的初始态 |0000>上\n",
    "    cir.run_state_vector()\n",
    "    \n",
    "    # 计算给定哈密顿量的期望值\n",
    "    expectation_val = cir.expecval(Hamiltonian)\n",
    "\n",
Q
Quleaf 已提交
356
    "    return expectation_val, cir"
Q
Quleaf 已提交
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 配置训练模型 - 损失函数\n",
    "\n",
    "现在我们已经有了数据和量子神经网络的架构,我们将进一步定义训练参数、模型和损失函数。通过作用量子神经网络 $U(\\theta)$ 在初始态 $|0..0\\rangle$ 上,我们将得到输出态 $\\left| {\\psi \\left( {\\bf{\\theta }} \\right)} \\right\\rangle $。进一步,在VQE模型中的损失函数一般由量子态 $\\left| {\\psi \\left( {\\bf{\\theta }} \\right)} \\right\\rangle$ 关于哈密顿量 $H$ 的期望值 (能量期望值 expectation value) 给出,\n",
    "\n",
    "$$\n",
    "\\min_{\\boldsymbol\\theta}  \\mathcal{L}(\\boldsymbol \\theta) = \\min_{\\boldsymbol\\theta} \\langle \\Psi(\\boldsymbol\\theta)|H |\\Psi(\\boldsymbol\\theta)\\rangle\n",
    "= \\min_{\\boldsymbol\\theta} \\sum_k c_k~\\langle \\Psi(\\boldsymbol\\theta)| \\bigotimes_j \\sigma_j^{(k)}|\\Psi(\\boldsymbol\\theta)\\rangle.\n",
    "\\tag{8}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
379 380
     "end_time": "2021-04-30T09:14:02.737957Z",
     "start_time": "2021-04-30T09:14:02.728041Z"
Q
Quleaf 已提交
381 382 383 384
    }
   },
   "outputs": [],
   "source": [
Q
Quleaf 已提交
385
    "class StateNet(paddle.nn.Layer):\n",
Q
Quleaf 已提交
386 387 388 389
    "    \"\"\"\n",
    "    Construct the model net\n",
    "    \"\"\"\n",
    "\n",
Q
Quleaf 已提交
390
    "    def __init__(self, shape, dtype=\"float64\"):\n",
Q
Quleaf 已提交
391 392 393
    "        super(StateNet, self).__init__()\n",
    "        \n",
    "        # 初始化 theta 参数列表,并用 [0, 2*pi] 的均匀分布来填充初始值\n",
Q
Quleaf 已提交
394 395 396
    "        self.theta = self.create_parameter(shape=shape, \n",
    "                                           default_initializer=paddle.nn.initializer.Uniform(low=0.0, high=2*PI),\n",
    "                                           dtype=dtype, is_bias=False)\n",
Q
Quleaf 已提交
397 398 399 400 401
    "        \n",
    "    # 定义损失函数和前向传播机制\n",
    "    def forward(self, N, D):\n",
    "        \n",
    "        # 计算损失函数/期望值\n",
Q
Quleaf 已提交
402
    "        loss, cir = U_theta(self.theta, Hamiltonian, N, D)\n",
Q
Quleaf 已提交
403
    "\n",
Q
Quleaf 已提交
404
    "        return loss, cir"
Q
Quleaf 已提交
405 406 407 408 409 410 411 412
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 配置训练模型 - 模型参数\n",
    "\n",
Q
Quleaf 已提交
413
    "在进行量子神经网络的训练之前,我们还需要进行一些训练的超参数设置,主要是学习速率(LR, learning rate)、迭代次数(ITR, iteration)和量子神经网络计算模块的深度(D, Depth)。这里我们设定学习速率为 0.5, 迭代次数为 50 次。读者不妨自行调整来直观感受下超参数调整对训练效果的影响。"
Q
Quleaf 已提交
414 415 416 417 418 419 420
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
421 422
     "end_time": "2021-04-30T09:14:03.744957Z",
     "start_time": "2021-04-30T09:14:03.738881Z"
Q
Quleaf 已提交
423 424 425 426
    }
   },
   "outputs": [],
   "source": [
Q
Quleaf 已提交
427 428
    "ITR = 80  # 设置训练的总迭代次数\n",
    "LR = 0.4   # 设置学习速率\n",
Q
Quleaf 已提交
429 430 431 432 433 434 435 436 437
    "D = 2      # 设置量子神经网络中重复计算模块的深度 Depth"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 进行训练\n",
    "\n",
Q
Quleaf 已提交
438
    "当训练模型的各项参数都设置完成后,我们将数据转化为 Paddle 中的张量,进而进行量子神经网络的训练。过程中我们用的是Adam Optimizer,也可以调用Paddle中提供的其他优化器。我们将训练过程中的结果存储在summary_data文件中。"
Q
Quleaf 已提交
439 440 441 442
   ]
  },
  {
   "cell_type": "code",
Q
Quleaf 已提交
443
   "execution_count": 12,
Q
Quleaf 已提交
444 445
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
446 447
     "end_time": "2021-04-30T09:14:58.180112Z",
     "start_time": "2021-04-30T09:14:31.954222Z"
Q
Quleaf 已提交
448 449 450 451 452 453 454
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
Q
Quleaf 已提交
455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
      "iter: 20 loss: -0.9930\n",
      "iter: 20 Ground state energy: -0.9930 Ha\n",
      "iter: 40 loss: -1.1221\n",
      "iter: 40 Ground state energy: -1.1221 Ha\n",
      "iter: 60 loss: -1.1333\n",
      "iter: 60 Ground state energy: -1.1333 Ha\n",
      "iter: 80 loss: -1.1359\n",
      "iter: 80 Ground state energy: -1.1359 Ha\n",
      "\n",
      "训练后的电路:\n",
      "--Ry(4.717)----*--------------X----Ry(4.718)----*--------------X----Ry(-0.02)--\n",
      "               |              |                 |              |               \n",
      "--Ry(4.733)----X----*---------|----Ry(4.486)----X----*---------|----Ry(4.828)--\n",
      "                    |         |                      |         |               \n",
      "--Ry(-3.25)---------X----*----|----Ry(4.729)---------X----*----|----Ry(-0.01)--\n",
      "                         |    |                           |    |               \n",
      "--Ry(-1.55)--------------X----*----Ry(4.704)--------------X----*----Ry(3.094)--\n",
      "                                                                               \n"
Q
Quleaf 已提交
473 474 475 476
     ]
    }
   ],
   "source": [
Q
Quleaf 已提交
477 478
    "# 确定网络的参数维度\n",
    "net = StateNet(shape=[D + 1, N, 1])\n",
Q
Quleaf 已提交
479
    "\n",
Q
Quleaf 已提交
480 481 482
    "# 一般来说,我们利用Adam优化器来获得相对好的收敛,\n",
    "# 当然你可以改成SGD或者是RMS prop.\n",
    "opt = paddle.optimizer.Adam(learning_rate=LR, parameters=net.parameters())\n",
Q
Quleaf 已提交
483
    "\n",
Q
Quleaf 已提交
484 485
    "# 记录优化结果\n",
    "summary_iter, summary_loss = [], []\n",
Q
Quleaf 已提交
486
    "\n",
Q
Quleaf 已提交
487 488
    "# 优化循环\n",
    "for itr in range(1, ITR + 1):\n",
Q
Quleaf 已提交
489
    "\n",
Q
Quleaf 已提交
490
    "    # 前向传播计算损失函数\n",
Q
Quleaf 已提交
491
    "    loss, cir = net(N, D)\n",
Q
Quleaf 已提交
492
    "\n",
Q
Quleaf 已提交
493 494 495 496 497 498 499 500 501 502 503 504 505 506
    "    # 在动态图机制下,反向传播极小化损失函数\n",
    "    loss.backward()\n",
    "    opt.minimize(loss)\n",
    "    opt.clear_grad()\n",
    "\n",
    "    # 更新优化结果\n",
    "    summary_loss.append(loss.numpy())\n",
    "    summary_iter.append(itr)\n",
    "\n",
    "    # 打印结果\n",
    "    if itr % 20 == 0:\n",
    "        print(\"iter:\", itr, \"loss:\", \"%.4f\" % loss.numpy())\n",
    "        print(\"iter:\", itr, \"Ground state energy:\", \"%.4f Ha\" \n",
    "                                            % loss.numpy())\n",
Q
Quleaf 已提交
507 508 509
    "    if itr == ITR:\n",
    "        print(\"\\n训练后的电路:\") \n",
    "        print(cir)\n",
Q
Quleaf 已提交
510 511 512 513 514
    "\n",
    "# 储存训练结果到 output 文件夹\n",
    "os.makedirs(\"output\", exist_ok=True)\n",
    "savez(\"./output/summary_data\", iter = summary_iter, \n",
    "                               energy=summary_loss)"
Q
Quleaf 已提交
515 516 517 518 519 520 521 522 523 524 525 526 527 528 529
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 测试效果\n",
    "我们现在已经完成了量子神经网络的训练,通过 VQE 得到的基态能量的估计值大致为 $E_0 \\approx -1.136$ Ha,这与通过全价构型相互作用(FCI)$E_0 = -1.13618$ Ha 计算得出的值是在化学精度 $\\varepsilon = 1.6 \\times 10^{-3}$ Ha 内相符合的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
Q
Quleaf 已提交
530 531
     "end_time": "2021-04-30T09:14:21.341323Z",
     "start_time": "2021-04-30T09:14:20.710152Z"
Q
Quleaf 已提交
532 533 534 535 536
    }
   },
   "outputs": [
    {
     "data": {
Q
Quleaf 已提交
537
      "image/png": "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JqJZoihu48ZTDdmFGja0EoUxJqJZoiikCv/+96lqp0KWKIwxEc4SRaHsbDh48FRDdiFLFMYEbdeuXVx//fV06NCBlJQUBg4cyPTp06s1hszMTHr27Bn08QsXLuSbb76ptONqIksUhc45B/72N7jwwtP3x8dbG4UxQVBVRo0axaBBg9i8eTPp6elMmzaNrKysM44ta/a76hSOiaK63z9LFMU1bAj165++Lz4eDh2Ckye9icmYMPHFF18QExNTNDw3QLt27bj77rsBeOutt7jqqqsYMmQIQ4cOJTc3l1GjRtG7d2/OO+88MjIyAJg0aRJ//OMfi87Rs2dPMjMzyczMpFu3bkycOJEePXowYsQIjh49CriOdH369KFPnz68/PLLpcb45z//me7du9O7d2+uu+46MjMzeeWVV3j++edJSkpi8eLFzJo1iwEDBtC3b1+GDRvGrl27/B6XnZ3NNddcQ79+/ejXrx9ff/31GdcrKCjgwQcfpF+/fvTu3ZtXX30VcEnn4osvZsyYMUVjULlRNNzPctFFF5GSksIll1zCjh07ADet63333UdqaiovvPACS5cupXfv3iQlJfHggw8WlaIGDRrEihUrimK44IILWLlyZbl/n6cpbWyPcF3OeqynkmbNcuM97dtXuec1ppKVHL/nkUdU581z6ydOuO0vvnDbeXlue9Eit33okNv++mu3vX+/216yxG3n5pZ9/RdeeEHvu+++Up+fMmWKtm7dWnNyclRV9a677tJJkyapqur8+fO1T58+qqr6v//7v/rMM88Uva5Hjx66ZcsW3bJli0ZFReny5ctVVfXaa6/V//u//1NVN7bUl19+qaqqDzzwgPbo0cNvDC1bttS8vDxVVd27d6/f6+Xm5urJkydVVfX111/X+++/3+9x48aN08WLF6uq6tatW7Vr165nXO/VV1/Vxx9/XFVV8/LyNCUlRTdv3qwLFizQ+Ph43bZtmxYUFOh5552nixcv1uPHj+vAgQN19+7dqqo6bdo0vfnmm1XVjVt1xx13nPa+fPPNN6qq+vDDDxf9zG+99Zbee++9qqq6YcMG9fedWN6xnqxndlmKD+NRuG6MKdOdd97JV199RUxMTNGscMOHD6dJkyYAfPXVV/zjH/8AYMiQIeTk5HCgjGre9u3bF808l5KSQmZmJvv27WPfvn0MGjQIgJ///Od8+umn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\n",
Q
Quleaf 已提交
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = numpy.load('./output/summary_data.npz')\n",
    "\n",
    "eig_val, eig_state = numpy.linalg.eig(\n",
    "                     pauli_str_to_matrix(Hamiltonian, N))\n",
    "min_eig_H = numpy.min(eig_val.real)\n",
    "min_loss = numpy.ones([len(result['iter'])]) * min_eig_H\n",
    "\n",
    "plt.figure(1)\n",
    "func1, = plt.plot(result['iter'], result['energy'], \n",
    "                  alpha=0.7, marker='', linestyle=\"-\", color='r')\n",
    "func_min, = plt.plot(result['iter'], min_loss, \n",
    "                  alpha=0.7, marker='', linestyle=\":\", color='b')\n",
    "plt.xlabel('Number of iteration')\n",
    "plt.ylabel('Energy (Ha)')\n",
    "\n",
    "plt.legend(handles=[\n",
    "    func1,\n",
    "    func_min\n",
    "],\n",
    "    labels=[\n",
    "        r'$\\left\\langle {\\psi \\left( {\\theta } \\right)} '\n",
    "        r'\\right|H\\left| {\\psi \\left( {\\theta } \\right)} \\right\\rangle $',\n",
    "        'Ground-state energy',\n",
    "    ], loc='best')\n",
    "\n",
    "#plt.savefig(\"vqe.png\", bbox_inches='tight', dpi=300)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 通过 VQE 确定原子间隔\n",
    "\n",
    "还记得在前面的注释中提到我们默认使用的两个氢原子间原子间隔为 $74$ pm 吗?VQE 的另一个用法便是通过在不同的原子间隔下多次运行然后观察运行结果的最小值是在什么原子间隔发生的,这个间隔即为估计得真实原子间隔。\n",
    "\n",
    "![vqe-fig-dist](figures/vqe-fig-distance.png)\n",
    "\n",
    "从上述过程中可以看出,最小值确实发生在 $d = 74$ pm (1 pm = $1\\times 10^{-12}$m) 附近,这是与[实验测得数据](https://cccbdb.nist.gov/exp2x.asp?casno=1333740&charge=0)相符合的 $d_{exp} (H_2) = 74.14$ pm."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_______\n",
    "\n",
    "## 参考文献\n",
    "\n",
Q
Quleaf 已提交
599
    "[1] Cao, Yudong, et al. Quantum Chemistry in the Age of Quantum Computing. [Chemical reviews 119.19 (2019): 10856-10915.](https://pubs.acs.org/doi/10.1021/acs.chemrev.8b00803)\n",
Q
Quleaf 已提交
600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
    "\n",
    "[2] McArdle, Sam, et al. Quantum computational chemistry. [Reviews of Modern Physics 92.1 (2020): 015003.](https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.92.015003)\n",
    "\n",
    "\n",
    "[3] Peruzzo, A. et al. A variational eigenvalue solver on a photonic quantum processor. [Nat. Commun. 5, 4213 (2014).](https://www.nature.com/articles/ncomms5213)\n",
    "\n",
    "[4] Moll, Nikolaj, et al. Quantum optimization using variational algorithms on near-term quantum devices. [Quantum Science and Technology 3.3 (2018): 030503.](https://iopscience.iop.org/article/10.1088/2058-9565/aab822)\n",
    "\n",
    "[5] 徐光宪, 黎乐民, 王德民. 量子化学: 基本原理和从头计算法(上)[M], 第二版. 北京: 科学出版社, 2012; \n",
    "\n",
    "[6] Helgaker, Trygve, Poul Jorgensen, and Jeppe Olsen. Molecular electronic-structure theory. John Wiley & Sons, 2014.\n",
    "\n",
    "[7] Dirac, Paul Adrien Maurice. Quantum mechanics of many-electron systems. [Proceedings of the Royal Society of London. Series A, Containing Papers of a Mathematical and Physical Character 123.792 (1929): 714-733.](https://royalsocietypublishing.org/doi/10.1098/rspa.1929.0094)\n",
    "\n",
    "[8] Szabo, Attila, and Neil S. Ostlund. Modern quantum chemistry: introduction to advanced electronic structure theory. Courier Corporation, 2012."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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",
Q
Quleaf 已提交
634
   "version": "3.9.5"
Q
Quleaf 已提交
635 636 637 638 639 640 641 642 643 644 645 646
  },
  "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,
Q
Quleaf 已提交
647
   "toc_window_display": false
Q
Quleaf 已提交
648 649 650 651 652
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}