量子机器学习教程(一)

随笔4个月前发布 吕利峰
89 0 0

原文:Quantum Machine Learning

协议:CC BY-NC-SA 4.0

一、量子机器的崛起:基础

小智慧就像玻璃杯里的水:清澈、透明、纯净。大智慧就像大海中的水:黑暗、神秘、不可渗透。

—罗宾德拉纳特·泰戈尔

1983 年 4 月 14 日,洛斯阿拉莫斯实验室庆祝成立四十周年。物理学奖得主理查德·p·费曼(Richard P. Feynman)在题为“遵守量子力学定律的微型计算机”的演讲中指出,基于经典逻辑的计算无法轻松有效地处理描述量子现象的计算。他提出了他对能够以量子方式运行的计算的设想。在做出这些历史性的评论之前,费曼一直是计算机利用量子力学定律的思想倡导者,他说,“底部有足够的空间”和“自然不是经典的”。如果你想对自然进行模拟,你最好把它做成量子力学,”这意味着要正确地模拟量子系统,你必须使用量子计算机。

量子计算是在量子模拟的背景下发展起来的,人们努力建造遵循量子力学定律的计算设备。加州理工学院于 1999 年发布了约翰·普雷斯基尔教授关于量子计算的讲稿供公众查阅[1]。随后,人们对这个令人兴奋的领域越来越感兴趣,这个领域有望成为物理学定律与应用技术实践相结合的奇点。

文献中对量子计算机有各种定义。就本书的一般目的而言,量子计算机是一种计算设备,其计算过程可以用量子理论的定律明确描述。为什么我们期望量子计算机比经典计算机更有优势?这是因为传统计算机固有的构造方式。将传统计算机的能力加倍,需要两倍的电路和相关的门电路来解决问题。相比之下,每次只添加一个量子位,量子计算机的能力就可以提高大约一倍。

这本书是如何组织的

前三章提供了对量子力学科学和经典机器学习技术相结合的见解,这将成为经典信息技术力量与物理力量相遇的奇点。后续章节对各种量子机器学习算法、量子优化和高级 QML 算法的应用(例如,HHL、量子退火、量子相位估计、优化、量子神经网络)进行了系统、结构化的研究。这本书最后讨论了先进的研究领域,如量子行走,哈密顿模拟,和量子升压。

一切都辅以当今行业和研究中常用的开源库的实践练习,如 Rigetti 的森林和 QVM,谷歌的 tensor flow Quantum(2020 年 3 月发布),以及 Xanadu 的 PennyLane,并附有实现说明。在适用的情况下,讨论了访问与特定算法相关的量子计算和机器学习生态系统的各种选项。这本书附有练习中使用的所有代码示例。这些代码将定期更新,以跟上该领域的进展,并可从以下网站下载: https://www.apress.com/de/book/9781484270974

量子计算的本质

现代计算机是建立在处理信息的电子电路基础上的物理设备。算法,即计算机程序或软件,是我们操纵这些电路来执行我们想要的计算并获得其输出的管道。这些计算设备的物理过程涉及电子、原子和分子等微观粒子,可以用电路电特性的宏观经典理论来描述。

如果光子、生物 DNA、电子和原子等非常小规模的系统被直接用于处理相同的信息,这将涉及使用一套特定的数学结构,与我们现有的经典计算案例中的结构不同。这个被称为量子理论的数学框架被用来捕捉这样一个事实,即大自然的行为与我们的直觉告诉我们的非常不同。量子理论自二十世纪初发展以来,一般来说是小尺度物理最全面的描述。

当考虑数字计算和通信的基础时,人们通常会想到二进制数字或位。一个比特在任何时候都可以是 0 或 1,就像我们桌子上的硬币可以是正面也可以是反面一样。量子计算机使用量子比特,或量子比特,它们在任何给定的时间可以是 0 或 1,或者处于两种状态(称为叠加态)。这就像抛硬币一样;当硬币在空中旋转时,它肯定不会显示正面或反面;我们可以认为它是一个叠加(将在本章后面以及第四章中进一步阐述)。

这允许某些操作并行运行,而不是顺序运行,这意味着它们以指数方式减少了某些算法中所需的操作数量。因此,它们并不是普遍更快(即,每个操作本身仍然需要相同的时间来完成),这意味着在量子计算机(QC)上浏览互联网、编写 Word 文档或播放视频不一定更快。这就是为什么量子计算机无法取代日常使用的标准经典计算设备。

量子计算机到底有什么优势?一个例子在分子模拟领域很有用。为了模拟具有 42 个原子的青霉素分子,电子配置的指数大参数空间将需要 10 个 86 个状态,这比宇宙中的原子数目还多;量子系统只用 286 个量子比特就可以做到这一点。在经典系统中,模拟一个咖啡因分子需要 1048比特,这大约是地球上原子的 5 %- 10%。一个量子系统只需要 160 个量子位元就可以执行相同的任务。

作为另一个例子,假设我们想在一台 64 位计算机上做一些“简单”的事情:在一台“快速”的经典计算机上,一直添加数字 1,直到 64 位寄存器溢出。你可以合理地估计,一台现代的“快速”计算机每秒可以执行 20 亿次+1 加法;但是,按照这种速度,为了完成使寄存器溢出的任务,计算机要运算大约 400 年,因为它是一点一点地增加的。然而,一台 64 量子位量子计算机可以同时拥有所有这些数字 0 到 2 64 ?? ?? ??!如图 1-1 所示。每一台经典计算机都可以用量子物理学的原理完全描述,但反过来就不正确了。

量子机器学习教程(一)

图 1-1

经典计算与量子计算

许多公司和联邦机构都采用了质量控制。谷歌、IBM、Xanadu、Rigetti、D-Wave 和许多其他公司都在争夺“量子霸权”。众所周知,空中客车公司举办了一场量子计算竞赛,以解决航空航天业中长期存在的计算挑战。D-Wave 的 2000Q 型量子退火计算机安装在美国宇航局、 1 谷歌和 USRA(大学太空研究协会)。

QC 时代正在到来,也许比许多人想象的要快得多。随着这个时代的到来,随着世界各国政府继续投资于这项诱人的未来技术,更广泛的工业机构也意识到了一个日益严峻的挑战:合格和训练有素的劳动力。质量控制的基础是跨职能的,需要物理、数学和编码。这一领域的发展需要在人员发展方面的投资,需要大学和学术机构承诺为感兴趣的学生开设越来越多的相关课程。

这本书从现有的机器学习算法和研究人员目前正在研究的算法中汲取灵感、激情、算法和框架。附录涵盖了一些数学背景作为参考,如张量积和傅立叶变换。

量子位

量子位或量子位是一个两级量子力学系统,由量子态表示。任何可以在两种离散状态下测量的量子粒子都可以被用作量子位;例如,俘获的离子,如单个钙离子(使用电磁场限制在光腔中)、极化的光子和电子自旋。

量子位类似于经典计算系统中的经典位。两者之间的基本区别是,在经典系统中,一个比特可以取值 0 或 1,而量子比特可以取值∣0⟩和∣1⟩之间的一整套值,代表状态的叠加,如图 1-4 所示。在量子力学中,通常使用竖线和尖括号将抽象复向量空间的元素 ψ 表示为 ketψ ⟩,并将它们称为 kets 而不是向量。

量子位的状态

经典位的状态是数字(00 或 11),量子位的状态是二维向量空间中的向量。这个向量空间也被称为状态空间。量子系统的状态由一个矢量∣ ψ ( t )⟩给出,它包含了系统在任何给定时间的所有可能信息。向量∣ ψ ( t )⟩是希尔伯特空间量子机器学习教程(一))的成员(稍后描述),并且可以是时间变量(即,可以随时间改变)。在量子力学中,通常将状态规范化(即,找到一种方法来设置内积⟨ * ψ * | * ψ * ⟩ = 1)。图 1-2 显示了一个量子位的量子态的二维表示。

图 1-2 中的两个上图显示了如果基础状态是∣0⟩和∣1⟩.时向量的位置请注意,向量的顶部是常规 x 轴或∣0⟩轴上的位置,底部是常规 y 轴或∣1⟩.上的位置最上面的两个图显示了州∣0⟩以及∣0⟩和∣1⟩.的州向量量子位读取∣0⟩的输出的概率为 1(或 100%),反之亦然

量子机器学习教程(一)

图 1-2

用于量子计算的二维量子态

如果我们假设一个量子比特态是由∣ ψ ⟩给出的,那么 αβ平方分别是∣ ψ ⟩分别在∣0⟩和∣1⟩被发现的个体概率,并且 αβ 的平方之和为 1,其中 αβ 被称为换句话说,有 100%的可能性出现这样的结果,∣是∣0⟩或者是∣1⟩,并且这种结果的概率总和是 1。图 1-2 的底部图示出了一个例子,∣0⟩操纵量子态 0.8,∣1⟩操纵量子态 0.6,分别转化为 36%和 64%的概率。

布洛赫球

布洛赫球是量子位状态空间的三维几何表示,作为虚拟单位球表面上的点。这是表示量子位的两种方式之一。另一种方式是用狄拉克符号表示量子位。简而言之,布洛赫表示采用二维(2-D)图形表示,并以三维表示来描述它,量子位的状态由球体上的一个点来表示,如图 1-3 所示。

量子机器学习教程(一)

图 1-3

布洛赫球

图 1-3 中布洛赫 2 球面的角度 ϕ 称为方位角角,从正 x 轴到状态∣ ψ ⟩在xyy平面上的投影测量。角度 θ 被称为极角,是从正 z 轴到代表∣ ψ ⟩.的布洛赫向量的距离

布洛赫球允许概率中出现负数和复数。在量子信息处理中通常使用的单个量子位的操作可以在布洛赫球描述中完全描述。布洛赫球对于解释量子门特别有用。我们前面的例子和相关讨论中使用的概率( αβ )可以换成表示状态所在球面上的振幅或纬度。量子计算中的态可以表示为一个向量,它从原点开始,到单位布洛赫球的表面结束。通过对状态向量∣ ψ ⟩应用酉运算(稍后描述),它可以围绕图 1-3 中的球面旋转和移动。按照惯例,球体的两极分别取为球体顶部 z + (或北极点)的∣0⟩和球体底部z(或南极点)的∣1⟩。在经典极限中,一个量子位元可以在布洛赫球上的任何地方拥有量子状态,但它会缩减为经典位元,只能在两极找到。

量子计算中使用的线性代数符号可能需要快速介绍。在量子力学中,向量用保罗·狄拉克发明的狄拉克符号来表示。在狄拉克符号中,标识矢量的符号写在一个 ket 内,例如,矢量量子机器学习教程(一))或T6a在量子力学中写成∣ * a * ⟩.向量 a 的对偶向量用 bra 表示,写成⟨ * a * |。他们的内积写成 bra-kets 。换句话说,两个向量∣ψ1⟩和∣ψ2⟩之间的内积由⟨ψ1|ψ2⟩给出,结果类似于向量代数的点积。另一方面,两个向量| * ψ * 1 ⟩和| * ψ * 2 ⟩的外积在 Dirac bra-ket 符号中给出|ψ1⟩⟨ψ2|并且它产生一个维数为 m × n 的矩阵两个向量|ψ1⟩和|ψ2⟩称为正交如果⟨ψ1|ψ2⟩= 0。

可观测量和算子

在量子计算中,对于任何一个动态变化的、物理上可以作为量来测量的变量 x ,都有一个对应的算符量子机器学习教程(一))。操作员量子机器学习教程(一))本质上是隐士。它由向量空间中的正交特征向量基组成。特征向量的定义包含在附录中。

希尔伯特空间

从数学的角度来看,向量∣ ψ ⟩是定义了内积的完备向量,是一类称为希尔伯特空间的向量空间的元素,用量子机器学习教程(一))表示。本书中提到的向量空间包括实数和复数空间,并且是有限维的,这简化了处理 QC 所需的数学。由于量子机器学习教程(一))是有限维的,可以选择一个基将这个基中的向量表示为有限列向量,用有限矩阵表示算子。对于某个正整数 n ,量子计算感兴趣的希尔伯特空间通常具有 2 * n 维。一个量子位状态的数学表示存在于一个 2 维的希尔伯特空间中。原则上量子系统的状态向量可以是任意维的希尔伯特空间的元素。在本书中,让我们考虑有限维*希尔伯特空间。

当在量子系统中执行计算时,固定一个基并将其称为计算基通常是方便的。在此基础上,我们使用长度为 n 的二进制字符串将狄拉克符号中的 2n基向量标记如下。

量子机器学习教程(一))

(1.1)

在等式 1.1 中, n 是指二进制字符串的长度。

希尔伯特空间量子机器学习教程(一))由一组向量 ψϕφ 组成…以及 abc 、。。,它展示并遵循四个属性。

  1. 量子机器学习教程(一)) 是线性空间。线性向量空间由两组元素和两个代数规则组成。

    1. 一组向量 ψϕφ …以及 abc 、。。

    2. 向量加法规则和标量乘法规则。

  2. 量子机器学习教程(一))中的标量积是严格正的

*** 量子机器学习教程(一)) 是可分的

 *   ![$$ mathbf{mathcal{H}} $$](https://gitee.com/OpenDocCN/vkdoc-ml-zh/raw/master/docs/quant-ml/img/502577_1_En_1_Chapter_TeX_IEq11.png) **完成**

 **

  • 1
  • 2
  • 3

**如果你对希尔伯特空间的进一步讨论感兴趣,试试 R. Shankar (Plenum,2010) [2]的量子力学原理

量子计算和量子机器学习最重要的两个基础是叠加纠缠。让我们快速浏览一下这两者的基本原理,然后在我们浏览书中各种例子时进一步展开,在这些例子中,每个属性都被利用了。

一般来说,如果一个算子满足下列关系,就说它是线性的。

量子机器学习教程(一))

(1.2)

衡量

与经典物理学相比,量子力学中的测量具有挑战性。在经典世界中,测量是简单的,并且被假定为不影响其参数或特征被测量的项目;例如,我们可以自由地测量一个球的重量,然后测量这个球的周长,并确信另一次测量这个球的重量会得到同样的结果。

在量子世界中,任何给定量子态的测量都会导致相应波函数的坍缩。根据量子力学的假设,一个物理变量必须有真实的期望值特征值。这意味着代表物理变量的算子具有特殊的性质。通过计算物理变量期望值的复共轭,可以看出物理算符是它们自己的厄米共轭ℍ= ℍ.自身为埃尔米特共轭的算子称为埃尔米特算子

根据量子力学的假设,作为动态变量量子机器学习教程(一))的测量的可能结果的结果是应用于状态 ψ 的线性厄米算符 A 的本征值A??n。在这种情况下,厄米算符是可观测的,例如粒子的可观测位置向量量子机器学习教程(一))。获得∣0⟩或∣1⟩的概率与量子位在测量基础上的投影有关。厄米共轭可以用作数学工具来计算一个状态到另一个状态的投影。

埃尔米特复数的一个性质是:一个数的共轭或共轭υ??, υ 是这个数的复共轭υ⋆:υ??=υ⋆。厄米算符的另一个性质是它们的特征值是实数,这有助于测量某些物理性质。测量的结果保证是一个特征值,比如说,被观察系统的 λ 。测量结果由投影操作员 P 描述。 P 在性质上是埃尔米特,因此根据埃尔米特算子的定义P=P+,等于其自身的平方:P2=P

按照量子力学的假设,量子系统被测量后,描述该状态的波函数会坍缩。因此,尽管在之前的系统状态*,测量可能是基础的叠加。但是,测量完成后,系统坍缩到对应于测量结果的基态。数学上,如果测量前的原始状态是∣ ψ ⟩,则测量后系统的状态∣ψ′⟩由下式给出*

量子机器学习教程(一))

(1.3)

投影测量也可以用一个可观测值来描述,它是一个埃尔米特算子 A 作用于系统的状态空间。由于 A 是厄米的,它的谱分解由下式给出

量子机器学习教程(一))

(1.4)

其中AI为 A 的特征值 P iA 的特征空间上的正交投影。在这种情况下,执行投影测量与测量关于分解的可观测值I=∑PI相同,其中特征值 a i 对应于第 i 个测量结果。

谱分解定理(SDT)告诉我们,对于作用在有限维希尔伯特空间量子机器学习教程(一))上的每一个正规算子 T ,都有一个由 T 的特征向量∣ * T * * j * ⟩构成的量子机器学习教程(一))的正交基。换句话说,属于某个向量空间的算子 T 相对于该向量空间的某个基具有对角矩阵表示。这个结果被称为谱分解定理。假设算子 A 满足某种基的谱分解定理。根据 SDT,我们总是可以对角化有限维中的正规算子。从线性代数中我们知道,对角化可以通过将基变换为由特征向量组成的基来实现。基的改变是通过将运算符 T 与酉运算符共轭来完成的。假设一个算子 T 带特征值 T * j 满足谱分解定理对于某些基∣v*j⟩.然后,SDT 的运算符 T 由下式给出

量子机器学习教程(一))

叠加

叠加原理是量子物理学的基础。该原理指出,量子系统的状态可以叠加,以形成几个状态的组合,例如经典物理中的波,以形成相干量子状态,该状态是与其组成状态分离且不同的状态。因此,尽管一个量子位可以存在于∣0⟩状态或∣1⟩状态,它也可以存在于∣0⟩状态和∣1⟩.状态的线性组合状态因此,如果一个量子位状态由∣ ψ ⟩给出,那么这个量子位的叠加态可以写成

量子机器学习教程(一))

(1.5)

其中 αβ 是复数,称为量子位状态的振幅

设想叠加原理的最简单的方法是想象一束光经过一个偏振滤光器,这个滤光器会使光垂直偏振,比如说,在∣0⟩.状态下现在考虑第二偏振器,其轴水平于从第一偏振器出射的垂直偏振光束(即,强制水平偏振);在这种情况下,不再有任何光从第二偏振器射出。这是因为水平偏振轴与垂直偏振轴成 90 度,光束通过第一偏振滤光器已经具有垂直偏振轴,这加强了水平状态。在我们的例子中,根据等式 1.5 ,水平状态是∣1⟩.状态状态∣1⟩与垂直偏振光正交,并且两个偏振器抵消出射光的剩余部分,从而完全不给出任何东西。现在,如果第二个偏振镜的轴倾斜到另一个角度,比如 30 度 ,那么我们将有一些光从整个装置中射出。

在另一个例子中,我们考虑一个原子量子位,它是基于一个呈现上下自旋并受磁场影响的电子。电子不是传统意义上的自旋自旋这个词描述了它的角动量,可以量子化表示向上或向下(1 或 0)。在我们测量量子位以查看它是 0 还是 1 之前,它处于叠加状态,这意味着它可以是 0 或 1 的一部分,或者换句话说,像 0-37%,1-63%这样的加权组合(参数 αβ )。物理学家还没有开发出自旋背后的物理现实的可视化。但是他们可以用数学方法描述自旋,并在实验室实验中预测其行为。

在任何给定的时刻,量子位可能会以某种比例的自旋偏向 1 或 0。只有当我们测量量子位时,它才会坍缩成一个确定的状态,∣0⟩或∣1⟩,如图 1-4 所示。

量子机器学习教程(一)

图 1-4

量子叠加和测量效应——当测量到一个离散的状态时,叠加就崩溃了

∣0⟩和∣1⟩可以用列向量的形式表示如下。

量子机器学习教程(一))

量子机器学习教程(一))

因此,通过取 0 和 1 路径的状态向量的线性组合来描述叠加,因此一般路径状态由类似于等式 1.5 的向量来描述。

