量子机器学习框架: TensorFlow Quantum
INTRODUCTION
背 景 介 绍
01
混 合 量 子 经 典 机 器 学 习
随着嘈杂中型量子 (NISQ) 处理器计算能力的提升,基于启发式方法的量子机器学习 (QML) 算法成为一种新的趋势。这类算法使用参数化的量子线路 (PQCs, 也称为量子神经网络 QNNs), 利用黑箱启发式方法或基于梯度的方法对代价函数进行优化,来训练参数,以学习训练数据。
然而,近期的量子处理器的规模仍然较小且有噪声,因此量子模型无法单独借助量子处理器来分类和描述量子数据。NISQ 处理器需要与经典的协处理器协同工作才能发挥作用。
混合量子经典模型
概括来说,有两类实现经典和量子设备协同工作的模型。
第一类模型将经典计算机用作 QNNs 的外部优化器,此类算法整体上有时被称为变分量子经典算法。这类算法包括:变分量子本征值求解器 (VQEs)、量子近似优化算法(QAOAs)、量子神经网络分类器(QNNs for classification)、量子卷积神经网络(QCNN)、量子生成模型等。
然而,即使有经典计算机作为外部优化器,NISQ 处理器的噪声仍然很大程度上限制了在可接受的保真度要求下,可实现的量子线路深度。这促使经典硬件在模型中承担尽可能多的任务。因此,在第二类模型中,不再将经典硬件仅仅用作训练量子模型的优化器,而是将模型考虑成经典计算模块和量子计算模块的整合,利用一种允许经典计算和量子计算之间进行梯度反向传播的自动微分方法来优化参数。
量子数据
原则上,任何从潜在的量子力学过程中产生的数据都可以被认为是量子数据。这些可以是量子力学实验产生的经典数据,也可以是量子器件直接产生的数据,然后被用作算法的输入。
混合量子经典模型的量子模块由量子器件组成,因此具有捕获量子力学过程特征的内在能力。混合经典量子模型可以学习的量子数据包括但不限于:量子模拟产生的输出态、量子多体系统和临界量子系统的数据、量子通信网络中待提取的小规模量子数据、待优化的量子计量学方案以及量子调控方案等。
01
02
TensorFlow Quantum 简 介
设计理念
-
TensorFlow Quantum 支持量子线路的微分,这样混合量子经典模型就能够实现反向传播,从而实现利用自动微分的量子机器学习模型。
-
学习量子数据需要在每个量子数据点上重新运行参数化的模型电路。因此机器学习框架需要实现量子线路的批量处理。
-
允许用户在模拟中的运行模型和实际硬件上的运行模型之间方便地进行切换,从而可以直接比较模拟结果和实验结果。
-
尽可能地使用 Cirq 和 TensorFlow 中的现有功能。TensorFlow Quantum 作为两者之间的桥梁,不需要用户重新学习如何与量子计算机接口,也不需要重新学习如何使用机器学习解决问题。
软件架构
上图为 TensorFlow Quantum 的软件堆栈图,它展示了 TensorFlow 和 Cirq 之间的交互。
TensorFlow Quantum 在 TensorFlow 的基础上增加了处理量子数据的能力。这些量子数据包括量子线路和量子算符。
TensorFlow Quantum 的核心原则是与 TensorFlow,特别是 Keras 模型和优化器的集成,因此,TF Keras Models 横跨了堆栈图的左右。
第三层包含 TensorFlow Quantum 的量子层和微分器,当和经典张量流连接时,可以实现混合量子经典的自动微分。
Ops 层实现了张量流图的实例化。
量子线路可以通过调用 qsim 或 Cirq 模拟运行,或最终在 QPU 上运行。
操作流程
以判别式混合模型的训练为例。流程图如下
制备量子数据集:一般而言,量子数据集应当由一个黑盒产生。然而,由于当前的量子计算机无法从外部源导入量子数据,用户需要构造生成数据的量子线路。
量子模型估计:参数化量子模型通过量子计算,来提取量子数据集中隐藏在量子子空间或子系统中的信息。
采样或求平均值:量子态的测量从经典随机变量中以样本的形式提取经典信息。这个随机变量的值的分布通常取决于量子态本身和被测的可观测值。许多变分算法依赖于测量值的平均值,TFQ提供了对前两个步骤的多个运行结果求平均值的方法。
经典模型估计:经典信息被提取出来后,可以进一步做经典后处理,以提取测量期望值之间的关联信息。这一过程可以通过经典深度神经网络实现。
代价函数 (cost function) 估计:得到经典后处理结果后,需要对代价函数进行估计。例如估计监督分类的准确度。
梯度估计和参数更新:完成代价函数的估计之后,整个模型中的自由参数应当向代价降低的方向更新。比较常见的是梯度下降更新。
02
03
TensorFlow Quantum 安 装 教 程
TensorFlow Quantum 官方教程提供了三种配置和使用此框架的方法:
在浏览器上使用 Google Colab 运行 (无需任何安装和配置)
通过 pip 包管理工具在本地安装
通过源代码创建
下面我们分别介绍这三种方法。
在 Google Colab (Colaboratory) 上运行
Colaboratory 是一个免费的 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行。借助 Colaboratory,可以编写和执行代码、保存和共享分析结果,以及利用强大的计算资源 (包括 GPU),所有这些都可通过浏览器免费使用。无需安装和任何配置, TensorFlow Quantum 的代码可以直接在 Google Colab 上运行。
作为例子,我们尝试运行 TensorFlow Quantum 的一个示例代码,Hellow many world。复制链接:
https://github.com/tensorflow/quantum/blob/master/docs/tutorials/hello_many_worlds.ipynb
并在浏览器中打开, 点击下图红框中的按钮,
就可以在 Colab上运行 TensorFlow Quantum 代码了。
Pip 安装
1. 检查是否配置Python开发环境(需要使用Python 3.5-3.7以及pip19.0或更高版本)
python3 --version
pip3 --version
virtualenv --version
Windows 系统下,上述代码第一行中的 python3 需替换为 python。如果需要创建虚拟环境 (推荐),又没有安装 virtualenv, 则可以通过如下方式安装
pip3 install -U virtualenv
注意:如果是在 Windows 系统下安装 TensorFlow Quantum, 我们需要安装额外的软件包,并确保启用了长路径 (此过程极不友好,因此强烈建议 Windows 用户使用 WSL,在 Ubuntu 子系统下安装。安装 WSL 的过程可参考往期文章 ) 。
安装额外软件包和开启长路径 (Windows 系统下安装 TFQ) 参考此链接
https://tensorflow.google.cn/install/pip 复制链接,在浏览器中打开,执行下图红框内的操作。
转到 Microsoft Visual C++ 下载页面,下载并安装下图红框中的三个软件包。
启用长路径,具体操作如下图。
按 Enter 键 (Windows 10 家庭版默认不提供这一功能,解决办法见此链接
https://jingyan.baidu.com/article/456c463b0800800a583144d4.html)。
依次选择 本地计算机策略 --> 计算机配置 --> 管理模板 --> 系统 --> 文件系统
--> 启用 Win32 长路径。
然后单击确定。
2. 创建并激活虚拟环境 (推荐)
安装可以在系统下或虚拟环境中进行。选择在虚拟环境中安装 TensorFlow Quantum, 可通过如下代码创建并激活虚拟环境。
Windows:
virtualenv --system-site-packages -p python3 ./venv # venv 为虚拟环境名称,也可改成其他任何你喜欢的名称,如 tfq_ven
.\venv\Scripts\activate
Ubuntu/macOS:
virtualenv --system-site-packages -p python3 ./venv
source ./venv/bin/activate # 使用特定于shell的命令激活:sh, bash, ksh, or zsh
Conda:
conda create -n venv pip python=3.7 # 选择 python 版本
source activate venv
下面的安装就可以在虚拟环境中进行了。全部安装完成之后,使用如下命令退出虚拟环境
Ubuntu/macOS/Windows:
deactivate # 安装完成之前请勿退出
Conda:
source deactivate # 安装完成之前请勿退出
3. 安装 TensorFlow Quantum (正式开始安装)
升级 pip:
pip3 install --upgrade pip
安装依赖 (Cirq 和 TensorFlow) :
pip3 install tensorflow==2.1.0
pip3 install cirq==0.7.0
注意:Conda 安装 TensorFlow 需要提供完整的网址
pip install --ignore-installed --upgrade “完整网址”
完整网址见此链接
https://tensorflow.google.cn/install/pip#heading_5
中下图红框内
安装 TensorFlow Quantum,可以选择最新稳定版或者预览 (不稳定) 版:
pip3 install -U tensorflow-quantum # 稳定版
pip3 install -U tfq-nightly # 预览版
安装完毕。
注意:安装过程中,可能会遇到一些已经安装但版本不符合要求的包导致安装失败的情况。相应的报错大致如下,
Found existing installation: 'package name' Can't uninstall 'package name'.
No files were found to uninstall.
解决办法是在代码中插入 -ignore-installed ,如
pip3 install -ignore-installed tensorflow==2.1.0
遇到连接超时导致安装失败的情况时,就需要使用国内镜像了。实测 pip 清华源可用。
pip3 install -ignore-installed -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==2.1.0
pip3 install -ignore-installed -i https://pypi.tuna.tsinghua.edu.cn/simple cirq==0.7.0
pip3 install -U -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-quantum
安装完毕。
4. 验证是否安装成功
打开终端,如下图
若无报错,则安装成功。
源代码安装
Ubuntu 类系统可以从 github 上克隆 TensorFlow Quantum 库并安装。
1. 配置python3 开发环境
sudo apt update
sudo apt-get install pkg-config zig g++ zlib1g-dev unzip python3
sudo apt install python3 python3-dev python3-venv python3-pip
python3 -m pip install –upgrade pip
注意区分 1 和 l。
2. 创建虚拟环境
python3 -m venv tfq_env
source tfq_env/bin/activate
3. 安装Bazel
为确保与TensorFlow兼容,需要安装 bazel 0.26.1 或更低版本。首先,要删除任何现有版本的Bazel:
sudo apt-get remove bazel
安装 Bazel 0.26.0 版本
wget https://github.com/bazelbuild/bazel/releases/download/0.26.0/bazel_0.26.0-linux-x86_64.deb
sudo dpkg -i bazel_0.26.0-linux-x86_64.deb
4. 通过源创建 TensorFlow
下载 TensorFlow 源代码:
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout v2.1.0
安装TensorFlow依赖:
python3 -m pip install -U pip six numpy wheel setuptools mock 'future>=0.17.1'
python3 -m pip install -U keras_applications --no-deps
python3 -m pip install -U keras_preprocessing --no-deps
配置TensorFlow创建。默认的Python位置和Python库路径应该指向虚拟环境。建议使用默认选项:
./configure
验证Bazel版本是否正确 (它可能会自动更新,前面说过,它的版本应不高于 0.26.1):
bazel version
创建 TensorFlow 包:
bazel build -c opt --cxxopt="-O3" --cxxopt="-march=native" --cxxopt="D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow/tools/pip_package:build_pip_package
此过程可能需要花费一小时(其实根本不止一小时)……完成之后, 安装此包:
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
pip install /tmp/tensorflow_pkg/name_of_generated_wheel.whl
5. 下载 TensorFlow Quantum
下载源代码并安装需求:
cd ..
git clone https://github.com/tensorflow/quantum.git
cd quantum
python3 -m pip install -r requirements.txt
验证Bazel版本
bazel version
6. 创建TensorFlow Quantum
创建 TensorFlow Quantum pip 包并安装:
./configure.sh
bazel build -c opt --cxxopt="-O3" --cxxopt="-march=native" --cxxopt="D_GLIBCXX_USE_CXX11_ABI=0" release:build_pip_package
bazel-bin/release/build_pip_package /tmp/tfquantum/
执行如下操作,找到目录 /tmp/tfquantum/下的文件
cd /tmp/tfquantum/
ls
如图
复制文件名
tensorflow_quantum-0.3.0-cp36-cp36m-linux_x86_64.whl ,输入
cd ~
cd quantum
python3 -m pip install /tmp/tfquantum/tensorflow_quantum-0.3.0-cp36-cp36m-linux_x86_64.whl
(注意:这里 tensorflow_quantum-0.3.0-cp36-cp36m-linux_x86_64.whl 要替换为此目录下出现的文件名)。
至此安装完毕。
03
参考文献与链接
https://arxiv.org/abs/2003.02989
https://github.com/tensorflow/quantum/
https://tensorflow.google.cn/quantum
https://tensorflow.google.cn/install/pip#virtualenv
审核:吴宇森 崔子嵬
编辑:李晓巍