量子机器学习教程(一))

(1.6)

如果量子位(例子中的光子或电子)被物理测量以查看它当前在哪个路径中,我们以概率| α | 2 在路径 0 中找到它,并且以概率| β | 2 在路径 1 中找到它。最后,因为我们应该在中找到光子,正好一个路径,从概率的角度来看,我们必须有,

量子机器学习教程(一))

(1.7)

等式 1.7 也被称为玻恩法则【3】的数学表示。

如果你有兴趣了解更多关于叠加态的知识,可以参考 Nielsen & Chuang [3]的《量子计算与量子信息》一书。

纠缠

纠缠是多个量子系统之间关联的一个特例。这种性质在古典世界中是没有类比的。当两个(或更多)粒子,例如两个光子或两个电子,处于纠缠态,并且对它们中的一个进行测量时,那么该测量可以立即影响对其他粒子的相同测量的行为,与它们之间的物理距离无关。这种现象的非直觉性质是如此奇怪,以至于阿尔伯特·爱因斯坦称之为“幽灵般的超距作用”,因为还没有关于它为什么会发生的已知解释。当我们测量一个量子位元时,测量的行为会瓦解它的状态,同时瓦解其他纠缠量子位元的状态。

量子机器学习教程(一)

图 1-5

测量单个量子位会导致它的叠加态崩溃一个确定的状态,从而导致所有其他纠缠的量子位崩溃

如图 1-5 所示,这种现象使我们能够推断出其他纠缠量子位的状态,无论它们之间的物理距离有多远。纠缠的量子比特成为一个具有单一量子态的系统。

量子算符和门

像经典的可逆门一样,量子门在逻辑上是可逆的,但是它们在普适性上有显著的不同。最小的通用经典可逆门必须使用三位,而最小的通用量子门只需要使用两位。一些通用的经典逻辑门,如 Toffoli 门,提供了可逆性,可以直接映射到量子逻辑门。量子逻辑门由酉矩阵表示。任何作用于二维量子系统或一个量子比特的幺正算符被称为单量子比特量子门。在量子电路模型中,逻辑量子位沿着线传输,量子门作用于这些量子位。一个作用于 n 量子位的量子门通过 n 线将输入量子位传送给它,其他 n 线将输出量子位带离量子门。因此,量子门可以由具有正交行的 2n×2×2n矩阵来表示。单量子位门如哈达玛门用 2 × 2 矩阵表示。

在数学上,一个运算符量子机器学习教程(一))被描述为一个规则,当它被应用到由一个 ket 描述的一个状态时,比如∣ * ψ * ⟩,它就被转换成在同一空间中的另一个 ket,比如∣ψ’⟩;当同一个操作符应用于一个胸罩时,它输出另一个胸罩。

量子机器学习教程(一))和量子机器学习教程(一))

这本书突出了一些基本的量子门,相关的矩阵,和算子,如酉,泡利,交换,等等。强烈建议您学习更多关于运算符和门的知识[3]。

标识运算符

恒等运算符,通常用 I 表示,是一个对角元素全为 1,其余元素全为 0 的方阵。因此,单位矩阵在数学上可以定义为

量子机器学习教程(一))

(and)   and

Inm= 0,当nm1.9

下面是一个 2 × 2 单位矩阵的例子。

量子机器学习教程(一))

酉算子

如果一个算子与它自己的伴随算子相乘时产生一个单位矩阵作为输出,则该算子被认为是酉的。酉算子有一个与其共轭算子相等的逆算子。

算子 U 的逆用U1 表示。这满足以下关系。

量子机器学习教程(一))

(1.10)

其中 I 是恒等运算符。

为了使 U 成为一体,

量子机器学习教程(一))

(1.11)

量子机器学习教程(一))

(1.12)

酉变换将一种基中的算子矩阵变换为另一种基中的同一算子的表示。例如,对于二维矩阵,从∣ r i ⟩到∣eI⟩的基的变化由下式给出

量子机器学习教程(一))

值得注意的是,量子进化的酉性意味着量子操作*是可逆的,*除了那些用于测量的算符。这种可逆性是把注意力限制在封闭系统上的结果。任何不可逆的经典计算都可以被可逆的经典计算有效地模拟。量子计算也是如此。

矩阵和门的泡利群

泡利矩阵组是一组单量子位量子算符,它产生泡利(应用于量子电路),并跨越所有单量子位算符形成的向量空间。泡利门在量子计算中的重要性是巨大的,因为任何单量子位酉算符都可以表示为泡利门的线性组合。

认为有四种不同的泡利算符,包括恒等算符(但有些作者省略了恒等算符)。在各种文献中有许多不同的符号用来描述泡利算符。在本书中,出于上下文的考虑, IXYZ 被一致使用。然而,出于完整性的原因,提到了所有的符号,因为泡利算符是在计算的基础上定义的。

量子机器学习教程(一)) 量子机器学习教程(一))

量子机器学习教程(一)) 量子机器学习教程(一))

有趣的是,NOT 门通常等同于 Pauli X 门,因为两者具有相同的矩阵表示和相同的基矢效应(即,它们反转基矢)。例如,零状态的列符号是

量子机器学习教程(一))

如果你将音符或 X 门应用于它,你有

量子机器学习教程(一))

(1.14)

类似地,x 运算符应用于∣1⟩时,会将其反转为∣0⟩,产生与非门相同的效果(因此,x 门也被称为位翻转门)。我们鼓励您验证这一点。

Z 算子也被称为相位翻转算子,因为它的作用是将状态向量围绕 Z 轴旋转 π 弧度或 180 度。泡利门 X、Y 和 Z 分别对应于绕布洛赫球的 X、Y 和 Z 轴的旋转。

相位门

相移运算器或旋转门使状态∣0⟩保持不变,但将∣1⟩状态旋转一个定义的角度或相位 θ

量子机器学习教程(一))

(1.15)

利用欧拉恒等式在 1.15 中,如果我们设 θ = π ,我们恢复泡利 Z 门是因为e= cos(π)+Isin(π)= 1。

如果我们在方程 1.15 中代入 θ = π /2,则得到e=I,进而给出另一个叫做 S 的算子。

量子机器学习教程(一))

(1.16)

其中 S 操作器将原始状态绕 z 轴旋转 90 量子机器学习教程(一))弧度。

t 操作符将原始状态绕 z 轴旋转 45 π /4 弧度。T 门也被称为 π /8 门,因为 e /8 可以被分解,留下绝对相位为| π /8|的对角线分量。

量子机器学习教程(一))

(1.17)

关于旋转类型和参数化门的更详细的讨论可以在 Nielsen 和 Chuang 的教科书中找到[3]。

笛卡尔旋转门

之前,您看到了几个相位门的属性。以下是 QC 和 QML 中常用的一些附加旋转门表示。

量子机器学习教程(一))

(1.18)

量子机器学习教程(一))

(1.19)

量子机器学习教程(一))

(1.20)

哈达马德门

哈达玛门创造叠加态。哈达玛门具有以下矩阵表示。

量子机器学习教程(一))

(1.21)

它将计算基础状态映射如下。

量子机器学习教程(一))

(1.22)

同理,量子机器学习教程(一))。该操作将量子位状态旋转 π 弧度或 180 度,围绕xz 平面中的轴对角线。

哈达玛门的另一个性质是它是自逆的(即H=H—1);因此,

量子机器学习教程(一))

量子机器学习教程(一))

(1.23)

该操作相当于应用一个 x 门,然后绕 Y 轴旋转量子机器学习教程(一))。

CNOT 门

CNOT 门,也被称为受控非门,是一个两量子位门。量子计算中的控制门涉及使用控制或 C 量子位作为第一个输入量子位,第二个量子位作为目标量子位。CNOT 门的第一个输入充当控制量子位:如果控制量子位处于∣0⟩状态,则该门不对目标量子位做任何事情;但是如果控制量子位的状态是∣1⟩,那么 gate 对目标量子位应用 NOT 或 X 运算符(等式 1.14 )。换句话说,在量子计算领域,CNOT 门迫使两个量子位纠缠在一起。

CNOT 门可能的输入状态如下:∣00⟩、∣01⟩、∣10⟩、∣11⟩.CNOT 门对这些状态的作用如下。

量子机器学习教程(一))

量子机器学习教程(一))

量子机器学习教程(一))

量子机器学习教程(一))

CNOT 门的电路表示如下

量子机器学习教程(一)

受控 CNOT 门的矩阵表示由下式给出

量子机器学习教程(一))

(1.24)

CNOT 的外部产品表示是

量子机器学习教程(一))

(1.25)

CNOT 门对于制备纠缠态是有用的。它是自伴的;第二次使用它会逆转它的效果。

交换门

交换门也是两量子位门。一个交换操作符反转输入量子比特状态中比特的状态。例如,它可以接收∣10⟩,并将其反转为∣01⟩. SWAP 运算符由以下矩阵表示。

量子机器学习教程(一))

(1.26)

密度算子

在本书遇到的其他算子中,最后一个重要的算子是密度算子。在一个封闭的纯量子系统中,很容易计算出找到某个状态∣ x ⟩.的概率是其振幅| α | 2 的平方(参考方程 1.7 )。一个单态∣ ψ ⟩的密度算符由其外积给出。

量子机器学习教程(一))

(1.27)

一个系统唯一的密度算符的平方的迹为 1:Tr(ρ2)= 1

如果一个封闭的纯系统的密度依赖于时间,那么密度算符的时间演化就幺正算符而言由下式给出

量子机器学习教程(一))

(1.28)

但是,在混合量子系统存在统计分布的环境下(例如系统-1 的 n 1 和系统-2 的 n 2 ),密度算符的一般描述可以解释这样一个混合物的性质。这是通过首先为每个状态制定密度算符,对这些状态应用适当的权重,然后总结所有的可能性来完成的。

于是,让∣ψI⟩代表混合量子系统中系综的 n 个可能态,其中 i ∈ {1… n },而 p i 是某成员处于相应状态的概率∣ψI⟩.因此,在这种情况下,整个混合量子系统的密度算符由下式给出

量子机器学习教程(一))

(1.29)

密度算子是厄米算子(即ρ=ρ;密度算子的迹是 1),并且密度算子对于任何状态向量总是正的。

哈密顿函数

系统的哈密顿量是量子力学、量子计算和量子机器学习中最重要的概念之一。量子优化、机器学习、变分算法中一些最重要的算法都依赖于哈密顿量。一个哈密顿量就是一个系统的总能量。它提供了经典力学和量子力学之间的物理联系。每个系统都有自己的哈密顿函数。决定系统如何随时间演变的是这个函数的形式,而不是这个值。哈密顿算符是量子力学中应用最广泛的算符之一。因此,理解构造哈密顿函数的过程在 QML 是非常重要的,正如你在后面的章节中看到的。

系统的时间演化

物理隔离或“封闭”量子系统的时间演化由薛定谔方程给出如下。

量子机器学习教程(一))

(1.30)

其中 H 是系统的哈密顿量。由于哈密顿量对应系统的总能量,量子系统可能的能量已经由算符 H 的本征值给出。时间 t 之后的系统状态由下式给出

量子机器学习教程(一))

(1.31)

而系统量子态的时间演化由么正算符描述。

量子机器学习教程(一))

(1.32)

不克隆定理

1982 年,Wootters 和 Zurek [4]推导出了现在所知的不可克隆定理,这是量子系统最基本的属性之一。这表明不可能创造一个属于特定希尔伯特空间的任意量子系统的精确完美的副本。与经典计算机相比,这增加了对量子计算机编程的挑战。因此,根据不可克隆定理,没有有效的量子操作可以将任意状态∣ ψ ⟩映射到∣ ψ ⟩ ∣ ψ ⟩.

忠诚

保真度是量子系统中一个状态与另一个状态“有多接近”的量度。保真度被描述为两个量子分布之间的统计混合或重叠量。

与经典系统不同,一般来说,要区分两个量子位元序列是不可能的,除非它们彼此正交。因此,如果两个状态不正交,则对这两个状态进行投影测量是没有意义的。该属性将度量限制为作为正运算符值度量或 POVM 进行。保真度是两种不同状态的可区分性的度量,给出了区分这两种状态的最佳度量。

保真度衡量两种状态之间的重叠。因此,如果ρ1=∣ψ⟩⟨ψρ2=∣ϕ⟩⟨ϕ|是两种不同分布的密度算子,则系统的保真度由下式给出

量子机器学习教程(一))

(1.33)

等式 1.33 暗示|⟨ϕ|ψ⟩|2是系统处于状态∣ ϕ ⟩的概率,已知它已经处于状态∣ ψ ⟩.

以下是保真的基本属性。

  1. 两个纯态的保真度在{0,1}范围内的自变量中是对称的(即量子机器学习教程(一)))。

  2. Fidelity is invariant when a unitary operator acts on it.

    量子机器学习教程(一))

    (1.34)

  3. 保真度等于 1 当且仅当ρ1=ρ2

  4. Tensor product of the density operators for fidelity is given by

    量子机器学习教程(一))

    (1.35)

复杂性

问题的复杂度是指对问题类别的研究,比如 NP-hard 或者 PSPACE。计算练习涉及从算法和计算时间的角度使用资源来解决特定的问题。为了估计总的计算成本等等,您需要分析运行算法(在计算系统上)所需的资源,这是解决问题所需要的。

问题可以是任何计算问题;例如,使用一系列图像对猫和狗进行分类。为了解释这两种动物之间的区别,我们可以将猫和狗的大小和形状定义为约束或标签。然后我们选择一种算法,它通常独立于硬件,来为我们完成这项工作。当我们运行该算法时,它需要两个主要的计算资源:运行时间和内存。

计算机运行一个算法的时间就是该算法在特定计算平台上的运行时间。根据经典计算的基本原理,通过验证数据库中的项目直到找到一个期望的项目,可以获得数据库搜索目标的解决方案。这个练习需要时间复杂度为 O ( n )的最坏情况场景。

量子复杂性理论[5]试图回答量子计算机相对于经典计算机在运行时的加速和效率问题。在本书中,复杂度一词指的是量子系统的渐近运行时复杂度。第二章第二章和第三章第五章详细阐述了复杂性。

格罗弗算法

最初,Grover 的搜索算法是为了在没有重复元素的非结构化环境中,在量子数据库中对特定元素进行无序搜索而创建的。在以随机顺序存储元素的数据库中找到特定元素的唯一方法是进行彻底搜索。Grover 的算法可以推广到搜索具有重复元素的数据库。Grover 的算法对于乘法常数也是最优的(即不可能提高其计算复杂度)。如果数据库由 N 元素{x1,x2 的数据库条目组成…、xN},那么 Grover 的算法利用量子性质查询数据库量子机器学习教程(一))次使用 O (log N )存储空间找到一个标记元素 x 0 的概率很大。格罗弗算法可以用量子机器学习教程(一)) 通用门实现。从统计上来说,Grover 的算法大约需要一个量子机器学习教程(一))的顺序来尝试在量子数据库中找到一个标记的对象。例如,如果位串是 4 位,那么在经典上下文中,搜索算法将需要 241 = 15 次尝试来正确标记条目;相比之下,格罗弗的算法需要量子机器学习教程(一))次尝试。随着位串变得更大,Grover 算法提供的改进变得更加显著。

格罗弗的算法基于振幅放大,这是本书后面章节描述的一种技术。

为了解释格罗弗算法的机制,让我们考虑一个函数 f ( x )在空间中具有 n 个输入,其中N= 2= Nx = ∈ {0,1} n 。设函数 f ( x )使得 f ( x ) = 1,当且仅当x=x??0对于特定的x0。因此,

量子机器学习教程(一))

(1.36)

挑战在于用尽可能少的评估数找到 x 0 。函数 f ( x )称为甲骨文 x 0 称为标记元素

在实践中,神谕可能被视为一个黑匣子,其内部机制的细节可能被忽略。oracle 被建模为一个门,它接受一个 n 位输入并产生一个 1 位输出。神谕是不是一个有效的量子门,因为它不是单一的和不可逆的。

首先,∣0⟩1⨂∣0⟩2⨂∣0⟩3n 输入状态…⨂∣0⟩n≡∣0⟩n全部初始化为∣0⟩.

作为第二步,哈达玛门被应用于这些∣0⟩输入状态中的每一个,从而总共有 H n 门将每个∣0⟩ n 输入转换成叠加状态。如果∣ ψ ⟩是所有可能的∣ x ⟩的叠加态,那么

量子机器学习教程(一))

(1.37)

Grover 算法的应用利用 Grover 算子,也称为 Grover 扩散算子 G

Grover 算子由下式给出

量子机器学习教程(一))

(1.38)

格罗弗算法的实现涉及两个哈达玛门,每个门需要 n 次运算。酉门控制条件相移,尽管整体复杂度取决于应用,但是时间复杂度是有效的,因为每次迭代只需要一次调用。发现 Grover 算法高效到需要计算 f ( x )小于 N 次才能找到 x 0 的地步。它按照量子机器学习教程(一))的顺序求值,这是渐近最优的。与经典情境相比,这种量子情境在时间复杂度上有二次增益。

Grover 算法一般实现如下。

| **算法:格罗弗算法** | | **输入**:*N*= 2
??【N和*f*;初始状态∣0⟩
⨂*n* | | **输出** : *x*
0 概率![

≥(1−
aisebox1ex$1$/
aisebox−1ex$N$)” role=”presentation”>≥(1−
aisebox1ex$1$/
aisebox−1ex$N$)≥(1−
aisebox1ex$1$/
aisebox−1ex$N$)

ge left(1-
aisebox{1ex}{$1$}!left/ !
aisebox{-1ex}{$N$}
ight.
ight) ](https://gitee.com/OpenDocCN/vkdoc-ml-zh/raw/master/docs/quant-ml/img/502577_1_En_1_Chapter_TeX_IEq32.png) | | 第一步。应用 *n* + 1 个量子比特的二能级量子计算机 | | 第二步。应用哈达玛门初始化叠加:*h*⨂*n*∣0⟩
⨂*n*。 | | 第三步。`for` ![

O(n)=π4(n)” role=”presentation”>O(n)−−−√=π4(n)−−−√O(n)=π4(n)

Osqrt{(n)}=frac{pi }{4}sqrt{(n)} ](https://gitee.com/OpenDocCN/vkdoc-ml-zh/raw/master/docs/quant-ml/img/502577_1_En_1_Chapter_TeX_IEq33.png)次`do`应用 Grover 运算符 *G* | | 第四步。在计算的基础上测量系统。 |

图 1-6 显示了一个用五量子位电路实现 Grover 算法的例子。显示为绿色的 On 框表示如果测量,量子位的概率处于 On 状态。在这种情况下,它们开启的概率是 100%,除了中间的量子位,这是炫耀。如前所述,预言是按照渐近最优的量子机器学习教程(一))顺序的评估。

量子机器学习教程(一)

图 1-6

代表五个量子位的 Grover 算法的电路。第一个登记处最初设在∣0⟩.方框中的 H 代表实现超级运算的 Hadamard 门。在这种情况下,预期迭代的顺序为量子机器学习教程(一)),在模拟图像中表示为“Oracle”。[6]

肖尔算法

Shor 的算法是展示量子计算能力和重要性的基础。它可以用来分解质数,这意味着它可以在实际的量子计算机上破解加密代码(在本书写作时,一台足够大的量子计算机尚未建成)。

Shor 的有效因子分解算法由量子部分和经典部分组成。前一个是对所谓的寻序问题的基于量子的解决方案。因为这种算法隐藏了开创性的思想,它允许在量子机器学习教程(一))步骤或门中分解大量的 N ,而不是最著名的经典方法,该方法要求渐近地,其中常数通常取为 0.9。

量子机器学习教程(一)

is a constant often taken as 0.9.

量子机器学习教程(一)

where

这意味着在经典(非量子)计算机上分解素数的最著名算法需要的时间量基本上与 N 的大小成指数关系。这就是 Shor 算法被认为重要的原因;运行它的量子计算机只需要多项式(而不是指数)时间。由于流行的 RSA 密码系统的安全性是基于素数分解的困难性,Shor 算法吸引了隐私和数据安全社区的大量兴趣。这个算法得到了很多人的关注!

寻序部分是肖尔算法的 only 量子部分;剩下的涉及经典计算。Shor 算法的一个简单表述就是,它利用寻序来寻找某个奇数 N 的因子。

肖尔的算法通过将问题简化为一个周期的寻找练习来分解质数。如果 xN 都是互为质数的正整数,也就是说,它们没有任何公因数并且<N,那么 x就是下面给出的关系中最小的正整数 r

xr= 1 mod1.39

肖尔算法的目的是当 N 为要因式分解的数时,求 rx*r的周期。

Shor 算法的基础起源于数论,如下所述。

f(r)=x【r【mod】1.40

其中 f ( r )是周期函数, xN 互质(即它们没有公因数,而 N 是要因式分解的数)。

海森堡的测不准原理

理解量子计算和量子机器学习挑战的深度的关键在于实现海森堡的不确定性原理。

沃纳·海森堡(1901-1976)指出了经典世界和量子世界的主要区别。根据经典的自然定律,如果作用在物体上的初始位置、速度和所有其他力都是已知的,那么借助牛顿定律,就可以以绝对的准确度精确地预测这个物理系统的未来路径(位置和速度)。既然这个预测是准确的,那么经典物理就是确定性

海森堡的测不准原理,在其原始形式[7]中陈述:如果用不确定度δp??]??]xT7]测量一个粒子的动量分量x,那么它的x位置,同时不能比δx=/(2δp??]xT17)更精确地测量;普朗克常数在哪里?因此,量子物理系统的测量结果有一个自然的精度极限。三维中的不确定关系可以用数学方法表示如下。

⑼??]xpx≥2;⑼??〖和〗??〗p〖??〖??〗??〗和〖??〖??〗2;δ??【z】【p】【z】≥2 1.41

根据海森堡的原理,尽管有可能同时精确测量一个粒子的位置或动量,但是当同时测量这两个不可能以任意精度测量这两个可观测量。对一个量子系统的位置的测量不能在不对系统产生大动量的情况下完成;量子粒子的位置测量不能被动完成。测量行为扰乱了粒子位置的固有性质,并给了它动量。测不准原理是物质本身固有的性质,因为它嵌入在物质的波动性质中。**

认识到测不准原理适用于物理观察和相关测量以及经典和量子系统*之间的任何相互作用,而不考虑任何特定的观察者,这一点非常重要。这一原理深刻地影响了量子光学、光子学、各种形式的量子计算机的硬件设计工作,以及我们从中受益的无数其他设备和过程。

从数据中学习:人工智能、人工智能和深度学习

从数据中学习用于分析和确定性结果不可用的情况。这一基本事实导致了数据科学与量子力学世界的联姻,在量子力学世界中,决定论基本上是不存在的。

在我们的日常生活中,决定论失效的情况围绕着我们。例如,如果我们给一个五岁的孩子看一张动物园的照片,并问里面是否有一头大象,我们很可能会得到正确的答案。然而,如果我们问一个二十岁的人,大象的定义是什么,我们可能会得到一个不确定的答案。通过数学定义向我们解释了对大象的描述;我们通过观察大象或它们的照片来了解什么是大象。换句话说,我们从数据中学习。

人工智能这个术语是在 1956 年创造的。从那时起,人工智能(AI)就占据了人们的想象力,尤其是科幻迷。A. C. Clarke 在 2001:太空漫游中的 HAL the computer 和星球大战中的 C-3PO 就是两个例子。机器学习(ML)起源于人工智能的早期思想家,他们多年来试图简化算法方法来解决现实生活中的问题,包括决策树学习、归纳逻辑编程、聚类、强化学习和贝叶斯网络等。

术语 AIML深度学习经常互换使用。然而,当大多数人谈论 AI 时,他们指的是 ML。从根本上说,ML 使用算法从数据中学习,然后对数据集所代表的系统或环境进行确定性的预测或预测。因此,通过使用大量数据和算法来“训练”机器,使其能够学习如何执行特定任务,而不是用特定的指令集重复手动编写软件例程来完成特定任务。图 1-7 展示了深度学习(DL)、AI、ML 之间的区别。

人工智能是一门类似于物理或化学的科学。这门学科利用数学和统计理论,并着眼于创造智能程序或机器的过程,这些程序或机器可以主动解决自己的问题,这一直被认为是人类的特权。人工智能通常被分为弱人工智能、强人工智能和超智能(强)人工智能。

机器学习是人工智能(AI)的一个子集,它使用数学和统计见解赋予计算系统自动学习和提高效率的能力,因为它从经验中学习,而不需要任何进一步的手动编程调整。与人工智能一样,人工智能中的任务可以使用各种算法来完成,这些算法可以用来解决各种相应的问题。

深度学习是机器学习的一个子集,它在很大程度上使用神经网络来分析类似于人类神经系统的结构内的不同问题。

量子机器学习教程(一)

图 1-7

AI、ML 和 DL 之间的关系

第 2 和 3 章详细阐述了与这些理论相关的算法。

量子机器学习

计算智能利用机器学习算法解决优化问题。ML 的最大挑战之一是处理多维数据。叠加、纠缠和上下文敏感性的原理被证明是为难题提供解决方案的有力支持者。量子力学在解决被研究的系统表现出上下文行为的问题上是有用的。在这种情况下,自然的量子力学性质被证明是理想的匹配[8]。

近年来,量子神经网络 (QNN)和量子卷积神经网络 (QCNN)成为研究人员深感兴趣的领域。这些领域研究量子状态下的经典数据编码选项,并利用量子系统的叠加特性来解决特定问题,例如利用 QCNN 或 QNN 算法的图像分类,以及使用量子图像灵活表示(FRQI)、数字图像的新型增强量子表示(NEQR)和量子布尔图像处理(QBIP)等算法的量子图像处理(QIP)[9,10]。

量子理论的前景和承诺对数据科学家越来越有吸引力,因为它的固有性质将几何和概率统一在一个框架中。随着大数据的激增接管了数字世界,实时处理不同维度空间中不断增长的数据量给行业和政府带来了挑战;例如,金融行业正试图理解 QML 和量子场论的深度,以开发用于风险分析、预测等的金融算法,而联邦政府正从安全和减轻威胁的角度研究 QML 和优化理论。随着全球安全威胁的出现,对相同的威胁进行建模并在此基础上进行预测对经典算法来说是一个越来越大的挑战[11]。

这本书主要集中在从经典系统获得的经典数据集的 QC 处理作为可观测量,如文本,图像和金融数据,利用经典量子接口。当你阅读这本书时,你会看到 QC 和 QML 任务的各种选项;也就是说,并不是所有形式的量子计算机都能以同样的效率做同样的工作。为此,我们利用谷歌的 Cirq、OpenFermion 和 TensorFlow Quantum、D-Wave 的工具、Xanadu 的 PennyLane 和 Strawberry Fields 等。

当你阅读这本书时,你会看到几个由物理学推动的领先的机器学习算法,最后是量子行走和 QBoost 等前沿作品。

设置软件环境

在你变得量子化并开始根据物理定律进行黑客攻击之前,设置好你的基本软件环境是一个很好的实践。当你阅读这本书时,我们在我们的基础环境上安装了各种其他的库。

我的操作系统是 Linux Ubuntu 18.04 LTS。Python 3.6.x 及更高版本应支持该代码。对于 TensorFlow Quantum、Cirq 等的最新支持,建议使用 Python 3.7+版本。网站上有在 Windows 和 macOS 上安装 Python 的说明,供您选择 Python 安装。本书中的大部分代码都基于 Jupyter 笔记本。你应该为你的操作系统下载相关的库;因此,代码独立于操作系统。

Python 可以从各种网站以各种风格下载。以下是两个例子。

量子机器学习教程(一)

图 1-8

Anaconda Python 支持的版本

  • 默认的 Python 下载站点在 www.python.org/downloads/ 。这里提供了在 Windows、Linux 和 macOS 上下载和安装 Python 的选择和说明。

  • 我的偏好是 Anaconda Python(Anaconda 3*)*atwww.anaconda.com/products/individual,提供各种操作系统支持的免费 Python,如图 1-8 所示。

Python 在 Ubuntu Linux 上的安装是使用其原生打包系统完成的。

apt-get install

  • 1
  • 2

macOS 提供 MacPorts 或 HomeBrew 作为打包系统。Anaconda 有一个叫做 conda 的包装系统。Python 使用pippip3进行 Python 3.x 安装。

你需要安装一个 Jupyter 笔记本来使用这本书里的代码。如果你想访问 Python IDE,可以从 www.jetbrains.com/pycharm/download/#section=linux 下载非商业用途的免费 PyCharm。

Anaconda Python 的个人免费发行包可以通过 Jupyter 笔记本和名为 Spyder 的免费 IDE 下载,如图 1-9 所示。

量子机器学习教程(一)

图 1-9

Anaconda Python dashboard 提供了 Jupyter、Spyder 等软件包

如果 Anaconda 是在 Windows 上下载的,那么可以通过从启动➤ Anaconda3 ➤ Anaconda PowerShell 提示符打开 Anaconda PowerShell 并运行conda命令来完成包升级。巨蟒的安装说明在 https://docs.anaconda.com/anaconda/user-guide/tasks/install-packages/

一旦安装了 Python,例如,建议为 QML 代码创建一个永久的工作空间目录(随意将名称或路径更改为更有意义的名称)。

$ export QML = "$HOME/qml"   # path and directory
$ mkdir – p $QML

  • 1
  • 2
  • 3

强烈建议为本书中的所有编码工作创建一个单独的隔离环境。这可以防止同一环境中其他项目和编码版本之间的意外重叠。

选项 1:原生 Python

为此,需要将 Python 中的virtualenv安装在 Python 中,如下所示。

$ pip3 install –user –upgrade virtualenv
collecting virtualenv
[...]
Successfully installed virtualenv

  • 1
  • 2
  • 3
  • 4
  • 5

一旦安装了 virtualenv,就可以如下创建独立的 Python 环境。

$ cd $QML
$ virtualenv qml    # create isolated environment "qml"
[...]
Installing setuptools, pip, wheel...done

  • 1
  • 2
  • 3
  • 4
  • 5

然后激活创建的虚拟环境。

$ source qml/bin/activate #activates the isolated env
(qml) sgangoly@ubuntu:~$

  • 1
  • 2
  • 3

要退出隔离系统以恢复到您的全局 Python 环境,请输入下面的deactivate命令。

(qml) sgangoly@ubuntu:~$ deactivate

  • 1
  • 2

选项 2: Anaconda Python

使用conda包管理器创建隔离的虚拟环境很容易。

$ conda create --name qml     # create isolated environment "qml"
[...]
$ conda activate qml          # activate isolated environment
(qml) sgangoly@ubuntu:~$

  • 1
  • 2
  • 3
  • 4
  • 5

要退出隔离系统以恢复到您的全局 Python 环境,请键入下面的conda deactivate命令。

(qml) sgangoly@ubuntu:~$ conda deactivate

  • 1
  • 2

只要环境处于活动状态,安装在隔离虚拟环境中的任何软件包都不会与安装在系统任何其他部分的任何其他软件包或库进行交互。

安装所需的软件包和库

您需要安装一些必要的包和库来设置我们的基本系统。随着您阅读本书的进展,您可以在需要时安装额外的库和包。如果您使用的是全局 Python 环境,请使用pip3,如果是在隔离的虚拟 Python 3.x+环境中,请使用pip,比如前面例子中的"qml"。如果使用 Anaconda 安装,使用conda命令。Ubuntu 环境可能需要sudo命令。

对于原生 Python(选项 1)

$ pip3 install –upgrade jupyter numpy pandas scipy scikit-learn matplotlib
Collecting jupyter
[...]

  • 1
  • 2
  • 3
  • 4

对于蟒蛇(选项 2)

$ conda install -c anaconda scikit-learn
$ conda install -c anaconda matplotlib

  • 1
  • 2
  • 3

如果安装成功,没有任何错误或警告,尝试使用以下命令打开 Jupyter 笔记本(参见图 1-10 )。

量子机器学习教程(一)

图 1-10

Jupyter 笔记本:终端输出和浏览器界面

$ jupyter notebook
[...]
[I 21:26:32.372 NotebookApp] The Jupyter Notebook is running at:
[I 21:26:32.372 NotebookApp] http://localhost:8888/?token=2c99c1f3108242781947a02d6ff692187f19af7565c355cb

  • 1
  • 2
  • 3
  • 4
  • 5

量子机器学习教程(一)

Jupyter 笔记本浏览器打开后,点击新建选项卡,选择 Python 3,如图 1-10 所示。这将打开 Python 3.x 安装的第二个 Jupyter 笔记本浏览器。您已经准备好编码了!

如果你不想安装任何东西,欢迎你在 https://colab.research.google.com 试用谷歌的 Colab。它构建在 Jupyter 笔记本上,并且原生支持 Python。除了编码友好之外,它还支持 GPU 和 TPU (Google 的 TensorFlow 处理单元)。

量子计算云接入

如果你有兴趣接触真实量子位,以下是建立免费(但有限)公共云访问各种真实量子硬件系统的指南。除了 Xanadu 之外,大多数 QC 环境都基于超导量子位,Xanadu 是业界第一个使用半导体光子量子位创建 QC 的公司,最近还开放了对其 QC 平台的云访问。

对 QC 环境的云访问非常容易。这只是一个向他们注册并获得访问权限的问题。除了提供基于云的访问,几乎所有的质量控制供应商都提供模拟器选项,你可以在上面尝试算法,如 Rigetti 的 QVM。以下是一些提供商的网站,它们通过云提供有限数量的量子位。

  • 瑞迪: www.rigetti.com

  • IBM Q 体验: https://quantum-computing.ibm.com

  • 世外桃源: https://xanadu.ai/request-access

  • d 波飞跃: https://cloud.dwavesys.com/leap/login/?next=/leap/

  • 亚马逊(Amazon)最近推出了一款名为 Braket 的云产品。客户可以使用 Amazon Braket 在他们选择的基于不同技术的量子处理器上运行他们的量子算法,包括来自 D-Wave、IonQ 和 Rigetti 的系统。模拟和量子硬件作业都通过统一的开发体验进行管理,客户只需为使用的计算资源付费。要开始使用 Amazon Braket,请访问 https://aws.amazon.com/braket

摘要

量子计算和机器学习算法在工业中的应用近年来出现了历史性的增长。第一章讲述了进入 QML 世界所需的一些基础知识。附录 A 涵盖了一些重要的数学背景作为参考,如张量积和傅立叶变换。下一章涵盖了经典机器学习概念的本质,作为翻译到量子领域的发射台。

Footnotes 1

www . nas . NASA . gov/project/quantum . html

2

在圣安德鲁斯大学的网站上可以找到一个很棒的布洛赫球体模拟。圣安德鲁斯。交流电。uk/physics/quvis/simulations _ html 5/sims/Bloch sphere/Bloch sphere。html

****

二、机器学习

机器学习(ML)作为人工智能和认知科学的一个子领域出现。机器学习的三种主要类型是监督学习非监督学习强化学习。还有其他几种,包括半监督学习批量学习在线学习。深度学习(DL)是一个特殊的子集,包括这些不同类型的 ML。它扩展它们来解决人工智能中的其他问题,如推理、规划和知识表示。

什么是机器学习?1959 年,阿瑟·塞缪尔(Arthur Samuel)将机器学习定义为“在没有明确编程的情况下赋予计算机学习能力的研究领域。”ML 是一门专注于教计算机如何学习的学科,在今天的背景下不需要任何特定任务的编程。机器学习探索创建从数据中学习并对数据进行预测的算法。

Note

这一章从应用的角度看经典机器学习的一些基本原理,例如学习的类型、方差和偏差。它沉迷于使用公开可用的数据类型的实践练习。代码可以从该书的网站上下载。ML 本身是一个庞大的领域,不可能在一章中包含它的所有方面。我们在整本书中重温经典概念,包括深入的误差校正和特征工程,以适应数据驱动的预测中的量子概念。

传统上,手工制作和优化算法以完成特定任务一直是构建遗留软件和处理数据操作和分析工作负载的方式。从高层次来看,传统编程关注的是对充分理解的输入数据的确定性结果。相比之下,最大似然法有能力解决一类或一系列输入-输出对应关系不清楚的数据集的问题。

ML 构成了从数据中学习。ML 的一个例子是垃圾邮件过滤器。垃圾邮件过滤器基本上是从用户标记的垃圾邮件示例、常规的非垃圾邮件示例、垃圾邮件造成的已知广泛欺诈案例(如钓鱼邮件、要求个人信息的众所周知的欺诈等)中“学习”。),以及其他类型的用例。

由 ML 管理的垃圾邮件过滤器从示例中学习,并将其所学应用于可疑的垃圾邮件。然而,这种学习过程和“学习”结果的后续算法应用是概率性的(即,它并不总是完美的或确定的)。因此,有时你会在垃圾邮件文件夹中发现合法邮件,在收件箱中发现垃圾邮件。垃圾邮件过滤器“看到”的例子越多,它训练自己检测合法垃圾邮件的次数就越多,它在保护我们的邮箱方面的表现就越好。

在这种类型的任务中,ML 比传统编程成功的主要原因之一是不断增长的数据量。垃圾邮件过滤器通常根据规则进行操作。过去,我们必须手动定义规则来阻止邮箱中的垃圾邮件,我们必须定义“发件人”、“收件人”、“主题”等等,如图 2-1 所示。

量子机器学习教程(一)

图 2-1

手动输入规则以获得理想结果的传统方法

随着现代世界大数据时代流量和数据的爆炸式增长,人类手动定义规则并跟上不断增长的数据量的能力已经远远低于所需的效率水平。因此,机器已经接管了这项任务,来定义处理大块数据的综合规则,并应用这些规则来提供问题的解决方案。ML 系统用来学习的数据被称为训练集。在垃圾邮件过滤器的例子中,标记和过滤垃圾邮件或定义算法的性能训练数据。在这种情况下,性能测量可以是正确或不正确的垃圾邮件的比率。性能测量被称为准确度,这个值,正如本章中的一些例子所展示的,通常会随着训练和时间的推移而提高。图 2-2 显示了将 ML 应用于垃圾邮件过滤器的工作流程。

量子机器学习教程(一)

图 2-2

用 ML 过滤垃圾邮件

本章介绍了机器学习算法的基础知识、数据驱动预测的原理、性能和复杂性。本章从经典的角度探索了数据驱动的模型和预测以及各种学习算法,随后是一些实际操作的例子。随后的章节建立在由量子物理学驱动的经典机器学习的概念上。

在我们深入一些基本和必要的机器学习概念之前,快速浏览一下该主题中涉及的一些术语可能是有益的。

机器学习和大数据 :直到最近,大多数 ML 工作负载都是在单机(计算机)上执行的。然而,GPU(图形处理单元)、谷歌的 TPU(张量处理单元)和分布式计算的发展现在使得大规模运行大数据的机器学习算法成为可能,这些算法分布在各个集群中。

算法和模型

这些天有太多关于 ML 和它的各个方面的文献。通常,很难区分算法和模型,因为这两个术语在文献中可以互换使用。在本文中,我们将两者区分如下。

算法是由数学或统计公式定义的方法论。

模型是定义输入数据和输出之间关系的数学对象,是用数据训练算法后得到的。一旦输入进入模型,输出就产生了;但是模型需要首先被训练以获得有意义的输出。

算法和模型的区别如图 2-3 所示。

量子机器学习教程(一)

图 2-3

算法和模型

不同的训练数据导致产生具有不同系数的不同模型。有效算法的一个例子是房价预测,其中价格基于房间数量、地块大小、居住空间等。然而,在算法被采用并且由它产生的结果可以被信任之前,需要有一些它工作的证明。

来自算法的“预期”值是指构建一个估计器。所有的 ML 算法都是估计量。评估者告诉我们对未来的预期,但实际上并不预测未来。理想情况下,我们更希望有一个能完美预测未来的估计器!但那将类似于具有远见或精神洞察力。从数学和科学的角度来看,我们创建模型并优化它们,以尽我们最大的能力提高精确度。

以下是数据的一些基本属性和相关模型,在衡量算法的成功时会考虑这些属性。

偏见

偏差表示估计器离目标有多远,或者换句话说,模型预测离正确值有多远。这直接取决于对训练数据的假设。假设的数量越多,模型泛化的可能性越低;泛化错误的一个例子是假设数据是多项式,而它是线性。因此,根据经验,低偏置通常是首选。高偏差模型通常使训练数据受到欠拟合(本章稍后讨论)。偏差告诉我们预测的平均值是否接近正确的位置,或者误差是否在一个方向或另一个方向偏向(或偏斜)。

数学上,偏差定义如下。

量子机器学习教程(一))

(2.1)

其中, X 是概率分布,量子机器学习教程(一))是同一概率分布的估计量。

从方程 2.1 中可以看出,偏差显示了一个估计值平均可能会偏离目标值多少。

综上所述,以下是偏倚的主要性质。

  • 偏差误差最常见的原因之一是模型简化假设,以实现更容易学习的目标函数。

  • 作为一个算法家族,参数算法通常会有很高的偏差。

    • 学习很快,因此计算成本更低,因此很有吸引力

    • 它们很简单,但不太灵活

    • 它们在预测复杂数据时表现不佳,因为这些数据特征不太适合简化的假设。

减少对目标函数的假设数量是达到低偏差的一种方式。其中一些技术是决策树k 近邻 (KNN)和支持向量机 (SVM)。

变化

方差是预测对训练集敏感程度的指标。方差直接取决于数据的分布。方差告诉我们,与未来预测的实际值相比,估计值有多宽或多窄。由许多自由度组成的模型,如多项式模型,通常表现出高度的变化,这导致训练数据的过拟合(在本章后面详述)。数学上,

量子机器学习教程(一))

(2.2)

换句话说,方差是平均值的平方差的平均值*。方差衡量相关数据的分布程度。方差有两个更广泛的品种:总体方差样本方差。*

总体方差通常用 sigma 平方(σ2 设计。以下是计算数据集的总体方差的步骤。

总体方差在数学上由下式给出

量子机器学习教程(一))

(2.3)

其中 x 表示个体数据点, μ 是平均值, N 是整个总体中数据点的个数

以下是计算σ2 的步骤。

  1. 计算数据集的平均值。例如,我需要计算一小时内在我的街道上看到的汽车数量。为此,我们记录了对三辆车的观察,一辆车、两辆车、六辆车和三辆车。平均值是数据的平均值,在本例中为量子机器学习教程(一))。

  2. 每个数据点与平均值的差异由下式给出

(3 − 3 = 0); (1 − 3 =  − 2); (2 − 3 =  − 1); (6 − 3 = 3); (3 − 3 = 0)

  1. 差值的平方给出如下:0,4,1,9,0。

  2. The average of the squared differences gives the final variance value.

    量子机器学习教程(一))

样本方差的计算略有不同。总体方差指的是整个数据集,而样本方差指的是数据集的子集。样本方差通常是在定义明确的数据集空间中获取的,例如连续五个小时计算每小时看到的汽车数量。在这种情况下,我们可能希望通过每小时分组的数据块来计算每小时的汽车数量。然后我们将平均值的平方差除以N1。换句话说,样本方差s2 由下式给出

量子机器学习教程(一))

(2.4)

其中 y 表示单个数据点,量子机器学习教程(一))是平均值, n 是在样本空间中数据点的数量

方差是如果使用了不同的训练数据,目标函数的估计值将改变的量【15】。与方差相关,目标函数是根据训练数据计算的,因此受到训练数据的影响。在理想情况下,如果训练数据集发生变化,目标函数的变化应该是最小的。一个好的算法应该解决输入和输出变量之间隐藏的潜在映射。

当目标函数的估计变化相对于训练数据集中的变化为时,表示低方差,例如,诸如线性回归和逻辑回归的参数算法。

当目标函数的估计值的变化相对于训练数据集中的变化较高时,指示高方差。通常,像决策树这样的非参数算法往往具有很高的方差。算法中较高的灵活性会导致较高的方差误差。

标准差计算为方差的平方根σ2σ。这里, σ 是标准差。

不可约误差由于数据中的噪声和未知变量而产生。因此,在任何与数据科学相关的项目中,数据清理都是至关重要的。

这本书有可供下载的实践练习代码。从这一章开始,我们遵循惯例,用以下图标标注的代码片段可以下载。

量子机器学习教程(一)

下面是一个使用matplotlib Python 库和分布式随机数据可视化方差概念的快速练习。

如果您使用 Python 3.7 或 3.8 打开 Jupyter 笔记本中的variance.ipynb代码文件(如第一章所述),您会看到一个住宅区房价假设数据分布的方差和标准差计算示例。代码如清单 2-1 所示,对应的直方图如图 2-4 所示。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
houseprice = np.random.normal(150.0, 50.0, 20000)
plt.hist(houseprice, 75)
plt.show()

Listing 2-1variance.ipynb

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

量子机器学习教程(一)

对于正态分布,数据是随机生成的。分布以大约 150 为中心,20,000 个数据点的标准偏差为 50.0。

量子机器学习教程(一)

图 2-4

方差直方图. ipynb

直方图显示,标准偏差约为 50.0,约为 100 和 200,数据以约 150 为中心。

可以分别使用.std.var函数调用计算数据的标准差和方差,如图 2-5 所示。

量子机器学习教程(一)

图 2-5

方差的标准差和方差

对于标准偏差,获得的值约为 50.38,非常接近清单 2-1 中指定的值。方差是 2538.34,大约是我们预期的 50.38 2 ,因为标准差是方差的平方根。

偏差与方差的权衡

方差与模型的复杂性直接相关。如果模型的复杂性增加,方差通常也会增加。然而,增加复杂度也会减少偏差。正如预期的那样,降低复杂性会增加其偏差并减少其方差。因此,在选择模型时,通常需要在方差和偏差之间进行权衡,并且需要精确平衡这两者。

权衡取舍的选择通常归结为数据的过拟合与欠拟合。高度的方差会导致过度拟合,而高偏差模型会使训练数据欠拟合。图 2-6a 显示了一个低偏置的例子。之字形图有一个低偏差,但高方差。在图 2-6b 中,线性图相对于数据具有较低的方差,但是具有较高的偏差,与每个数据点的误差有关。

量子机器学习教程(一)

图 2-6

偏差和方差权衡

方差和偏差之间的权衡对于减少误差很重要,这是任何模型的目标。误差可以用方差和偏差来表示,如下所示。

量子机器学习教程(一))

(2.5)

其中 ϵ 为误差, β 为偏差,σ2 为方差。

默认情况下,对目标函数值的假设越少,灵活性越大,因此偏差越小。另一方面,与训练数据的变化相关的目标函数的变化越少,方差越小,算法越不灵活但越稳定。图 2-7 描绘了两者之间的关系。

量子机器学习教程(一)

图 2-7

偏差和方差权衡

参数或线性算法通常具有高偏差但低方差,而非参数或非线性算法通常具有低偏差但高方差。

机器学习中偏差和方差之间的权衡关系对于算法决策者来说是一个不可避免且无处不在的问题:增加偏差会减少方差,减少偏差会增加方差。这里的圣杯是在模型复杂性允许的情况下找到优化性能的最佳点。

数据过度拟合

假设在一场足球比赛中,一名前锋在她得到的第一个得分机会就射门得分。那么我们是否可以推测所有的前锋都能抓住每一个机会进球?我们不能做出这样的假设,因为更多的得分机会最终没有进球。基于数据量不足而高估预测结果在 ML 中被称为过拟合。如图 2-8 所示。

量子机器学习教程(一)

图 2-8

过度拟合

当模型与训练数据集的拟合过于精确时,乍一看似乎是“正确的”,但因为它与训练数据的拟合过于“接近”,所以它可能会排除在测试时在之前没有“看到”的有效数据。一个例子是一个曲线函数,几乎触及图 2-8 中的每个数据点,误差很小或根本没有误差。在这种情况下,最佳拟合曲线与训练数据吻合得非常好,但在使用模型以前未见过的测试数据进行评估时,可能表现不佳。因此,模型预测的准确性由于过度拟合而受损,因为它倾向于记忆训练数据,而不是从中学习*。过于灵活的模型往往显示出高方差和低偏差。*

定义明确的特征可以检测过度拟合。通常,过度拟合的模型对于训练数据给出了很好的结果,但是对于看不见的新测试数据却表现不佳。一个例子是 96%的训练准确率和 68%的测试准确率。一种解决方案是使用更适合数据的算法或模型,如 k 倍交叉验证(本章稍后解释)。

数据拟合不足

当相对僵化的模型运行时,会发生欠拟合,该模型过于简单,无法捕捉输入数据中的所有趋势。这通常在训练数据和测试数据上都得分较低。拟合不足、不太灵活的模型具有低方差和高偏差。图 2-9 显示了与图 2-8 中的过拟合模型相同的原始数据的欠拟合。

量子机器学习教程(一)

图 2-9

欠拟合

数据的理想拟合

理想情况下,您需要一个基于方差的误差和基于偏置的误差都较低的模型,如图 2-10 所示。因为,如等式 2.5 所示,误差与偏差的平方成比例,与方差成线性比例。因此,偏差与方差的权衡非常重要。

量子机器学习教程(一)

图 2-10

理想匹配

在 ML 中,一个重要的期望方面是实现一个“完美点”或“甜蜜点”,作为过度拟合和欠拟合模型之间的平衡,如图 2-11 所示。

量子机器学习教程(一)

图 2-11

完美或甜蜜的地点

为了实现良好的拟合,遵循以下经验法则。

  • 过度拟合和欠拟合都会降低模型性能。

  • 过度拟合相对难以发现,因为它在训练数据上表现很好,但在看不见的新测试数据上表现很差。过度拟合模型倾向于“记忆”数据。确认的几种方法是尝试不同的算法,如 k-fold 交叉验证来验证或阻止验证数据集或尝试重采样。

  • 欠拟合更容易发现,因为它在训练和测试数据上都表现不佳。

减轻模型中过度拟合的过程称为正则化。正如本章前面所讨论的,正则化可以通过几种方式实现。最近与量子机器学习相关的工作正在寻找正则化的方法之一是优化,这将在接下来的章节中讨论。

学习过程中应用的正则化量可以用超参数来控制。超参数是与学习算法相关但与模型无关的参数。超参数在训练数据之前是固定的,并且在整个训练过程中保持不变。超参数调整是构建 ML 系统的一个非常重要的方面。随着我们在书中的深入,我们会对其进行扩展。超参数调整在计算上是昂贵的,但有时是不可避免的。设置错误的超参数的影响可能是深远的。例如,如果正则化超参数设置得非常大,则绘图可能几乎是平坦的,梯度接近于零。相关的学习算法可能不会表现出过度拟合,但是它不会产生可接受的好的解决方案。

优化的一个例子是通过将参数子集删减为零来防止算法中的长迭代。如果模型的参数由 τ 给出,那么它与由 a 成本函数 C 定义的成本相关联。成本函数 C 由几个不同的方面组成,其中最重要的是损失。损失函数将在本章后面更详细地讨论。损失衡量一个模型的预测与目标的接近程度。

模型准确性和质量

机器学习使用类似于学校考试分数的评分策略。精度由下式定义

量子机器学习教程(一))

另一方面,误差被定义为准确性的反义词。

量子机器学习教程(一))

从定义可以直观的看出,误差是错误分类的病例数总病例数的比值。这种估计精度和误差的方案类似于利用近似值的经验法则,而不是采用面向精度的算法。

在实践中,有明确定义的方法来估计精度和误差以及两者之间的关系。例如,一些方法包括假阳性假阴性。正则化可以由成本函数定义如下。

量子机器学习教程(一))

2.6(a)

其中,正则子是惩罚表达式。正则化器向训练参数添加约束。这涉及一种将乘以非负数的较小系数向量相加的方法:

量子机器学习教程(一))

2.6(b)

其中 λ 是小系数向量。 α 为非负数。 α ( λ )是惩罚项(或正则项),可以根据我们希望赋予它的权重而变化。如果 α = 0,则正则化为零,因此正则化不存在。随着 α 变大,具有较大范数的参数受到严重惩罚。范数的选择通常被认为是 L1 或 L2,这是量子计算和量子机器学习未来章节的重点。

贝叶斯学习

贝叶斯学习 (BL) [17]是一种重要的机器学习方法,因为它具有根本不同的逻辑,并使用概率模型。BL 试图将学习转化为一个计算问题。这种学习视角利用的是整合而不是优化。

贝叶斯定理指出,给定 B 的概率, A 的概率等于 A 的概率乘以给定 AB 的概率除以 B 的概率。从数学上讲,这意味着以下几点。

量子机器学习教程(一))

(2.7)

其中, ab 是随机变量 AB 的子集或值,并且

量子机器学习教程(一))

(2.8)

其中, P ( ab )是 ab 都发生的概率。术语P(a|b)称为P(b|a)称为可能性,P ( a )称为。如果给我们一个训练数据集, D ,随机变量 ab ,目标是考察概率, P ( aa | D )。 P ( aa | D )是发现发生事件的概率 a ,给定 a 给定 D 。在数学上,该模型表示为

量子机器学习教程(一))

(2.9)

其中, τ 为模型的参数。 P ( ab | τ )是模型的参数化分布,写成无条件概率。P(τ|D)是给定数据,某个期望的参数集是正确选择的参数集的概率。从概念上讲,训练数据集的根本原因是为给定数据找到一个最佳参数,在这种情况下,由 τ 表示。未知项P(τ|D)可以使用贝叶斯公式计算,公式如下

量子机器学习教程(一))

(2.10)

这里, P ( τ )解决了之前对参数的假设,这导致了在模型看到数据之前的最佳模型*。贝叶斯学习中的先验 P ( τ )允许在没有看到数据的情况下对参数 τ 进行有根据的猜测。如方程式 2.6 所示,在某些情况下,它可以与正则化子*相关联。基于集成的方法和基于优化的方法之间存在权衡。当缺乏已知的结构时,两者都具有挑战性,并很快成为难以解决的问题。**

应用 ML 工作流

我们经常得到大量的数据,坐下来思考,“我到底该如何处理这些数据,我该如何解决这个问题?”。解决 ML 问题有一些基本的经验法则。以下是大致的步骤。

  1. 获取数据。

  2. 探索数据。数据是关于什么的?

  3. 建立一个模型。

  4. 评估模型。这个模型有效吗?

  5. 优化模型。

  6. 部署模型并监控性能。如有必要,调整模型并重试。

数据探索是开始构建高效 ML 模型的关键步骤。这包括三个主要步骤。

  1. 数据收集

  2. 数据清理

  3. 数据处理

尽管数据收集是标准流程,但数据清理可能是整个 ML 工作流程中最耗时的流程之一。清理脏数据、充满不可理解的特殊字符的数据、算法不能很好理解的空格以及各种其他类型的噪音一直是数据工程师和科学家的灾难。如今,有一些现成的数据清理解决方案;例如,谷歌云平台(GCP)托管的 Dataprep 工具。

如果预期目标不明确,数据处理的任务可能会很棘手。一个 ML 爱好者需要定义一个目标,她/他试图通过向模型提供数据集来实现这个目标。现在有 Python 和其他语言的专用库,极大地方便了数据处理。Python 特别有 NumPy、Pandas 和 scikit-learn,它们贯穿于本书。ML 的整体工作流程如图 2-12 所示。

量子机器学习教程(一)

图 2-12

机器学习工作流

数据探索的下一步是建模。这包括数据检查、从数据中提取特征集、选择最适合数据集的适当算法,以及最终构建所需的模型。

第三步模型评估,涉及误差估计和精度计算。

第四步是*模型优化,*向模型输入更多数据,并调整参数以获得更好的性能。一旦优化完成,输出将反馈到步骤 2 和 3,直到误差和精度水平被认为是可接受的。

第五步也是最后一步是模型部署,涉及生产级使用和可视化。

模型验证

一旦我们决定了一个模型,并构建和测试了它,我们需要验证它。用已经看到的数据来验证模型是错误的。例如,如果我们重用训练数据来测试模型,那么它的预测将会非常好,因为它是在已经看到的数据上测试的。因为模型对该数据集的预测是“正确的”,所以它对模型预测的效率产生了错误的信心。同样的模型,当用新数据测试时,可能会在预测中表现得更差。因此,一种常见的做法是将数据集分开用于训练和测试,下面将简要讨论其中的一些数据集。

坚持的方法

这种方法只是将部分数据作为训练集进行“筛选”,以评估模型并选择最佳模型;然后测试模型(即,用剩余的数据作为测试集来验证它)。这意味着“测试集”是随机选择的,并保留用于测试。

在 hold-out 方法中拆分数据是 ML 中的常见做法。根据经验,数据被随机分成 80%或 75%,或 70%的训练数据和 20%或 25%或 30%的测试数据,如图 2-13 所示。

这种分割没有固定的规则。在进行分割时,要牢记数据的性质和训练的计算成本。训练数据量越大,计算成本越高。作为一个讨论的问题,如果数据集中的划分是,例如,50%训练和 50%测试,那么这是而不是被认为是“好的”,因为训练数据量太低,增加了模型可能没有看到足够的数据来有效训练的风险。类似地,大约 95%的训练数据和 5%的测试数据的分割是不理想的,因为这样测试数据的百分比太低了。这是不可接受的,因为如果最终模型在太大的数据集上训练,那么用在小得多的数据集上训练的模型来测试它是不理想的。这可能类似于选择一辆 f1 赛车参加沙漠中的达喀尔拉力赛。

量子机器学习教程(一)

图 2-13

坚持验证

尽管保留法适用于通用数据,但当某些数据可能有偏差时,它不是很有效。例如,考虑一个 ML 考试,学生从 50 个问题库中得到 20 个问题,这些问题是简单和困难问题的混合。因为在坚持法中,数据是随机选择的,所以我们在这种情况下随机选择问题。假设这个学生在这次考试中得了 80 分。在这种情况下,我们可以认为他的分数反映了他对该学科的真实知识吗?我们不能。这可能是因为由于问题选择的随机性,大多数问题都比较容易。为了获得他的知识的真正精髓,我们需要对同一名学生和类似的随机选择的数据集进行更多的测试,然后取平均分数。

由于保留方法中的训练/测试分割是随机进行的,如果选择了代表整个数据特征的全面数据集,模型可以很好地学习并提供很好的预测。此外,如果测试集也是相对容易的测试集,则该模型可以提供高精度。但是数据选择的随机性使得训练和后续预测的准确性有些不可靠。例如,我们可以选择一个缺乏数据多样性的“弱”数据集进行训练,其中模型没有学到多少东西,并最终根据剩余的数据对其进行测试,这些数据包括模型未知的大多数多样性,从而导致模型性能较差。因此,在排除法中,模型精度可能会因数据的随机分割而发生显著变化。

交叉验证法

我们如何确保更好、更有效地验证数据驱动模型?一个解决方案是交叉验证。交叉验证的基础如下:在训练集上训练模型,然后每个验证集评估一次。然后对评估进行平均。这种方法提供了更高的精确度。然而,因为训练时间乘以验证集的数量,所以这在计算上比以前的保留方法更昂贵。其中一种也很常见的交叉验证方法是 k 倍交叉验证

在选择模型的一般情况下,训练数据有可能不代表整个数据集,在这种情况下,数据集可能是偏斜的,并且可能发生过度拟合。k 重交叉验证有助于避免这种情况,因为在这种情况下,模型是使用训练数据集中的数据来训练的。然后,使用为测试保留的数据来评估模型性能。

在 k 重交叉验证中,数据被分成 10 到 20 块 k 等截面,称为 k 重。图 2-14 显示了 k 重交叉验证工作流程图。

量子机器学习教程(一)

图 2-14

k 倍交叉验证

通常情况下,其中一个褶皱,比如褶皱- i (图 2-14 中=5),是预留给测试的。图 2-14 中的其他褶皱用于训练。一旦训练完成,模型将根据 fold- i 进行测试。以这种方式,在通过训练和测试循环所有折叠之后,比较预测的准确性。

图 2-15 描述了一个 k 倍交叉验证的例子,其中 k = 6。

量子机器学习教程(一)

图 2-15

六重交叉验证

这种六重交叉验证将其数据分成六个块,一个保留用于测试,其余五个数据折叠保留用于训练。精确度栏显示精确度在 80%到 92%之间变化。平均精度由下式给出

量子机器学习教程(一))

可以对同一数据集的不同范围的不同算法运行交叉验证。根据哪种算法提供了可接受的精度范围,可以选择该算法作为给定数据集的最佳算法。

总之,交叉验证是而不是通常用于寻找最佳表现模型。它更多地用于验证或了解特定模型对于给定数据集和新测试数据的性能。现实生活中的一般方法是通过测量模型来调整它,同时用不同的参数改变它。

交叉验证的优点是,它有助于用数据系统地测试新模型,并且可以识别具有高方差或过度拟合问题的模型。

交叉验证的一个缺点是对数据集运行多个模型可能计算量大且耗时。目前解决时间问题的一种方法是在多个 CPU/GPU 核心或集群上并行运行交叉验证任务。

作为一个体验 k-fold CV(交叉验证)的练习,让我们看一下kFoldCV.ipynb代码。这里使用的数据是一个公开的数据集,名为虹膜。这个特定的数据集由 150 朵鸢尾花的花瓣和萼片的长度和宽度的测量值组成。数据集中有三类鸢尾花,每类 50 个实例:海滨鸢尾、杂色鸢尾和刚毛鸢尾[13],如图 2-16 所示。

量子机器学习教程(一)

图 2-16

鸢尾(Radomil,CC BY-SA 3.0)、杂色鸢尾(Dlanglois,CC BY-SA 3.0)和海滨鸢尾(Frank Mayfield,CC BY-SA 2.0)

清单 2-2a 、 2-2b 和 2-2c 中的代码查看一个模型,该模型试图根据给定的属性(花瓣和萼片的宽度和长度)预测正确的鸢尾属物种。

量子机器学习教程(一)

#Import Libraries
import numpy as np
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn import svm  #import (SVM) for classification
from sklearn import datasets
iris = datasets.load_iris() #load the data
# Data split into train/test sets with 25% for testing
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.25, random_state=0)
# Train data for Linear Support Vector Classifier (SVC) model for prediction
clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
# Performance measurement with the test data
clf.score(X_test, y_test)

Listing 2-2a
k-Fold Cross-Validation

of Iris Dataset from kFoldCV.ipynb

量子机器学习教程(一)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

scikit-learn [14]的 val_score 库允许我们通过交叉验证来评估分数。数据被输入到 train_test_split()函数,该函数便于将数据分割成训练和测试块。在这个模型中,我们从训练 75%的数据和测试 25%的数据开始,这由 test_size=0.25 指定。按照 k-fold CV 的惯例,测试数据是随机抽取的(random_state=0)并留作测试之用。

该方案给我们四个数据集:X_train包含 75%的虹膜测量数据,X_test包含 25%的保留用于测试的虹膜测量数据,y_trainy_test包含对应于测量的物种。

使用的模型是支持向量分类 (SVC),它是支持向量机(SVM)的一部分。这将在本章后面讨论。此处型号命名为svcscore()函数测量 SVC 模型的性能。针对保留的测试数据集对 SVC 模型进行评分。分数给定为

量子机器学习教程(一))

(2.11)

然而,由于数据集大小只有 150,这是一个相当小的数据集,其中 75%用于训练,25%用于测试。因此,我们很有可能过度适应。k 倍交叉验证是一个很好的方法来验证这一点,看看我们是否有更好的拟合。

kFoldCV.ipynb代码的下一部分,如清单 2-2b 所示,SVC 模型用于将整个数据集(即iris.data的测量值)和目标数据iris.target传递给函数cross_val_score().,我们使用交叉验证cv=5,,这意味着它将使用五个不同的数据集,并保留一个数据集用于测试。数据集是随机选择的。

量子机器学习教程(一)

#cross_val_score a model, the data set, and the number of folds:
cvs = cross_val_score(svc, iris.data, iris.target, cv=5)
# Print accuracy of each fold:
print(cvs)
# Mean accuracy of all 5 folds:
print(cvs.mean())

Listing 2-2bContinued: 5-Fold Cross Validation

kFoldCV.ipynb

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这段代码从每次迭代(总共 5 次)或“折叠”中返回一个错误值列表,如下所示。

量子机器学习教程(一))

然后对这五个值进行平均,以给出虹膜数据集的 k 倍 CV 的误差度量。

量子机器学习教程(一))

(2.12)

如果我们比较 2.12 和 2.11 的结果,我们可以立即推测 5 倍 CV (2.12)的结果比以前更好;因此,这是一个明确的改进。

这里通常的方法是看看是否有比这个结果更好的方法。为了获得 2.6 的结果,使用了线性核(kernel=linear’)。一种方法是用可能更适合的基于多项式的内核来测试模型和相应的数据行为。线性拟合是否优于多项式拟合取决于数据特征。因此,看看清单 2-2c 中所示的kFoldCV.ipynb代码的下一部分,我们尝试了一个内核,它是多项式的 poly

量子机器学习教程(一)

svc = svm.SVC(kernel='poly', C=1).fit(X_train, y_train)
cvs = cross_val_score(svc, iris.data, iris.target, cv=5)
print(cvs)
print(cvs.mean())

Listing 2-2cContinued: K-Fold Cross-Validation with Polynomial Kernel

from kFoldCV.ipynb

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行多项式内核后,它会给出以下五倍误差值和相应的平均值。

量子机器学习教程(一))

量子机器学习教程(一))

(2.13)

2.13 和 2.11 之间的比较表明,多项式核给出的值低于线性核。这表明多项式可能过拟合。这里要吸取的教训是,如果我们没有使用 k 倍 CV 进行验证,而是使用标准的训练/测试分割,我们就不会意识到我们过度拟合了。这是一个简单但很好的例子,说明了 k 倍简历的重要性。

线性模型通常不太灵活,因为它只有两个自由度,而高次多项式由于有几个自由度而非常灵活。k 倍交叉验证运行的结果通常用模型技能得分的平均值来概括。一个好的做法是测量技能分数的方差,如标准差或标准误差。CV 因为简单而受欢迎。与其他方法(例如简单的训练/测试分割)相比,它通常会导致对模型技能的更少偏差或更少乐观的估计。

回归

回归是研究如何最好地拟合一条曲线来汇总数据。例如,农业产量“通常”与降雨量直接相关。回归构成了监督学习的一些最强大和最广泛研究的算法。在这种方法中,我们试图通过可能最适合它们的曲线来理解数据点。回归算法有几种类型。随着我们进入量子机器学习的领域,将有更多关于回归和相关算法的内容要说。

线性回归

顾名思义,线性回归是对一组观测数据进行直线拟合。一个例子是足球队队员的身高和体重。图 2-17 显示了该数据集中的数据和曲线。

量子机器学习教程(一)

图 2-17

线性回归

在图 2-17 中,X 轴表示身高,Y 轴表示体重。一旦绘制了数据点,教练可能会看着图并认为虽然大多数球员的身高和体重匹配,但有些人不匹配,他们可能需要开始健身制度来增加或减少一些体重。如果教练画一条曲线来最好地拟合这些数据点,他可能会以一条直曲线或一个线性图结束。

在这个例子中,曲线的方程由一条直线给出,它是 y = mx + c ,其中 m 是直线的斜率 c 是常数。线性回归可以建模为确定性函数[5]。

量子机器学习教程(一))

(2.14)

其中,参数包含在向量τ∈ℝn和 x∈ℝn中,其中ℝ是实数的空间, N 是参数的维数。偏差τ0 可以包含在τϵx中作为一个额外的维度。

线性回归中的学习考虑寻找参数 τ ,该参数可以将方程 2.14 中的函数 f 拟合到训练数据以进行有效预测。

最小平方技术

最小二乘技术包括使用平方损失(本章稍后解释)。直线拟合中产生的误差由各个数据点到直线的距离给出。我们将所有这些误差平方,并计算它们的总和。这样,如果有负误差,那么从误差产生的角度来看,它们不会抵消正误差,给我们一个假阳性。

这类似于方差计算。一旦知道了数据点的距离,就可以计算出误差并使其最小化。

梯度下降

梯度下降 (GD)是一种迭代技术,它逐渐调整一组特定训练数据集的模型参数,以最小化成本函数。这种技术可以找到各种问题的最佳解决方案。GD 的理论性深入文献可以在参考文献[15]中找到。GD 中的一个标准挑战是在不知道误差曲线的情况下找到一个最优值*!*

该过程包括从图 2-18a 中 X 轴上变量 X 的随机值开始。X1 的随机误差可通过关系式 error = f(x1)计算。误差的梯度也可以用斜率来计算。数学上,我们需要取误差函数的导数来计算梯度。

量子机器学习教程(一)

图 2-18a

梯度下降步骤 1

误差导数给了我们斜率或梯度倾斜方向的指示。此时,随机计算第二个数据点 x2(如果未知),如图 2-18b 所示。

量子机器学习教程(一)

图 2-18b

梯度下降步骤 2

接下来,如图 2-18c 所示,点 x2 的误差计算为 error = f(x2),测量误差梯度,然后我们“猜测”点 x3 的值并重复该过程。

量子机器学习教程(一)

图 2-18c

梯度下降步骤 3

最后,计算完所有数据点及其梯度后,梯度下降曲线如图 2-18d 所示。

量子机器学习教程(一)

图 2-18d

梯度下降步骤 4

GD 计算从一个随机点开始,猜测下一个。随着我们越来越接近收敛,这些步骤变得越来越小。步长在接近收敛时变得重要,以免错过或超过最小值。GD 中的一个常见问题是接近最小值。对此的解决方案是从随机点开始多次运行该算法,最终,该算法找到最小值。

梯度下降有几种变化。以下是最重要的两个。

  • 批量梯度下降:在这种方案中,每种算法在整个训练数据集上为梯度的每次迭代计算成本。该算法的一次迭代被称为批次

  • 随机梯度下降(SGD) : SGD 为每个训练实例计算系数,而不是在一批实例结束时。相比之下,对于大型数据集,GD 可能会很慢,因为每次迭代都需要对数百万个数据集进行计算。SGD 将训练集随机化以减少系数多样性,并帮助避免陷入局部最小值。SGD 对于大型数据集非常有效,因为它只需要相对很少的次数(通常为 10 到 20 次)就可以收敛。

非线性和多项式回归

多项式回归用于更一般的回归情况,其中数据分布可能不太适合线性(直线)拟合。多项式拟合允许更多的自由度。然而,更多的自由度并不总是好的;根据数据集的不同,它可能会导致过度拟合。

目前 ML 中最成功的非线性回归模型是神经网络,你在下一章看。

分类

机器学习算法中的分类是一项基本任务,它处理将类别标签分配给来自问题领域的示例。

机器学习中的预测建模有各种类型的分类。本节重点介绍以下类型。

  • 二元分类器

  • 多类分类器

  • 多标签分类器

  • 不平衡的分类

唯一标记数据的类别提供了为特定任务表征数据的明显优势。前一节讨论了回归,它主要是关于数据集的曲线拟合。您已经看到最佳拟合曲线是一个输入数据项并分配一个数字的函数。与回归相反,分类指的是一个 ML 模型,它为其输入分配离散的标签。分类通常是处理或离散值的监督学习算法。典型的输入是特征向量,典型的输出是类。

预测建模的一个很好的例子是我们在本章前面的 ML 的第一个用例:垃圾邮件过滤器。这基本上包括将电子邮件分类为“垃圾邮件”或“非垃圾邮件”

对于一个二进制分类器,输出是二进制(即是/否、真/假、开/关等。).从一个神经网络(下一章讨论)来看,输出层只有一个神经元可以做到这一点,常见的激活函数有sigmoidlogistic。下面是二进制分类工作的例子。

  • 垃圾邮件过滤器:它是垃圾邮件吗?是/否

  • 交易欺诈预测:是欺诈吗?是/否

二元分类任务通常包括被认为是正常状态的类别 0 和被称为异常状态的类别 1。例如,“非垃圾邮件”将被视为正常状态,而“垃圾邮件”将被视为异常状态。某些算法,如逻辑回归和支持向量机(SVM),支持二进制分类,但不支持两个以上的类别。就其基本形式而言,SVM 不支持多分类[272]。它只是通过将多分类问题分解成多个二元分类问题的过程来实现的。

直观地说,多类分类器不是二元的。例如,将一个数字归类为前十个数字{0 到 9}之一。从神经网络的角度来看,这需要每类一个神经元。因此,这种类型的分类器通常需要多于一个神经元。多类分类器的另一个例子是光学对象分类(面部、植物等。).在神经元网络处理中,softmax 函数处理多类分类器。

多标签分类是指具有两个或两个以上类别标签的任务,其中每个数据点可以预测一个或多个类别标签。一个例子是其中具有多个对象的照片和可以预测多个已知对象的存在的相应模型,诸如汽车、大象、人等等。在二进制和多类情况下,处理单个类标签,而在多类情况下,有两个或多个类标签。

不平衡分类涉及每类中的实例数量而非平均分布的任务。典型地,不平衡分类任务是二元分类任务。例如,训练数据集中的许多数据点属于类 0,少数示例属于类 1。为了简化计算任务,有时使用诸如对多数类欠采样或对少数类过采样之类的专门技术来操纵训练数据集。类似地,也使用专门的建模算法。

数据驱动预测

大多数 ML 算法都有相同的总体特征:它们被输入数据并输出对查询的响应。在这个大数据时代,实时原始数据的检查和评估至关重要,尤其是在金融行业和网络安全领域。当一个金融机构希望预测股票价格时,他们可以查看价格预测的时间序列值。

如果数据的处理涉及图像分析,那么图像的内容和相应的排序被视为分类。通常,数据被认为是输入,模型的预测被认为是输出

预测模型及其用法的例子多种多样。其中一个就是图像识别。如果我们看到一头大象,我们通过视觉刺激认出它是一头大象,因为我们通过观察它们或它们的照片了解了大象是什么。然而,如何给计算机编程以本能地识别大象并不是直观上显而易见的。在 ML 中,我们向计算机呈现许多图像,它从这些图像中学习大象的“样子”。同样,也可以教会计算机老虎长什么样。因此,在用图像作为输入数据的几次这样的训练之后,计算机学会了如何对大象和老虎进行分类。系统看到的各种形状、大小和姿势的大象和老虎的图像越多,识别和分类它们的效率就越高。

时间序列数据的预测是一个重要的预测应用。在不同时间点记录的一组数据点构成了时间序列数据。数据点是在相邻的时间段收集的;因此,考虑观察值之间存在相关性的可能性是合乎逻辑的。如果我们考虑涵盖两次美国选举的连续八年的美元记录值,我们可以找到同一时期的重要宏观经济变量的记录,如国内生产总值(GDP)、黄金价格或原油价格。由于美元的价格受其他指标和政治变化的影响,并且我们通过时间了解其价格行为,如果某个政党赢得总统选举,我们可能能够预测美元价格在给定年份的变化。

另一个重要的预测与医学或故障查找有关,它被称为诊断。例如,如果我们试图根据人们的胆固醇水平、血压、年龄、体重、吸烟习惯或锻炼方式来预测心脏骤停的发生,我们将无法肯定地预测心脏病发作。相反,考虑到这些因素,我们也许能够预测它发生的可能性有多大。这种类型的预测基于逻辑回归

Note

逻辑回归,尽管听起来好像是一个回归算法,但它是一个分类算法。逻辑回归被认为是机器学习研究人员采用的统计回归模型,他们将其用作分类器。

以下是一些常见的预测模型。

  • 线性回归

  • 多变量回归

  • 多项式回归

复杂性

问题的复杂性是指从算法、计算时间等角度对涉及资源使用的问题类别的研究。为了估计总的计算成本,需要对资源进行分析。这是通过运行解决问题所需的算法来完成的。

计算机运行一个算法的时间就是该算法在特定计算平台上的运行时间。根据经典计算的基本原理,通过验证数据库中的项目直到找到一个期望的项目,可以获得数据库搜索目标的解决方案。这个练习需要时间复杂度为 O ( n )的最坏情况场景。

算法的计算复杂度是算法的时间、规模和相关资源需求如何随着数据集或问题规模的增长而发展的量化表达。算法旨在应用于未知函数或一组数据,以确定函数的属性(如周期或最小值)、因数或分类数据。

函数的输入数量(即数据大小)可以是从一位数到数万亿或更多。有很多算法,我们有足够的时间去挑选和试验它们,直到我们找到完成这项工作的算法。一旦我们选择了一个我们认为服务于我们的目的或目标的算法,我们需要决定对以下问题的回答。随着输入数量的增加,算法的运行时间表现如何?这被称为算法对大小敏感度

随着算法问题规模的增长,它的运行时间也在增长。这被称为时间复杂度。以下是下一章要讨论的一些时间复杂性。

  • 恒定时间复杂度

  • 多项式时间复杂度

  • 非多项式时间复杂度

第一章提到了计算复杂性,这将贯穿全书。当我们谈到量子机器学习的复杂性时,我们会深入讨论它。

混淆矩阵

现在我们已经探讨了分类的基本原理,接下来我们来看看真阳性(TP)假阳性(FP)真阴性(TN)假阴性 (FN)。当一个分类器说一个数据点是 X 时,它就是 X ,这就是所谓的真正。当分类器将一个数据点识别为 X ,但它实际上是一个 Y 时,就会出现假阳性。当一个数据点被归类为而不是 X ,并且它真的不是时,为真否定。

最重要的分类指标是准确度,这在本章前面讨论方差和偏差时已经讨论过了。精确度是有定义的,但是让我们在这里扩展一下这个定义。

量子机器学习教程(一))

量子机器学习教程(一))

数据科学家和工程师也有兴趣知道分类器如何避免错误警报。这是由分类器的精度定义的。

量子机器学习教程(一))

如果我们不希望错过任何一个 TPs,并且希望尽可能多地捕捉到 X s,那么衡量成功的标准就是所谓的召回

量子机器学习教程(一))

直观表示 TPs、FPs、TNs 和 FNs 的标准方法称为混淆矩阵。例如,对于二进制分类,混淆矩阵是一个 2 × 2 的表格,如下所示。

|   | 归类为**是** | 分类为**否** | | 真**是** | TPs 数量 | 联合国编号 | | 真**否** | FPs 数量 | TNs 数量 |

其中,TP 为真正;FP 是假阳性;TN 是真阴性;FN 是假阴性。

例如,如果诊所中的患者被分类为正确诊断患有癌症,或错误诊断患有癌症,或患有癌症但未被诊断,或未患癌症但被正确诊断为未患疾病,则癌症诊断过程的混淆矩阵如下表所示。

量子机器学习教程(一)

f -scoref-measure精度召回的调和平均值。使用 f 分数是因为虽然精确度和召回率是非常重要的度量,但是只处理其中一个并不能向我们呈现完整的场景。F-score 是总结这两个值的一种方式,并且提供了对分类器性能的更现实的测量。

监督学习

一个监督学习 ML 算法被呈现为输入数据样本或训练集 s标记为,并输出对特定问题的响应。在这种情况下,训练集包括期望的解决方案或标签,这允许它从数据中学习。这里的目标是从训练集中学习,以便可以对算法以前看不到的新数据进行有意义的预测。监督学习通常分为两种:回归和分类。

垃圾邮件过滤器用例是一个名为分类的监督学习任务的例子。该过滤器一直使用已知的垃圾邮件样本进行训练。它看到的训练数据越多,就越能更好地完成分类哪些邮件是垃圾邮件,哪些不是的任务。该算法会将电子邮件归类为垃圾邮件分类和“欺诈”或“非欺诈”表 2-1 列出了一些最常见的监督学习算法和相关的用例。

表 2-1

监督学习算法的例子

|

监督学习方法

|

例子

|

算法

|
| — | — | — |
| 回归 | 股价预测,房价预测 | 线性回归,岭,套索,多项式 |
| 分类 | 垃圾邮件:欺诈/非欺诈,癌症/非癌症 | 逻辑回归,SVM,KNN |
| 决策树 | 预测股票价格(回归),分类(信用卡欺诈) | 决策树,随机森林 |

类似地,如果我们使用威斯康星州乳腺癌数据集1【12】来训练诸如逻辑回归或 KNN 的 ML 模型,则可以基于特征的分类来预测患者是否患有癌症。

监督学习的主要目标之一是实现低偏差和低方差误差。

从数据到预测

从监督模型中的数据进行预测的途径包括四个基本步骤。

作为第一步,数据被清理、处理,并且选择模型族作为第一猜测。由于这是监督学习,所以需要对数据进行标注,并且知道数据特征和定义。例如,数据可以用线性加权函数来表示。通过拟合参数来训练模型。步骤如图 2-19(a-d)所示。

量子机器学习教程(一)

图 2-19d

数据驱动预测的第 4 步

量子机器学习教程(一)

图 2-19c

数据驱动预测的第 3 步

量子机器学习教程(一)

图 2-19b

数据驱动预测的步骤 2

量子机器学习教程(一)

图 2-19a

数据驱动预测的第一步

在图 2-19a 中,显示了具有未知关系的输入 x 和输出 y 的一维数据集。在图 2-19b 中,选择一个模型;例如,诸如回归的线性模型和用于分类的双曲正切函数。图 2-19c 显示了使用训练集拟合数据的训练模型,同时测试数据集在训练后验证模型。在图 2-19d 中,输入x’被馈入模型,得到输出y

在监督学习中,一个目标函数通常是通过先定义一个函数 up 来估计,比如 y = f ( x ),其中 x 是输入, y 是输出。

错误有三种主要类型。

  • 方差误差

  • 偏移误差

  • 不可约误差

与方差或偏差误差不同,不可约误差,顾名思义,是不能减少或最小化的。它们通常是由未知的变量或参数或数据中无法消除的噪声引起的。

支持向量机(SVM)

SVM 是一种监督学习技术。支持向量机在 ML 中非常流行,是所有 ML 爱好者都应该知道的工具。支持向量机对于表现出复杂性的中小型数据集的分类特别有用。本节重点介绍 SVM 的核心功能。这些最大似然算法在数学上是稳健的,并且自 20 世纪 90 年代以来一直在研究。我推荐浏览 Aurélien Géron 的使用 Scikit-Learn 和 TensorFlow 进行机器学习:构建智能系统的概念、工具和技术,第二版(O’Reilly Media,2019) [15]。

SVM 是从具有多种特征的复杂高维数据集进行合理有效预测的一种简单方法。SVM 可以拯救更高维度的支持向量,并对它们进行分类。支持向量定义了所谓的超平面。可以利用不同的核来实现这一点,例如多项式或高斯 RBF。理解 SVM 的一个好方法是分析一些真实的数据。在本练习中,我们再次使用 Iris 数据集,并改编来自scikit-learn [16]的库。

虹膜数据集的 SVM 示例

对鸢尾数据集的快速回顾提醒我们,公开可用的数据集由 150 朵鸢尾花的花瓣和萼片的长度和宽度的测量值组成。有三类不同的鸢尾花 50 个实例,每个都包括在数据集中:海滨鸢尾、杂色鸢尾和刚毛鸢尾[13]。您看到了支持向量分类 (SVC)的用法,这是 SVM 的一种典型分类。SVC 类允许添加几个多项式特征*,而不需要添加它们*。从计算成本的角度来看,这有助于避免增加特征数量的压力,因为我们没有添加任何特征。

量子机器学习教程(一)

图 2-20

带有虹膜数据集的 SVM(由 scikit-learn 文档提供[16])

图 2-20 (生成图形的代码可在 https://scikit-learn.org/stable/auto_examples/svm/plot_iris_svc.html 获得)显示萼片长度和萼片宽度,具有线性、多项式和高斯 RBF 核。如果我们目测图形,多项式核相对于线性核的灵活性是显而易见的。线性模型具有线性决策边界(相交超平面)。非线性核模型(多项式或高斯 RBF)具有更灵活的非线性决策边界,其形状取决于核的种类及其参数。

使用scikit-learn创建 SVM 模型不可避免地涉及到指定一些超参数,比如C(参见下面的代码片段)。低或高的C会影响图形的边界定义。之前,我们讨论了对于某些数据集,多项式核优于线性核的一些优点,这是因为前者具有更高的自由度,从而提供了灵活性。通过poly内核实现多项式特性很简单,如下面的代码片段所示。

models = (svm.SVC(kernel='linear', C=C),
          svm.LinearSVC(C=C, max_iter=10000),
          svm.SVC(kernel='rbf', gamma=0.7, C=C),
          svm.SVC(kernel='poly', degree=3, gamma='auto', C=C))
models = (clf.fit(X, y) for clf in models)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

多项式核可以与许多 ML 算法一起工作,并且不是特定于 SVM 的。然而,最好记住,低多项式次数的poly内核在处理高复杂度的数据集时效率会降低。如果使用高多项式次数,则往往会以很高的计算成本创建许多要素(即,它会变得很慢)。注意,LinearSVC比有kernel =linearSVC快很多。

使用多项式核时要注意的一个问题是,如果模型过拟合,降低多项式次数可能会有所帮助。另一方面,如果结果是拟合不足,增加多项式次数可能是前进的方向。代码中的gamma类似于正则化超参数。

高斯 RBF 核的 SVC 类用不同的Cgamma.值定义,如果gamma增大,则使钟形部分变窄,更小的gamma使其变宽,给出更平滑的判决边界。在这些情况下,gamma作为一个正则化超参数。如果模型过拟合,应减小gamma;如果是欠拟合,应增加gamma

其他类型的内核不太常用,比如用于文本或 DNA 序列分类的字符串内核。根据经验,首先尝试线性核来处理大型训练集或大型特征集。对于非常大的数据集,高斯 RBF 核也能很好地工作。

作为 SVM 的一个练习,查看可视化选项和分类可能是有用的。我们利用 Python 的seaborn库,它构建在matplotlib之上。seaborn库提供了一个高级数据可视化接口来创建一个名为热图的矩阵表示,以二维形式表示数据。数据值在图表中用颜色表示。本节后面生成的热图(见图 2-21 )的目的是提供一个彩色的可视化信息摘要。SVM 分类练习代码可以从本书的网站下载,作为svmIris.ipynb在 Jupyter 笔记本上运行,如清单 2-3(a–d)所示。

量子机器学习教程(一)

#import libraries
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#Get the data and define col names
colnames=["sepal_length_in_cm", "sepal_width_in_cm","petal_length_in_cm","petal_width_in_cm", "class"]
#Read the dataset
dataset = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", header = None, names= colnames )
#See the Data
dataset.head()

Listing 2-3aSVM Classification

of Iris Dataset: Importing Libraries and Observing Data

量子机器学习教程(一)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

清单 2-3a 导入所需的库,包括seaborn,下载 Iris 数据,并以下面的表格格式打开数据头定义。

量子机器学习教程(一)

ML 算法对数字比对文本更有效。这意味着,如果数据包含分类数据,我们必须将其编码为数字,然后才能用它们来评估模型。两种流行的技术是整数编码一键编码。一种更新的技术,叫做学习嵌入 g,在其他两种方法之间提供了一个有用的中间地带。

  • 整数编码:每个唯一标签映射到一个整数。

  • 一键编码:每个标签映射到一个二进制向量。

  • 学习嵌入:学习类别的分布式表示。

查看数据格式,将class改为数字而不是花的名称可能会有用。清单 2-3b 中的代码片段改变了分类格式。

量子机器学习教程(一)

#Use pandas to encode the categorized columns
dataset = dataset.replace({"class":  {"Iris-setosa":1,"Iris-versicolor":2, "Iris-virginica":3}})
#Read the new dataset
dataset.head()

Listing 2-3bSVM Classification of Iris Dataset: Change the Class to Numbers

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

由于清单 2-3b 中的代码,刚毛鸢尾被更改为class 1,杂色鸢尾被更改为class 2,海滨鸢尾被更改为class 3,如以下示例输出所示。

量子机器学习教程(一)

接下来,让我们使用清单 2-3c 中的代码用 seaborn 绘制热图。

量子机器学习教程(一)

plt.figure(1)
sns.heatmap(dataset.corr(), cmap="YlGnBu")
plt.title('Correlation between iris Classes')

Listing 2-3cSVM Classification of Iris Dataset: Generate Heatmap

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

列表 2-3c 生成如图 2-21 所示的热图,该图显示了花的种类与其花瓣和萼片的长度和宽度之间的相关性。

量子机器学习教程(一)

图 2-21

带有虹膜数据集的 SVM:热图

在最后一步中,在清单 2-3d 中,数据被分割,SVM 分类器被创建,精确度被计算。

量子机器学习教程(一)

# Split Data
X = dataset.iloc[:,:-1]
y = dataset.iloc[:, -1].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

#Create the SVM classifier model

from sklearn.svm import SVC
classifier = SVC(kernel = 'linear', random_state = 0)
#Fit the model for the data

classifier.fit(X_train, y_train)

#Make the prediction
y_pred = classifier.predict(X_test)

#Accuracy of Model
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)

from sklearn.model_selection import cross_val_score
accuracies = cross_val_score(estimator = classifier, X = X_train, y = y_train, cv = 10)
print("Accuracy: {:.2f} %".format(accuracies.mean()*100))
print("Standard Deviation: {:.2f} %".format(accuracies.std()*100))

Listing 2-3dSVM Classification of Iris Dataset: SVM Classifier and Accuracy code

量子机器学习教程(一)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

以下输出显示 98%的准确性和 3.64%的标准偏差。也说明只有一个分类错误的数据。

量子机器学习教程(一)

k-最近邻

k 最近邻 (KNN)是最容易在 ML 中实现的技术之一。KNN 处理结构化的、有标签的数据,并根据它们之间的相似性将它们分组。书籍的普及就是一个例子。在图 2-22 中,小圆圈代表犯罪小说,而方块代表科幻小说。不知何故,绘图似乎是基于距离。如果出版了流派未知(用三角形表示)的新书,算法会在训练数据中搜索与新例最近的邻居 S ,然后对其进行分类。KNN 不会生成分隔训练数据点的线。

量子机器学习教程(一)

图 2-22

k 近邻

KNN 的优点是易于实现,并且能够很好地处理行为良好的结构化数据。KNN 能够正确实现任意复杂的分割线,也称为超平面。KNN 的一个缺点是数据点中的单个错误可能会导致较差的分类结果。如果一个新的未知点紧挨着另一个类的离群点,则它被分类到错误的类中。这是过度拟合的另一个例子,其中对随机误差进行了拟合。

误差和损失函数

在本章早些时候,我们在方程 2.5 和 2.6 中看到了方差、偏差及其混合关系产生的各种误差。损失函数是计算误差的计算函数。预测误差与用于计算它们的损失函数直接相关(即,不同的损失函数可以为相同的预测计算不同的误差)。

回归的误差和损失函数

为了理解某些损失函数可能如何工作,让我们考虑六个学生在机器学习考试中的成绩。表 2-2a 列出了学生及其成绩。

表 2-2a

等级

|

学生#

|

级别

|
| — | — |
| one | fifty-six |
| Two | seventy-eight |
| three | eighty-nine |
| four | Sixty-three |
| five | Seventy-three |
| six | Ninety-one |

假设选择用来预测成绩的模型非常简单。它始终预测 75 为等级。现实中,没有一个成绩是 75。实际成绩与预测成绩之差为残差误差,如表 2-2b 所示。

表 2-2b

等级误差/残差

|

学生#

|

级别

|

预报

|

误差或残差

|
| — | — | — | — |
| one | fifty-six | Seventy-five | 56 – 75 = –19 |
| Two | seventy-eight | Seventy-five | 78 – 75 = 3 |
| three | eighty-nine | Seventy-five | 89 – 75 = 14 |
| four | Sixty-three | Seventy-five | 63 – 75 = –12 |
| five | Seventy-three | Seventy-five | 73 – 75 = –2 |
| six | Eighty-seven | Seventy-five | 91 – 75 = 16 |

表 2-2b 显示误差之和为

量子机器学习教程(一))

这意味着误差可以相互抵消,给人的印象是方差和偏差“很好”,而隐藏在明显的地方。然而,假设我们将这些误差平方,以去除负号并消除误差的抵消,从而更容易检查隐藏在我们“简单”模型中的陷阱。平方误差提供了放大大偏差或“异常值”的额外优势,使它们更容易检测。这导致了误差平方和 (SSE)。

SSE 也被称为残差平方和 (RSS)或残差平方和 (SSR)。在本例中,我们正在处理一个玩具数据集,但实际上,一般数据都附有标签和权重。一般来说,SSE 由下面表达式中的 E 给出。

量子机器学习教程(一))

(2.15)

其中 t 数据集是目标(或标签)。 y 是模型的输出。( n )是标记样本范围内各个数据的指数。因此t(I)是第 i 个训练行向量的目标的索引。

下面是从数学上定义 SSE 的另一种方式。

量子机器学习教程(一)

其中 x 数据集是实际值,是预测值。( n )是标记个体数据的指标。

量子机器学习教程(一)

are the predicted values. The (

SSE 是 ML 中最简单、通用的错误度量之一。

还有均方误差 (MSE),定义如下。

量子机器学习教程(一)

MSE 速度快,计算梯度。但是由于它直接依赖于数据集计数,它对数据集中的偏差可能有些敏感,并且显示与数据有较大差异的预测可能会受到严重惩罚。

回归的最后一个重要误差是平均绝对误差,定义为

量子机器学习教程(一)

MAE 是稳健的,一般不会受到偏差的很大影响。当数据被认为是损坏的时候使用它。选择任何回归误差函数都没有一成不变的规则。在三种常用的方法中,为了获得最佳结果,通常推荐使用试错法。

分类的误差和损失函数

以下是分类任务中常用的一些预测误差损失函数。

二元类熵衡量实际值和预测值之间概率分布的散度,常用于二元分类。这在数学上由下式给出

量子机器学习教程(一)

分类交叉熵中,只预测了众多标签中的一个。

以下是其他一些损失函数。

  • 负对数似然

  • 边缘分类器

  • 软边界分类器

  • 稀疏分类交叉熵

无监督学习

在无监督学习中,目标是在未标记的数据集中找到自然结构。该算法仅被输入数据,并且被期望自己找到有意义的结构,而没有外部监督或输入。这种类型的 ML 的一个例子是在图书馆中不断增长的文本集合中寻找聚类。这可以根据书籍主题随时间的变化、过时的讨论和主题以及作者身份来完成,这些内容对于现代读者而言可能已经变得过于敏感,而不是几个世纪前最初写作时的目标读者。

在无监督学习中,没有训练集和测试集。所有数据点都是训练数据点。聚类是从这些数据点构建的。

解决可视化的算法也是无监督学习的例子。可以向算法提供复杂和非结构化的数据,以获得表示的输出。

聚类是在数据中寻找自然分组的过程。人类的大脑倾向于自然地将我们遇到的数据聚集在一起。我们在头脑中对它们进行分类,并按照一定的类别对它们进行组织,因为我们的大脑通过为它们形成明确定义的组来简化分类。图 2-23a 显示了茶、咖啡、牛奶和果汁的分类方案。这有助于您理解数据,并找到与您所学内容相似的实例。

量子机器学习教程(一)

图 2-23a

聚类示例

无监督学习的一个重要应用是在网络安全和异常检测中,例如,信用卡欺诈,其中已经显示正常交易的系统试图识别任何异常交易模式。图 2-3b 展示了聚类如何用于欺诈或异常检测。

量子机器学习教程(一)

图 2-23b

聚类异常检测

现代生活中另一个无监督学习的伟大例子是谷歌新闻,其中一种算法自动将新闻故事分组到特定的部分。表 2-3 列出了一些最常见的无监督学习算法和相关的示例用例。

表 2-3

无监督学习算法的例子

|

无监督学习方法

|

例子

|

算法

|
| — | — | — |
| 使聚集 | 群集病毒数据,会议中的访问者群体 | 层次聚类,k-均值聚类 |
| 降维 | 数据维数的减少 | 主成分分析 |

k 均值聚类

任何聚类算法的主要目标都是将数据点分配给代表它们在一个 N 维空间中的相似性的聚类。 k-means 聚类是一种无监督学习算法。无监督学习是没有标签或目标的学习。k 均值聚类是一种产生数据聚类的算法。聚类包括为所有相似的数据点分配聚类名称。通常,集群被命名为 1、2、3 等等。

k-means 聚类将几个质心作为输入,其中每个质心定义一个聚类。当算法开始时,质心被放置在数据点向量空间中的随机位置。k-means 聚类有一个称为分配、的阶段和另一个称为最小化的阶段。该算法在这两个阶段循环几次。在分配阶段,该算法使用欧几里德距离计算将每个数据点放置在离其最近的质心旁边。在最小化阶段,通过向使质心更靠近数据点的方向移动质心,使质心和指定给它们的所有数据点之间的距离之和最小化。这被称为一个周期。一个周期的结束产生一个就绪超平面。

在一个循环结束后,下一个循环通过将数据点与其质心分离来开始。从位置上看,质心保持不变。有了这些,一个新的关联阶段就开始了,它可能会决定分配不同于前一个周期的任务。当遇到新的数据点时,它被分配给最近的质心,并继承该质心的名称作为标签。k-means 中的聚类是质心周围的区域。

在理论设置中,聚类中不需要标签。但是如果没有标签将它们联系起来,评估指标就变得无关紧要了。如果没有要定义的元素,度量标准将定义什么?没有标签,我们无法计算真阳性、假阳性、真阴性和假阴性。[24]中给出了聚类中分类评估指标用法的详细说明,称为聚类的外部评估。

然而,有时我们根本无法获得标签,被迫在没有标签的情况下工作。在这种情况下,我们可以使用集群的内部评估。在几种可用的评估指标中,Dunn [25]评估指标是最受欢迎的。邓恩系数的重点是测量一个 N 维空间中的团簇密度。通过计算每个聚类的邓恩系数来评估每个聚类的质量。

强化学习

在这种情况下,组成学习系统的算法被称为*代理。*代理人观察、选择并执行特定的行动以换取奖励或惩罚。强化学习应用的一个例子是如何教会机器人行走或执行任务。他们因做正确的工作而得到“奖励”,因做错工作而受到“惩罚”。另一个例子是有时人们如何学习玩电子游戏。他们尝试新事物,如点击地点、开门、获得弹药或金钱,并最终学会如何玩。类似地,强化学习算法中的代理在继续从基于数据的观察和自动学习中学习时尝试新事物。强化学习的一个非常受欢迎的领域是神经网络,这将在第三章中探讨。

有一些非常吸引人的媒体产品很好地展示了强化学习,包括在 https://openai.com/blog/emergent-tool-use/

摘要

机器学习(ML)已经成为人工智能和认知科学研究的一个子领域,自 2014 年以来,已经被企业以惊人的速度采用。第二章讲述了进入由量子力学推动的机器学习世界所需的一些基础知识。下一章在移动到量子信息处理概念之前包括神经网络的本质。

Footnotes 1

这指的是威斯康星大学医院的内科医生 William H. Wolberg 博士创建的威斯康星乳腺癌数据库中的一个公开可用的数据集。该数据集包含 569 个恶性和良性肿瘤细胞样本。沃尔伯格博士使用了从乳腺实性肿块患者身上采集的液体样本,以及一种易于使用的图形计算机程序 Xcyt,该程序可以基于数字扫描进行细胞学特征分析。该程序使用曲线拟合算法来计算样本中每个细胞的十个特征,然后计算图像每个特征的平均值、极值和标准误差。数据集可在 archive 获得。ics。uci。edu/ ml/数据集/乳腺癌+乳腺癌+Wi sconsin+(诊断)

三、神经网络

第二章介绍了机器学习(ML ),这是人工智能研究的一个子领域。深度学习(DL)是 ML 的一个子集。它试图解决人工智能领域的具体问题,如推理、规划和知识表示。

深度学习以人工神经网络(ann)为中心,这些网络功能强大,可扩展,用途广泛。谷歌图像使用人工神经网络来大规模分类数十亿张图像。从数学的角度来看,神经网络 (NN)可以看作是一个非线性回归模型,对模型函数有特定的选择。线性模型被输入到非线性函数中,然后表达式被多次嵌套。这些模型来源于生物神经网络[18]。它们代表的图形让人想起由突触连接的神经元。

Note

本章从应用的角度看经典人工神经网络的基础。它还着眼于深度学习技术,如学习、方差、偏差、神经网络,以及通过使用公共可用数据类型的一些动手练习来接触它。代码可以从该书的网站上下载。神经网络本身是一个庞大的领域,不可能在一章中包括该主题的所有方面。我们在阅读这本书时会重温这些概念,并看看它们如何在数据驱动的预测中与量子理论相适应。

人工神经网络的灵感来自于将人脑的逻辑功能映射到计算系统以创造智能机器的愿望。马文·明斯基是人工智能的创始人之一。他在 1954 年提交给普林斯顿大学的博士论文题目是“神经网络和大脑模型问题”1951 年,他建立了一个空军科学研究办公室资助的机器,见证了 SNARC(随机神经模拟强化计算器)的实现。当 A. C. Clarke 的传奇科幻小说《2001:太空漫游》被拍成电影时,他是导演斯坦利·库布里克的顾问。

在分类过程中,算法上只进行一次正向传递。正向传递只是输入通过神经网络时发生的计算的总和。前馈的逆过程被称为反向传播

建立一个神经网络需要一个结构化的方法,并由以下整体组件组成。

  • 关于网络层数的决定

  • 输入的大小(通常与输入层中神经元的数量相同)

  • 隐藏层中的神经元数量(如果有)

  • 输出层中的神经元数量

  • 权重的初始值

  • 偏差的初始值

感知器

从数学上讲,神经元的学习过程包括通过反向传播在训练过程中修改权重和偏差。其思想是在分类时测量网络误差,然后通过修改权重来最小化该误差。弗兰克·罗森布拉特于 1962 年发明的感知机是神经网络的组成部分。感知器由一个二进制阈值神经元组成,定义如下。

量子机器学习教程(一))

(3.1)

量子机器学习教程(一))

(3.2)

其中,xI为输入, w i 为权重, b 为偏差, zlogit加权和。输入和输出要么是实数,要么是二进制数。等式 3.2 定义了用非线性得出的决策。可以将等式 3.1 中的偏差吸收为权重,使得可以仅使用更新权重的规则。如图 3-1 所示。

量子机器学习教程(一)

图 3-1

偏置吸收

为了实现这一点,输入x?? 0 被添加到等式 3.1 中,值为 1,偏差作为其权重。

量子机器学习教程(一))

b=w0x0

在前面的等式中, b 可以是 x 0w 0 = 1 或者 b 可以是 w 0x 0 = 1。

输入永远不会改变,我们要做的是改变偏差。因此,输入被视为权重。这个过程被称为偏置吸收

下面描述感知器训练规则的基础。

  1. 选择一个训练场景。

  2. 如果预测输出与输出标签匹配,则无需采取任何措施。

  3. 如果感知器在应该预测 1 的时候预测了 0,则输入向量被添加到权重向量。

  4. 如果感知器在应该预测 0 的时候预测了 1,则从权重向量中减去输入向量。

通常,一个神经网络由 N 个输入组成,比如说INN 权值如图 3-2 所示。

量子机器学习教程(一)

图 3-2

简单神经网络

在图 3-2 所示的简单 NN 中,输入为二进制(开/关)。在该模型中,输入和权重相加,通常为阶跃函数的阈值函数给出输出。以下是这种模式的局限性。

  • 输入和输出是二进制的

  • 没有自动训练重量的方法;因此,权重的设置是手动完成的

与图 3-2 所示的简单神经网络相比,图 3-3 所示的感知器模型更加通用,因为输入可以是数字,而不必是二进制的。感知器模型是前馈神经网络的最简单形式。

量子机器学习教程(一)

图 3-3

简单感知器

图 3-3 所示的广义感知器模型有输入和权重,然后是方程 3.1 和 3.2 描述的偏置吸收。如果我们重温方程 3.1 ,感知器的计算涉及由

量子机器学习教程(一))

(3.3)给出的模型函数

其中 w T 是权重乘以输入向量 x 的矩阵表示。 ϕ 是依赖于输入和权重的函数。 f 与模型功能 z 相同。这里,输入和输出要么是实数,要么是二进制数。非线性函数 ϕ 被称为激活函数(稍后讨论)。输入馈入后,求和在过程开始时完成。

在过程的末尾,应用阶跃函数。以下是常见的阶跃函数。

量子机器学习教程(一)),量子机器学习教程(一))

其中 sgn符号函数。当一层中的神经元连接到它之前层中的所有其他神经元(即输入神经元)时,该层是完全连接的

感知器的一个简单例子是如果一个人要去看板球比赛。去或不去的决定取决于几个因素,或者在这种情况下,输入。

  • 天气:如果下雨,板球比赛将不会举行

  • 由于没有汽车,场馆靠近公共交通

  • 如果有朋友也可以加入提供优质服务的公司

  • 如果喜爱的明星玩家正在参与游戏

问题的感知器如图 3-4 所示。

量子机器学习教程(一)

图 3-4

板球比赛的简单感知器示例

通过给每个输入分配权重来计算输出。根据预先确定的决策标准,输出是二进制的(是/否),如果最终得分高于 60,则为“是”,否则为“否”。权重会根据“如果朋友不能加入怎么办”等问题的答案影响决策或者“如果下雨,但只是一个小时呢?”或者“如果明星球员不上场呢?”。再次注意,这里所有的权重操作都是手动完成的。

激活功能

神经网络中的激活函数定义了如何将输入的加权和转换成网络层中一个或多个节点的输出。为了理解激活功能,让我们假设我们有一组狗的图像和另一组不包含狗的图像。假设每个神经元从图像中单个像素的值接收输入。当计算机处理这些图像时,我们希望我们的神经元调整其权重和偏差,使错误识别的图像越来越少。这种方法看起来很直观,但它要求权重或偏差有很小的变化,从而只引起输出有很小的变化。因为,如果我们在输出上有一个大的跳跃,我们就失去了学习曲线中的“平滑度”,并且不能渐进地学习。用人类对儿童学习过程的类比来说,学习是一小步一小步地完成的(或者说,一点一点地)。不幸的是,感知器并没有表现出这种“小步学习”的行为。感知器要么是 0,要么是 1,这是一个巨大的跳跃,对学习没有帮助,如图 3-5 所示。

量子机器学习教程(一)

图 3-5

感知器输出

为了纠正这种渐进式学习的缺乏,需要“某种东西”来平滑图 3-5 中 0 和 1 之间的陡峭步骤。基本上,我们需要一个从 0 到 1 连续变化的函数。从数学上来说,我们需要的是一个连续函数,它允许我们计算导数。在数学中,导数是函数在连续函数的给定点上如何变化。对于输入由实数给出的函数,导数是图上一点切线的斜率。

在图 3-4 的板球比赛的例子中,我们在神经元输出之后的激活函数中定义了一个大于 60 的阈值。这个激活函数用于在我们的板球比赛示例中注入“平滑度”。

没有激活函数,感知器的输出将是线性的,并且线性函数趋于简单。他们很难解决复杂的问题。神经网络(NNs)被视为通用函数逼近器,因为它们可以计算和学习几乎任何函数。因此,需要非线性,以便神经网络可以计算复杂函数。因此,需要激活功能

以下是一些最常见的激活功能。

量子机器学习教程(一)

图 3-6

线性激活函数

  • 线性:感知器的线性输出中,函数的导数为零,因为函数是线性的。线性激活函数常用于线性回归。因此,没有激活函数的神经网络通常被视为线性回归模型。图 3-6 描绘了一个线性激活函数。

  • Sigmoid: The sigmoid function is one of the most widely used nonlinear activation functions that transform the values between the range 0 and 1. Mathematically, the Sigmoid function is continuous, and a typical sigmoid function, represented in Figure 3-7, is given by

    量子机器学习教程(一))

对于(∞、∞)之间的输入变化,sigmoid 会在范围(0,1)内产生较小的输出变化。

量子机器学习教程(一)

图 3-7

ReLU、tanh 和 sigmoid 函数(来源[273])

sigmoid 函数始终具有明确定义的非零导数;因此,可以使用梯度下降。从历史上看,乙状结肠函数非常受欢迎。最近,ReLU 函数越来越受欢迎。

  • Tanh: Tanh (see Figure 3-7) is another popular activation function mathematically defined as

    量子机器学习教程(一))

Tanh 和乙状结肠密切相关,tanh 被认为是“拉伸”的乙状结肠。像 sigmoid 一样,tanh 是 S 形的、连续的、可微分的。Tanh 围绕零对称,范围从–1 到+1,而 sigmoid 范围从 0 到+1。

  • ReLU: A rectified linear unit is another nonlinear activation function that has gained popularity in deep learning. The main advantage of using the ReLU function over other activation functions is that it does not activate all the neurons simultaneously. ReLU (see Figure 3-7) is mathematically defined as follows.

    量子机器学习教程(一))

ReLU 是一个简单的函数,因为它有助于解决使用 sigmoid 观察到的一些优化问题而变得流行起来。该函数对于负值为零,对于正值线性增长,如图 3-7 所示。ReLU 的实现也非常简单,而 sigmoid 的实现要复杂得多。

有关其他激活功能的更多信息,请阅读古德菲勒等人在www.deeplearningbook.org【274】发表的深度学习

隐藏层

当我们讨论 SVM 特征和核的类型时,您看到了多项式核提供了更多的灵活性,因为与线性核相比,多项式核的决策边界是曲线。类似地,在神经网络中,通常需要灵活的决策边界。一个隐藏层是实现这一点的一种方式。

量子机器学习教程(一)

图 3-8

具有单个隐藏层的 NN(使用 TensorFlow 操场创建,参考文献[27])

图 3-8 中标记的红色区域显示了用 tensor flow Playground【27】创建的前馈网络中的一个单隐层。多个隐藏层允许更复杂的决策边界。尽管取决于要求,在一个神经网络中可以有几个隐藏层;通常,一个隐层就足以解决大多数非线性问题。最近的研究表明,任何函数都可以用一个具有一个隐层的足够大的神经网络来表示(Lin,Jegelka,2018)[19];然而,训练这个网络可能是一个挑战。随着整个行业对功能集的要求和需求的增长,考虑多个隐藏层已经成为一种常见的做法。

反向传播

反向传播是前馈的逆过程。一个简单的逻辑回归网络,严格来说,不需要任何反向传播。然而,随着层数的增加,这些计算的数量也会增加。这些层不一定会增加计算的复杂性,但会增加计算量。

NN 的经验法则之一是误差的反向传播是梯度下降。梯度下降是前馈网络最常见的训练算法之一,数学上这就是反向传播,定义为

量子机器学习教程(一))

(3.5)

其中,当前权重量子机器学习教程(一))是更新后的权重,量子机器学习教程(一))是朝着最陡梯度方向向下的前一步的权重, η 是学习率, E 是成本函数, C 是以微分形式的 E 的数学等价物,对wij求导以获得梯度。

实验操作:带 TensorFlow 操场的 NN

TensorFlow [20]是 Google 发明的,通过利用张量在机器学习中高效地使用图形模型,并迅速成为非常受欢迎的 ML 库。TensorFlow 是谷歌为快速机器学习任务制作的免费开源软件库。它可以用于一系列任务,但侧重于深度神经网络的训练和推理。TensorFlow 是一个基于数据流和可微分编程的符号数学库。TensorFlow 的文档可在 www.tensorflow.org 获得。由于其利用图形属性的特性,许多 TensorFlow 实现在 GPU(图形处理单元)上运行比在 CPU 上运行更高效。Google 推出了 TPUs(张量处理单元)来优化 TensorFlow 的代码性能。在写这本书的时候,TensorFlow 的版本是 2.x。

Keras 是另一个流行的 ML 工具。Keras 是一个高级 API,它允许我们构建、评估、训练和执行所有类型的神经网络。Keras 的原始版本可以在 https://github.com/keras-team/keras 获得。Keras 的多个其他实现已经发布。三个最受欢迎的开源深度学习库是 TensorFlow、微软认知工具包(CNTK)和 Theano。在本书中,我们使用与 TensorFlow 捆绑在一起的 Keras 实现。

为了体验神经网络及其工作方式,在我们开始详细编码之前,有一个资源可以让我们体验神经网络的性能和架构,并使其可视化。它被称为 TensorFlow 游乐场[27]。

以下步骤模拟神经网络。

第一步:将浏览器指向 http://playground.tensorflow.org 。如图 3-9 所示,这应该会打开我们用来一些概念的游戏的 GUI。这个神经网络模拟器帮助用户习惯各种神经网络算法的概念。

量子机器学习教程(一)

图 3-9

tensorflow 游乐场 GUI

对于接下来的步骤,请参考图 3-10 。相应的步骤用深蓝色数字标记。

第二步:选择数据。

第三步:选择特征。

第四步:设计神经网络。

第五步:调整参数。

第六步:运行。

第七步:检查结果。

量子机器学习教程(一)

图 3-10

TensorFlow 游乐场配置

隐藏图层:选择无隐藏图层。这将改变顶部隐藏层标题旁边的 2 为 0,并相应地改变 NN,如图 3-11 所示。

量子机器学习教程(一)

图 3-11

没有隐藏层的 TensorFlow 游乐场配置

通过消除隐藏层来观察输出的变化。输出中的域边界变得线性地更加明确,复杂性降低。

线性回归:

第一步:在右上角点击问题类型下拉菜单,选择回归

量子机器学习教程(一)

第二步:在左下方选择数据作为数据集。

量子机器学习教程(一)

第三步:在顶部点击下拉菜单,选择学习率最低设置。学习率是用于梯度下降的“步长”。

量子机器学习教程(一)

第四步 : 激活是添加到输出的功能。选项有线性、Sigmoid、Tanh 和 ReLU。选择直线

量子机器学习教程(一)

第五步 : 正则化率指的是正则化,减少过拟合。该选项可以用 0、L1 和 L2 之间的值进行试验,以估计如果有任何过度拟合需要多少正则化。

第六步:点击运行/开始/播放按钮。

量子机器学习教程(一)

第七步:观察输出曲线。它似乎在慢慢收敛。

量子机器学习教程(一)

延迟的原因与学习率的值有关。这个模型似乎学得太慢了。目标是使用尽可能少的时期尽可能快地达到收敛。输出中提到的损耗就是误差。在这种情况下,它是均方根误差(RMSE)。

步骤 7 :点击学习率下拉菜单,增加学习率,再次点击运行。算法运行速度有变化吗?

步骤 8 :再次点击学习率下拉菜单,增加学习率到高值,再次点击运行。输出测试损耗显示为 NaN而非数字。学习率的大值会导致过冲。

量子机器学习教程(一)

为了找到最佳学习率,我们需要确定学习率的值,该值使用最少的时期使我们最接近零。

分类 :

第一步:模拟分类,选择以下参数。

  1. 问题类型下拉菜单中选择分类

  2. 激活下拉菜单中选择 Tanh

  3. 学习率下拉菜单中选择 0.01

量子机器学习教程(一)

步骤 2 :选择双斑点数据集。

量子机器学习教程(一)

步骤 3 :分离数据集的输出可能如下图所示。

量子机器学习教程(一)

步骤 4 :零损耗可能无法实现,尤其是在模型中引入一些噪声的情况下

第 5 步:和之前的线性回归实验室一样,挑战在于调整学习率以在尽可能少的时期内达到最小损失。

鼓励读者在 TensorFlow 游乐场玩一玩,花一些时间更改和调整隐藏图层、回归和分类的参数,同时在左侧添加新功能。随着顶部隐藏图层的数量发生变化,该工具会添加更多的隐藏图层。同样,单击“特征”下的方框会向 NN 模型添加新特征。

量子机器学习教程(一)

更改数据下的数据集类型,如棘手的螺旋数据集,以熟悉各种 NN 模型随参数变化的行为。

量子机器学习教程(一)

接下来,让我们进入神经网络架构的世界。

神经网络体系结构

我们已经了解了神经网络的基本原理、灵活性和可扩展性,以及感知器是如何构建神经网络的。从体系结构的角度来看,构建神经网络有几种选择。下面是一些现在使用的比较常见的方法。

  • 卷积神经网络(CNN)

  • 前馈神经网络

  • 循环神经网络(RNN)

卷积神经网络(CNN)

1981 年诺贝尔生理学和医学奖授予了大卫·H·哈贝尔和托尔斯滕·魏塞尔,以表彰他们在 1968 年发表的论文“猴子纹状皮层的感受野和功能结构”[20]。他们研究了动物的视觉皮层,发现视野中的小区域的活动与大脑中一个小的、明确的区域的活动相关联。他们表明,识别负责部分视野的神经元是可能的。这导致了感受野的发现。

通常,在图像分析中,使用的技术之一是展平图像,其中各层被组合或堆叠在彼此之上。前面讨论的逻辑回归技术允许我们将图像向量输入到一个完成所有处理工作的单个神经元中。这两种技术(展平和逻辑回归)与感受野的概念相结合,为我们提供了如何构建卷积神经网络(CNN)的指南。为了在 CNN 中有效使用,逻辑回归部分使用不同的激活函数,但结构保持不变。

展平允许将图像合并到一个图层中。这使得我们可以在一个层中拥有所有可见的信息。这是构建神经网络的重要部分,因为全连接层的输入由一维数组组成。展平的概念如图 3-12 所示。

量子机器学习教程(一)

图 3-12

扁平化(medium.com 提供[21])

卷积层获取图像,并对整个图像进行逻辑回归。因此,第一个输入由展平向量的分量组成,第二个输入由接下来的分量组成,依此类推。该过程如图 3-13 所示。

量子机器学习教程(一)

图 3-13

卷积神经网络

CNN 有多层。CNN 是专门为处理图像而设计的。卷积层神经元扫描图像的特定区域,这是它们的视野 (FOV),并拾取图像中的图案,如眼睛、耳朵、鼻子、车轮等等。例如,可以让 CNN 处理一个大小为 10 的图像,其所有三层都有一个 3 × 3 的感受野。假设第一层具有随机分配偏差和权重的特性,则它会获取 10X10 的图像,并生成大小为 8 × 8 的图像。然后将这个大小赋予第二个 CNN 层。第二层可以有自己的感受野,具有随机初始化的偏差和权重,但对于这个例子,让我们假设它也是 3 × 3。这产生 6 × 6 的输出,然后传递到具有第三局部感受野的第三层。第三层 CNN 产生一个 4 × 4 的图像。然后,该图像被展平为 16 维向量,并被馈送到具有一个输出神经元并使用非线性逻辑函数的标准全连接层。逻辑函数给出 0 和 1 之间的输出,并比较输出和图像标签。然后,它计算误差,反向传播误差,并对数据集中经过整个网络训练的每幅图像重复这一过程。

训练 CNN 包括训练局部感受野以及全连接层的权重和偏差。逻辑回归和局部感受野之间的结构差异在于前者使用逻辑函数。但是,在后者中,可以使用任何激活功能。广泛使用的激活功能之一是整流线性单元或 ReLU。输入 x 的 ReLU 由 x 和 0 之间的最大值给出(即,如果输入为负,则返回 0,否则返回原始输入)。CNN 广泛应用于计算机视觉领域。

前馈神经网络

如前所述,单层神经网络可以解决简单的线性问题,但难以解决复杂性。为了解决更复杂的问题,引入了非线性。前馈神经网络 (FFNN)是一种实现解决复杂性所需的非线性的方法。它也被称为多层感知器 (MLP)和深度前馈神经网络 (DFNN)。

图 3-11 所示的前馈神经网络具有以下形式

量子机器学习教程(一))

(3.6)

其中,1ϕ 2 等为非线性激活函数。 w i 是定义为权重矩阵的参数。模型函数由级联的线性模型和函数形成。这种连接可以重复几次。这是神经网络威力的一个例子:它们利用了线性代数的数据处理能力与非线性动力学的灵活性的结合。

*量子机器学习教程(一)

图 3-14

单隐层简单前馈神经网络

图 3-14 显示了一个具有两个隐藏层的前馈神经网络。前馈神经网络是通过连接多层感知器构成的,使得每层的每个单元都连接到下一层的单元。第一层由输入xI组成,下一层是由 h i 单元组成的隐藏层,最后一层有输出 y i 。有一个激活函数来更新每个神经元,每一层都在前一层之后更新,从而形成一个前馈神经网络。以下来自方程 3.6 ,图 3-11 的单隐层前馈神经网络模型。

量子机器学习教程(一))

前馈 NN 可以与许多可能的激活函数 ( ϕ )组合,例如 tanhsigmoidReLU 。关于激活函数的详细讨论可以在参考文献[15]中找到,我们将在接下来的章节中根据需要对其进行扩展。

以下是前馈神经网络的典型特征。

  • 它由多层组成。

  • 每一层都有几个神经元。

  • 每个神经元都与前一层的神经元相连。

  • 信息只通过一种方式流动;因此前馈。

  • 它由输入输出、隐藏层组成。如果需要,可以有多个隐藏层。

以下是设计 FFNN 时一些基本的尺寸指南

  • 输入层

    • 大小等于输入维度的数量。

    • 它可能需要一个额外的额外神经元作为偏置项。

    • 对于许多稀疏维,通常考虑宽而深的神经网络(具有许多层)。

  • 隐藏层

    • 隐藏层的大小和数量取决于训练样本、输入特征、输出和问题的复杂性。

    • 深度学习使用多个隐藏层。

  • 输出层

    • 对于回归,只需要单个神经元。

    • 对于二进制分类,只有一个神经元作为输出是二进制的(0/1,真/假…)。

    • 对于多类分类,softmax 图层在其他图层中使用。

    • 大小建议是每个类标签一个节点。

实验操作:使用 MNIST 数据集进行影像分析

本实验练习着眼于图像分类。我们创建并训练一个神经网络模型,在训练之后,该模型可以以很高的准确度从手写图像中预测数字。您应该对神经网络如何工作以及 TensorFlow 如何与 Keras 一起工作有一个基本的了解。

本实验是使用 MNIST 数据集完成的。MNIST 是由高中生和美国人口普查局员工手写的 7 万个数字小图像组成的集合。每个图像都标有它所代表的数字。这个集合已经被研究了很多,所以它经常被称为机器学习的“你好,世界”。每当人们开发一种新的分类算法时,他们都很好奇它在 MNIST 上的表现如何,任何学习机器学习的人迟早都会处理这个数据集。

图 3-15 描述了该任务:创建并训练一个模型,该模型将一个手写数字的图像作为输入,并预测该数字的类别;也就是说,它预测输入图像的数字或类别。

量子机器学习教程(一)

图 3-15

图像分类任务

打开名为TF_Keras_imageClassifiaction.ipynb的 Jupyter 笔记本文件,可从该书的网站下载。

量子机器学习教程(一)

第一步:导入 TensorFlow,验证版本。

import tensorflow as tf
tf.logging.set_verbosity(tf.logging.ERROR)
print('Using TensorFlow version', tf.__version__)

  • 1
  • 2
  • 3
  • 4

第二步:导入 MNIST 数据。

mnist=tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test)= mnist.load_data()

  • 1
  • 2
  • 3

第三步:塑造数据。

print('x_train:', x_train.shape)
print('y_train:', y_train.shape)
print('x_test:', x_test.shape)
print('y_test:', y_test.shape)

  • 1
  • 2
  • 3
  • 4
  • 5

下面显示了输出。

量子机器学习教程(一)

第四步:看一张图片。

from matplotlib import pyplot as plt
%matplotlib inline
plt.imshow(x_train[0], cmap='binary')
plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5

下面显示了输出。

量子机器学习教程(一)

第五步:显示标签。

y_train[0]

  • 1
  • 2

步骤 6 :在这一步中,我们将利用热编码。每个标签被转换成具有 10 个元素的列表,并且对应类的索引元素被设置为 1,其余的都被设置为 0,例如

量子机器学习教程(一)

from tensorflow.keras.utils import to_categorical
y_train_encoded = to_categorical(y_train)
y_test_encoded = to_categorical(y_test)

  • 1
  • 2
  • 3
  • 4

第七步:验证形状。

print('y_train_encoded:', y_train_encoded.shape)
print('y_test_encoded:', y_test_encoded.shape)

  • 1
  • 2
  • 3

下面显示了输出。

量子机器学习教程(一)

步骤 8 :显示编码后的标签。

y_train_encoded[1]

  • 1
  • 2

下面显示了输出。

量子机器学习教程(一)

步骤 9 :参见图 3-16 ,显示了神经网络架构。正如在关于感知器和偏差吸收的讨论中所解释的那样,该图表示了以下等式。

量子机器学习教程(一))

其中 w 1、 w 2、 w 3 为权重。 b 是截距项,也叫偏差

量子机器学习教程(一)

图 3-16

神经网络架构。测试意味着转置。这给出了我们想要的结果的点积

第十步:建立神经网络。

我们有一个有 784 个特征的单个神经元。这就构成了一个具有两个隐层的神经网络,如图 3-17 所示。

量子机器学习教程(一)

图 3-17

具有两个隐层的神经网络

步骤 11 :对实例进行预处理。展开 N 维数组为向量。

import numpy as np
x_train_reshaped = np.reshape(x_train,(60000, 784))
x_test_reshaped = np.reshape(x_test, (10000, 784))
print('x_train_reshaped:', x_train_reshaped.shape)
print('x_test_reshaped:', x_test_reshaped.shape)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下面显示了输出。

量子机器学习教程(一)

第十二步:创建模型。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential([
    Dense(128, activation='relu', input_shape=(784,)),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

步骤 13 :激活功能:ReLU(整流器线性单元)。为了在节点中施加激活函数,第一步是定义输入的线性和。量子机器学习教程(一))

第二步是定义激活函数输出。

量子机器学习教程(一))

图 3-18 显示了该功能。

量子机器学习教程(一)

图 3-18

具有两个隐层的神经网络

编译模型。

model.compile(
    optimizer='sgd',
    loss='categorical_crossentropy', metrics=['accuracy']
)
model.summary()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下面显示了输出。

量子机器学习教程(一)

第 14 步:训练模型。

model.fit(x_train_norm, y_train_encoded, epochs=3)

  • 1
  • 2

下面显示了输出。

量子机器学习教程(一)

第十五步:评估模型。

loss, accuracy = model.evaluate(x_test_norm, y_test_encoded)
print('Test Set Accuracy %', accuracy*100)

  • 1
  • 2
  • 3

下面显示了输出。

量子机器学习教程(一)

第十六步:预测。

preds = model.predict(x_test_norm)
print ('Shape of predictions:', preds.shape)

  • 1
  • 2
  • 3

下面显示了输出。

量子机器学习教程(一)

第 17 步:绘制结果。

plt.figure(figsize=(12, 12))
start_index = 0
for i in range(25):
    plt.subplot(5, 5, i+1)
    plt.grid(False)
    plt.xticks([])
    plt.yticks([])
    pred = np.argmax(preds[start_index+i])
    gt = y_test[start_index+i]
        col = 'b'
    if pred != gt:
        col = 'r'
            plt.xlabel('i={},pred={}, gt={}'.format(start_index+i, pred, gt), color = col)
    plt.imshow(x_test[start_index+i], cmap= 'binary')
plt.show()

量子机器学习教程(一)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

下面显示了输出。

量子机器学习教程(一)

第 18 步:绘制结果。

plt.plot(preds[8])
plt.show()

  • 1
  • 2
  • 3

下面显示了输出。

量子机器学习教程(一)

实验操作:使用 Iris 数据集的深度神经网络分类器

本实验室主要使用 Iris 数据集进行深度神经网络分类。对于这个实验室,我们利用 Google Colab 云计算环境。

Google Colaboratory 是由 Google 提供的完全托管的免费服务,允许我们加载和运行用于数据科学、机器学习和深度学习的笔记本。除了 CPU,该环境还提供了利用 GPU 和 TPU 的选项。

这个实验室使用 TensorBoard,这是 TensorFlow 的可视化工具包[23]。它提供了机器学习实验所需的可视化和工具,如下所示。

  • 跟踪和可视化损失和准确性等指标

  • 可视化模型图(操作和层)

  • 查看权重、偏差或其他张量随时间变化的直方图

  • 将嵌入投影到低维空间

  • 显示图像、文本和音频数据

  • 剖析张量流程序

第一步:在 https://colab.research.google.com 访问谷歌合作实验室。

该链接应打开以下页面。

量子机器学习教程(一)

步骤 2 :点击欢迎来到合作实验室链接,访问更广阔的环境。观看介绍视频,熟悉 Google Colab 环境。

量子机器学习教程(一)

第三步:到左上角点击文件➤上传笔记本。您会看到以下屏幕。

量子机器学习教程(一)

第四步:上传 DNNIris.ipynb 笔记本文件:Chrome 调出一个你的操作系统特有的文件请求器:Finder (macOS)和 Windows Explorer (Windows)。导航到您保存的位置(例如,您的桌面)。从您的中选择下载并解压缩的实验室文件夹。zip 文件(不是。zip 文件本身)。然后使用 run 按钮或每个代码单元格左侧的箭头按钮运行它。

量子机器学习教程(一)

接下来,我们通过运行代码继续 hnads-on 练习:

步骤 1 :第一段代码测试环境并将必要的库导入到 Google Colab 环境中。

量子机器学习教程(一)

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
try:
  # %tensorflow_version only exists in Colab.
  %tensorflow_version 2.x
except Exception:
  pass
import tensorflow as tf
from tensorflow import keras

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

第二步:读取数据。

import os
data = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
data_local = keras.utils.get_file(fname=os.path.basename(data),
                                           origin=data)
iris = pd.read_csv(data_local)
iris.columns = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm','Species']

iris

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

输出列出了 Iris 数据集的一个示例。

量子机器学习教程(一)

第三步:塑造数据。

input_columns = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']
x = iris [input_columns]
y = iris[['Species']]

print (x.head())
print('-----')
print (y.head())

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出显示了选定的列。

量子机器学习教程(一)

步骤 4 :对标签进行编码。输出标签是类似 Iris-setosa 或 Iris-virginica 的字符串。这些被称为分类变量。它们需要被转换成数字,就像我们对 SVM 所做的那样。这叫做编码

from sklearn.preprocessing import LabelEncoder
encoder =  LabelEncoder()
y1 = encoder.fit_transform(y.values) ## need y.values which is an array
print(y1)

  • 1
  • 2
  • 3
  • 4
  • 5

第五步:将数据分成训练/测试:80%用于训练,20%用于测试。

from sklearn.model_selection import train_test_split
# 'y1' (encoded labels)
x_train,x_test, y_train,y_test = train_test_split(x,y1,test_size=0.2,random_state=0)
print ("x_train.shape : ", x_train.shape)
print ("y_train.shape : ", y_train.shape)
print ("x_test.shape : ", x_test.shape)
print ("y_test.shape : ", y_test.shape)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

下面显示了输出。

量子机器学习教程(一)

第六步:建立深度 NN 模型。由于这是一个分类器,神经网络将看起来如下。

输出层中的神经元=输出类(此处为 3)输出激活是“softmax”

  1. 输入层中的神经元=输入维度(此处为 4)

  2. 输出层中的神经元=输出类(此处为 3)

  3. 输出激活为“softmax”。

  4. 使用 Adam optimizer,这是一种优化算法,可用来代替经典的随机梯度下降过程,根据训练数据迭代更新网络权重。

input_dim = len(input_columns)
output_clases = 3
print ("input_dim : ", input_dim, ", output classes : ", output_clases)
model = tf.keras.Sequential([
            tf.keras.layers.Dense(units=64, activation=tf.nn.relu, input_dim=input_dim),
            tf.keras.layers.Dense(units=32, activation=tf.nn.relu),
            tf.keras.layers.Dense(units=output_clases,  activation=tf.nn.softmax)
            ])
# loss = 'sparse_categorical_crossentropy'
model.compile(loss='sparse_categorical_crossentropy',
                 optimizer=tf.keras.optimizers.Adam(),
                 metrics=['accuracy'])
print (model.summary())
tf.keras.utils.plot_model(model, to_file='model.png', show_shapes=True)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

下面的 NN 模型是代码片段的输出。

量子机器学习教程(一)

第 7 步:tensor board GUI 可能会在第一次出现 HTML 错误。使用 TensorBoard GUI 右上角的刷新图标刷新页面

量子机器学习教程(一)

import datetime
import os
import shutil
app_name = 'classification-iris'
tb_top_level_dir= '/tmp/tensorboard-logs'
tb_app_dir = os.path.join (tb_top_level_dir, app_name)

tb_logs_dir = os.path.join (tb_app_dir, datetime.datetime.now().strftime("%H-%M-%S"))
print ("Saving TB logs to : " , tb_logs_dir)
#clear out old logs
shutil.rmtree ( tb_app_dir, ignore_errors=True )
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=tb_logs_dir, histogram_freq=1)

## This will embed Tensorboard right here in jupyter
%load_ext tensorboard
%tensorboard --logdir $tb_logs_dir

量子机器学习教程(一)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

下面显示了 TensorBoard 视图中的输出。

量子机器学习教程(一)

步骤 8 :训练数据(这可能需要一段时间,取决于纪元值)。

%%time
epochs = 100  ## experiment 100, 500, 1000
print ("training starting ...")
history = model.fit(
              x_train, y_train,
              epochs=epochs, validation_split = 0.2, verbose=1,
              callbacks=[tensorboard_callback])
print ("training done.")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

下面显示了输出。

量子机器学习教程(一)

第九步:绘制历史。

%matplotlib inline
import matplotlib.pyplot as plt
plt.plot(history.history['accuracy'], label='train_accuracy')
plt.plot(history.history['val_accuracy'], label='val_accuracy')
plt.legend()
plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

下面显示了输出。

量子机器学习教程(一)

将此图与 TensorBoard 的图进行比较,以确定训练和验证的准确性。

第十步:获取预测。

np.set_printoptions(formatter={'float': '{: 0.3f}'.format})
predictions = model.predict(x_test)
predictions

  • 1
  • 2
  • 3
  • 4

在步骤 10 的输出中,对于每个测试输入,softmax 层产生三个数字。这些数字是概率。如果把它们加起来,总数是 1.0。我们希望选择概率最高的输出。

例如,( 0.03086184,0.33362046,0.6355177)表示

  • 1 类有 0.03 或 3%的概率。

  • 2 类有 0.33 或 33%的概率。

  • 3 类有 0.63 或 63%的概率。

因此,我们选择概率最高的类别作为预测:类别 3

步骤 11 :评估模型。

metric_names = mo

del.metrics_names
print ("model metrics : " , metric_names)
metrics = model.evaluate(x_test, y_test, verbose=0)
for idx, metric in enumerate(metric_names):
    print ("Metric : {} = {:,.2f}".format (metric_names[idx], metrics[idx]))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

下面显示了输出。

量子机器学习教程(一)

准确度显示非常接近 1.0,因为损耗仅为 0.12。

步骤 12 :由于这是一个分类问题,混淆矩阵是评估模型的有效方法。我们再次利用seaborn库进行可视化,就像我们在 SVM 做的一样。

from sklearn.metrics import confusion_matrix
import seaborn as sns
cm = confusion_matrix(y_test, y_pred, labels = [0,1,2])
cm
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize = (8,5))
sns.heatmap(cm, annot=True, cmap="YlGnBu", fmt='d').plot()

from sklearn.metrics import classification_report
from pprint import pprint

pprint(classification_report(y_test, y_pred, output_dict=True))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

以下是热图。

量子机器学习教程(一)

以下是混淆矩阵中的指标。

量子机器学习教程(一)

回到第二章中关于混淆矩阵的讨论,你能从这个输出中得出什么结论?

摘要

第三章着眼于人工神经网络,它将人脑的逻辑功能映射到计算系统,以创建智能机器。基于神经网络,深度学习解决人工智能中的特定问题,如推理、规划和知识表示。下一章涵盖量子信息处理概念的本质。*

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...