人工智能的数学基础-二-

149 阅读1小时+

人工智能的数学基础(二)

原文:zh.annas-archive.org/md5/2493e49e788325932f4968ea203e1f3d

译者:飞龙

协议:CC BY-NC-SA 4.0

第五章:卷积神经网络和计算机视觉

他们。能。看见。

H.

卷积神经网络已经彻底改变了计算机视觉和自然语言处理领域。应用领域,不论与之相关的伦理问题如何,都是无限的:自动驾驶汽车,智能无人机,人脸识别,语音识别,医学影像,生成音频,生成图像,机器人等。

在这一章中,我们从卷积互相关的简单定义和解释开始,并强调这两种略有不同的数学运算在机器学习术语中被混淆的事实。我们也犯了同样的错误,将它们混为一谈,但有一个很好的理由。

然后,我们将卷积操作应用于过滤类似网格的信号,这非常适合,比如时间序列数据(一维)、音频数据(一维)和图像(如果图像是灰度的,则为二维,如果是彩色图像,则为三维,额外的维度对应于红色、绿色和蓝色通道)。当数据是一维时,我们使用一维卷积,当数据是二维时,我们使用二维卷积(为了简单和简洁起见,在本章中我们不会进行三维卷积,对应于三维彩色图像,称为张量)。换句话说,我们使网络适应数据的形状,这个过程极大地促成了卷积神经网络的成功。这与强制数据适应网络输入形状的做法形成鲜明对比,比如将二维图像展平成一个长向量,以使其适应只接受一维数据作为输入的网络。在后面的章节中,我们将看到同样适用于图神经网络成功的原因是相同的。

接下来,我们将卷积操作融入到前馈神经网络的架构中。卷积操作使网络变得“局部连接”,而不是完全连接。从数学上讲,包含每一层权重的矩阵并不是“密集的”(因此卷积层的大部分权重为零)。此外,权重具有相似的值(权重共享),不像完全连接的神经网络,其中每个输入都分配了不同的权重。因此,包含卷积层权重的矩阵大部分为零,非零部分是“局部化的并且具有相似的值”。对于图像数据或音频数据来说,这是很好的,因为大部分信息都是局部的。此外,这显著减少了我们在优化步骤中需要存储和计算的权重数量,使卷积神经网络成为具有大量输入特征的数据的理想选择(回想一下,对于图像来说,每个像素都是一个特征)。

接着我们讨论池化,这是卷积神经网络架构中常见的另一层。与上一章类似,多层结构和每一层的非线性使我们能够从图像中提取越来越复杂的特征,显著增强计算机视觉任务。

一旦我们理解了卷积神经网络的基本解剖结构,就可以直接将相同的数学应用于涉及自然语言处理的任务,比如情感分析、语音识别、音频生成等。相同的数学在计算机视觉和自然语言处理中起作用的事实类似于我们大脑对环境、经历和思维的物理变化能力(大脑的虚拟模拟版本)。即使大脑的某些部分受损,其他部分也可以接管并执行新的功能。例如,致力于视觉的大脑部分在视力受损时可以开始执行听觉或记忆任务。在神经科学中,这被称为神经可塑性。我们离完全理解大脑及其工作原理还有很长的路要走,但对这种现象的最简单解释是大脑中的每个神经元执行相同的基本功能,类似于神经网络中的神经元执行一种基本数学计算(实际上是两种,线性组合然后激活),而是多层次的各种神经连接产生了感知和行为中观察到的复杂性。卷积神经网络实际上受到了大脑视觉新皮层的启发。正是它们在 2012 年在图像分类方面的成功(AlexNet2012)将人工智能重新推回主流,激励了许多人并带领我们走到了这里。如果你有额外的时间,这一章节的一个很好的睡前阅读是关于大脑视觉新皮层功能及其与为计算机视觉设计的卷积神经网络的类比。

卷积和互相关

卷积和互相关是稍有不同的操作,测量信号中的不同内容,可以是数字图像、数字音频信号或其他内容。如果我们使用对称函数 k,称为滤波器,它们就完全相同。简而言之,卷积翻转滤波器然后沿函数滑动,而互相关在不翻转的情况下沿函数滑动滤波器。自然地,如果滤波器恰好是对称的,那么卷积和互相关就完全相同。翻转核的优势在于使卷积操作可交换,这反过来有利于编写理论证明。也就是说,从神经网络的角度来看,可交换性并不重要,有三个原因:

  1. 首先,卷积操作通常不会单独出现在神经网络中,而是与其他非线性函数组合在一起,因此无论我们是否翻转内核,我们都会失去交换律。

  2. 其次,在训练过程中,神经网络通常会学习核中条目的值,因此,它会学习正确位置的正确值,翻转变得无关紧要。

  3. 第三,对于实际实现而言,卷积网络通常使用多通道卷积,例如,输入可以是一个带有红绿蓝通道的彩色图像,甚至是一个视频,带有红绿蓝空间通道和一个时间通道。此外,它们使用批处理模式卷积,意味着它们以批量方式接受输入向量、图像、视频或其他数据类型,并同时应用并行卷积操作。即使进行了卷积核翻转,这些操作也不能保证是可交换的,除非每个操作的输出通道数与输入通道数相同。通常情况下并非如此,因为多个通道的输出通常被整体或部分地相加在一起,产生的输出通道数与输入通道数不同。

因此,许多机器学习库在实现卷积时不会翻转核,实质上是实现了互相关,并将其称为卷积。我们在这里也是这样做的。

两个实值函数 k(滤波器)和 f 之间的卷积运算定义为:

( k ☆ f ) ( t ) = ∫ -∞ ∞ f ( s ) k ( - s + t ) d s = ∫ -∞ ∞ f ( - s + t ) k ( s ) d s ,

离散函数的离散模拟为:

( k ☆ f ) ( n ) = ∑ s=-∞ ∞ f ( s ) k ( - s + n ) = ∑ s=-∞ ∞ f ( - s + n ) k ( s ) .

两个实值函数k(滤波器)和f之间的交叉相关操作被定义为:

( k * f ) ( t ) = ∫ -∞ ∞ f ( s ) k ( s + t ) d s = ∫ -∞ ∞ f ( s - t ) k ( s ) d s ,

离散函数的离散模拟是:

( k * f ) ( n ) = ∑ s=-∞ ∞ f ( s ) k ( s + n ) = ∑ s=-∞ ∞ f ( s - n ) k ( s ) .

请注意,定义卷积和互相关的公式看起来完全相同,只是对于卷积,我们使用-s而不是s。这对应于翻转所涉及的函数(在移位之前)。还要注意,卷积积分和求和中涉及的索引相加得到 t 或 n,而对于互相关则不是这样。这使得卷积是可交换的,即( f ☆ k ) ( n ) = ( k ☆ f ) ( n ),而互相关不一定是可交换的。我们稍后会进一步讨论可交换性。

每当我们遇到一个新的数学对象时,最好停下来问自己几个问题,然后再深入研究。这样,我们可以建立坚实的数学基础,同时避免深不见底的技术和复杂数学的海洋。

我们手头有什么样的数学对象?

对于卷积和互相关,我们在离散情况下考虑无限和,而在连续情况下考虑无限域上的积分。这引导了我们的下一个问题:

由于我们正在对无限域求和,我们可以允许哪种函数,而不会导致我们的计算无限增长?

换句话说,这些无限和积分对于什么样的函数存在并且是明确定义的?在这里,从简单的答案开始,比如当fk是紧支持的(在定义域的有限部分以外都是零),或者当fk衰减得足够快,使得无限和或积分收敛。大多数情况下,这些简单情况已经足够适用于我们的应用,比如图像和音频数据,以及我们陪伴它们的滤波器。只有当我们发现我们的简单答案不适用于我们特定的用例时,我们才寻求更一般的答案。这些答案以定理和证明的形式出现。不要首先寻求最一般的答案,因为这些答案通常是建立在一个历经数个世纪、无数问题和寻找答案的数学理论之上的。首先选择最一般的道路是令人不知所措的,违反直觉的,违反历史的,而且会耗费时间和资源。这不是数学和分析自然演变的方式。此外,如果我们碰巧遇到某人用最一般和技术性的语言谈论,却没有提供任何背景或动机说明为什么需要这种广泛和复杂程度,我们只会将他们调整出去,平静地继续我们的生活,否则他们可能会让我们困惑不已。

这个数学对象用来做什么?

卷积运算具有广泛的应用,涵盖了从纯理论数学到应用科学再到工程和系统设计领域。在数学中,它出现在许多领域,如:微分方程、测度论、概率、统计学、分析和数值线性代数。在应用科学和工程中,它被用于声学、光谱学、图像处理和计算机视觉,以及在信号处理中有限冲激响应滤波器的设计和实现中。

这个数学对象在我的特定研究领域中有什么用处,它如何应用于我的特定兴趣或使用案例?

为了我们的人工智能目的,我们将使用卷积操作来构建一维文本和音频数据以及二维图像数据的卷积神经网络。相同的思想可以推广到大多数信息局部化的高维数据类型。我们在两个情境中使用卷积神经网络:理解图像、文本和音频数据,以及生成图像、文本和音频数据。

此外,在数据和数据分布的背景下,我们使用以下与两个独立随机变量的概率分布有关的结果:如果μ和ν是拓扑群上的概率测度,并且 X 和 Y 是两个独立随机变量,它们各自的分布是μ和ν,则卷积μ☆ν是随机变量 X + Y 的概率分布。我们在概率和测度章节中详细阐述这一点。

这个数学对象是如何产生的?

值得投入一点额外的时间来学习一些历史和时间顺序,了解我们关心的对象首次出现的时间、方式和原因,以及与之相关的主要结果。换句话说,与其通过一系列干燥的引理、命题和定理来研究我们的数学对象,这些通常缺乏所有背景信息,我们通过它自己的故事学习,以及数学家在尝试发展它时遇到的起起落落。我们在这里学到的最有价值的见解之一是,数学是随着我们探索各种问题、建立联系以及更深入地理解我们需要使用的东西而有机地发展的。现代数学分析是在尝试回答与傅里叶正弦和余弦级数相关的非常简单的问题时发展起来的(将一个函数分解为其组成频率),结果对于许多类型的函数来说并不那么简单,例如:我们何时可以交换积分和无穷和?积分是什么,dx又是什么?

对许多人来说,尤其是那些感到被数学吓到或感到害怕的人,令人惊讶的是,在追求理解的过程中,一些数学界最重要的人物,包括某些领域的奠基人,都曾在路上犯过多次错误,并在以后的时间里加以纠正,或者被他人纠正,直到理论最终成形。

卷积积分的最早应用之一出现在 1754 年,是在达朗贝尔推导泰勒定理中。后来在 1797 年至 1800 年间,西尔维斯特·弗朗索瓦·拉克罗瓦在他的著作《差分与级数论》中使用了这个概念,这是他百科全书系列《微积分和积分微积分论》的一部分。此后不久,卷积运算出现在数学界非常著名的人物的作品中,如拉普拉斯、傅立叶、泊松和沃尔特拉。这里的共同点是所有这些研究都与函数的积分、导数和级数有关。换句话说,微积分,再次将函数分解为其组成频率(傅立叶级数和变换)。

在深入研究之前,我们必须了解与这个数学对象相关的最重要的操作、操纵和/或定理是什么?

事物不会在没有对许多人极其有益的情况下突然成名或走红。卷积运算虽然简单,但非常有用,并且可以很好地推广到更复杂的数学实体,如测度和分布。它是可交换的,可结合的,对加法和标量乘法具有分配性,其积分变为乘积,其导数变为仅对其组成函数之一进行微分。

  • 平移不变性和平移等变性:卷积神经网络的这些特性使我们能够在图像的不同部分检测相似的特征。也就是说,在图像的一个位置出现的模式很容易在图像的其他位置被识别出来。主要原因是在神经网络的卷积层中,我们在整个图像上使用相同的滤波器(也称为卷积核或模板),捕捉相同的模式(如边缘或水平、垂直和对角方向)。这个滤波器有一组固定的权重。回想一下,这在全连接神经网络中并不适用,因为我们需要为图像的不同像素使用不同的权重。由于我们使用卷积而不是矩阵乘法来执行图像滤波,我们可以获得平移不变性的好处,因为通常我们只关心模式的存在,而不关心其位置。从数学上讲,平移不变性看起来像:

t r a n s a ( k ) ☆ f = k ☆ t r a n s a ( f ) = t r a n s a ( k ☆ f ) ( t )

其中t r a n s a是通过a函数进行的翻译。对于我们的 AI 目的,这意味着给定一个设计用于在图像中捕捉某些特征的滤波器,将其与平移图像(在水平或垂直方向)卷积等同于过滤图像然后翻译它。这种性质有时被称为平移等变性,而平移不变性则归因于经常内置在卷积神经网络架构中的池化层。我们将在本章后面讨论这一点。无论如何,在每一层我们在整个图像上使用一个滤波器(一组权重)的事实意味着当存在时我们在图像的各个位置检测到一个模式。相同的原理适用于音频数据或任何其他类型的类似网格的数据。

  • 在常规空间中的卷积是频率空间中的乘积:两个函数的卷积的傅里叶变换是每个函数的傅里叶变换的乘积,只是有一个缩放因子。换句话说,卷积操作不会产生新的频率,卷积函数中存在的频率只是组成函数的频率的乘积。

在数学中,我们不断更新我们用来解决不同问题的有用工具,因此,根据我们的专业领域,我们在这一点上会拓展研究相关但更复杂的结果,比如周期函数的循环卷积,计算卷积的首选算法等。对于我们以一种对 AI 目的有用的方式深入研究卷积的最佳途径是通过信号和系统设计,这是下一节的主题。

从系统设计的角度看卷积

我们被系统包围着,每个系统与其环境互动,并被设计用来完成特定任务。例如我们建筑中的暖通空调系统,汽车中的自适应巡航控制系统,城市交通系统,灌溉系统,各种通信系统,安全系统,导航系统,数据中心等。一些系统彼此互动,而另一些则不互动。有些系统非常庞大,而另一些则像一个恒温器这样小而简单的设备,通过传感器接收来自环境的信号,处理它们,并输出其他信号,例如给致动器。

当设计和分析这样的简单系统时,卷积运算会出现,这些系统处理输入信号并产生输出信号,如果我们强加两个特殊约束:线性和时不变性。如果我们处理空间相关信号,如图像,而不是时间相关信号,如电信号或音频信号,线性和时不变性变为线性和平移或移位不变性。请注意,视频既是空间(两个或三个空间维度)又是时间相关的。在这种情况下,线性性与缩放信号(放大或缩小)的输出以及两个叠加信号的输出有关。时间和平移不变性与延迟(时间相关)信号的输出或平移或移位(空间相关)信号的输出有关。我们将在下一节详细介绍这些内容。线性性和时间或平移不变性结合起来非常强大。它们使我们能够找到任何信号的系统输出,只要我们知道一个简单脉冲信号,称为系统的脉冲响应的输出。系统对任何输入信号的输出仅通过将信号与系统的脉冲响应进行卷积即可获得。因此,强加线性和时间或平移不变性的条件极大简化了信号处理系统的分析。

那么困扰人的问题是:这些创造奇迹的条件有多现实?换句话说,线性和时/平移不变系统有多普遍,甚至只是近似线性和近似时/平移不变系统?大多数现实系统不是非线性和复杂的吗?幸运的是,我们可以控制系统的设计,所以我们可以决定设计具有这些特性的系统。一个例子是由电容器、电阻器、电感器和线性放大器组成的任何电路。事实上,这在数学上等同于一个理想的机械弹簧、质量和阻尼器系统。对我们来说相关的其他例子包括处理和过滤各种类型的信号和图像。我们将在接下来的几节中讨论这些内容。

卷积和冲激响应对于线性和平移不变系统

让我们形式化线性系统和时/平移不变系统的概念,然后理解当试图量化具有这些特性的系统对任何信号的响应时,卷积运算是如何自然产生的。从数学角度来看,一个系统是一个函数H,它接受一个输入信号x并产生一个输出信号y。信号x和y可以依赖于时间、空间(单个或多个维度)或两者都可以。如果我们在这样的函数上强制线性性,那么我们在声称两件事情:

  1. 一个经过缩放的输入信号的输出仅仅是原始输出的缩放:H ( a x ) = a H ( x ) = a y

  2. 两个叠加信号的输出只是两个原始输出的叠加:上 H(x1 + x2)= 上 H(x1)+ 上 H(x2)= y1 + y2.

如果我们强制时间/平移不变性,那么我们声称延迟/平移/移位信号的输出只是延迟/平移/移位的原始输出:H ( x ( t - t 0 ) ) = y ( t - t 0 ) .

当我们考虑任意信号时,无论是离散的还是连续的,我们可以利用上述条件,将其看作是各种幅度的冲激信号的叠加。这样,如果我们能够测量系统对单个冲激信号的输出,称为系统的冲激响应,那么这就足以测量系统对任何其他信号的响应。这成为一个非常丰富的理论基础。在本章中,我们只讨论离散情况,因为在人工智能中我们关心的信号(例如自然语言处理、人机交互和计算机视觉)是离散的,无论是一维音频信号还是二维或三维图像。连续情况是类似的,只是我们考虑无穷小步长而不是离散步长,我们使用积分而不是求和,并且我们强制执行连续性条件(或者我们需要的任何其他条件,以便使所涉及的积分定义良好)。实际上,连续情况带来了一点额外的复杂性:必须以数学上合理的方式正确定义冲激,因为它不是以通常意义上的函数。幸运的是,有多种数学方法可以使其定义良好,例如分布理论,或将其定义为作用于通常函数的算子,或作为测度并利用勒贝格积分的帮助。然而,我一直在避免测度、勒贝格积分和任何深入的数学理论,直到我们真正需要它们的额外功能,因此目前,离散情况是非常充分的。

我们定义一个单位冲激δ ( k ),对于每个非零的 k 都为零,当 k=0 时为 1,并定义其响应为H ( δ ( k ) ) = h ( k )。然后δ ( n - k )对于每个 k 都为零,当 k=n 时为 1。这代表了一个位于 k=n 处的单位冲激。因此,x ( k ) δ ( n - k )是一个幅度为 x(k)的冲激,位于 k=n 处。现在我们可以将输入信号 x(n)写成:

x ( n ) = ∑ k=-∞ ∞ x ( k ) δ ( n - k )

上面的总和可能看起来像是一种复杂的信号写法,但实际上它非常有用,因为它表明任何离散信号都可以被表达为在正确位置按比例缩放的无限脉冲的总和。现在,利用 H 的线性和平移不变性假设,很容易看出系统对信号 x(n)的响应是:

H ( x ( n ) ) = H ( ∑ k=-∞ ∞ x ( k ) δ ( n - k ) ) = ∑ k=-∞ ∞ x ( k ) H ( δ ( n - k ) ) = ∑ k=-∞ ∞ x ( k ) h ( n - k ) = ( x ☆ h ) ( n ) = y ( n )

因此,一个线性和平移不变系统完全由其冲激响应 h(n)描述。但还有另一种看待这个问题的方式,这种方式与线性和平移不变系统无关,对我们接下来几节的目的非常有用。这种说法

y ( n ) = ( x ☆ h ) ( n )

信号 x(n)经过与滤波器h(n)卷积后可以转换为信号 y(n)。因此,精心设计滤波器 h(n)可以产生具有一些期望特性的 y(n),或者可以从信号 x(n)中提取特定特征,例如所有的边缘。此外,使用不同的滤波器 h(n)可以从相同的信号 x(n)中提取不同的特征。我们将在接下来的几节中详细阐述这些概念,同时请记住以下内容:当信息,如信号或图像,通过卷积神经网络流动时,不同的特征会在每个卷积层中被提取(映射)。

在离开线性和时不变系统之前,我们必须提到这样的系统对正弦输入有非常简单的响应:如果系统的输入是具有特定频率的正弦波,那么输出也是具有相同频率的正弦波,但可能具有不同的幅度和相位。此外,了解系统的冲激响应使我们能够计算其频率响应,即系统对所有频率的正弦波的响应,反之亦然。也就是说,确定系统的冲激响应使我们能够计算其频率响应,确定频率响应使我们能够计算其冲激响应,从而完全确定系统对任意信号的响应。这种联系在理论和应用角度都非常有用,并与傅立叶变换和信号的频域表示密切相关。简而言之,线性和时不变系统的频率响应简单地是其冲激响应的傅立叶变换。我们在这里不详细介绍计算细节,因为这些概念对本书的其余部分并不重要,然而,了解这些联系并理解看似不同领域的事物如何联系并相互关联是很重要的。

卷积和一维离散信号

让我们解剖卷积操作,并理解它是如何通过将滤波器(卷积核)滑动到输入信号上来创建一个新信号的。接下来我们不会翻转卷积核,因为我们已经确定了从神经网络的角度来看,翻转卷积核是无关紧要的。我们从一个一维离散信号 x(n) 开始,然后将其与滤波器(卷积核)k(n) 进行卷积,产生一个新信号 z(n)。我们展示如何通过沿着 x(n) 滑动 k(n) 逐个获取 z(n) 的条目。为简单起见,设 x ( n ) = ( x 0 , x 1 , x 2 , x 3 , x 4 ) 和 k ( n ) = ( k 0 , k 1 , k 2 ) 。在这个例子中,输入信号 x(n) 只有五个条目,而卷积核有三个条目。在实践中,比如在信号处理、图像滤波或人工智能的神经网络中,输入信号 x(n) 的规模比滤波器 k(n) 大几个数量级。我们很快就会看到这一点,但这里的例子仅供说明。回想一下离散互相关的公式,即卷积而不翻转卷积核的情况:

( k * x ) ( n ) = ∑ s=-∞ ∞ x ( s ) k ( s + n ) = ⋯ + x ( - 1 ) k ( - 1 + n ) + x ( 0 ) k ( n ) + x ( 1 ) k ( 1 + n ) + x ( 2 ) k ( 2 + n ) + ⋯

由于*x(n)k(n)*都没有无限多个条目,并且总和是无限的,我们假装当索引未定义时,条目为零。由卷积产生的新滤波信号只有具有索引的非平凡条目:-4,-3,-2,-1,0,1,2。让我们写下每个条目:

( k x ) ( - 4 ) = x 4 k 0 ( k x ) ( - 3 ) = x 3 k 0 + x 4 k 1 ( k x ) ( - 2 ) = x 2 k 0 + x 3 k 1 + x 4 k 2 ( k x ) ( - 1 ) = x 1 k 0 + x 2 k 1 + x 3 k 2 ( k x ) ( 0 ) = x 0 k 0 + x 1 k 1 + x 2 k 2 ( k x ) ( 1 ) = x 0 k 1 + x 1 k 2 ( k * x ) ( 2 ) = x 0 k 2

上述操作更容易通过一个心理图像来理解:固定信号 x ( n ) = ( x 0 , x 1 , x 2 , x 3 , x 4 ),然后从右向左滑动滤波器 k ( n ) = ( k 0 , k 1 , k 2 )。这也可以用线性代数符号简洁地总结,我们将输入向量 x(n) 乘以一种特殊的矩阵,称为包含滤波器权重的 Teoplitz 矩阵。我们将在本章后面详细介绍这一点。

当我们在信号上滑动滤波器时,输出信号将在*x(n)k(n)匹配的索引处达到峰值,因此我们可以设计滤波器以捕捉x(n)*中的某些模式。这样,卷积(未翻转)提供了信号和核之间相似性的度量。

我们还可以以不同的方式查看交叉相关性,或未翻转的卷积:输出信号的每个条目都是输入信号条目的加权平均值。这样,我们强调了这种转换的线性性,以及我们可以选择内核中的权重以突出某些特征而不是其他特征的事实。我们将在接下来讨论的图像处理中更清楚地看到这一点,但为此我们必须在二维中写出卷积(未翻转)的公式。在线性代数符号中,离散二维卷积相当于将二维信号乘以另一种特殊类型的矩阵,称为双重块循环矩阵,也将在本章后面出现。请记住,矩阵乘法是一种线性变换。

卷积和二维离散信号

在二维中,卷积(未翻转)操作如下:

( k * x ) ( m , n ) = ∑ q=-∞ ∞ ∑ s=-∞ ∞ x ( m + q , n + s ) k ( q , s )

例如,矩阵 A 和卷积核 K 之间的(2,1)项的卷积(未翻转)如下:4 × 4矩阵和3 × 3卷积核。

A K = a 00 a 01 a 02 a 03 a 10 a 11 a 12 a 13 a 20 a 21 a 22 a 23 a 30 a 31 a 32 a 33 k 00 k 01 k 02 k 10 k 11 k 12 k 20 k 21 k 22

这是一个数学公式,描述了如何计算卷积操作。要理解这一点,想象将卷积核 K 准确放置在矩阵 A 的中心位置,然后将重叠的部分相乘并将所有结果相加。请注意,这里我们只计算了输出信号的一个条目,这意味着如果我们处理图像,它将是滤波后图像的一个像素值。我们需要所有其他像素的值!为此,我们需要知道哪些索引是有效的卷积。有效的意思是完整,即在计算过程中考虑所有卷积核条目。找到考虑完整卷积核的索引,回想一下我们将 K 准确放置在 A 上的心理图像,K 的中心位于我们要计算的索引位置。根据这种放置方式,K 的其余部分不应超出 A 的边界,因此对于我们的示例,好的索引将是(1,1),(1,2),(2,1)和(2,2),产生输出:

Z = z 11 z 12 z 21 z 22 .

这意味着如果我们在处理图像,经过滤的图像 Z 的尺寸会比原始图像 A 小。如果我们想要生成与原始图像相同尺寸的图像,那么在应用滤波器之前,我们必须用零填充原始图像。对于我们的示例,我们需要在 A 的完整边界周围填充一层零,但如果 K 更大,那么我们需要更多层的零。以下是用一层零填充的 A:

A padded = 0 0 0 0 0 0 0 a 00 a 01 a 02 a 03 0 0 a 10 a 11 a 12 a 13 0 0 a 20 a 21 a 22 a 23 0 0 a 30 a 31 a 32 a 33 0 0 0 0 0 0 0 .

除了零填充之外,还有其他方法可以保持输出图像的大小,尽管零填充是最简单和最流行的方法。这些方法包括:

  • 反射: 不要添加一层或多层零值,而是添加一层或多层与图像边界像素相同的值,以及它们下面的像素,如果需要更多的话。也就是说,不要关闭图像边界外的像素,而是使用已经存在或接近边界的相同像素来扩展图像。

  • 环绕:这用于周期信号。数学上,这是循环卷积、循环矩阵、离散傅里叶变换产生循环矩阵的特征值,以及傅里叶矩阵包含其特征向量作为列的地方。我们不会在这里深入讨论,但要记住周期性通常会简化事情,并让我们想到周期波,进而让我们想到傅里叶相关的东西。

  • 多通道:应用多个独立滤波器(权重矩阵)的通道,每个通道对原始输入进行下采样,然后将它们的输出组合起来。

图像滤波

图 5-1 展示了使用不同卷积核对同一图像进行卷积,提取图像不同特征的示例。

300

图 5-1。将各种滤镜应用于图像(图片来源)。

例如,表中的第三个核心在其中心有 8,其余的条目都是-1。这意味着这个核心使当前像素的强度增加了 8 倍,然后减去周围所有像素的值。如果我们在图像的一个均匀区域,意味着所有像素的值相等或非常接近,那么这个过程将得到零,返回一个黑色或关闭的像素。另一方面,如果这个像素位于边界上,例如眼睛的边界,或者鹿的脸部边界,那么卷积的输出将具有非零值,因此它将是一个明亮的像素。当我们将这个过程应用于整个图像时,结果是一个新图像,其中许多边缘都用明亮的像素描绘,而图像的其余部分则是黑暗的。正如我们在表中看到的,能够检测边缘、模糊等的核心的选择并不是唯一的。同一表格包括用于模糊的二维离散高斯滤波器。当我们离散化一维高斯函数时,我们不会失去其对称性,但是当我们离散化二维高斯函数时,我们会失去其径向对称性,因为我们必须用一个方形矩阵来近似其自然的圆形或椭圆形状。请注意,高斯在中心处达到峰值,随着远离中心的扩散而衰减。此外,其曲线下的面积(在二维中是曲面)为 1。这具有平均和平滑(去除噪音)的整体效果,当我们将其与另一个信号卷积时。我们付出的代价是去除尖锐的边缘,这正是模糊的作用(想象一下,尖锐的边缘被自身和中心几个标准偏差距离内所有周围像素的平滑衰减平均值所取代)。标准偏差(或方差的平方)越小,我们就能从图像中保留更多的细节。

另一个很好的例子显示在图 5-2 中。在这里,每个图像是顶部图像与每个子图的左下角所示的滤波器(核)之间的卷积结果。这些滤波器被称为Gabor 滤波器。它们被设计用来捕捉图像中的某些模式/纹理/特征,并且它们的工作方式类似于人类视觉系统中发现的滤波器。

emai 0502

图 5-2. Gabor 滤波器

我们的眼睛检测图像中事物变化的部分,即对比度。它们捕捉到边缘(水平、垂直、对角线)和梯度(测量变化的陡峭程度)。我们设计数学上执行相同操作的滤波器,通过卷积将它们滑过信号。当信号中没有变化时,这些产生平滑和无事件的结果(零或接近的数字),当检测到与核对齐的边缘或梯度时,会产生尖峰。

特征图

卷积神经网络通过优化损失函数来从数据中学习卷积核,就像全连接网络一样。训练函数的未知权重是每个卷积层中每个卷积核的条目、偏差以及与网络架构中涉及的任何全连接层相关的权重。卷积层的输出(包括非线性激活函数)称为特征图,学习到的卷积核是特征检测器。神经网络中的一个常见观察是,网络中较早的层(靠近输入层)学习低级特征,如边缘,而后续层学习更高级别的特征,如形状。这是自然而然的,因为在每个新层中,我们都会与非线性激活函数组合,所以复杂度会随着多个层的增加而增加,网络表达更复杂特征的能力也会增强。

我们如何绘制特征图?

特征图帮助我们打开黑匣子,直接观察训练网络在每个卷积层上检测到的内容。如果网络仍在训练过程中,特征图可以帮助我们找出错误的来源,然后相应地调整模型。假设我们将一幅图像输入到一个经过训练的卷积神经网络中。在第一层,通过卷积操作,一个核在整个图像上滑动并产生一个新的滤波图像。然后,这个滤波图像通过一个非线性激活函数,产生另一个图像。最后,这个图像通过一个池化层,很快会解释,产生卷积层的最终输出。这个输出是一个不同于我们开始的图像的图像,可能具有不同的尺寸,但如果网络训练得好,输出图像将突出显示原始图像的一些重要特征,如边缘、纹理等。这个输出图像通常是一个数字矩阵或数字张量(对于彩色图像是三维的,或者如果我们在批量图像或视频数据中工作,则是四维的,其中有一个额外的维度用于时间序列)。可以使用 Python 中的 matplotlib 库将这些可视化为特征图,其中矩阵或张量中的每个条目都映射到与矩阵条目相同位置的像素的强度。图 5-3 显示了卷积神经网络的各个卷积层中的各种特征图。

emai 0503

图 5-3. 卷积神经网络中的特征图

线性代数符号

现在我们知道,在卷积神经网络中最基本的操作是卷积。给定一个滤波器k(可以是一维、二维或三维或更高维),卷积操作将输入信号应用到k上,通过在信号上滑动k。这个操作是线性的,意味着每个输出是输入组件的线性组合(通过k中的权重),因此可以高效地表示为矩阵乘法。我们需要这种效率,因为我们仍然必须以一种易于评估和区分的方式编写代表卷积神经网络的训练函数。问题的数学结构仍然与许多机器学习模型的情况相同,我们现在非常熟悉:

  • 训练函数:对于卷积神经网络,这通常包括输入的组件的线性组合,与激活函数组合,然后是一个池化函数(即将讨论),在多个不同大小和连接的层上,最后顶部是一个逻辑函数、支持向量机函数,或者根据网络的最终目的(分类、图像分割、数据生成等)而定的其他函数。与全连接神经网络的不同之处在于,线性组合现在是与滤波器相关联的权重进行的,这意味着它们彼此之间并非完全不同(除非我们只进行局部连接层而不是卷积层)。此外,滤波器的大小通常比输入信号的数量级小得多,因此当我们用矩阵表示卷积运算时,矩阵中的大多数权重实际上将为零。请记住,网络的每一层每个输入特征都有一个权重。例如,如果输入是彩色图像,则每个通道中的每个像素都有一个不同的权重,除非我们决定实现一个卷积层,那么只会有少量独特的权重,以及许多零。这极大地简化了存储要求和计算时间,同时捕捉了重要的局部交互作用。也就是说,在卷积神经网络的架构中,通常在输出层附近有全连接层(每个连接分配一个不同的权重)。可以将这解释为特征的提炼:在捕获了随着每一层复杂度增加的重要且局部相关的特征之后,这些特征被组合在一起进行预测。也就是说,当信息到达全连接层时,它将被提炼为最重要的组件,这些组件反过来作为独特的特征对最终预测做出贡献。

  • 损失函数:这类似于我们在前几章中讨论过的所有损失函数,始终提供网络预测和实际值之间误差的度量。

  • 优化:由于问题规模庞大且涉及的变量数量巨大,因此再次使用随机梯度下降。在这里,和往常一样,我们需要评估损失函数的一个导数,其中包括训练函数的一个导数。我们计算与网络所有层和通道的滤波器中涉及的所有未知权重以及相关偏差有关的导数。在计算上,反向传播算法仍然是区分过程的主要工具。

线性代数和计算线性代数拥有我们需要生产可训练的卷积神经网络的所有工具。一般来说,在我们的计算中涉及的最糟糕的矩阵是一个密集的(大部分非零元素)矩阵,其条目没有明显的结构或模式(如果它是不可对角化的,等等)。但是当我们有一个稀疏矩阵(大部分为零),或者具有某种模式的矩阵(如对角线、三对角线、循环等),或者两者兼有时,我们就处于一个计算友好的世界中,只要我们学会如何利用特殊的矩阵结构来获得优势。研究大型矩阵计算和算法的研究人员是这种必要利用的国王和皇后,没有他们的工作,我们将只剩下在实践和规模上非常难以实现的理论。

在一维中,卷积操作可以用一种特殊类型的矩阵来表示,称为Toeplitz矩阵,在二维中,可以用另一种特殊类型的矩阵来表示,称为双重块循环矩阵。让我们只关注这两种,但带着这个教训:矩阵表示法,总的来说,是最好的方法,我们愚蠢地不去发现和充分利用矩阵内在的结构。换句话说,首先攻击最一般的情况可能只是一种悲哀的时间浪费,而时间在这个生活中是一种稀缺资源。在使用最一般的矩阵和最具体的矩阵之间找到一个很好的折衷方案是伴随结果进行复杂性分析:这种方法的顺序是n 3 , n log n,等等,这样利益相关者就能意识到在实施某些方法与其他方法之间的权衡。

我们从在线免费书籍《深度学习书籍 2016(第九章第 334 页)》中借用一个简单的例子,以展示在检测图像中的垂直边缘时,使用卷积或利用矩阵中的许多零与使用常规矩阵乘法的效率。卷积是一种非常高效的描述变换的方式,它在整个输入中应用相同的线性变换于一个小的局部区域。

右侧的图像是通过将原始图像中的每个像素减去其左侧相邻像素的值而形成的。这显示了输入图像中所有垂直边缘的强度,这对于目标检测可能是一个有用的操作。

300

图 5-4。检测图像中的垂直边缘(图像来源)。

两幅图像都是 280 像素高。输入图像宽度为 320 像素,而输出图像宽度为 319 像素。这种转换可以用包含两个元素的卷积核来描述,并且需要进行 267,960 次浮点运算(每个输出像素两次乘法和一次加法)才能使用卷积计算。

用矩阵乘法描述相同的转换需要在矩阵中有 320×280×319×280,或者超过 80 亿个条目,使得卷积在表示这种转换时效率提高了四十亿倍。直接的矩阵乘法算法执行了超过 160 亿次浮点运算,使得卷积在计算上大约高效了 6 万倍。当然,矩阵的大部分条目将是零。如果我们只存储矩阵的非零条目,那么矩阵乘法和卷积都需要相同数量的浮点运算来计算。矩阵仍然需要包含 2×319×280 = 178,640 个条目。

一维情况:乘以一个特普利茨矩阵

一个带状的特普利茨矩阵看起来像:

T e o p l i t z = k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2

将这个 Toeplitz 矩阵乘以一个一维信号,得到一个一维滤波器与信号x的卷积的确切结果,即,( T e o p l i t z ) x t = k x。进行乘法运算,我们可以看到滤波器在信号上的滑动效果*。

二维情况:由双重块循环矩阵进行乘法

二维模拟涉及二维卷积运算和图像滤波。在这里,我们不是与一个特普利茨矩阵相乘,而是实际上与一个双循环矩阵相乘,其中每一行都是给定向量的循环移位。将这个矩阵写下来并与二维卷积的等效性一起写下来是线性代数的一个很好的练习。在深度学习中,我们最终学习到这些矩阵的条目,也就是权重。这种线性代数符号(以特普利茨或循环矩阵的形式)帮助我们找到关于这些权重的损失函数导数的紧凑公式。

汇集

几乎所有卷积神经网络都会经历一个步骤,即池化。通常在输入经过卷积滤波后,通过非线性激活函数后实现。池化有多种类型,但其思想是相同的:用周围输出的汇总统计数据替换特定位置的当前输出。例如,对于图像,可以用包含原始四个像素最大值的一个像素替换四个像素(最大池化),或者用它们的平均值,加权平均值,或者它们平方和的平方根,等等

图 5-5 显示了最大池化的工作原理。

300

图 5-5. 最大池化。

实际上,这减少了维度并总结了整个输出的邻域,但以牺牲细节为代价。因此,池化不适用于细节对于进行预测至关重要的用例。尽管如此,池化有许多优点:

  1. 它对输入的小空间平移提供了近似不变性。如果我们更关心某个特征是否存在而不是其确切位置,这将非常有用。

  2. 它可以极大地提高网络的统计效率。

  3. 它提高了网络的计算效率和内存需求,因为它减少了输入到下一层的数量。

  4. 这有助于处理不同大小的输入,因为我们可以控制池化邻域的大小,以及池化后的输出大小。

用于图像分类的卷积神经网络

在不偏离书本主旨——理解支撑不同模型的数学原理的情况下,要列出所有涉及神经网络中不同架构和变体的详尽清单是不可能的。然而,可以讨论基本组件以及它们如何共同完成人工智能任务,比如计算机视觉中的图像分类。在训练过程中,前一章的步骤仍然适用:

  1. 初始化随机权重(根据我们在上一章中描述的初始化过程)。

  2. 通过卷积网络前向传播一批图像,并为图像输出一个类别。

  3. 评估这组权重的损失函数。

  4. 通过网络反向传播错误。

  5. 调整导致错误的权重(随机梯度下降)。

  6. 重复直到达到一定数量的迭代次数,或者直到收敛。

值得庆幸的是,我们不必独自完成这些工作。Python 的库 Keras 有许多预训练模型,这意味着它们的权重已经固定,我们只需要在我们特定的数据集上评估训练好的模型。

我们可以做的,也应该做的,是观察和学习成功和获胜网络的架构。图 5-6 展示了 Le Cun 等人(1989 年)提出的 LeNet1 的简单架构,图 5-7 展示了 AlexNet(2012 年)的架构。

300

图 5-6. LeNet1 的架构(1989 年)。

300

图 5-7. AlexNet 的架构,拥有惊人的 6230 万个权重(2012 年)。

一个很好的练习是计算 LeNet1 和 AlexNet 训练函数中的权重数量。请注意,每一层(特征图)中的单元越多,权重就越多。当我尝试根据图图 5-6 中的架构计算 LeNet1 中涉及的权重时,我得到了 9484 个权重,但原始论文提到了 9760 个权重,所以我不知道其余的权重在哪里。如果您找到了它们,请告诉我。无论如何,重点是我们需要在ℝ 9760中解决一个优化问题。现在对 AlexNet 在图 5-7 中进行相同的计算:我们大约有 6230 万个权重,因此优化问题最终在ℝ 62.3million中。另一个惊人的数字:我们需要 11 亿个计算单元进行一次前向传递。

图 5-8 展示了一个精彩的插图,展示了手写数字 8 经过预训练的 LeNet1 并最终被正确分类为 8。

300

图 5-8。通过预训练的 LeNet1 传递手写数字 8 的图像(图像来源)。

最后,如果你觉得架构的选择对你来说似乎是随意的,也就是说,如果你在想:我们能否用更简单的架构实现类似的性能?那么欢迎加入这个俱乐部。整个社区都在思考同样的问题。

总结与展望

在这一章中,我们定义了卷积操作:卷积神经网络最重要的组成部分。卷积神经网络对于计算机视觉、机器音频处理和其他人工智能应用至关重要。

我们从系统设计的角度介绍了卷积,然后通过对一维和二维信号进行滤波。我们强调了卷积操作的线性代数等价物(通过特殊结构的矩阵相乘),最后以图像分类的示例结束。

在本书中,我们经常会遇到卷积神经网络,因为它们已经成为许多包括视觉和/或自然语言在内的人工智能系统中的重要组成部分。

第六章:奇异值分解:图像处理、自然语言处理和社交媒体

奇异值分解是线性代数中的数学运算,在数据科学、机器学习和人工智能领域广泛适用。它是主成分分析(在数据分析中)和潜在语义分析(在自然语言处理中)背后的数学。这个操作将一个密集矩阵转换为一个对角矩阵。在线性代数中,对角矩阵非常特殊且非常理想。当我们乘以它们时,它们就像标量一样,只会在某些方向上拉伸或挤压。

当计算矩阵的奇异值分解时,我们额外获得了揭示和量化矩阵对空间本身的作用的奖励:旋转、反射、拉伸和/或挤压。空间没有扭曲(弯曲),因为这个操作是线性的(毕竟,它被称为线性代数)。在一个方向上的极端拉伸或挤压与其他方向的影响稳定性,这会影响涉及我们矩阵的任何计算的敏感性,因此有一个度量可以让我们直接控制我们的计算对各种扰动的敏感性,例如,嘈杂的测量。

奇异值分解的威力在于它可以应用于任何矩阵。这一点以及它在人工智能领域的广泛应用使得它在本书中有了自己的章节。在接下来的章节中,我们将探讨奇异值分解,重点放在整体图景而不是细节上,并应用于图像处理、自然语言处理和社交媒体。

给定一个矩阵C(一幅图像,一个数据矩阵等),我们省略了计算其奇异值分解的细节。大多数线性代数书籍都会这样做,提出一种基于计算对称矩阵C t C 和C C t的特征向量和特征值的理论方法,对我们来说,这些是数据的协方差矩阵(如果数据已居中)。虽然理解理论仍然非常重要,但它提供的计算奇异值分解的方法对于高效计算并且尤其是对于许多现实问题中涉及的大矩阵来说是不可行的。此外,我们生活在一个软件包帮助我们轻松计算它的时代。在 Python 中,我们只需要从numpy库中调用numpy.linalg.svd方法。我们稍后在本章中简要了解进入这些软件包的数值算法。然而,我们的主要重点是理解奇异值分解的工作原理以及为什么这种分解对于减少给定问题的存储和计算需求而不丢失其基本信息是重要的。我们还将理解它在聚类数据中的作用。

矩阵分解

我们可以用多种方式因式分解一个标量数,例如,我们可以写出数字 12 = 4 × 3 ,12 = 2 × 2 × 3 或 12 = 0 . 5 × 24 。哪种因式分解更好取决于我们的用例。对于数字矩阵也可以做同样的事情。线性代数为我们提供了各种有用的矩阵因式分解。这个想法是我们想要将一个对象分解成更小的组件,这些组件让我们了解对象本身的功能和作用。这种分解也让我们对哪些组件包含了最多信息有一个很好的概念,因此比其他组件更重要。在这种情况下,我们可能会受益于丢弃不太重要的组件,并构建一个具有类似功能的更小的对象。这个更小的对象可能不像我们最初开始的包含所有组件的对象那样详细,但它包含了原始对象的足够重要的信息,使用它的更小尺寸会带来好处。奇异值分解就是一个正好做到这一点的矩阵因式分解。它的公式如下:

C m×n = U m×m Σ m×n V n×n t ,

其中我们将矩阵C分解为三个组件矩阵:U,Σ,和V t。UV是具有正交行和列的方阵。 Σ 是一个对角矩阵,其形状与C相同(见图 6-1)。

让我们从矩阵乘法开始。假设A是一个有3行和3列的矩阵:

A = 123456789 3×3 ,

B是一个有3行和2列的矩阵:

B = 134-201 3×2 .

然后C=AB是一个有3行和2列的矩阵:

C 3×2 = A 3×3 B 3×2 = 123456789 3×3 134-201 3×2 = 922483914 3×2 .

我们可以将C看作是AB的乘积,就像数字12 = 4 × 3一样。上述C的因式分解没有意义,因为AB都不是特殊类型的矩阵。C的一个非常重要的因式分解是其奇异值分解。任何矩阵都有奇异值分解。我们使用 Python 计算它(请参阅相关的 Jupyter 笔记本以获取代码):

C 3×2 = U 3×3 Σ 3×2 V 2×2 t = - 0 . 1853757 0 . 8938507 0 . 4082482 - 0 . 5120459 0 . 2667251 - 0 . 8164965 - 0 . 8387161 - 0 . 3604005 0 . 4082482 49 . 402266 0 0 1 . 189980 0 0 - 0 . 9446411 - 0 . 3281052 0 . 3281052 - 0 . 9446411 .

观察上述分解中的以下内容: V t的行是右奇异向量(这些恰好是V的列),U的列是左奇异向量,Σ的对角线条目是奇异值。奇异值始终为正,并始终按照Σ的对角线上的递减顺序排列。最大奇异值与最小奇异值的比值是矩阵的条件数κ。在我们的情况下,只有两个奇异值和κ = 49.402266 1.189980 = 41 . 515207。这个数字在涉及我们的矩阵的计算稳定性中起着重要作用。条件良好的矩阵是那些条件数不是很大的矩阵。

左奇异向量是正交的(彼此正交且长度为 1)。同样,右奇异向量也是正交的。

对于定性特性,图像比无尽的数字数组更容易评估。使用 Python 可以轻松将矩阵可视化为图像(反之亦然,图像存储为数字矩阵):矩阵条目的值对应于相应像素的强度。数字越大,像素越亮。矩阵中较小的数字显示为较暗的像素,较大的数字显示为较亮的像素。图 6-1 展示了上述奇异值分解。我们观察到对角矩阵Σ与C具有相同的形状,其对角线条目按递减顺序排列,最亮的像素对应于左上角的最大奇异值

400

图 6-1。可视化奇异值分解。对角矩阵Σ与C具有相同的形状,其对角线条目按递减顺序排列,最亮的像素对应于左上角的最大奇异值。

图 6-2 和图 6-3 展示了两个矩形矩阵AB的奇异值分解,其中A是宽的,B是高的:

B = 5440710-18 4×2 = U 4×4 Σ 4×2 V 2×2 t

A = -13-54181-240-7204-3-8 3×5 = U 3×3 Σ 3×5 V 5×5 t

400

在图 6-2 中,我们注意到 Σ 的最后两列都是零(黑色像素),因此我们可以节省存储空间,丢弃这两列以及 V t 的最后两行(请参见下一节关于从左侧乘以对角矩阵)。类似地,在图 6-3 中,我们注意到 Σ 的最后两行都是零(黑色像素),因此我们可以节省存储空间,丢弃这两行以及 U 的最后两列(请参见下一节关于从右侧乘以对角矩阵)。奇异值分解已经为我们节省了一些空间(请注意,我们通常只存储 Σ 的对角元素,而不是整个带有所有零的矩阵)。

图 6-2。可视化宽矩形矩阵的奇异值分解。 Σ 的最后两列都是零(黑色像素),可以减少存储空间:丢弃 Σ 的最后两列以及 V t 的最后两行。

图 6-3。可视化一个高矩形矩阵的奇异值分解。Σ的最后两行都是零(黑色像素),允许减少存储:丢弃Σ的最后两行以及U的最后两列。

对角矩阵

当我们将一个向量乘以一个标量,比如 3,我们得到一个沿着相同方向的新向量,具有相同的方向,但长度被拉伸了三倍。当我们将相同的向量乘以另一个标量,比如-0.5,我们得到另一个向量,同样沿着相同方向,但这次长度减半,方向翻转。乘以一个标量是一个如此简单的操作,如果我们有矩阵在应用到(换句话说,乘以)向量时同样容易,那将是很好的。如果我们的生活是一维的,那么我们只需要处理标量,但由于我们的生活和感兴趣的应用是更高维的,所以我们必须满足对角矩阵(图 6-4)。这些是好的。

200

图 6-4。一个5 × 4对角矩阵的图像,对角线条目为:10(最亮的像素),6,3 和 1(除了零之外最暗的像素)。

通过对角矩阵进行乘法相当于在空间中的某些方向进行拉伸或挤压,方向翻转对应于对角线上的任何负数。正如我们非常清楚的,大多数矩阵远非对角矩阵。奇异值分解的力量在于它为我们提供了空间中的方向,沿着这些方向矩阵表现得像(虽然在广义上)对角矩阵。对角矩阵通常在与向量坐标相同的方向上进行拉伸/挤压。另一方面,如果矩阵不是对角的,它通常不会在与坐标相同的方向上进行拉伸/挤压。它会在其他方向上进行,在坐标变换后。奇异值分解给出了我们所需的坐标变换(右奇异向量),向量将被拉伸/挤压的方向(左奇异向量),以及拉伸/挤压的幅度(奇异值)。我们将在下一节详细介绍这一点,但首先我们澄清一下从左边和从右边乘以对角矩阵的乘法。

通过对角矩阵Σ进行乘法:

  1. 如果我们从右边将矩阵A乘以对角矩阵Σ,即A Σ,那么我们将A的列按σ进行缩放,例如:

    A Σ = a 11 a 12 a 21 a 22 a 31 a 32 σ 1 0 0 σ 2 = σ 1 a 11 σ 2 a 12 σ 1 a 21 σ 2 a 22 σ 1 a 31 σ 2 a 32

  2. 如果我们从左边将A乘以Σ,即Σ A,那么我们将A的行按σ进行缩放,例如:

    Σ A = σ 1 0 0 0 σ 2 0 0 0 σ 3 a 11 a 12 a 21 a 22 a 31 a 32 = σ 1 a 11 σ 1 a 12 σ 2 a 21 σ 2 a 22 σ 3 a 31 σ 3 a 32

矩阵作为作用于空间的线性变换

我们可以将矩阵视为对空间中的向量和空间本身进行线性变换(无扭曲)。如果不允许扭曲,因为那会使操作非线性化,那么哪些操作是允许的?答案是旋转、反射、拉伸和/或挤压,这些都是非扭曲操作。奇异值分解A = U Σ V t捕捉了这个概念。当A作用于一个向量v →时,让我们逐步进行乘法A v → = U Σ V t v →:

  1. 首先v →由于正交矩阵V t而被旋转/反射。

  2. 然后,由于对角矩阵Σ,它沿着特定方向被拉伸/挤压。

  3. 最后,由于另一个正交矩阵U,它再次被旋转/反射。

反射和旋转实际上不会改变空间,因为它们保持大小和对称性(想象旋转一个物体或看它在镜子中的倒影)。对角矩阵Σ中编码的拉伸和/或挤压量(通过其对角线上的奇异值)对A的作用非常有信息量。

注意:正交矩阵

正交矩阵具有正交行和正交列。它永远不会拉伸或挤压,只会旋转和/或反射,这意味着在作用于对象时不会改变对象的大小和形状,只会改变它们的方向和/或方向。像数学中的许多事物一样,这些名称很令人困惑。它被称为正交矩阵,即使它的行和列是正交的,这意味着正交长度等于一。还有一个有用的事实:如果C是一个正交矩阵,那么C C t = C t C = I,也就是说,这个矩阵的逆矩阵是它的转置。计算矩阵的逆通常是一个非常昂贵的操作,但对于正交矩阵,我们只需要将其行与列互换。

我们使用二维矩阵来说明上述概念,因为这些很容易可视化。在接下来的小节中,我们探讨:

  1. 矩阵A对右奇异向量的作用,这些是矩阵V的列v → 1和v → 2。这些被发送到左奇异向量u → 1和u → 2的倍数,这些是矩阵U的列。

  2. A 对标准单位向量e → 1和e → 2的作用。我们还注意到单位正方形被转换为平行四边形。

  3. A 对一个一般向量x →的作用。这将帮助我们理解矩阵U和V作为空间中的旋转或反射。

  4. A 对单位圆的作用。我们看到A将单位圆变换为椭圆,其主轴沿着左奇异向量(u →)方向,并且其主轴的长度是奇异值(σ)的长度。由于奇异值从大到小排序,因此u → 1定义了具有最大变化的方向,u → 2定义了具有第二大变化的方向,依此类推。

A 对右奇异向量的作用

A为2 × 2矩阵:

A = 1 5 - 1 2

其奇异值分解为:A = U Σ V t如下所示:

A = 0 . 93788501 0 . 34694625 0 . 34694625 - 0 . 93788501 5 . 41565478 0 0 1 . 29254915 0 . 10911677 0 . 99402894 0 . 99402894 - 0 . 10911677

表达式A = U Σ V t等价于

A V = U Σ ,

因为我们只需要将A = U Σ V t从右边乘以V,并利用V t V = I的事实,由于V的正交性。

我们可以将AV看作矩阵A作用于矩阵V的每一列。由于A V = U Σ,则A对V的正交列的作用等同于通过奇异值拉伸/挤压U的列。

A v → 1 = σ 1 u → 1

A v → 2 = σ 2 u → 2

这在图 6-5 中有所展示。

200

图 6-5。矩阵A将右奇异向量发送到左奇异向量的倍数:A v 1 = σ 1 u 1和A v 2 = σ 2 u 2。

A 对标准单位向量和由它们确定的单位正方形的作用

200

图 6-6。矩阵A将标准单位向量发送到其自身的列,并将单位正方形转换为平行四边形。空间没有扭曲(弯曲)。

矩阵A对单位圆的作用

图 6-7 显示矩阵A将单位圆发送到椭圆:主轴沿着u的方向,主轴的长度等于σ。再次,由于矩阵代表线性变换,所以有空间的反射/旋转和拉伸/挤压,但没有扭曲。

300

图 6-7。矩阵A将单位圆发送到椭圆,主轴沿着左奇异向量,主轴的长度等于奇异值。

我们可以从奇异值分解中轻松看到上述操作。

极分解

A = Q S

是一个非常简单的几何方式,展示了圆如何被转换为椭圆。

根据奇异值分解将圆到椭圆的转换分解

图 6-8 显示了将圆转换为椭圆的步骤的四个子图:

  1. 首先我们将单位圆和向量v → 1和v → 2乘以V t。由于V t V = I,我们有V t v → 1 = e → 1和V t v → 2 = e → 2。因此,起初,右奇异向量被“拉直”,与标准单位向量正确对齐。

  2. 然后我们乘以Σ:这里发生的一切只是通过σ 1和σ 2(拉伸或挤压取决于奇异值的大小是大于还是小于一)来拉伸/挤压标准单位向量。

  3. 最后我们乘以U:这要么将椭圆反射到一条线上,要么将其顺时针或逆时针旋转一定角度。下一小节将详细解释这一点。

400

图 6-8。使用奇异值分解的单位圆到椭圆转换步骤。

旋转和反射矩阵

在奇异值分解A = U Σ V t中出现的矩阵U和V t是正交矩阵。它们的行和列是正交的,它们的逆矩阵与转置矩阵相同。在二维空间中,U和V可以是旋转或反射(关于一条直线)矩阵。

旋转矩阵

顺时针旋转一个角度θ的矩阵如下:

cos θ sin θ - sin θ cos θ

旋转矩阵的转置是一个相反方向的旋转。因此,如果一个矩阵顺时针旋转一个角度θ,那么它的转置就会逆时针旋转θ,如下所示:

cos θ - sin θ sin θ cos θ

反射矩阵

关于与x-轴成角度θ的直线L的反射矩阵如下:

cos 2 θ sin 2 θ sin 2 θ - cos 2 θ

直线L的斜率为tan θ,它经过原点,因此它的方程为y = ( tan θ ) x。这条直线就像反射操作的镜子。图 6-9 展示了矩阵V t和U反射的两条直线,以及一个向量x →及其随后的变换。

旋转矩阵的行列式为 1,反射矩阵的行列式为- 1。

在更高维度中,反射和旋转矩阵看起来不同。始终确保您理解正在处理的对象:如果我们在三维空间中进行旋转,那么围绕哪个轴?如果我们进行反射,那么围绕哪个平面?如果您想深入了解,那么现在是阅读正交矩阵及其性质的好时机。

对一般向量x →的作用

我们已经探讨了矩阵A对右奇异向量的作用(它们被映射到左奇异向量)、标准单位向量(它们被映射到矩阵A的列)、单位正方形(它被映射到平行四边形)、单位圆(它被映射到一个椭圆,其主轴沿着左奇异向量,长度等于奇异值)。最后,我们探讨了矩阵A对一个一般的非特殊向量x →的作用。这被映射到另一个非特殊向量A x →。然而,使用奇异值分解将这个转换分解成步骤是具有信息性的。

回想一下我们的矩阵A及其奇异值分解:

A = 1 5 - 1 2 = U Σ V t = 0 . 93788501 0 . 34694625 0 . 34694625 - 0 . 93788501 5 . 41565478 0 0 1 . 29254915 0 . 10911677 0 . 99402894 0 . 99402894 - 0 . 10911677

在上述奇异值分解中,U和V t都是反射矩阵。作为这些反射镜的直线L U和L V t在图 6-9 中绘制出来,它们的方程很容易从各自的矩阵中找到:cos ( 2 θ )和sin ( 2 θ )在第一行,因此我们可以使用这些来找到斜率tan ( θ )。然后,V t反射的直线方程是y = ( tan θ V t ) x = 0 . 8962347008436108 x,U反射的直线方程是y = ( tan θ U ) x = 0 . 17903345403184898 x。由于A x → = U Σ V t x →,首先x →被反射到直线L V t上,到达V t x →。然后,当我们从左边乘以Σ时,V t x →的第一个坐标被第一个奇异值水平拉伸,第二个坐标被第二个奇异值拉伸,得到Σ V t x →。最后,当我们乘以U时,向量Σ V t x →被反射到直线L U上,到达A x → = U Σ V t x →。图 6-9 说明了这个过程。

400

图 6-9。矩阵 A 对一个一般向量x →的作用。使用奇异值分解逐步进行变换。

矩阵相乘的三种方法

在大数据时代,矩阵乘法的高效算法是如此令人渴望。理论上,有三种方法可以将两个矩阵A m×n和B n×s相乘:

  1. 行-列方法:通过将A的第i行与B的第j列进行点积,逐个生成一个条目(ab) ij:

    (ab) ij = A row i B col j = ∑ k=1 n a ik b kj

  2. 列-列方法:通过线性组合A的列,使用B的第i列的条目,逐个生成一个列(AB) col i:

    (AB) col i = b 1i A col 1 + b 2i A col 2 + ⋯ + b ni A col n

  3. 列-行方法:逐个生成乘积的秩一片段,通过将A的第一列与B的第一行相乘,将A的第二列与B的第二行相乘,依此类推。然后将所有这些秩一矩阵相加以获得最终乘积AB

    A B = A col 1 B row 1 + A col 2 B row 2 + ⋯ + A col n B row n

这如何帮助我们理解奇异值分解的有用性?

我们可以将奇异值分解的乘积A = U Σ V t扩展为一系列秩为一的矩阵之和,使用列-行方法进行矩阵乘法。在这里,我们将矩阵U Σ(它将U的每一列U col i乘以σ i)与V t相乘:

A = U Σ V t = σ 1 U col 1 V row 1 t + σ 2 U col 2 V row 2 t + ⋯ + σ r U col r V row r t

其中rA的非零奇异值的数量(也称为A)。

上述表达式的伟大之处在于,它将A分解为按重要性顺序排列的秩一矩阵之和,因为σ按降序排列。此外,它提供了一种简单的方法来通过低秩矩阵近似A:舍弃较低的奇异值。Eckart–Young–Mirsky 定理断言,这实际上是找到A的低秩近似的最佳方法,当使用Frobenius 范数(矩阵奇异值的平方和的平方根)来衡量近似的接近度时。在本章的后面,我们利用A的秩一分解进行数字图像压缩。

大局观

到目前为止,我们已经专注于矩阵的奇异值分解,以A对空间的作用和使用低秩矩阵近似A。在转向与 AI 相关的应用之前,让我们以鹰眼视角看待并解决大局。

给定一个实数矩阵,我们想根据我们的用例了解以下内容:

  1. 如果矩阵代表我们关心的数据,如图像或表格数据,那么这个矩阵(数据)的最重要组成部分是什么?

  2. 数据主要沿着哪些重要方向传播(数据中变化最大的方向)?

  3. 如果我将矩阵视为从初始空间到目标空间的转换,那么这个矩阵对空间中的向量有什么影响?它们被发送到哪些向量?

  4. 这个矩阵对空间本身的影响是什么?由于这是一个线性变换,我们知道没有空间扭曲,但有空间拉伸、挤压、旋转、反射。

  5. 许多物理系统可以表示为线性方程组的系统?我们如何解决这个系统(找到)?根据A的属性,最有效的方法是什么?如果没有解,是否有一个满足我们目的的近似解?请注意,这里我们正在寻找未知向量,当A作用于它时,它被转换为。

奇异值分解可用于回答上述所有问题。前两个问题是矩阵本身固有的,而后两个问题与将矩阵与向量相乘的效果有关(矩阵作用于空间和空间中的向量)。第五个问题涉及解决线性方程组的非常重要问题,并出现在各种应用中。

因此,我们可以以两种方式研究数字矩阵:

  1. 它的固有属性是什么?

  2. 将其视为转换时的属性是什么?

这两者相关,因为矩阵的固有属性影响它对向量和空间的作用。

要牢记的属性

  1. A将其初始空间的标准正交向量(右奇异向量)发送到其目标空间的标准正交向量(左奇异向量)的标量倍数:

    A v i = σ i u i

  2. 方阵的行列式:如果我们的矩阵是方阵,那么它的行列式等于所有奇异值的乘积:σ 1 σ 2 ⋯ σ r。

  3. 矩阵的条件数,相对于l 2范数,即欧几里德空间中的常规距离,是最大奇异值与最小奇异值的比值:

    κ = σ 1 σ r .

条件数对计算稳定性非常重要

  • 它衡量了A对空间的拉伸程度。如果条件数太大,那么它在一个方向相对于另一个方向过度拉伸空间,在这种极端拉伸的空间中进行计算可能是危险的:当A的条件数很大时,解A x → = b →会使解x →不稳定,因为它对b的扰动非常敏感。在b →中的一个小错误将导致解x →与没有b →错误的解截然不同。这种不稳定性在几何上很容易想象。

  • 通过数值方法解A x → = b →(比如通过高斯消元)和迭代方法在涉及的矩阵具有合理(不是很大)条件数时可以很好地工作。

  • 关于具有特别大条件数的矩阵的一件事:它拉伸空间太多,几乎将其压缩到较低维度的空间中。有趣的部分是,如果我们决定放弃那个非常小的奇异值,因此在较低维度的压缩空间中工作,我们的计算变得完全正常。因此,在极端性的边界处是正常性,只是这种正常性现在位于较低维度。

  • 许多迭代数值方法,包括非常有用的梯度下降,都涉及到它们的分析中的矩阵。如果这些矩阵的条件数太大,那么迭代方法可能无法收敛到解。条件数控制着这些迭代方法收敛的速度。

奇异值分解的成分

在这一章中,我们只解剖了一个公式:A = U Σ V t。我们使用 Python 来计算U,Σ和V的条目,但这些条目究竟是什么?答案很简单,如果我们知道什么是特征向量和特征值,我们将在下一节中澄清。现在,我们列出U,Σ和V的成分:

  1. V的列(右奇异向量)是对称矩阵A的正交特征向量。

  2. U的列(左奇异向量)是对称矩阵A的正交特征向量。

  3. 奇异值σ1σ2,⋯,σr是对称矩阵A的特征值的平方根,排列为非负并按降序排列。奇异值可以为零。

  4. A v i = σ i u i

注意:每个实对称正半定(非负特征值)矩阵都是可对角化的,这意味着当在不同坐标系(P的列)中查看时,它类似于对角矩阵DA的转置乘以AA乘以A的转置都恰好是对称正半定的,因此它们是可对角化的。

奇异值分解vs特征值分解

如果我们想要理解奇异值分解的要素,了解更多关于对称矩阵的知识是很重要的。这也将帮助我们区分奇异值分解和特征值分解,当后者存在时。

注意奇异值分解总是存在的,但特征值分解仅对特殊矩阵(称为可对角化)存在。矩形矩阵永远不可对角化。方阵可能是可对角化的,也可能不可对角化。当方阵可对角化时,SVD 和特征值分解不相等,除非矩阵是对称的并且具有非负特征值。

  1. 最好最简单的矩阵是沿对角线具有相同数字的方阵对角矩阵。

  2. 第二好的是不一定沿对角线具有相同数字的方阵对角矩阵D

  3. 第三好的矩阵是对称矩阵。这些矩阵具有实特征值和正交特征向量。它们是最接近对角矩阵的矩阵类型,因为它们是可对角化的,或者在基变换后类似于对角矩阵。P的列(特征向量)是正交的。

  4. 第四种最佳矩阵是可对角化的方阵,形式为 A=PD(P 的逆)。这些矩阵在基变换后类似于对角矩阵,然而,P 的列(特征向量)不一定正交。

  5. 第五种最佳矩阵是其余所有矩阵。这些矩阵不可对角化,意味着没有基变换可以使它们变为对角矩阵,然而,通过奇异值分解,可以接近地使它们类似于对角矩阵。这里的 U 和 V 是不同的,它们具有正交的列和行。它们的逆矩阵非常容易,因为它们的逆矩阵等于它们的转置矩阵。奇异值分解适用于方阵和非方阵。

  6. 给定一个矩阵 A,A 的转置乘以 A 和 A 乘以 A 的转置都是对称的且半正定的(意味着它们的特征值是非负的),因此,它们可以对角化为两组正交特征向量。当我们除以这些正交特征向量的范数时,它们变为正交的。这些分别是 V 和 U 的列。

  7. A 的转置乘以 A 和 A 乘以 A 的转置具有完全相同的非负特征值,λi=σi²。将这些特征值的平方根按降序排列(保持 U 和 V 中对应特征向量的顺序),我们得到奇异值分解中的对角矩阵Σ。

  8. 如果我们开始的矩阵是对称的呢?它的奇异值分解与对角化有什么关系?对称矩阵 A 的列是正交的特征向量。当我们除以它们的长度时,它们变成正交的。将这些正交特征向量按照对应的特征值绝对值递减的顺序堆叠在一个矩阵中,我们得到奇异值分解的 U 和 V。现在,如果对称矩阵 A 的所有特征值恰好是非负的,那么这个半正定对称矩阵的奇异值分解将与其特征值分解相同,只要你对 P 中的正交特征向量进行归一化,按照非负特征值递减的顺序排列。在这种情况下,U 等于 V。如果一些(或全部)特征值是负的呢?那么,但现在我们必须小心对应的特征向量。这使得奇异值分解中的 U 和 V 不相等。因此,具有一些负特征值的对称矩阵的奇异值分解可以很容易地从其特征值分解中提取出来,但并不完全相同。

  9. 如果我们开始的矩阵不是对称的,但是可对角化呢?它的奇异值分解与对角化有什么关系?在这种情况下,矩阵 A 的特征向量,即 P 的列,通常不是正交的,因此这样一个矩阵的奇异值分解和特征值分解没有关系。

奇异值分解的计算

Python 和其他如何数值计算矩阵的奇异值分解?底层的数值算法是什么?快速的答案是:QR分解,Householder 反射,以及用于特征值和特征向量的迭代算法

理论上,计算一般矩阵的奇异值分解,或者方阵的特征值和特征向量,需要将一个多项式=0 来解特征值,然后建立一个线性方程组来解特征向量。这对于应用来说远非实际可行。找到多项式的零点的问题对多项式系数的任何变化都非常敏感,因此计算问题容易受到系数中存在的舍入误差的影响。我们需要稳定的数值方法来找到特征向量和特征值,而不必数值计算多项式的零点。此外,我们需要确保涉及线性方程组的矩阵是良好条件的,否则流行的方法如高斯消元(L U分解)将无法工作。

大多数奇异值分解的数值实现都试图避免计算A A t和A t A。这与本书的一个主题一致:避免矩阵相乘,而是将矩阵与向量相乘。奇异值分解的流行数值方法使用一种称为Householder 反射的算法将矩阵转换为一个双对角矩阵(有时在QR分解之前),然后使用迭代算法来找到特征值和特征向量。数值线性代数领域开发了这样的方法,并将它们适应于应用中出现的矩阵的类型和大小。在下一小节中,我们将介绍一种迭代方法来计算给定矩阵的一个特征值及其对应的特征向量。

找到方阵对应最大特征值的特征向量的简单数值方法

方阵A的特征向量是一个不变方向的非零向量,当乘以A时不改变方向,而只被特征值λ缩放:

A v = λ v .

以下迭代算法是一种简单的数值方法,用于找到矩阵的一个特征向量:

  1. 从一个随机单位向量(长度为 1)v 0开始

  2. 乘以A:v i+1 = A v i

  3. 通过v i+1的长度除以,以避免我们的向量大小增长过大。

  4. 当你收敛时停止。

上述迭代方法非常简单,但有一个缺点:它只找到矩阵的一个特征向量,即对应于其最大特征值的特征向量。因此,它找到了当我们应用A时被最大拉伸的方向。

例如,考虑矩阵 A = 1 2 2 - 3。我们从向量 v → 0 = 1 0 开始,并应用上述算法。我们注意到在 28 次迭代后,向量变为 v → = - 0 . 38268343 0 . 92387953。代码在链接的 Jupyter 笔记本中,输出如下。

**输出:**

[1, 0]
[0.4472136  0.89442719]
[ 0.78086881 -0.62469505]
[-0.1351132   0.99083017]
[ 0.49483862 -0.86898489]
[-0.3266748  0.9451368]
[ 0.40898444 -0.91254136]
[-0.37000749  0.92902877]
[ 0.38871252 -0.92135909]
[-0.37979817  0.92506937]
[ 0.3840601 -0.9233081]
[-0.38202565  0.92415172]
[ 0.38299752 -0.92374937]
[-0.38253341  0.92394166]
[ 0.38275508 -0.92384985]
[-0.38264921  0.92389371]
[ 0.38269977 -0.92387276]
[-0.38267563  0.92388277]
[ 0.38268716 -0.92387799]
[-0.38268165  0.92388027]
[ 0.38268428 -0.92387918]
[-0.38268303  0.9238797 ]
[ 0.38268363 -0.92387945]
[-0.38268334  0.92387957]
[ 0.38268348 -0.92387951]
[-0.38268341  0.92387954]
[ 0.38268344 -0.92387953]
[-0.38268343  0.92387953]
[ 0.38268343 -0.92387953]

 v= [-0.38268343  0.92387953]
Av= [ 1.46507563 -3.53700546]
$\lambda=$ -3.828427140993716

图 6-10 显示了上述迭代。请注意,所有向量的长度均为 1,并且当算法收敛时,向量的方向不会改变,因此捕获了 A 的一个特征向量。在最后几次迭代中,符号保持振荡,因此向量保持翻转方向,因此特征值必须为负。事实上,我们发现它为 λ = - 3 . 828427140993716。

400

图 6-10。我们从 v → 0 = 1 0 开始,然后我们乘以 A 并归一化,直到收敛到特征向量。

伪逆

许多物理系统可以用(或近似于)线性方程组A x → = b →来表示。如果x →是我们关心的未知向量,则我们需要通过矩阵A来找到x →。矩阵除法的等效物是找到逆矩阵A -1,这样解就是x → = A -1 b →。具有逆矩阵的矩阵称为可逆矩阵。这些是具有非零行列式的方阵(行列式是特征值的乘积,奇异值的乘积,行列式的绝对值将相同)。但是那些矩阵是长方形的系统呢?那些具有不可逆矩阵的系统呢?那些矩阵是方阵且可逆的,但几乎不可逆(它们的行列式非常接近零)呢?我们仍然关心找到这些系统的。奇异值分解的威力在于它适用于任何矩阵,包括上述提到的那些,它可以帮助我们反转任何矩阵。

给定任何矩阵及其奇异值分解A = U Σ V t,我们可以将其伪逆定义为:

A + = V Σ + U t ,

其中Σ +是通过反转所有对角线条目获得的Σ(除了那些为零的条目(或者如果矩阵恰好病态,则非常接近于零))。

这使我们能够找到任何线性方程组A x = b的,即x = A + b。

注意 当后者存在时,矩阵的伪逆与其逆矩阵相同。

将奇异值分解应用于图像

我们终于准备好将奇异值分解应用于实际世界中。我们从图像压缩开始。数字图像以数字矩阵的形式存储,其中每个数字对应于像素的强度。我们将使用奇异值分解来减少图像的存储要求,而不会丢失其最基本的信息。我们所要做的就是丢弃不重要的奇异值,以及对应的U的列和V t的行。在这里帮助我们的数学表达式是:

A = U Σ V t = σ 1 U col 1 V row 1 t + σ 2 U col 2 V row 2 t + ⋯ + σ r U col r V row r t

回想一下,σ按从最大值到最小值排列,因此我们的想法是保留前几个大的σ,丢弃其余的小的σ,反正它们本来就很小。

让我们使用图 6-11 中的图像。代码和详细信息在链接的 Jupyter 笔记本中。每个彩色图像有三个通道,红色、绿色和蓝色(参见图 6-12 和图 6-13)。每个通道都是一个数字矩阵,就像本章中我们一直在处理的那些一样。图 6-11 中图像的每个通道都是一个s i z e = 960 × 714矩阵,因此为了存储完整的图像,我们需要s i z e = 960 × 714 × 3 = 2 , 056 , 320个数字。想象一下流媒体视频的存储需求,其中包含许多图像帧。我们需要一种压缩机制,以免内存不足。我们为每个通道计算奇异值分解(参见图 6-14 中红色通道奇异值分解的图像表示)。然后我们进行大规模的减少,每个通道仅保留前 25 个奇异值(共 714 个)、U的 25 列(共 960 列)和V t的 25 行(共 714 行)。每个通道的存储减少是巨大的:U现在是960 × 25,V t是25 × 714,我们只需要存储 25 个奇异值(不需要存储对角矩阵Σ的零元素)。每个通道需要存储 41,875 个数字,因此对于所有三个通道,我们需要存储41 , 875 × 3 = 125 , 625个数字,存储需求减少了 93%。

我们通过将减少的U、减少的Σ和减少的V t相乘,逐个通道将图像重新组合:

C h a n n e l reduced = U 960×25 Σ 25×25 (V t ) 25×714

图 6-15 显示了对红色、绿色和蓝色通道进行此乘法的结果。

最后,我们将减少的通道叠加在一起,生成减少的图像(图 6-16)。显然,我们在这个过程中丢失了很多细节,但这是我们不得不接受的权衡。

400

图 6-11。一个大小为s i z e = 960 × 714 × 3的数字彩色图像。

400

图 6-12。数字图像的红色、绿色和蓝色通道。每个通道的大小为s i z e = 960 × 714。

400

图 6-13。显示数字图像的三个通道的红色、绿色和蓝色色调。每个通道的大小为s i z e = 960 × 714 × 3。

400

图 6-14。红色通道的奇异值分解。我们有 714 个非零奇异值,但只有少数显著的。

400

图 6-15。降秩后的红色、绿色和蓝色通道。对于每个通道,我们仅保留了前 25 个奇异值,U的前 25 列和V t 的前 25 行。

400

图 6-16。具有 714 个奇异值的原始图像vs仅具有 25 个奇异值的降秩图像。两者仍然具有大小s i z e = 960 × 714 × 3,但需要不同的存储空间。

有关高级图像压缩技术,请查看此文章:图像压缩技术:无损和有损算法调查,神经计算(Elsevier)卷 300,2018 年 7 月 26 日,页面 44-69。

主成分分析和降维

主成分分析在数据分析中广受欢迎。它用于无监督机器学习中的降维和聚类。简而言之,它是在数据矩阵X上执行的奇异值分解,之前对数据进行了居中处理,这意味着从每个特征的平均值中减去每个特征列的平均值(X的每一列)。然后主成分是右奇异向量,它们是在现在熟悉的分解X = U Σ V t 中的V t 的行。

统计学家喜欢用方差或数据中的变化以及去相关化数据的语言来描述主成分分析。他们最终会使用数据的协方差矩阵的特征向量进行工作。这是统计学中对主成分分析的熟悉描述:它是一种减少数据集维度的方法,同时尽可能保留更多的变异性或统计信息。尽可能保留更多的变异性意味着找到数据集的线性组合的新特征,这些特征依次最大化方差并且彼此不相关。例如参见主成分分析:回顾和最新发展

两种描述(对数据进行中心化的右奇异向量和协方差矩阵的特征向量)完全相同,因为V t 的行是X centered t X centered 的特征向量,而X centered t X centered ,这反过来是数据的协方差矩阵。此外,统计学中的去相关化术语对应于数学和线性代数中的对角化,奇异值分解表明任何矩阵在新坐标系中(即V t 的行,它们是V的列)中的行为类似于对角矩阵,即Σ。

让我们详细解释一下。假设X是一个中心化的数据矩阵,其奇异值分解为X = U Σ V t。这等同于X V = U Σ,或者,当我们逐列解析表达式时:X V col i = σ i U col i。注意X V col i只是使用V的特定列的条目对数据的特征进行线性组合。现在,忠实于本章一直在做的事情,我们可以丢弃较不显著的组件,即对应于较低奇异值的VU的列。

假设我们的数据有 200 个特征,但只有两个奇异值是显著的,因此我们决定只保留V的前两列和U的前两列。因此,我们将特征的维度从 200 降低到 2。第一个新特征是使用V的第一列的条目对所有原始 200 个特征进行线性组合得到的,但这恰好是σ 1 U col 1,第二个新特征是使用V的第二列的条目对所有原始 200 个特征进行线性组合得到的,但这恰好是σ 2 U col 2。

现在让我们考虑单个数据点。数据矩阵X中的数据点有 200 个特征。这意味着我们需要 200 个轴来绘制这个数据点。然而,通过上面使用仅前两个主成分进行的降维,这个数据点现在只有两个坐标,即σ 1 U col 1和σ 2 U col 2的对应条目。因此,如果这是数据集中的第三个数据点,那么它的新坐标将是σ 1 U col 1的第三个条目和σ 2 U col 2的第三个条目。现在很容易在二维空间中绘制这个数据点,而不是在原始的 200 维空间中绘制它。

我们决定保留多少奇异值(因此主成分)是我们自己选择的。我们保留的越多,我们对原始数据集的忠实度就越高,但当然维度会更高。这种截断决策(找到奇异值截断的最佳阈值)是正在进行的研究课题。常见的方法是提前确定所需的秩,或者保留原始数据中一定量的方差。其他技术绘制所有奇异值,观察图中明显的变化,并决定在该位置截断,希望将数据中的基本模式与噪音分开。

重要的是不仅要对数据进行中心化,还要对其进行标准化:减去每个特征的平均值并除以标准差。原因是奇异值分解对特征测量的尺度敏感。当我们对数据进行标准化时,我们最终会使用相关矩阵而不是协方差矩阵。为了不让自己困惑,要记住的主要观点是我们对标准化数据集执行奇异值分解,然后主成分是V的列,数据点的新坐标是σ i U col i的条目。

主成分分析和聚类

在前一节中,我们看到如何使用主成分分析来减少数据的特征数量,提供一个按照数据变化的层次顺序排列的新特征集。这对于可视化数据非常有用,因为我们只能在二维或三维中进行可视化。能够在高维数据中可视化模式和相关性非常重要,例如在基因数据中。有时,在由主成分确定的降维空间中,数据按其类别固有地聚类。例如,如果数据集既包含患癌症患者又包含无癌症患者,以及它们的基因表达(通常在数千个),我们可能会注意到在前三个主成分空间中绘制数据时,患癌症的患者与无癌症的患者分开聚类。

社交媒体应用

在主成分分析和聚类的同一本质中,Dan Vilenchik 最近的一篇出版物(2020 年 12 月)展示了来自社交媒体的一个精彩应用:一种无监督的方法来描述在线社交媒体平台上的用户。以下是他在这个主题上发表的演讲摘要以及他的出版物的摘要:

理解从在线平台(如在线社交媒体或电子学习平台)自动收集的数据是一项具有挑战性的任务:数据庞大、多维、嘈杂且异构(由行为不同的个体组成)。在这次演讲中,我们专注于所有在线社交平台共同的一个核心任务,即用户描述的任务。例如,自动识别 Twitter 上的垃圾邮件发送者或机器人,或者在电子学习平台上识别一个不参与的学生。

在线社交媒体渠道在我们的生活中扮演着核心角色。对社交网络中的用户进行表征是一个长期存在的问题,可以追溯到上世纪 50 年代,当时 Katz 和 Lazarsfeld 研究了“大众传播”中的影响。在机器学习时代,这个任务通常被视为一个监督学习问题,其中需要预测一个目标变量:年龄、性别、政治倾向、收入等。在这次讨论中,我们探讨了在无监督方式下可以实现什么。具体来说,我们利用主成分分析来理解一些社交媒体平台固有的模式和结构,以及其他平台没有的原因。我们得出了一个类似辛普森悖论的结论,这可能让我们更深入地了解这些平台用户表征的数据驱动过程。

主成分分析的概念用于在数据中创建具有最大方差的聚类将在本书中多次出现。

潜在语义分析

自然语言数据(文档)的潜在语义分析类似于数值数据的主成分分析。

在这里,我们想分析一组文档和它们包含的单词之间的关系。潜在语义分析的分布假设表明具有相似含义的单词出现在相似的文本片段中,因此出现在相似的文档中。计算机只能理解数字,因此在对它们进行任何分析之前,我们必须想出我们的单词文档的数值表示。这样的表示是词频矩阵X:列代表唯一的单词(如苹果,橙子,狗,城市,智能等),行代表每个文档。这样的矩阵非常大但非常稀疏(有很多零)。有太多的单词(这些是特征),所以我们需要降低特征的维度,同时保留文档(数据点)之间的相似性结构。到现在为止,我们知道该怎么做:对词频矩阵执行奇异值分解,X = U Σ V t,然后丢弃较小的奇异值以及对应的U中的列和V t中的行。现在我们可以在较低维度空间中表示每个文档(线性组合的单词),这与主成分分析允许在较低维度特征空间中表示数据的方式完全相同。

一旦我们降低了维度,我们最终可以使用余弦相似度比较文档:计算表示文档的两个向量之间的角度的余弦。如果余弦接近 1,那么文档在词空间中指向相同方向,因此代表非常相似的文档。如果余弦接近 0,则表示文档的向量彼此正交,因此彼此非常不同。

在早期,谷歌搜索更像是一个索引,然后它发展到接受更自然语言搜索。智能手机自动完成也是如此。潜在语义分析将句子或文档的含义压缩成一个向量,当这个向量集成到搜索引擎中时,它显著提高了引擎的质量,检索到我们正在寻找的确切文档。

随机奇异值分解

在本章中,我们故意避免计算奇异值分解,因为这是昂贵的。然而,我们提到常见的算法使用一种称为QR分解的矩阵分解(获得数据矩阵列的正交基),然后使用Householder 反射将其转换为双对角矩阵,最后使用迭代方法计算所需的特征向量和特征值。遗憾的是,对于不断增长的数据集,即使对于这些高效算法,涉及的矩阵也太大了。我们唯一的救赎是通过随机线性代数。这个领域提供了非常高效的矩阵分解方法,依赖于随机抽样理论。随机数值方法奇迹般地工作,提供准确的矩阵分解,同时比确定性方法便宜得多。随机奇异值分解对大数据矩阵X的列空间进行抽样,计算抽样(要小得多)矩阵的QR分解,将X投影到较小的空间(Y = Q t X,因此X ≈ Q Y),然后计算Y的奇异值分解(Y = U Σ V t)。矩阵Q是正交的,并且近似于X的列空间,因此矩阵Σ和V对于XY是相同的。要找到XU,我们可以从YQU计算得到U X = Q U Y。

像所有随机方法一样,它们必须伴随着误差界限,即从原始矩阵X到抽样QY的期望有多远。我们有这样的误差界限,但我们将它们推迟到下一章,专门讨论大型随机矩阵。

总结和展望

本章的焦点是一个公式:

X = U Σ V t = σ 1 U col 1 V row 1 t + σ 2 U col 2 V row 2 t + ⋯ + σ r U col r V row r t

这等同于X V = U Σ和X V col i = σ i U col i。

奇异值分解的威力在于它允许在不丢失基本信息的情况下进行秩降低。这使我们能够压缩图像,减少数据集的特征空间的维数,并在自然语言处理中计算文档相似性。

我们讨论了主成分分析、潜在语义分析以及主成分空间中固有的聚类结构。我们讨论了主成分分析被用作根据基因表达对卵巢癌患者进行无监督聚类技术的示例,以及对社交媒体用户进行表征的示例。

我们以随机奇异值分解结束了本章,突出了本书的一个重要主题:当事物太大时,对其进行抽样。随机性通常产生可靠性

对于想深入了解的读者,可以阅读有关张量分解和 N 维数据数组的内容,以及数据对齐对奇异值分解正常工作的重要性。对于对流行示例感兴趣的读者,可以从现代角度了解特征脸。

第七章:自然语言和金融人工智能:向量化和时间序列

他们。能。阅读。

人类智慧的一个标志是我们在很小的时候就掌握了语言:理解书面和口头语言,书面和口头表达思想,两个或更多人之间的对话,从一种语言到另一种语言的翻译,以及使用语言表达同理心、传达情感,并处理从周围环境中感知到的视觉和音频数据。撇开意识的哲学问题不谈,如果机器能够像人类一样或超过人类一样,以类似于人类的水平执行这些语言任务,解读单词的意图,那么这将是通往通用人工智能的重要推动力。这些任务属于自然语言处理计算语言学机器学习和/或概率语言建模的范畴。这些领域广阔,很容易让人们在各种充满大量承诺的模型中徘徊。我们不应迷失方向。本章的目的是一次性展示自然处理领域,以便我们可以一览全局而不深入细节。

以下问题始终指导我们:

  1. 手头上是什么类型的任务?换句话说,我们的目标是什么?

  2. 手头上是什么类型的数据?我们需要收集什么类型的数据?

  3. 有哪些最先进的模型处理类似任务和类似类型的数据?如果没有,那么我们必须自己设计模型。

  4. 我们如何训练这些模型?它们以什么格式消耗数据?它们以什么格式产生输出?它们是否有训练函数、损失函数(或目标函数)和优化结构?

  5. 各种模型相对于其他模型的优缺点是什么?

  6. 是否有 Python 包或库可用于实现它们?幸运的是,如今,大多数模型都伴随着它们的 Python 实现和非常简单的 API(应用程序编程接口)一起发布。更好的是,有许多预训练模型可供下载并准备在应用中使用。

  7. 为了训练和/或部署这些模型,我们需要多少计算基础设施?

  8. 我们能做得更好吗?总有改进的空间。

我们还需要从表现最佳的模型中提取数学。幸运的是,这是容易的部分,因为许多模型都有相似的数学基础,即使涉及不同类型的任务或来自不同的应用领域,比如预测句子中的下一个单词或预测股市行为。

我们打算在本章中介绍的最先进模型有:

  • 变压器或注意力模型(自 2017 年起)。这里的重要数学非常简单:两个向量之间的点积。

  • 递归长短期记忆神经网络(自 1995 年起)。这里的重要数学是时间反向传播。我们在第四章中介绍了反向传播,但对于递归网络,我们要对时间进行导数。

  • 卷积神经网络(自 1989 年起)用于时间序列数据。重要的数学是卷积操作,我们在第五章中介绍过。

这些模型非常适用于时间序列数据,即随时间顺序出现的数据。时间序列数据的例子包括电影、音频文件(如音乐和语音录音)、金融市场数据、气候数据、动态系统数据、文件和书籍。

我们可能会想知道为什么文件和书籍可以被视为时间相关,即使它们已经被写成并且只是存在。为什么图像不是时间相关,但书籍,以及一般来说,阅读和写作是?答案很简单:

  • 当我们阅读一本书时,我们逐个理解我们读到的每个单词,然后逐个理解每个短语,然后逐个理解每个句子,然后逐个理解每个段落,依此类推。这是我们理解书中概念和主题的方式。

  • 当我们写文档时,即使我们尝试表达的整个想法已经编码在那里,我们也是逐个输出一个单词,顺序地在纸上输出。

  • 当我们给图像加标题时,图像本身不是时间相关的,但我们的标题(输出)是。

  • 当我们总结一篇文章、回答一个问题或从一种语言翻译到另一种语言时,输出文本是时间相关的。如果使用循环神经网络处理,输入文本可能是时间相关的,如果使用 transformer 或卷积模型一次处理所有文本,则是静态的。

直到 2017 年,处理时间序列数据的最流行的机器学习模型要么基于卷积神经网络,要么基于具有长短期记忆的循环神经网络。2017 年,transformers取代了它们,在某些应用领域完全放弃了循环。关于循环神经网络是否过时的问题存在,但在人工智能领域每天都在发生变化,谁知道哪些模型会消亡,哪些模型会经受时间的考验。此外,循环神经网络驱动许多人工智能引擎,仍然是积极研究的对象。

在本章中,我们回答以下问题:

  1. 我们如何将自然语言文本转换为保留含义的数值量?我们的机器只能理解数字,我们需要使用这些机器处理自然语言。我们必须向量化我们的文本数据样本,或者将它们嵌入到有限维向量空间中。

  2. 我们如何将最初需要的巨大向量的维度降低到表示自然语言所需的维度?例如,法语有大约 135,000 个不同的单词,我们如何避免使用每个包含 135,000 个条目的向量对法语句子进行独热编码?

  3. 手头的模型是否将我们的自然语言数据(作为输入和/或输出)视为一个接一个地输入的时间相关序列,还是一次消耗所有的静态向量?

  4. 各种自然语言处理模型究竟是如何工作的?

  5. 为什么本章中也涉及金融?

在讨论过程中,我们将讨论我们的模型适用于哪些类型的自然语言和金融应用。我们将重点放在数学上,而不是编程,因为这些模型(特别是语言应用)需要实质性的计算基础设施。例如,DeepL Translator使用冰岛水力发电操作的超级计算机生成翻译,达到 5.1 petaflops。我们还注意到,AI 专用芯片行业正在蓬勃发展,由 Nvidia、谷歌的 Tensor Processing Unit、亚马逊的 Inferentia、AMD 的 Instinct GPU 以及 Cerebras 和 Graphcore 等初创公司领导。尽管传统芯片难以跟上摩尔定律,即每 18 个月处理能力翻倍,但 AI 专用芯片已经远远超过了这一定律。

尽管我们在本章中没有编写代码,但我们注意到大多数编程可以使用 Python 的 TensorFlow 和 Keras 库完成。

在下面的讨论中,我们必须注意我们是在模型的训练阶段还是在预测阶段(使用预先训练的模型执行任务)。此外,重要的是区分我们的模型是否需要标记数据进行训练,例如英语句子以及它们的法语翻译作为标签,或者可以从未标记的数据中学习,例如从上下文中计算单词的含义

自然语言人工智能

自然语言处理应用程序是无处不在的。这项技术已经融入到我们生活的许多方面,当我们在智能手机上使用应用程序、数字日历、数字家庭助手、Siri、Alexa 等时,我们往往认为这是理所当然的。以下列表部分改编自优秀书籍《自然语言处理实战》(Lane、Howard 和 Hapke)。它展示了自然语言处理已经变得不可或缺的程度:

  • 搜索和信息检索:网络,文档,自动完成,聊天机器人

  • 电子邮件:垃圾邮件过滤器,电子邮件分类,电子邮件优先级

  • 编辑:拼写检查,语法检查,风格建议

  • 情感分析:产品评论,客户关怀,社区士气监测

  • 对话:聊天机器人,数字助手如亚马逊的 Alexa,调度

  • 写作:索引,一致性,目录

  • 文本挖掘:摘要,知识提取,如挖掘选举活动的财务和自然语言数据(找到政治捐赠者之间的联系),简历与工作匹配,医学诊断

  • 法律:法律推理,先例搜索,传票分类

  • 新闻:事件检测,事实核查,标题撰写

  • 归因:抄袭检测,文学取证,风格指导

  • 行为预测:金融应用,选举预测,营销

  • 创意写作:电影剧本,诗歌,歌词,机器人驱动的金融和体育新闻报道

  • 字幕:计算机视觉结合自然语言处理

  • 翻译:谷歌翻译和 DeepL 翻译。

尽管过去的十年取得了令人印象深刻的成就,但机器仍然远远没有掌握自然语言。涉及的过程是繁琐的,需要注意的统计记账和实质性的记忆,就像人类需要记忆来掌握语言一样。这里的重点是:在这个领域有很多新的创新和贡献的空间。

语言模型最近已经从手工编码转变为数据驱动。它们不实现硬编码的逻辑和语法规则。相反,它们依赖于检测单词之间的统计关系。尽管在语言学中有一种思想认为语法是人类的固有属性,或者换句话说,硬编码到我们的大脑中,人类有一种惊人的能力,可以掌握新语言,而从未遇到过这些语言的任何语法规则。从个人经验来看,尝试学习一门新语言的语法似乎会妨碍学习过程,但请不要引用我说的话。

一个主要挑战是自然语言数据的维度极高。有数以百万计的单词跨越数千种语言。有大量的文档语料库,如整个作者作品集,数十亿条推特,维基百科文章,新闻文章,Facebook 评论,电影评论等等。第一个目标是减少维度以实现高效存储、处理和计算,同时避免丢失关键信息。这在人工智能领域是一个常见主题,人们不禁要想,如果我们拥有无限的存储和计算基础设施,多少数学创新将永远不会见天日。

为机器处理自然语言数据做准备

对于机器来处理任何自然语言任务,它必须首先对文本进行分解,并将其组织成保留意义、意图、上下文、主题、信息和情感的构建块。为此,它必须建立单词和数字标签之间的对应关系,使用称为标记化词干提取(例如给予单词及其复数变体相同的标记)、词形还原(将意思相近的几个单词关联在一起)、大小写规范化(例如给予拼写相同的大写和小写单词相同的标记)等过程。这种对应关系不是针对构成单词的个别字符,而是针对完整的单词、成对或更多的单词(2-gram 或 n-gram)、标点符号、重要的大写等携带意义的内容。这创建了一个与给定自然语言文档语料库对应的数字标记的词汇表词典。在这种意义上,词汇表或词典类似于 Python 字典:每个单独的自然语言构建块对象都有一个唯一的标记。

一个n-gram是一系列按顺序排列的n个单词,当它们一起保持有序时,其含义与每个单词单独浮动时不同。例如,一个 2-gram 是一对单词,如果我们将它们分开,如冰淇淋不是,它们的含义会发生变化,因此整个 2-gram 会得到一个数字标记,保留两个单词在正确上下文中的含义。类似地,一个 3-gram 是一组有序的三个单词,例如约翰·F·肯尼迪;依此类推。自然语言的解析器与计算机的编译器相同。如果这些新术语让您感到困惑,不要担心。对于我们的数学目的,我们只需要与唯一单词、n-gram、表情符号、标点符号、相关联的数字标记,以及自然语言文档语料库的结果词汇表。这些保存在类似字典的对象中,使我们可以轻松地在文本和数字标记之间来回切换。

我们将标记化、词干提取、词形还原、解析以及其他自然语言数据准备的实际细节留给计算机科学家和他们与语言学家的合作。事实上,随着模型在直接从数据中检测模式的能力成熟,与语言学家的合作变得不那么重要,因此,将手工制作的语言规则编码到自然语言模型中的需求已经减少。还要注意,并非所有自然语言流水线都包括词干提取和词形还原。但它们都涉及到标记化。对文本数据进行标记化的质量对我们自然语言流水线的性能至关重要。这是包含我们输入模型的数据的基本构建块的第一步。数据和标记化方式的质量会影响整个自然语言处理流水线的输出。对于生产应用程序,请使用spaCy解析器,它可以在一次处理中进行句子分割、标记化和多种其他操作。

在对文本进行标记化和拥有丰富的词汇表(数字标记的集合以及它们在自然语言文本中对应的实体)之后,我们需要使用数字向量来表示整个自然语言文档。这些文档可以非常长,比如一本书系列,也可以非常短,比如一条 Twitter 推文或者一个简单的 Google 搜索或 DuckDuckGo 搜索查询。然后,我们可以将一百万个文档的语料库表示为一百万个数字向量的集合,或者一个具有一百万列的矩阵。这些列的长度将与我们选择的词汇表一样长,或者如果我们决定进一步压缩这些文档,则会更短。在线性代数语言中,这些向量的长度是我们的文档所嵌入向量空间的维度。

上述过程的整个目的是获得我们文档的数值向量表示,以便我们可以对其进行数学运算:线性代数带来了一系列线性组合、投影、点积和奇异值分解。然而,有一个警告:对于自然语言应用,表示我们文档的向量的长度,或者我们词汇表的大小,是非常庞大的,无法进行任何有用的计算。维度的诅咒成为了一个真实存在的问题。

注:维度的诅咒

随着维度数量的增加,向量之间的欧几里德距离呈指数增长。一个自然语言的例子是根据它们与另一个文档的距离对文档进行排序,比如搜索查询。当我们超过 20 个维度时,如果使用欧几里德距离来衡量文档的接近程度,这种简单操作就变得不切实际了(有关更多详细信息,请参阅Wikipedia 的维度诅咒)。因此,对于自然语言应用,我们必须使用另一种衡量文档之间距离的方法。我们将很快讨论余弦相似度,它衡量两个文档向量之间的角度,而不是它们的欧几里德距离。

因此,自然语言处理模型的主要驱动因素是使用较短的向量来表示这些文档,传达主要主题并保留含义。想想我们必须使用多少个唯一标记或标记组合来表示这本书,同时又保留其最重要的信息。

总结一下,我们的自然语言处理流程如下:

  1. 从文本到数字标记,然后到整个文档语料库的可接受词汇。

  2. 从标记文档到高维数字向量。

  3. 从高维数字向量到使用直接投影到词汇空间的较小子集(只是丢弃词汇的一部分,使相应的条目为零)、潜在语义分析(投影到由文档向量的特殊线性组合确定的特殊向量)、Word2VecDoc2Vec思维向量Dirichlet 分配等技术生成的主题的较低维向量。我们会简要讨论这些。

通常在数学建模中,有多种方法可以将给定文档表示为一组数字的向量。我们决定我们的文档所在的向量空间,或者被嵌入的向量空间。每种向量表示都有优点和缺点,取决于我们自然语言任务的目标。有些比其他的简单。

统计模型和log函数

当将文档表示为一组数字的向量时,首先要计算文档中某些术语出现的次数,那么我们的文档向量化模型是统计的,因为它是基于频率的。

当处理术语频率时,最好将log函数应用于我们的计数,而不是使用原始计数。当处理可能变得极大、极小或在规模上有极端变化的数量时,log函数是有利的。在对数尺度内查看这些极端计数或变化将它们带回正常范围。

例如,数字10 23是巨大的,但log ( 10 23 ) = 23 log ( 10 )不是。同样,如果术语shark出现在语料库中的两个文档中(2000 万/2=1000 万),而术语whale出现在这个语料库的二十个文档中(2000 万/20=100 万),那么这是一个 900 万的差异,对于分别出现在两个和二十个文档中的术语来说,这似乎过多。在对数尺度上计算相同的数量,我们分别得到7log(10)6log(10)(无论使用哪种对数基数),这看起来不再过多,更符合语料库中术语的出现情况。

在处理特定的词频时,使用对数函数的必要性特别受到齐普夫定律的支持。这个定律说,自然语言语料库中的术语计数自然遵循幂律,因此最好用对数函数来调节,将术语频率的差异转化为线性刻度。接下来我们将讨论这一点。

术语计数的齐普夫定律

齐普夫定律与自然语言中的词频有关。它非常有趣,令人惊讶,以至于我忍不住想尝试看看它是否适用于我的书。很难想象,当我在这本书中写下每个词时,我的独特词频实际上遵循了某种规律。我们连同我们表达思想和观点的方式,是那么可预测吗?事实证明,齐普夫定律适用于我们周围许多事物的计数,不仅仅是文档和语料库中的词语。

齐普夫定律:*对于一个自然语言语料库,其中术语根据它们的频率排序,第一项的频率是第二项的两倍,第三项的三倍,依此类推。*也就是说,一个项目在语料库中出现的频率与其排名有关:f 1 = 2 f 2 = 3 f 3 = . . .

我们可以通过绘制术语的频率与它们各自的排名,并验证幂律来验证齐普夫定律:f r = f ( r ) = f 1 r -1。要验证幂律,最好制作一个对数-对数图,将log ( f r )绘制在log ( r )上。如果我们在对数-对数图中获得一条直线,那么f r = f ( r ) = f 1 r α,其中α是直线的斜率。

自然语言文档的各种向量表示形式

让我们列出最常见的自然语言处理模型的文档向量表示。前两种,词项频率和词项频率乘以逆文档频率,是统计表示,因为它们是基于频率的,依赖于计算文档中单词出现的次数。它们比简单的二进制表示稍微复杂一些,可以检测文档中某些单词的存在或不存在,然而,它们仍然是浅层的,仅仅计算单词。即使有这种浅显性,它们对于垃圾邮件过滤和情感分析等应用非常有用:

文档或词袋的词项频率(TF)向量表示

在这里,我们使用词袋来表示一个文档,忽略单词在文档中出现的顺序。尽管单词顺序编码了关于文档内容的重要信息,但忽略它通常是一个对于短句和短语的良好近似。

假设我们想要将给定的文档嵌入到一个包含 10,000 个标记的词汇空间中。那么代表这个文档的向量将有 10,000 个条目,每个条目计算每个特定标记在文档中出现的次数。出于明显的原因,这被称为文档的词项频率词袋向量表示,其中每个条目是一个非负整数(整数)。

例如,一个谷歌搜索查询:明天的天气如何?将被矢量化为除了代表单词whattheweathertomorrow的标记外,其他地方都是零,如果它们存在于词汇表中。然后我们标准化这个向量,将每个条目除以文档中的总术语数,以便文档的长度不会扭曲我们的分析。也就是说,如果一个文档有 50,000 个术语,术语cat被提及 100 次,另一个文档只有 100 个术语,术语cat被提及 10 次,那么显然单词 cat 对于第二个文档比对于第一个文档更重要,而仅仅计算单词数量而不进行标准化将无法捕捉到这一点。

最后,一些自然语言处理课程对文档向量中的每个术语取对数,原因在前两节中提到。

文档的词项频率乘以逆文档频率(TF-IDF)向量表示

在这里,对于代表文档的向量的每个条目,我们仍然计算标记在文档中出现的次数,但然后我们除以我们语料库中包含该标记的文档的数量

这个想法是,如果一个术语在一个文档中出现很多次,而在其他文档中出现的次数不那么多,那么这个术语对于这个文档必须是重要的,在代表这个文档的向量的相应条目中得到更高的分数。

为了避免除以零,在一个术语不出现在任何文档中的情况下,通常的做法是在分母上加一。例如,标记cat的逆文档频率是:

IDF for cat = numberofdocumentsincorpus numberofdocumentscontainingcat+1

显然,使用 TF-IDF 表示,文档向量的条目将是非负有理数,每个条目提供了该特定标记对文档的重要性的度量。最后,我们对这个向量中的每个条目取对数,原因与前一节中所述相同。

有许多与信息检索系统相关的 TF-IDF 方法,例如 Okapi BM25。参见 Molino 2017。

由潜在语义分析确定的文档主题向量表示

TF-IDF 向量非常高维(与语料库中的标记数量一样多,可能达到百万级),稀疏,并且在相互相加或相减时没有特殊含义。我们需要更紧凑的向量,维度在数百个或更少,这是从百万维度中的大幅压缩。除了降维的优势外,这些向量捕捉了一些含义,不仅仅是词频和统计数据。我们称它们为主题向量。我们不再关注文档中单词的统计数据,而是关注文档内和跨语料库中单词之间的连接统计数据。这里产生的主题将是单词计数的线性组合。

首先,我们处理我们语料库的整个 TF-IDF 矩阵X,产生我们的主题空间。在这种情况下,处理意味着我们计算线性代数中 TF-IDF 矩阵的奇异值分解,即,X = U Σ V t。我们在本书中有一整章关于奇异值分解,所以我们现在不会详细介绍,但我们会解释如何用它来产生我们语料库的主题空间。线性代数中的奇异值分解在自然语言处理中被称为潜在语义分析。我们将两个术语互换使用。

我们必须注意语料库的 TF-IDF 矩阵X的列是代表单词标记还是文档。不同的作者和软件包使用其中一个,因此我们必须小心处理矩阵或其转置以产生我们的主题空间。在本节中,我们遵循这种表示:行是整个语料库的所有单词(标记为单词、n-gram 等),列是语料库中每个文档的 TF-IDF 向量表示。这与数据矩阵的通常表示略有不同,其中特征(每个文档中的单词)在列中,实例(文档)在行中。这种切换的原因很快就会显而易见。然而,这与我们对文档的列向量表示并不相悖。

接下来,给定一个新文档及其 TF-IDF 向量表示,我们通过将其投影到由语料库的 TF-IDF 矩阵的奇异值分解产生的主题空间上,将其转换为一个更紧凑的主题向量。在线性代数中,投影仅仅是计算适当向量之间的点积,并将结果标量数保存到新的投影向量的条目中。以下是步骤:

  • 我们有一个文档的 TF-IDF 向量,条目数量与整个语料库中的标记数量相同;

  • 我们有主题权重向量,它们是通过 TF-IDF 矩阵的奇异值分解产生的矩阵U的列。同样,每个主题权重向量的条目数量与我们的语料库中的标记数量相同。最初,我们的主题权重向量与整个语料库中的标记数量一样多(U的列)。U中的列中的权重告诉我们某个标记对主题的贡献有多大,如果是接近 1 的正数,则贡献很大,如果接近零,则贡献模棱两可,如果是接近-1 的负数,则贡献甚至为负。请注意,U的条目始终是-1 和 1 之间的数字,因此我们将其解释为我们语料库标记的权重因子。

你可能会想:如果我们的语料库中有与标记数量相同的主题权重向量,每个向量的条目数也与标记数量相同,那么节省在哪里,何时会发生压缩或降维?继续阅读。

  • 目标 1:计算我们的文档包含多少特定主题。这只是文档的 TF-IDF 向量与我们关心的主题对应的U列之间的点积。将其记录为第一个标量数字。

  • 目标 2:计算我们的文档包含另一个主题的多少。这是文档的 TF-IDF 向量与与我们关心的另一个主题对应的U列之间的点积。将其记录为第二个标量数字。

  • 目标 3:为我们喜欢的主题(与U的列数相同,也就是语料库中的总标记数)或不喜欢的主题(一个)重复这个过程,记录我们计算的每个点积的标量数字。现在很明显,在这种情况下,一个主题意味着一个包含在语料库中每个标记之间分配的-1 到 1 之间权重的列向量。

  • 目标 4:通过仅保留重要的主题来减少维度。也就是说,如果我们决定只保留两个主题,那么我们文档的压缩向量表示将是包含两个标量数字的二维向量,这两个标量数字是使用文档的 TF-IDF 向量和两个主题权重向量之间的两个点积产生的。这样,我们将把文档的维度从可能的数百万减少到只有两个。非常酷。

  • 目标 5:选择正确的主题来代表我们的文档。这就是奇异值分解发挥作用的地方。U的列按顺序组织,从整个语料库中最重要的主题到最不重要的主题。从统计学的角度来看,列按照在整个语料库中方差最大的主题到方差最小的主题的顺序组织,因此编码更多信息。我们在第十章中解释了方差和奇异值分解的关系。因此,如果我们决定仅将我们的高维文档投影到U的前几个列向量上,我们可以确保在捕捉语料库中可能的主题变化方面不会错过太多,并评估我们的文档包含多少这些内容。

  • 目标 6:了解这仍然是一种用于捕捉文档中主题的统计方法。我们从语料库的 TF-IDF 矩阵开始,简单地计算文档中标记的出现次数。在这种意义上,主题是基于一个前提捕捉的,即涉及相似事物的文档使用相似的词语。这与基于它们使用的词语的含义捕捉主题是不同的。也就是说,如果我们有两篇讨论相同主题但使用完全不同词汇的文档,它们在主题空间中会相距很远。解决这个问题的方法是将具有相似含义的单词与其他单词一起存储,这是后面在本章中讨论的 Word2Vec 方法。

  • 问题 1:如果我们向我们的语料库添加另一个文档会发生什么?幸运的是,我们不必重新处理整个语料库来生成文档的主题向量,我们只需将其投影到语料库现有的主题空间中。当然,如果我们添加一个与我们的语料库没有共同之处的新文档,比如将一篇关于莎士比亚情诗的语料库添加到一篇关于纯数学的文章中,这种方法就会失败。在这种情况下,我们的数学文章将由一堆零或接近零的条目表示,这并不能充分捕捉文章中的思想。

  • 问题 2:在奇异值分解中的矩阵V t在我们语料库的自然语言处理背景下意味着什么?矩阵V t的行数和列数与我们语料库中的文档数量相同。它是文档-文档矩阵,给出了文档之间的共享含义。

  • 问题 3:当我们使用潜在语义分析转移到较低维度的主题空间时,文档之间的大距离会被保留吗?是的,因为奇异值分解侧重于最大化语料库文档之间的方差。

  • 问题 4:小距离被保留吗,即潜在语义分析是否保留了文档的“精细结构”,使其与“并非完全不同”的其他文档区分开来?不。即将讨论的潜在 Dirichlet 分配在这方面做得更好。

  • 问题 5:我们可以改进潜在语义分析以使较低维度主题空间中的文档向量保持接近吗?是的,我们可以通过利用文档的额外信息或元数据,例如具有相同发件人的消息,或通过惩罚使用成本函数来“引导”向量,以便该方法产生保持“接近性”的主题向量。

总结:潜在语义分析以最大化语料库中主题的多样性的最佳方式选择主题。来自 TF-IDF 矩阵奇异值分解的矩阵U对我们非常重要。它返回方差最大的方向。我们通常会摆脱在语料库中文档之间方差最小的主题,丢弃U的最后几列。这类似于在文本准备过程中手动摆脱停用词(和、a、the 等),但潜在语义分析以优化的方式为我们完成了这项工作。矩阵U的行数和列数与我们的词汇量相同。它是基于单词在同一文档中共现的词和主题之间的交叉相关性。当我们将一个新文档乘以U(将其投影到U的列上)时,我们将得到文档中每个主题的数量。我们可以根据需要截断U并丢弃不太重要的主题,将维度减少到我们想要的主题数量。

潜在语义分析存在缺点:它产生的主题空间或U的列只是将标记的线性组合放在一起,以尽可能多地捕捉词汇标记在使用中的方差。这并不一定转化为对人类有意义的词组合。遗憾。稍后将讨论的 Word2Vec 解决了这些缺点。

最后,通过潜在语义分析产生的主题向量只是在 TF-IDF 向量上执行的线性变换。它们应该是语义搜索、文档聚类和基于内容的推荐引擎的首选。所有这些都可以通过测量这些主题向量之间的距离来实现,我们将在本章后面解释。

由潜在 Dirichlet 分配确定的文档的主题向量表示

与使用潜在语义分析的主题向量不同,使用潜在狄利克雷分配时,如果我们向语料库添加新文档以生成其主题向量,则必须重新处理整个语料库。此外,我们使用非线性统计方法将单词捆绑到主题中:我们假设单词频率遵循狄利克雷分布。这使得该方法在将单词分配给主题的统计方面比潜在语义分析更精确。因此,该方法是可解释的:单词如何分配到主题中,基于它们在文档中一起出现的频率,以及主题如何分配到文档中,对我们人类来说是有意义的。

这种非线性方法的训练时间比线性潜在语义分析长。因此,尽管它是可解释的,但对于涉及文档语料库的应用来说是不切实际的。我们可以将其用于总结单个文档,其中文档中的每个句子都成为其自己的文档,而母文档则成为语料库。

潜在狄利克雷分配是在 2000 年由遗传学家发明的,用于推断人口结构,并于 2003 年用于自然语言处理。以下是其假设:

  • 我们从原始单词计数开始(而不是归一化的 TF-IDF 向量),但仍然没有对单词进行排序以理解它们。相反,我们仍然依靠对每个文档的单词统计进行建模,只是这一次我们将单词分布明确地纳入模型。

  • 文档是任意数量主题的线性组合(提前指定此数量,以便该方法将文档的标记分配给此数量的主题)。

  • 我们可以根据单词的词频来表示每个主题的某种分布。

  • 文档中某个主题出现的概率遵循狄利克雷概率分布。

  • 某个单词被分配到某个主题的概率也遵循狄利克雷概率分布。

因此,使用狄利克雷分配获得的主题向量是稀疏的,表明主题在包含哪些单词方面有清晰的分离,这使得它们可以解释。

使用狄利克雷分配,频繁一起出现的单词被分配到相同的主题中。因此,当我们转移到较低维度的主题空间时,该方法会保持靠在一起的标记靠在一起。另一方面,潜在语义分析在我们转移到较低维度的主题空间时会保持分散的标记分散,因此在我们转移到较低维度空间时,这对于保持类别之间的分离更好。

由潜在判别分析确定的文档的主题向量表示

与潜在语义分析和潜在狄利克雷分配将文档分解为我们选择的主题数量不同,潜在判别分析将文档分解为仅一个主题,例如垃圾邮件、情感等。这对于二元分类非常有用,例如将消息分类为垃圾邮件或非垃圾邮件,或将评论分类为积极或消极。与潜在语义分析最大化新主题空间中所有向量之间的分离不同,潜在判别分析仅最大化属于每个类别的向量的质心之间的分离。

但是我们如何确定代表这个主题的向量?给定带标签的垃圾邮件和非垃圾邮件文档的 TF-IDF 向量,我们计算每个类别的质心,然后我们的向量沿着连接两个质心的线(参见图 7-1)。

300

图 7-1. 潜在判别分析。

现在每个新文档都可以投影到这个一维空间中。我们的文档沿着那条线的坐标是其 TF-IDF 和质心线方向向量之间的点积。整个文档(具有数百万维度)现在被压缩成一个数字沿着一个维度(一个轴),其中包含两个质心及其中点。然后我们可以根据文档沿着那条线到每个质心的距离来将文档分类为属于一个类别或另一个类别。请注意,使用这种方法分离类别的决策边界是线性的。

由神经网络嵌入确定的单词和文档的含义向量表示

以前用于将自然语言文本文档向量化的模型只考虑了单词之间的线性关系,或者在潜在狄利克雷分配中,我们必须使用人类判断力来选择模型的参数并提取特征。我们现在知道神经网络的力量在于其捕捉非线性关系、提取特征和自动找到适当的模型参数的能力。我们现在将使用神经网络来创建代表单个单词和术语的向量,并采用类似的方法来创建代表整个段落含义的向量。由于这些向量编码了每个术语的含义、逻辑和上下文使用,我们可以通过简单地进行常规向量加法和减法来进行推理。

Word2Vec 通过整合连续的ness属性来表示单个术语的向量

通过使用 TF 向量或 TF-IDF 向量作为我们主题向量模型的起点,我们忽略了单词附近上下文的影响以及这对单词含义的影响。单词向量解决了这个问题。单词向量是单词含义的数值向量表示,因此语料库中的每个术语都变成了语义向量。这种向量表示,具有浮点数条目,单词的单个词语使得语义查询和逻辑推理成为可能。

单词向量表示是使用神经网络学习的。它们通常具有 100 到 500 个维度,编码一个词在其中携带多少意义维度。在训练单词向量模型时,文本数据是无标签的。一旦训练完成,可以通过比较它们的向量来确定两个术语在意义上是接近的还是相距甚远,通过一些接近度指标。余弦相似度,接下来会讨论,是一种常用的方法。

2013 年,谷歌创建了这个单词到向量模型 Word2Vec,它在包含 1000 亿个单词的谷歌新闻源上进行了训练。结果预训练的 word2vec 模型包含 300 维向量,用于 3 百万个单词和短语。可以在 word2vec 项目的谷歌代码存档页面上免费下载。

Word2Vec 构建的向量捕捉了比本章前面讨论的主题向量更多的单词含义。论文摘要Efficient Estimation of Word Representations in Vector Space (2013)很有启发性:我们提出了两种新颖的模型架构,用于从非常大的数据集计算单词的连续向量表示。这些表示的质量是通过单词相似性任务来衡量的,并且结果与以前基于不同类型的神经网络的表现最佳技术进行了比较。我们观察到在准确性方面取得了很大的改进,而计算成本要低得多,即从一个包含 16 亿个单词的数据集中学习高质量的单词向量不到一天的时间。此外,我们展示这些向量在我们的测试集上提供了最先进的性能,用于测量句法和语义单词相似性。

一个月后发表的论文Distributed Representations of Words and Phrases and their Compositionality讨论了表示与其各个组成部分含义不同的词组,例如Air Canada最近引入的连续 Skip-gram 模型是一种学习高质量分布式向量表示的有效方法,可以捕捉大量精确的句法和语义单词关系。在本文中,我们提出了几种扩展,既提高了向量的质量,又提高了训练速度。通过对频繁单词进行子采样,我们获得了显著的加速,并且学习了更规则的单词表示。我们还描述了一种简单的替代分层 softmax 的负采样。单词表示的固有局限性在于它们对单词顺序的漠不关心以及无法表示习语短语。例如,“Canada”和“Air”的含义不能轻松结合以获得“Air Canada”。受到这个例子的启发,我们提出了一种在文本中找到短语的简单方法,并展示了学习数百万短语的良好向量表示是可能的。

引入 Word2Vec 表示的出版物Linguistic Regularities in Continuous Space Word Representations (2013)演示了这些单词的含义向量如何编码逻辑规律,以及这如何使我们能够回答常规类比问题:连续空间语言模型最近在各种任务中表现出色。在本文中,我们研究了隐式学习的输入层权重所学习的向量空间单词表示。我们发现这些表示在捕捉语言中的句法和语义规律方面出奇地好,并且每个关系都由一个特定关系向量偏移所表征。这允许基于单词之间的偏移进行向量定向推理。例如,男性/女性关系是自动学习的,通过诱导的向量表示,“国王 - 男人 + 女人”得到的向量非常接近“女王”。我们通过句法类比问题(本文提供)演示了单词向量捕捉句法规律的能力,并且能够正确回答近 40%的问题。我们通过使用向量偏移方法回答 SemEval-2012 任务 2 问题来演示单词向量捕捉语义规律的能力。值得注意的是,这种方法胜过了以前最好的系统。

自 2013 年以来,word2vec 的性能显著提高,通过在更大的语料库上进行训练。

Word2Vec 将一个单词分配给一个属性向量,例如:地点性,动物性,城市性,积极性(情感),明亮度,性别,等等。每个属性都是一个维度,捕捉单词含义中包含多少该属性。

这些词义向量和属性并非手动编码,而是在训练过程中学习的,模型从句子中的周围五个左右单词中学习一个词的含义。这与潜在语义分析不同,潜在语义分析仅从出现在同一文档中的单词中学习主题,而不一定是彼此接近的单词。对于涉及短文档和陈述的应用,Word2Vec 嵌入实际上已经取代了通过潜在语义分析获得的主题向量。我们还可以使用单词向量从庞大的数据集中推导出单词簇:在单词向量表示之上执行 K 均值聚类。有关更多信息,请参阅Google Code Archive 页面上的 word2vec 项目

通过用有意义的向量表示单词(而不是计数)的优势是我们可以用它们进行推理。例如,如果我们从代表男人的向量中减去代表国王的向量并加上代表女人的向量,那么我们得到一个非常接近代表女王的向量。另一个例子是捕捉单数和复数单词之间的关系:如果我们从代表单词单数形式的向量中减去代表它们复数形式的向量,我们得到的向量对于所有单词来说大致相同。

下一个问题是:我们如何计算 Word2Vec 嵌入?也就是说,我们如何训练一个 Word2Vec 模型?训练数据、神经网络的架构以及其输入和输出是什么?训练 Word2Vec 模型的神经网络是浅层的,只有一个隐藏层。输入是一个大型文本语料库,输出是语料库中每个唯一术语的几百维向量。共享相同语言环境的单词最终具有接近的向量。

Word2Vec 有两种学习算法,我们暂时不详细介绍[我将在下一轮编辑中详细介绍],但是到目前为止,我们对神经网络的工作原理有了很好的了解,特别是只有一个隐藏层的浅层网络。这两种学习算法是:

  1. 连续词袋:这从周围上下文词的窗口中预测当前单词;上下文词的顺序不影响预测。

  2. 连续跳字:这使用当前单词来预测周围上下文词的窗口;该算法更加重视附近的上下文词而不是更远的上下文词。

这两种算法都学习一个术语的向量表示,这对于预测句子中的其他术语很有用。连续词袋比连续跳字似乎更快,而跳字对于不常见的词更好。

有关更多详细信息,我们参考教程Word Vectors 的惊人力量Word2Vec 的维基百科页面以及关于该主题的三篇原始论文(2013 年):在向量空间中高效估计单词表示单词和短语的分布式表示及其组合性连续空间单词表示中的语言规律性

经过训练的 Google News Word2vec 模型有三百万个单词,每个单词用一个 300 维的向量表示。要下载这个模型,您需要 3GB 的可用内存。如果我们的内存有限或者我们只关心部分单词,那么可以绕过下载整个预训练模型。

如何可视化代表单词的向量?

单词向量是非常高维的(100-500 维),但人类只能可视化二维和三维向量,因此我们需要将我们的高维向量投影到这些极低维度的空间上,并仍然保留它们最基本的特征。到目前为止,我们知道奇异值分解(主成分分析)可以为我们完成这项工作,给出我们投影的向量,按重要性递减的顺序,或者给出一组单词向量变化最大的方向。也就是说,奇异值分解确保这种投影给出单词向量的最佳视图,使它们尽可能远离。

网络上有许多很好的工作示例。在出版物https://www.researchgate.net/publication/338405739_WET_Word_Embedding-Topic_distribution_vectors_for_MOOC_video_lectures_dataset [Word Embedding-Topic distribution vectors for MOOC (Massive Open Online Courses) video lectures dataset]中,作者从教育领域的数据集中生成了两样东西,即来自Coursera收集的 200 门课程中 12,032 个视频讲座的转录:使用 Word2Vec 模型的词向量,以及使用潜在狄利克雷分配的文档主题向量。数据集包含 878 万个句子和超过 7900 万个标记。词汇量超过 68,000 个独特单词。各个视频讲座的转录长度不同,标记数量从 228 到 32,767 个不等,平均每个视频讲座有 6622 个标记。作者在 Python 的 Gensim 包中使用了 Word2Vec 和潜在狄利克雷分配的实现。图 7-2 展示了该出版物使用主成分分析的三维可视化的部分词向量。

280

图 7-2. 使用前三个主成分的三维词向量可视化。此示例突出显示了代表单词“studying”及其邻居的向量:academic, studies, institution, reading, 图片来源)。

请注意,词向量和文档主题向量本身并不是目的,而是达到目的的手段,通常是自然语言处理任务,例如:特定领域内的分类,例如上面的大规模在线开放课程(MOOCS);现有和新模型的基准测试和性能分析;迁移学习,推荐系统,上下文分析,用主题丰富短文本,个性化学习;以易于搜索和最大可见性的方式组织内容。我们很快会讨论这些任务。

Facebook 的 fastText 对个别 n 字符 gram 的向量表示

Facebook 的 fastText 类似于 Word2Vec,但它不是将完整单词或 n-gram 表示为向量,而是训练为每个n 字符 gram 输出一个向量表示。这使得 fastText 能够处理罕见、拼写错误甚至部分单词,例如社交媒体帖子中经常出现的单词。在训练过程中,Word2Vec 的 skip-gram 算法学习预测给定单词的周围上下文。类似地,fastText 的 n 字符 gram 算法学习预测单词周围的 n 字符 gram,因此提供了更多的细粒度和灵活性。例如,它不仅仅将单词 lovely 表示为一个向量,还会将 2 个和 3 个 gram 也表示为向量:lo, lov, ov, ove, ve, vel, el, ely, ly。

Facebook 发布了他们预训练的 fastText 模型,涵盖了 294 种语言,这些模型是在这些语言的可用维基百科语料库上训练的。这些语言从阿布哈兹语到祖鲁语,包括只有少数人口使用的罕见语言。当然,发布的模型的准确性在不同语言之间有所差异,并取决于训练数据的可用性和质量。

Doc2Vec 或 Par2Vec 文档的向量表示

那么如何在语义上表示文档呢?在前面的部分中,我们能够将整个文档表示为主题向量,但 Word2Vec 只将单个单词或短语表示为向量。那么我们能否将 Word2Vec 模型扩展到将整个文档表示为携带含义的向量?2014 年的论文句子和文档的分布式表示正是这样做的,它使用一种无监督算法从可变长度的文本片段(如句子、段落和文档)中学习固定长度的密集向量。教程使用 Gensim 进行 Doc2Vec 教程通过 Python 实现过程,为给定语料库中的每个完整文档生成固定大小的向量。

全局向量或(GloVe)单词向量表示

还有其他产生表示单词含义的向量的方法。Gobal vector GloVe (2014)是一个使用奇异值分解获得这些向量的模型。它仅在全局单词共现矩阵的非零条目上进行训练,该矩阵记录了整个语料库中单词彼此共现的频率。

GloVe 本质上是一个带有加权最小二乘目标的对数双线性模型。对数双线性模型可能是最简单的神经语言模型。给定前n-1个单词,对数双线性模型通过简单地线性组合这些前n-1个单词的向量表示来计算下一个单词的初始向量表示。然后,基于计算线性组合向量表示与词汇表中所有单词的表示之间的相似性(点积),计算给定这前n-1个单词的下一个单词出现的概率。

P r o b ( w n = w | w 1 , w 2 , ⋯ , w n-1 ) = exp(w vocab i t w) exp(w vocab 1 t w)+exp(w vocab 2 t w)+⋯+exp(w vocab vocab-size t w)

全局向量模型的主要直觉是简单观察到单词共现概率的比值可能编码某种含义。GloVe 项目网站上的示例考虑了目标单词"ice"和"steam"与词汇表中各种探针词的共现概率。图 7-3 显示了来自 60 亿字的语料库的实际概率。

280

图 7-3。显示单词"ice"和"steam"与单词"solid"、"gas"、"water"和"fashion"共现的概率表格(图片来源)。

观察图 7-3 中的表格,我们注意到,如预期,单词"ice"与单词"solid"的共现频率比与单词"gas"的共现频率更高,而单词"steam"与单词"gas"的共现频率比与单词"solid"的共现频率更高。"ice"和"steam"都经常与它们共享的属性"water"共现,而与不相关的单词"fashion"共现的频率较低。计算概率的比值可以消除与非歧视性词语(如"water")相关的噪音,因此大于 1 的大值与"ice"特有的属性相关联,而远小于 1 的小值与"steam"特有的属性相关联。这样,概率的比值编码了与热力学相位这一抽象概念相关的某种粗糙含义。

GloVe 的训练目标是学习单词向量,使它们的点积等于单词共现的概率的对数。由于比值的对数等于对数的差,这个目标考虑了单词向量空间中的向量差异。由于这些比值可以编码某种含义,这些信息也被编码为向量差异。因此,由此产生的单词向量在词类比任务上表现非常出色,例如在 Word2Vec 包中讨论的任务。

由于奇异值分解算法已经经过数十年的优化,GloVe 在训练方面比 Word2Vec 具有优势,后者是一个神经网络,依赖于梯度下降和反向传播来执行其误差最小化。如果我们要从我们关心的某个语料库中训练自己的词向量,我们可能最好使用全局向量模型而不是 Word2Vec,即使 Word2Vec 是第一个用单词实现语义和逻辑推理的模型,因为全局向量训练速度更快,具有更好的 RAM 和 CPU 效率,并且即使在较小的语料库上也比 Word2Vec 给出更准确的结果。

余弦相似度

到目前为止,在本章中,我们只致力于一个目标:将自然语言文本的文档转换为数字向量。我们的文档可以是一个词、一个句子、一个段落、多个段落或更长。我们发现了多种获取向量的方法,其中一些更具语义代表性。

一旦我们有了一个文档的向量表示,我们可以将其输入到机器学习模型中,例如分类算法、聚类算法或其他算法。一个例子是使用一些聚类算法(如k-means)对语料库的文档向量进行聚类,以创建一个文档分类器。我们还可以确定我们的文档在语义上与其他文档有多相似,用于搜索引擎、信息检索系统和其他应用。

我们已经确定,由于维度诅咒,测量两个非常高维文档向量之间的欧氏距离是没有意义的,因为它们会因为所处空间的广阔而相距甚远。那么我们如何确定代表文档的向量是“接近”还是“远”,或者是“相似”还是“不同”?一个成功的方法是使用“余弦相似度”,测量两个文档向量之间的夹角的余弦值。这由向量的点积给出,每个向量都被其长度归一化(如果我们提前归一化文档向量,那么它们的长度已经是一了):

cos ( angle between doc 1 → and doc 2 → ) = doc 1 → t length(doc 1 →) doc 2 → length(doc 2 →)

图 7-4 展示了在二维向量空间中表示的三个文档。我们关心它们之间的夹角。

300

图 7-4. 在二维向量空间中表示的三个文档。

一个角的余弦值始终在-1 和 1 之间。当两个文档向量完全对齐并沿着所有维度指向相同方向时,它们的余弦相似度为 1;当它们在每个维度上都是完全相反的时,它们的余弦相似度为-1;当它们彼此正交时,它们的余弦相似度为零。

自然语言处理应用

本章的大部分内容是关于将给定的自然语言文本文档转换为数字向量。我们已经确定有多种方法可以获得我们的文档向量,所有这些方法都会导致不同的表示(因此结论也不同),或者强调给定自然语言数据的某些方面而不是其他方面。对于进入人工智能自然语言处理子领域的人来说,这是最难克服的障碍之一,特别是如果他们来自数量背景,那里他们处理的实体本质上是数字,适合数学建模和分析。现在我们已经克服了这个障碍,具备了自然语言数据的具体向量表示,我们可以数学地思考流行的应用。重要的是要意识到每个任务都有多种实现方式。传统方法是硬编码规则,为单词、标点符号、表情符号等分配分数,然后依赖于数据样本中这些元素的存在来产生结果。现代方法依赖于各种机器学习模型,这些模型又依赖于(主要是)标记的训练数据集。要在这个领域取得成功,我们必须抽出时间,尝试在同一个任务上使用不同的模型,比较性能,并深入了解每个模型以及其成功和失败的数学理由。

情感分析

  • 硬编码规则:一个成功的算法是 VADER 或情感推理的 Valence Aware Dictionary。这里的分词器需要正确处理标点符号和表情符号,因为这些传达了很多情感。我们还必须手动编译成千上万个单词以及它们的情感分数,而不是让机器自动完成这个任务。

  • 朴素贝叶斯分类器:这是一组基于贝叶斯定理的分类算法。分类的决策规则是最大似然。这将在概率和测度章节中讨论。

  • 潜在判别分析:在前一节中,我们学习了如何使用潜在判别分析对文档进行分类。

  • 使用潜在语义分析:使用潜在语义分析形成的文档向量集群可以用于分类。理想情况下,在潜在语义分析的主题空间中,正面评价与负面评价会聚集在一起。给定一堆标记为正面或负面的评价,我们首先使用潜在语义分析计算它们的主题向量。现在,为了对新的评价进行分类,我们可以计算其主题向量,然后将该主题向量与正面和负面主题向量的余弦相似度进行比较。最后,如果评价更类似于正面主题向量,则将其分类为正面,如果更类似于负面主题向量,则将其分类为负面。

  • 变压器、卷积神经网络、循环长短期记忆神经网络:所有这些现代机器学习方法都需要将我们的文档以向量形式传递到具有特定架构的神经网络中。我们将很快花时间研究这些最先进的方法。

垃圾邮件过滤器

从数学上讲,垃圾邮件过滤与上述讨论的情感分析是一个类似的分类问题,当文档的情感为正面或负面时。因此,情感分类的相同方法也适用于垃圾邮件过滤。在所有情况下,我们创建文档向量的方式并不重要,我们可以使用它们来预测社交帖子是否是垃圾邮件,预测它有多大可能获得等。

搜索和信息检索

再次,无论我们如何创建代表文档的数值向量,我们都可以将它们用于搜索和信息检索任务。搜索可以基于索引或基于语义,根据它们的含义找到文档。

  • 全文搜索:当我们基于文档中包含的单词或部分单词搜索文档时。搜索引擎将文档分解为可以索引的单词,类似于我们在教科书末尾找到的索引。当然,拼写错误和打字错误需要大量的跟踪和有时猜测。索引,一旦可用,工作得相当不错。

  • 语义搜索:当我们搜索文档时考虑到查询和我们搜索的文档中单词的含义。

  1. 基于文档的 TF-IDF 之间的余弦相似度(对包含数十亿文档的语料库)。任何具有毫秒响应的搜索引擎都利用 TF-IDF 矩阵。

  2. 基于语义:通过潜在语义分析(对包含数百万文档的语料库)或潜在狄利克雷分配(对规模较小的语料库)获得的文档主题向量之间的余弦相似度。这类似于我们如何使用潜在语义分析来分类一条消息是否是垃圾邮件,只是现在我们计算新文档的主题向量与我们数据库中所有主题向量之间的余弦相似度,返回与我们文档最相似的那些。

  3. 基于特征向量迭代

  4. 语义搜索和使用词向量(Word2Vec 或 GloVe)的查询:考虑这样一个搜索(这个例子改编自书籍《自然语言处理实战》):她在 20 世纪初在欧洲发明了与物理有关的东西。当我们将我们的搜索句子输入到 Google 或 Bing 时,我们可能不会直接得到答案玛丽·居里。Google 搜索很可能只会给我们一些著名物理学家的链接,包括男性和女性。在搜索了几页之后,我们找到了玛丽·居里,这就是我们的答案。Google 会注意到这一点,并在下次搜索时优化我们的结果。现在使用词向量,我们可以对代表的单词向量进行简单的算术运算:女人+欧洲+物理+科学家+著名,然后我们会得到一个新的向量,与代表玛丽·居里的向量在余弦相似度上接近,Voila!我们得到了答案。我们甚至可以通过简单地减去代表男人男性等的向量来消除自然科学中的性别偏见,这样我们就可以搜索与女人+欧洲+物理+科学家-男性-2*男最接近的词向量。

  5. 基于类比问题的搜索:要计算这样一个搜索他们对音乐的意义就像玛丽·居里对科学的意义一样,我们只需要对代表的单词向量进行简单的向量算术:玛丽·居里-科学+音乐。

这篇笔记是从书籍《自然语言处理实战》中改编的:传统的索引方法使用二进制词出现向量、离散向量(词袋向量)、稀疏浮点数向量(词频乘以逆文档频率向量)和低维浮点数向量(如三维地理信息系统数据)。但是,高维浮点数向量,如潜在语义分析或潜在狄利克雷分配的主题向量,是具有挑战性的。倒排索引适用于离散向量或二进制向量,因为索引只需要维护每个非零离散维度的条目。被引用的向量或文档中是否存在该维度的值。由于 TF-IDF 向量是稀疏的,大部分为零,我们不需要为大多数文档的大多数维度在我们的索引中添加条目。现在,潜在语义分析和潜在狄利克雷分配产生的主题向量是高维、连续且密集的,零值很少。此外,语义分析算法并不为可扩展搜索生成有效的索引。这受到维度诅咒的影响,使得精确索引变得不可能。解决高维向量挑战的一个方法是使用局部敏感哈希对它们进行索引,类似于 ZIP 代码,指定超空间的区域。这样的哈希类似于常规哈希:它是离散的,只取决于向量中的值。但是,即使在超过大约 12 个维度时,这也不完美。精确的语义搜索对于大语料库,如 Google 搜索或甚至维基百科语义搜索,都不适用。关键是要接受足够好,而不是追求完美的索引或高维向量的潜在哈希算法。现在有几个开源实现了一些高效准确的近似最近邻算法,使用潜在语义哈希来有效实现语义搜索。从技术上讲,这些索引或哈希解决方案不能保证我们会找到语义搜索查询的所有最佳匹配。但是,如果我们愿意放弃一点精度,它们可以几乎与 TF-IDF 向量或词袋向量的常规反向索引一样快地获得一份良好的接近匹配列表。神经网络模型微调主题向量的概念,使与单词相关联的向量更精确和有用,从而增强搜索。

机器翻译

将任意长度的令牌序列(如句子或段落)翻译成不同语言的任意长度序列。下面讨论的编码器-解码器架构,在变压器和循环神经网络的上下文中,已被证明对翻译任务非常成功。编码器-解码器架构与自动编码器架构不同。

图像字幕

这将计算机视觉与自然语言处理相结合。

聊天机器人

这是自然语言处理的终极应用。聊天机器人需要多种处理:解析语言,搜索,分析,生成响应,响应请求并执行它们。此外,它需要一个数据库来维护过去语句和响应的记忆。

其他应用

其他应用包括命名实体识别概念焦点,从文本中提取相关信息(如日期),以及语言生成,我们将在下一章中讨论。

变压器和注意力模型

Transformers 和注意力模型是自然语言处理应用的最新技术,如机器翻译、问答、语言生成、命名实体识别、图像字幕和聊天机器人(截至 2022 年)。目前,它们是大型语言模型的基础,如Google 的 BERT和 OpenAI 的GPT-2GPT-3

Transformer 绕过了直到 2017 年之前自然语言处理应用中常用的循环和卷积架构,当时论文Attention Is All You Need引入了第一个 transformer 模型。

被推翻的循环和卷积神经网络架构仍然在某些自然语言处理应用(以及金融等其他应用)中使用(并且表现良好)。我们稍后在本章中详细介绍这些模型。然而,导致放弃它们用于自然语言处理的原因是:

  1. 对于自然语言标记的短输入序列,transformer 模型中涉及的注意力层比循环层更快。即使对于长序列,我们也可以修改注意力层,只关注输入中的某些邻域。

  2. 循环层所需的顺序操作次数取决于输入序列的长度。对于注意力层,这个数字保持不变。

  3. 在卷积神经网络中,卷积核的宽度直接影响输入和输出对之间的长期依赖关系。跟踪长期依赖关系需要大的卷积核或者卷积层的堆叠,这些都增加了使用它们的自然语言模型的计算成本。

transformer 架构

Transformers 是庞大语言模型的重要组成部分,如 OpenAI 的GPT-2(生成式预训练 transformer)、GPT-3和 Google 的 BERT(双向编码器 transformer 表示,通过从左到右和从右到左查看顺序文本数据来训练语言模型)以及Wu Dao 的 transformer。这些模型非常庞大:GPT-2 在数百万文档上训练了大约 15 亿个参数,这些文档来自互联网上的 800 万个网站。GPT-3 在更大的数据集上训练了 1750 亿个参数。Wu Dao 的 transformer 有 1.75 万亿个参数,为训练和推理消耗更多的计算资源。

Transformers 最初是为语言翻译任务设计的,因此具有编码器-解码器结构。图 7-5 说明了 transformer 模型的架构,最初由论文Attention Is All You Need (2017)引入。然而,编码器和解码器各自是独立的模块,因此可以单独使用来执行各种任务。例如,我们可以仅使用编码器执行分类任务,如词性标注,这意味着我们输入句子:“我喜欢在厨房里做饭”,输出将是每个词的类别:“我”:代词;“喜欢”:动词;“做饭”:[我的语法出问题了,编辑帮帮我]。

280

图 7-5. transformer 模型的简单编码器-解码器架构(图片来源)。

完整 Transformer 模型(包括编码器和解码器)的输入是任意长度的自然语言标记序列,例如对话机器人的问题,需要将英语段落翻译成法语,或者总结成标题。输出是另一个自然语言标记序列,也是任意长度的,例如对话机器人的回答,法语翻译的段落,或标题。

不要混淆模型的训练阶段和推理阶段:

  • 在训练期间,模型同时接收数据和标签,例如英语句子(输入数据样本)以及其法语翻译(标签),模型学习从输入到目标标签的映射,以期望很好地泛化到两种语言的整个词汇和语法。

  • 在推理过程中,模型只接收英语句子,并输出其法语翻译。Transformer 逐个新标记输出法语句子。

编码器位于 Transformer 架构的左半部分(见图 7-5),接收诸如英语句子“你今天过得怎么样?”之类的标记输入,并为该句子的每个标记产生多个数值向量表示,编码标记在句子中的上下文信息。架构的解码器部分接收这些向量作为其输入。

解码器位于架构的右半部分,接收编码器的向量输出以及前一个时间步的解码器输出[解释这个]。最终,它生成标记的输出,例如输入句子的法语翻译“Comme se passe ta journée”(见图 7-6)。解码器实际计算的是法语词汇中每个单词的概率(假设有 50,000 个标记),使用 softmax 函数,然后产生概率最高的标记。实际上,由于计算如此高维度词汇的 softmax 代价高昂,解码器使用采样 softmax,在每个步骤中计算法语词汇中每个标记的概率。在训练期间,必须在此样本中包含目标标记,但在推理期间,没有目标标记。

Transformer 使用一种称为注意力的过程来捕捉标记序列中的长期依赖关系。这里的“序列”一词可能会让人感到困惑,特别是对于数学家来说,他们在“序列”、“级数”、“向量”和“列表”这些术语之间有明确的区分。序列通常是逐个项地处理,意味着一个项被处理,然后是下一个,然后是下一个,依此类推,直到整个输入被消耗。Transformer 不会按顺序处理输入标记。它们一起并行处理。这与递归神经网络处理输入标记的方式不同,后者必须按顺序馈送,实际上禁止了并行计算。如果由我们来纠正这个术语,我们应该称自然语言句子为向量,如果我们使用 Transformer 模型来处理它,或者称为矩阵,因为句子中的每个单词都表示为自己的向量,或者称为张量,如果我们一次处理一批句子,这是 Transformer 的架构允许的。如果我们想使用递归神经网络模型处理完全相同的句子,那么我们应该称之为序列,因为这个模型按顺序消耗其输入数据,逐个标记处理。如果我们使用卷积神经网络处理它,那么我们会再次称之为向量(或矩阵),因为网络将其作为整体消耗,而不是逐个标记拆分。

当模型不需要按顺序处理输入时,这是一个优势,因为这样的架构允许并行处理。尽管并行化使变压器在计算上更有效,但它们无法充分利用自然语言输入的固有顺序性以及在这种顺序性中编码的信息。想想人类如何处理文本。有一些新的变压器模型试图利用这一点。

变压器模型的运行如下[更好地解释这一点]:

  1. 将输入序列中的每个单词表示为一个 d 维向量。

  2. 通过将单词的顺序加入模型中,通过向单词向量添加关于其位置的信息(位置编码):通过将每个单词的向量与相同长度的位置编码向量相伴,将位置信息引入输入。位置编码向量具有与单词向量嵌入相同的维度(这允许将这两个向量相加)。有许多选择的位置编码,一些在训练期间学习,另一些是固定的。具有不同频率的离散正弦和余弦函数是常见的。

  3. 接下来,我们将位置编码的单词向量馈送到编码器块。编码器关注输入序列中的所有单词,无论它们是在考虑的单词之前还是之后,因此变压器编码器是双向的。

  4. 解码器在时间步 t-1 接收到自己预测的输出单词,以及编码器的输出向量。

  5. 解码器的输入也通过位置编码进行增强。

  6. 增强的解码器输入被馈送到三个子层。解码器不能关注后续单词,因此我们在其第一个子层中应用掩码。在第二个子层中,解码器还接收编码器的输出,这样解码器就可以关注输入序列中的所有单词。

  7. 解码器的输出最终通过一个全连接层,然后是一个 softmax 层,以生成输出序列的下一个单词的预测。

注意力机制

变压器的魔力主要归功于其内置的注意力机制。注意力机制带来了一些好处:

  1. 可解释性:指出模型在生成特定输出时关注输入句子(或文档)的哪些部分(参见图 7-6)。

  2. 利用预训练的注意力模型:我们可以将预训练模型调整到特定领域的任务。也就是说,我们可以通过在特定领域的数据上进行额外训练来进一步调整其参数值。

  3. 更准确地对长句建模:注意力机制的另一个价值在于,它们允许对自然语言标记序列中的依赖关系进行建模,而不考虑相关标记在这些序列中相距多远。

图 7-6 展示了从英语到法语的翻译任务中的注意力。

280

图 7-6. 通过翻译任务展示注意力:指示分配给输入标记的权重,显示模型为了生成每个输出标记而更关注哪些标记(图片来源)。

在注意力机制中没有涉及到硬核数学:我们只需要计算一个缩放后的点积。注意力的主要目标是突出输入序列中最相关的部分,它们在输入本身内部之间的关联程度以及它们对输出的某些部分的贡献程度。

自注意力是指一系列向量在其成员内部计算对齐。我们现在熟悉点积测量两个向量之间的兼容性。我们可以通过找到序列向量的所有成员之间的点积来计算最简单的自注意力权重。例如,对于句子I love cooking in my kitchen,我们将计算代表单词Ilovecookinginmykitchen的单词向量之间的所有点积。我们期望Imy之间的点积很高,类似地,cookingkitchen之间也是如此。然而,IIlovelove等之间的点积将最高,因为这些向量与自身完全对齐,但从中无法获得有价值的信息。变压器避免这种浪费的解决方案是多方面的:

  • 首先,对输入序列的每个向量(句子中的每个单词)应用三种不同的转换,将它们分别乘以三个不同的权重矩阵。然后,我们获得与每个输入单词向量w →对应的三组不同的向量:

    1. 查询向量query → = W q w →,其目的是成为被关注的向量。

    2. 关键向量key → = W k w →,其目的是成为被关注的向量。

    3. 向量value → = W v w →,其目的是捕捉正在生成的上下文。

  • 其次,通过计算它们的点积乘以这些向量长度的平方根的倒数来获得句子中所有单词的查询向量和关键向量之间的对齐分数。我们应用这种缩放以保持数值稳定性,以防止点积变得很大(这些点积很快将被传递到 softmax 函数中。由于 softmax 函数在其输入具有很大幅度时具有非常小的梯度,我们通过将每个点积除以 s q r t l 来抵消这种效应。)。此外,两个向量的对齐与这些向量的长度无关。因此,在我们的句子中,cookingkitchen之间的对齐分数将是:

a l i g n m e n t cooking,kitchen = 1 l query → cooking t key → kitchen

请注意,这与kitchencooking之间的对齐分数不同,因为每个的查询和关键向量都不同。因此,得到的对齐矩阵不是对称的。

  • 第三,将句子中每两个单词之间的对齐分数转换为概率,通过将分数传递到softmax函数中。例如:

ω cooking,kitchen = s o f t m a x ( a l i g n m e n t cooking,kitchen ) = exp(alignment cooking,kitchen ) exp(alignment cooking,I )+exp(alignment cooking,love )+exp(alignment cooking,cooking )+exp(alignment cooking,in )+exp(alignment cooking,my )+exp(alignment cooking,kitchen )

  • 最后,通过线性组合值向量,使用对齐概率作为线性组合的权重来编码每个单词的上下文。例如:

c o n t e x t cooking = ω cooking,I value → I + ω cooking,love value → love + ω cooking,cooking value → cooking + ω cooking,in value → in + ω cooking,my value → my + ω cooking,kitchen value → kitchen

因此,我们已经成功地在一个向量中捕捉了给定句子中每个单词的上下文,对于与句子中大部分对齐的单词赋予了高价值。

好消息是,我们可以同时计算句子(数据样本)中所有单词的上下文向量,因为我们可以将上述向量打包在矩阵中,并使用高效且可并行化的矩阵计算一次性获取所有术语的上下文。

我们在一个注意力头中实现了上述所有内容。也就是说,一个注意力头为数据样本中的每个标记产生一个上下文向量。我们会从为同一标记产生多个上下文向量中受益,因为在生成上下文向量的过程中发生的所有平均化会导致一些信息丢失。这里的想法是能够使用句子(数据样本)术语的不同表示来提取信息,而不是对应于单个注意力头的单个表示。因此,我们实现了多头注意力,为每个头选择新的变换矩阵W q,W k和W v。

请注意,在训练过程中,变换矩阵的条目是必须从训练数据样本中学习的模型参数。想象一下,模型参数的数量会迅速增加多快。

图 7-7 展示了多头注意力机制,实现了h个头部,每个头部接收查询、键和值的不同线性变换版本,为每个标记产生h个上下文向量,然后将它们连接起来以产生模型结构中多头注意力部分的输出。

280

图 7-7。多头注意力机制(图片来源)。

解码器使用类似的自注意机制,但在这里,每个单词只能关注其之前的单词,因为文本是从左到右生成的。此外,解码器还有一个额外的注意机制,关注来自编码器的输出。

变压器远非完美

尽管变压器模型已经彻底改变了自然语言处理领域,但它们远非完美。总的来说,语言模型是无意识的模仿者。它们既不理解它们的输入,也不理解它们的输出这篇这篇等批评文章详细说明了它们的缺点,比如对语言的理解不足,在生成长篇文本时重复等。尽管如此,变压器模型为自然语言带来了一场巨浪,并且正在向生物医学、计算机视觉和图像生成等其他人工智能领域迈进。

卷积神经网络用于时间序列数据

在自然语言处理和金融领域中,“时间序列”一词应该改为“时间序列”。在数学中,“序列”指的是无限序列的项相加。因此,当我们的数据没有被求和时,这适用于所有自然语言数据和大多数金融数据,实际上我们有数字、向量等的序列,而不是系列。哦,词汇冲突是不可避免的,即使在彼此之间严重依赖的不同领域中也是如此。

除了字典中对单词的定义外,它们的含义大多与它们相对于彼此出现的方式相关。这通过单词在句子中的顺序、单词的上下文以及它们在句子中与其他单词的接近程度传达。

我们首先强调我们可以探索文档中单词和术语背后含义的两种方式:

  1. 空间上:将一个句子作为一个标记向量一次性地探索,无论这些标记在数学上如何表示。

  2. 临时:逐个标记地探索一个句子。

卷积神经网络,讨论在第五章中,通过沿着句子的标记滑动一个固定宽度的窗口(卷积核或滤波器)来空间地探索句子。当使用卷积神经网络来分析文本数据时,网络期望输入具有固定的维度。另一方面,当使用循环神经网络(接下来讨论)来分析文本数据时,网络期望标记按顺序,因此,输入不需要具有固定长度。

在第五章中,我们在图像上滑动二维窗口(卷积核或滤波器),而在本章中,我们将在文本标记上滑动一维卷积核。我们现在知道每个标记本身都表示为数字向量。我们可以使用独热编码或 Word2Vec 模型的单词向量。独热编码的标记用一个非常长的向量表示,其中对于我们想要从语料库中包含的每个可能的词汇词,都有一个 0,并且在我们正在编码的标记位置有一个 1。或者,我们可以使用通过 Word2Vec 生成的训练过的单词向量。因此,卷积神经网络的输入数据样本是一个矩阵,由列向量组成,每个列向量对应数据样本中的一个标记。如果我们使用 Word2Vec 表示标记,那么每个列向量将有 100 到 500 个条目,取决于使用的特定 Word2Vec 模型。请记住,对于卷积神经网络,每个数据样本必须具有完全相同数量的标记。

因此,一个数据样本(一个句子或一个段落)用一个二维矩阵表示,其中行数是单词向量的完整长度。在这种情况下,说我们正在在数据样本上滑动一个一维卷积核有点误导,但这里是解释:样本标记的向量表示向延伸,然而,滤波器一次覆盖该维度的整个长度。也就是说,如果滤波器宽度为三个标记,它将是一个具有三列权重的矩阵,行数与我们标记的向量表示一样多。因此,这里的一维卷积是指仅在水平方向上进行卷积。这与图像的二维卷积不同,图像的二维滤波器在图像上水平和垂直方向上移动。

与上一章类似,在前向传播期间,滤波器中的权重值对于一个数据样本是相同的。这意味着我们可以并行化这个过程,这就是为什么卷积神经网络训练高效的原因。

回想一下,卷积神经网络也可以同时处理多个通道的输入,也就是说,三维张量的输入,而不仅仅是数字的二维矩阵。对于图像来说,这是同时处理输入图像的红色、绿色和蓝色通道。对于自然语言,一个输入样本是一堆单词,表示为相邻排列的列向量。我们现在知道有多种方式将同一个单词表示为数字向量,每种方式可能捕捉到同一个单词的不同语义。这些同一个单词的不同向量表示不一定具有相同的长度。如果我们限制它们具有相同的长度,那么这些表示中的每一个可以是一个单词的通道,卷积神经网络可以同时处理同一个数据样本的所有通道。

就像第五章中所述,卷积神经网络由于权重共享、池化层、dropout 和小的过滤器尺寸而高效。我们可以使用多个尺寸的过滤器运行模型,然后将每个尺寸过滤器的输出连接成一个更长的思考向量,然后将其传递到最后一层的全连接层。当然,网络的最后一层是完成所需任务的层,例如情感分类、垃圾邮件过滤、文本生成等。我们在过去的两章中已经讨论过这一点。

递归神经网络用于时间序列数据

考虑以下三个句子:

  1. 她买了电影票去看电影。

  2. 她有空的时候,买了电影票去看电影。

  3. 她连续两周听说了这件事,最终买了电影票去看电影。

在所有三个句子中,谓词“买了电影票去看电影”对应于句子的主语“她”。如果自然语言模型被设计为处理长期依赖关系,它将能够学习到这一点:

  • 卷积神经网络,通过其窄的过滤窗口范围为 3-5 个标记扫描句子,将能够轻松地从第一个句子中学习,并且也许可以从第二个句子中学习,因为谓词的位置只有稍微改变(池化层有助于网络对小变化的抵抗力),但第三个句子将会很困难,除非我们使用更大的过滤器(这会增加计算成本,并使网络更像全连接网络而不是卷积网络),或者我们加深网络,将卷积层堆叠在一起,以便随着句子深入网络,覆盖范围扩大。

  • 一个完全不同的方法是将句子逐个标记地顺序输入到网络中,并保持一个“状态”和一个“记忆”,保存重要信息一段时间。当句子中的所有标记都通过网络时,网络会产生一个结果。如果这是在训练期间,只有在处理完最后一个标记后产生的结果与句子的标签进行比较,然后错误会“通过时间反向传播”来调整权重。将这与我们阅读长句子或段落时保留信息的方式进行比较。带有长短期记忆单元的递归神经网络是按照这种方式设计的。

  • 我们之前讨论过的 Transformer 模型废除了卷积和循环,仅依赖于注意力来捕捉句子的主语“她”和谓词“买了电影票去看电影”之间的关系。

还有一件事可以区分递归模型和卷积以及 Transformer 模型:模型是否期望其输入对于所有数据样本都是相同长度?意味着我们只能输入相同长度的句子吗?对于 Transformer 和卷积网络来说,它们只期望固定长度的数据样本,因此我们必须预处理我们的样本并使它们都具有相同的长度。另一方面,递归神经网络非常适应可变长度的输入,因为它们一次只处理一个标记。

递归神经网络的主要思想是,网络在处理新信息时保留过去的信息。这种保留是如何发生的?在前馈网络中,神经元的输出离开它并永远不会返回。在递归网络中,输出回路返回到神经元中,同时带有新的输入,实质上创建了一个“记忆”。这样的算法非常适合自动完成和语法检查。自 2018 年以来,它们已经集成到 Gmail 的“智能撰写”中。

递归神经网络是如何工作的?

以下是递归在一组带标签的数据样本上进行训练的步骤。每个数据样本由一堆标记和一个标签组成。与往常一样,网络的目标是学习数据中产生某个标签(或输出)与其他标签相比产生的一般特征和模式。当每个样本的标记按顺序输入时,我们的目标是检测特征,跨所有数据样本,当某些标记以相对于彼此的模式出现时产生的特征:

  1. 从数据集中获取一个经过标记和标记的数据样本(例如标记为积极的电影评论,或标记为虚假新闻的推文)。

  2. 将样本的第一个标记t o k e n 0传递到网络中。请记住,标记是矢量化的,因此您实际上是将一组数字传递到网络中。在数学术语中,我们正在评估该标记的矢量处的函数,并产生另一个矢量。到目前为止,我们的网络已经计算了f ( t o k e n 0 )。

  3. 现在将样本的第二个标记t o k e n 1传递到网络中,以及第一个标记的输出,f ( t o k e n 0 )。网络现在将评估f ( t o k e n 1 + f ( t o k e n 0 ) )。这是循环步骤,这就是网络在处理t o k e n 1时不会忘记t o k e n 0。

  4. 现在将样本的第三个标记t o k e n 2传递到网络中,以及上一步的输出,f ( t o k e n 1 + f ( t o k e n 0 ) )。网络现在将评估f ( t o k e n 2 + f ( t o k e n 1 + f ( t o k e n 0 ) ) )。

  5. 继续进行,直到完成一个样本的所有标记。假设这个样本只有五个标记,那么我们的递归网络将输出f ( t o k e n 4 + f ( t o k e n 3 + f ( t o k e n 2 + f ( t o k e n 1 + f ( t o k e n 0 ) ) ) ) )。请注意,这个输出看起来与我们在第四章讨论的前馈全连接网络的输出非常相似,只是这个输出随着时间展开,当我们逐个将样本的标记输入到一个递归神经元时,而在第四章中,网络的输出随着空间展开,当一个数据样本从神经网络的一层移动到下一层。从数学上讲,当我们写出每个公式时,它们是相同的,所以我们不需要更多的数学知识,超出我们在过去三章中学到的。这就是为什么我们喜欢数学。

  6. 在训练网络以产生正确结果时,样本的最终输出f ( t o k e n 4 + f ( t o k e n 3 + f ( t o k e n 2 + f ( t o k e n 1 + f ( t o k e n 0 ) ) ) ) ),将与样本的真实标签进行比较,通过评估损失函数,就像我们在第 3、4 和 5 章中所做的那样。

  7. 现在逐个将下一个数据样本的标记传递到网络中,并再次执行相同的操作。

  8. 我们通过梯度下降算法来最小化损失函数,从而更新网络的权重,计算所需的梯度(相对于网络所有权重的导数)通过反向传播。正如我们刚才所说的,在第四章学到的反向传播数学,现在当然我们可以说我们正在通过时间进行反向传播

在金融、动力学和反馈控制中,上述过程被称为自回归移动平均(ARMA)模型

训练递归神经网络可能会很昂贵,特别是对于任何长度显著的数据样本,比如 10 个标记或更多,因为要学习的权重数量与数据样本中的标记数量直接相关:标记越多,递归网络的“时间深度”就越大。除了计算成本之外,这种深度带来了与具有许多层的常规前馈网络相同的所有问题:梯度消失或爆炸,特别是对于具有数百个标记的数据样本,这将是数百层全连接前馈神经网络的数学等价物!对于前馈网络的梯度爆炸和消失问题,这里也适用相同的解决方法。

门控循环单元和长短期记忆单元

递归网络中的递归神经元不足以捕捉句子中的长期依赖关系:随着更多标记通过递归神经元,一个标记的影响会被新信息稀释和覆盖。事实上,只有在两个标记经过后,一个标记的信息几乎完全消失。如果我们在网络的架构中添加记忆单元,即长短期记忆单元,则可以解决这个问题。这有助于学习跨整个数据样本的依赖关系。

长短期记忆单元本身包含神经网络,它们可以被训练来找到需要保留以供即将输入的新信息,并忘记或重置为零不再相关于学习的信息。因此,长短期记忆单元学会了保留哪些信息,而网络的其余部分则学会了预测目标标签。

在这里,除了我们在第四章中学到的数学知识外,没有任何新的数学内容,因此我们不会深入研究长短期记忆单元或门控单元的具体架构。总的来说,每个时间步的输入标记通过遗忘和更新门(函数)传递,与权重和掩码相乘,然后存储在记忆单元中。网络的下一个输出取决于输入标记和记忆单元的当前状态的组合。此外,长短期记忆单元共享它们跨样本学习的权重,因此它们不必在通过每个样本的标记时重新学习关于语言的基本信息。

人类能够在潜意识水平上处理语言,而长短期记忆是对此进行建模的一步。它们能够检测语言中的模式,使我们能够处理比简单分类更复杂的任务,如语言生成。我们可以根据学习的概率分布生成新的文本。这是下一章的主题。

自然语言数据的示例

当面对关于不同模型的叙述时,如果我们有具体的实例和真实数据以及模型的超参数,事情总是变得更容易。我们可以在斯坦福人工智能网站上找到IMDB电影评论数据集。每个数据样本都标有 0(负面评论)或 1(正面评论)。如果我们想要练习处理自然语言文本,可以从原始文本数据开始。然后,我们可以使用一个选择的词汇表、Google Word2vec 模型或其他模型对其进行标记化和向量化。不要忘记将数据分割成训练集和测试集。然后选择超参数,例如:单词向量长度约为 300,每个数据样本的标记数约为 400,小批量为 32,迭代次数为 2。我们可以尝试调整这些参数以了解模型的性能。

金融人工智能

AI 模型在金融领域有广泛应用。到目前为止,我们已经了解了大多数 AI 模型的基本结构(除了图形,它们具有不同的数学结构;我们在第九章中讨论图形网络)。此时,仅仅提及金融领域的一个应用领域就足以让我们对如何使用 AI 进行建模有一个很好的想法。此外,许多金融应用与自然语言处理应用自然交织在一起,例如基于客户评论的营销决策,或者使用自然语言处理系统仅基于模型的输出来预测经济趋势并触发大额金融交易。

以下是金融领域中的两个 AI 应用,其中之一。想想我们如何能够将迄今学到的知识应用于对这些问题进行建模:

  • 股票市场:时间序列预测。递归神经网络可以接受一系列输入并产生一系列输出。这对于股票价格所需的时间序列预测非常有用。我们输入过去n天的价格,网络输出过去n-1天的价格以及明天的价格

  • 自回归移动平均(ARMA)模型在金融、动力学和反馈控制中。

股票市场在本书中多次出现。在讨论概率中的随机过程时,请留意第十一章中的内容。

总结和展望

本章几乎没有新的数学知识,但却是最难写的之一。目标是总结整个自然语言处理领域中最重要的思想。从单词转移到携带含义的相对低维数字向量是要克服的主要障碍。一旦我们学会了多种方法来做到这一点,无论是一次一个词的向量化,还是一个长文档或整个语料库中的主要主题的向量化,将这些向量馈送到具有不同架构和目的的不同机器学习模型中就变得司空见惯。

微积分

  • 术语频率和逆文档频率的对数比例尺

统计学

  • Zipf 定律适用于单词计数

  • Dirichlet 概率分布用于将单词分配给主题和主题分配给文档。

线性代数

  • 将自然语言文档向量化

  • 两个向量的点积以及它如何提供向量所代表的实体之间的相似性或兼容性度量。

  • 余弦相似度

  • 奇异值分解,即潜在语义分析

概率

  • 条件概率

  • 双线性对数模型

时间序列数据

  • 含义

  • 如何将其输入到机器学习模型中(作为一个整体,或一次一个项目)

AI 模型每日一题

变压器

第八章:概率生成模型

AI 将我所知道的所有数学联系在一起,我已经学习数学多年了。

如果机器要理解周围的世界,并且能够像我们想象、梦想、绘画、创作歌曲、电影或写书时那样重新创造它,那么生成模型是朝着这个方向迈出的一大步。如果我们要实现通用人工智能,就需要正确地构建这些模型。

生成模型建立在这样一个假设上,即只有当我们的模型学习了数据的潜在统计结构时,我们才能正确解释输入数据。这与我们的梦境过程有些类似,这表明我们的大脑可能学习了一个能够虚拟重现我们环境的模型。

在本章中,我们仍然有训练函数、损失函数和优化的数学结构,这些在整本书中都有提到。然而,与前几章不同的是,我们的目标是学习概率分布,而不是确定性函数。总体主题是有训练数据,我们想要提出一个能够生成类似数据的数学模型。

感兴趣的两个数量是:

  1. 输入数据特征的真实(未知)联合概率分布p data ( x → )。

  2. 数据特征的模型联合概率分布以及模型参数:p model ( x → ; θ → )

理想情况下,我们希望这两者尽可能接近。在实践中,我们会接受参数值θ →,使得p model ( x → ; θ → )能够很好地适用于我们特定的用例。

在整个章节中,我们利用了三条概率分布的规则:

  1. 将多变量联合概率分布分解为单变量条件概率分布的乘积的乘法规则。

  2. 贝叶斯规则允许我们无缝地在变量之间切换。

  3. 特征或潜在(隐藏)变量的独立性或条件独立性假设,使我们能够进一步简化单变量条件概率的乘积。

在之前的章节中,我们在最小化损失函数。在本章中,类似的函数是对数似然函数,优化过程总是试图最大化这个对数似然(注意,我们不是在最小化损失函数,而是在最大化一个目标函数)。很快会详细介绍。

在我们深入讨论之前,让我们注意一下,将我们之前的确定性机器学习模型转换为概率语言:我们之前的模型学习了一个训练函数,将输入数据的特征映射到输出(目标或标签)或 。当我们的目标是分类时,f返回具有最高概率的标签y。也就是说,分类器学习了从输入数据到类别标签y的直接映射,换句话说,它们直接对后验概率进行建模。我们将在本章后面详细阐述这一点。

生成模型有哪些用途?

生成模型使得真实数据和计算机生成数据之间的界限变得模糊。它们一直在改进,并取得了令人印象深刻的成功:机器生成的图像,包括人类的图像,变得越来越逼真。很难判断时尚行业模特的图像是真实人物还是生成机器学习模型的输出。

生成模型的目标是使用机器生成新颖的数据,例如包含语音的音频波形,图像,视频或自然语言文本。生成模型从学习的概率分布中采样数据,其中样本尽可能地模拟现实。这里的假设是存在一些未知的概率分布潜在地支撑着我们想要模仿的真实生活数据(否则我们整个现实将是一种随机混乱的噪音,缺乏任何连贯性或结构),模型的目标是使用训练数据学习这个概率分布的近似值。

在从特定领域收集了大量数据之后,我们训练一个生成模型来生成类似于收集数据的数据。收集的数据可以是数百万张图像或视频,数千个音频录音,或者整个自然语言语料库。

生成模型在许多应用中非常有用,包括在数据稀缺且需要更多数据时进行数据增强,为高分辨率图像填充缺失值,为强化学习模拟新数据,或者在只有少量标签可用时进行半监督学习。另一个应用是图像到图像的转换,例如将航空图像转换为地图或将手绘草图转换为图像。更多的应用包括图像去噪、修补、超分辨率、图像编辑(如使微笑更宽,颧骨更高,脸部更苗条等)。

此外,生成模型是建立在从所需概率分布中抽取多个样本以生成多个可接受输出的基础上的。这与我们的确定性模型不同,确定性模型在训练过程中使用均方误差损失函数或其他平均损失函数对具有不同特征的输出进行平均。这里的缺点是生成模型也可能生成一些不好的样本。

一种生成模型,即生成对抗网络(2014 年由 Ian Goodfellow 等人发明),具有极大的潜力,并且具有广泛的应用,从增加数据集到完成遮蔽的人脸,再到天体物理学和高能物理学,比如模拟类似于 CERN 大型强子对撞机产生的数据集,或模拟暗物质的分布并预测引力透镜效应。生成对抗模型建立了两个神经网络,它们在一个零和博弈中相互竞争(想象数学中的博弈论),直到机器本身无法区分真实图像和计算机生成的图像之间的区别。这就是为什么它们的输出看起来非常接近现实。

前一章,主要针对自然语言处理,涉及到生成模型,但没有明确指出。自然语言处理的大多数应用,不是简单的分类模型(垃圾邮件或非垃圾邮件,积极情绪或消极情绪,词性标注),包括语言生成。这些例子包括:我们智能手机或电子邮件上的自动完成,机器翻译,文本摘要,聊天机器人和图像标题。

生成模型的典型数学

生成模型感知和表征世界的方式是通过概率分布。也就是说,一幅彩色图像是从像素的联合概率分布中取样得到的,这些像素一起形成了一个有意义的图像(尝试计算包括所有红色、绿色和蓝色通道的这种联合概率分布的维度),一段音频波形是从音频信号的联合概率分布中取样得到的,这些信号一起构成了有意义的声音(这些也是极高维度的),一句话是从单词或字符的联合概率分布中取样得到的,这些单词或字符一起构成了连贯的句子。

那么,一个显著的问题是:我们如何计算这些能够捕捉我们周围世界复杂性的惊人代表性联合概率分布,但不幸的是这些分布往往是极高维度的呢?

机器学习的答案在这一点上是可预测的:从我们已知的简单概率分布开始,比如高斯分布,然后找到一种方法将其塑造成另一个很好地近似手头数据的经验分布的分布。但我们如何将一个分布塑造成另一个分布呢?我们可以对其概率密度应用一个确定性函数。因此,我们必须理解以下内容:

  1. 我们如何将确定性函数应用于概率分布,以及由此产生的随机变量的概率分布是什么?我们使用以下转换公式:

p x ( x → ) = p z ( g -1 ( x → ) ) | det ( ∂g -1 x → ∂x → ) |

这在许多概率书籍中都有很好的记录,我们很快就会从中提取我们需要的内容。我们必须应用的正确函数是什么?一种方法是训练我们的模型来学习它。我们现在知道神经网络有能力表示各种函数,因此我们可以通过神经网络传递我们开始的简单概率分布(神经网络将是我们正在寻找的确定性函数的公式),然后通过最小化给定数据的经验分布与网络输出的分布之间的误差来学习网络的参数。

  1. 我们如何衡量概率分布之间的误差?概率论为我们提供了一些衡量两个概率分布之间差异的方法,比如 Kullback-Leibler(KL)散度。这也与信息论中的交叉熵有关。

  2. 所有生成模型都是这样工作的吗?是和不是。是指它们都试图学习生成训练数据的联合概率分布。换句话说,生成模型试图学习最大化训练数据的似然性的联合概率分布的公式和参数。不是指我们只概述了一种明确的逼近我们所需的联合概率分布的方法。这是一种思维方式。一般来说,一个定义了明确且可处理的概率密度函数的模型允许我们直接操作训练数据的对数似然性,计算其梯度,并应用可用的优化算法来搜索最大值。还有其他提供明确但难以处理的概率密度函数的模型,这种情况下,我们必须使用逼近方法来最大化似然性。我们如何近似解决优化问题?我们可以使用确定性逼近,依赖于变分方法(变分自动编码器模型),或者使用随机逼近,依赖于马尔可夫链蒙特卡洛方法。最后,还有隐式的方法来逼近我们所需的联合概率分布。隐式模型学习从未明确定义公式的未知分布中抽样。生成对抗网络属于这一类别。

如今,生成建模的三种最流行的方法是:

  • 生成对抗网络,这是隐式密度模型;

  • 变分模型提供明确但难以处理的概率密度函数。我们在概率图模型框架内逼近优化问题的解,其中我们最大化数据对数似然性的下界,因为直接最大化数据的对数似然性是难以处理的;

  • 完全可见信念网络,提供明确且可处理的概率密度函数,如Pixel 卷积神经网络(PixelCNN)2016WaveNet(2016)。这些模型通过将联合概率分布分解为每个单独维度的概率分布的乘积,条件于之前的维度,并逐个学习这些分布来学习。这种分解得益于概率的乘法规则或链规则。例如,PixelCNN 训练一个网络,学习图像中每个单独像素的条件概率分布,给定之前的像素(左侧和顶部),而 WaveNet 训练一个网络,学习声波中每个单独音频信号的条件概率分布,条件于之前的信号。这里的缺点是这些模型只能一次生成一个条目,并且不允许并行化。这显著减慢了生成过程。例如,WaveNet 需要两分钟的计算时间才能生成一秒的音频,因此我们无法用它进行实时的来回对话。

还有其他生成模型属于上述类别,但由于昂贵的计算要求或选择密度函数及/或其变换的困难而不太受欢迎。这些模型包括需要变量变换的模型,例如非线性独立成分估计(显式和可计算密度模型)、玻尔兹曼机模型(显式但不可计算密度模型,通过随机马尔可夫链近似解决最大化问题)、生成随机网络模型(隐式密度模型再次取决于马尔可夫链以达到其近似最大似然)。我们在本章末尾简要调查这些模型。在实践中,远离数学理论和分析,由于计算成本高昂且不愿意迅速收敛,马尔可夫链方法不受青睐。

从确定性思维转变为概率性思维

在这一章中,我们正在慢慢将我们的大脑从确定性思维转变为概率性思维。到目前为止,在这本书中,我们只使用确定性函数来进行预测。训练函数是数据特征的线性组合,有时与非线性激活器组合,损失函数是真实值和预测值之间的确定性鉴别器,优化方法基于确定性梯度下降方法。随机性或随机性仅在我们需要使模型的确定性组件的计算变得更加经济时引入,例如随机梯度下降或随机奇异值分解,当我们将数据集分成训练、验证和测试子集时,当我们选择我们的小批量时,当我们遍历一些超参数空间时,或者当我们将数据样本的分数传递到 softmax 函数中时,这是一个确定性函数,并将结果值解释为概率。在所有这些设置中,随机性和相关的概率分布仅与模型的特定组件相关,仅作为实现和计算确定性模型的手段:从来没有构成模型的核心组成部分。

生成模型与我们在前几章中看到的模型不同,因为它们在本质上是概率性的。然而,我们仍然有训练、损失和优化结构,只是现在模型学习一个概率分布(显式或隐式),而不是学习一个确定性函数。然后,我们的损失函数衡量真实和预测概率分布之间的误差(至少对于显式密度模型),因此我们必须了解如何定义和计算概率之间的某种误差函数,而不是确定性值。我们还必须学习如何在这种概率设置中进行优化和求导。

在数学中,评估给定函数(正向问题)要比找到其逆函数(逆向问题)容易得多,更不用说当我们只能访问少量函数值观测时,比如我们的数据样本。在我们的概率设置中,正向问题看起来是:给定某种概率分布,抽取一些数据。逆向问题是我们关心的问题:给定这个我们不知道的概率分布的有限数量的实现(数据样本),找到最有可能生成它们的概率分布。我们首先想到的一个困难是唯一性的问题:可能有多个分布适合我们的数据。此外,逆向问题通常更难,因为本质上我们必须向后操作并撤消正向函数遵循的过程,以到达给定的观测值。问题在于大多数过程无法撤消,这在某种程度上超出了我们的能力,嵌入在自然法则中:宇宙倾向于增加熵。除了解决逆问题固有的困难之外,我们通常尝试为 AI 应用估计的概率分布是高维的,具有许多变量,并且我们甚至不确定我们的概率模型是否已经考虑了所有变量(但这对确定性模型也是有问题的)。这些困难不应该使我们却步:表示和操作高维概率分布对于许多数学、科学、金融、工程和其他应用都很重要。我们必须深入研究生成模型。

在本章的其余部分,我们将区分估计的概率分布是否具有显式公式的情况,以及当我们没有公式而是从隐式分布中数值生成新数据样本时的情况。请注意,在之前的章节中,对于所有我们的确定性模型,我们总是有明确的公式用于我们的训练函数,包括决策树、全连接神经网络和卷积神经网络给出的公式。那时,一旦我们从数据中估计出这些确定性函数,我们就可以回答问题,比如:目标变量的预测值是多少?在概率模型中,我们回答一个不同的问题:目标变量假定某个值的概率是多少,或者落在某个区间内的概率是多少?不同之处在于我们不知道我们的模型是如何组合变量以产生结果的,就像确定性情况下那样。在概率模型中,我们试图估计的是模型变量与目标变量一起发生的概率(它们的联合概率),理想情况下是对所有变量的所有范围。这将为我们提供目标变量的概率分布,而无需明确制定模型变量如何相互作用以产生这个结果。这完全取决于观察数据。

最大似然估计

许多生成模型直接或间接地依赖于最大似然原则。对于概率模型,目标是学习一个概率分布,该分布近似于观测数据的真实概率分布。一种方法是指定一个明确的概率分布<p_subscript model Baseline left-parenthesis ModifyingAbove x With right-arrow semicolon ModifyingAbove theta With right-arrow right-parenthesis>,其中包含一些未知参数,然后解出使训练数据集尽可能被观察到的参数。也就是说,我们需要找到最大化训练数据的似然性的,为这些样本分配高概率。如果有m个训练数据点,我们假设它们是独立采样的,因此观察它们一起的概率就是所有单个样本概率的乘积。因此我们有:

θ → optimal = arg max θ → p model ( x → 1 ; θ → ) p model ( x → 2 ; θ → ) ⋯ p model ( x → m ; θ → )

回想一下,每个概率都是介于零和一之间的数字。如果我们将所有这些概率相乘,我们将得到数量极小的数字,这会引入数值不稳定性,我们面临下溢的风险(当机器将一个非常小的数字存储为零时,实质上删除了所有有效数字)。对数函数总是解决这个问题,将那些数量极大或极小的数字转换回合理的数量范围。好消息是,对我们的概率进行对数转换不会影响最优θ → 的值,因为对数函数是一个增函数。也就是说,如果对于所有的θ → ,都有f ( θ → optimal ) ≥ f ( θ → ) ,那么对于所有的θ → ,也有log ( f ( θ → optimal ) ) ≥ log ( f ( θ → ) ) 。与增函数组合不会改变不等号。关键是,最大似然解变得等价于最大对数似然解。现在回想一下,对数函数将乘积转换为和,我们有:

θ → optimal = arg max θ → log ( p model ( x → 1 ; θ → ) ) + log ( p model ( x → 2 ; θ → ) ) + ⋯ + log ( p model ( x → m ; θ → ) )

注意,上述表达式希望增加每个数据样本的 p model ( x → , θ → )。也就是说,它更喜欢 θ → 的值推动 p model ( x → , θ → ) 在每个数据点 x → i 上方。然而,我们不能无限制地向上推动:必须有向下的补偿,因为图形下方区域的超面积必须相加为一,知道 p model ( x → , θ → ) 是一个概率分布。

我们可以用期望和条件概率的术语重新表达上述表达式:

θ → optimal = arg max θ → 𝔼 x∼p data log ( p model ( x → | θ → ) )

我们在前几章讨论的确定性模型通过最小化衡量模型预测与数据标签提供的真实值之间误差的损失函数来找到模型的参数(或权重),或者换句话说,找到 y model 和 y data 之间的误差。在本章中,我们关心找到最大化数据对数似然的参数。如果有一个类似于最小化衡量概率分布 p model 和 p data 之间误差的量的公式,那么本章与前几章之间的类比就会很明显。幸运的是,有这样的公式。最大似然估计与最小化Kullback Leibler (KL) 散度之间是相同的,这个散度是生成数据的概率分布和模型的概率分布之间的差异:

θ → optimal = arg min θ → D i v e r g e n c e KL ( p data ( x → ) | | p model ( x → ; θ → ) )

如果<p_data>恰好是分布家族<p_model Baseline left-parenthesis ModifyingAbove x With right-arrow semicolon ModifyingAbove theta With right-arrow right-parenthesis>的成员,并且如果我们能够精确执行最小化,那么我们将恢复生成数据的确切分布,即<p_data>。然而,在实践中,我们无法访问生成数据的分布,事实上,这是我们试图逼近的分布。我们只能访问<p_data>中的m个样本。这些样本定义了只在这些m个样本上放置质量的经验分布。现在,最大化训练集的对数似然恰好等同于最小化和<p_model Baseline left-parenthesis ModifyingAbove x With right-arrow semicolon ModifyingAbove theta With right-arrow right-parenthesis>之间的 KL 散度:

θ → optimal = arg min θ → D i v e r g e n c e KL ( p ^ data ( x → ) | | p model ( x → ; θ → ) )

在这一点上,我们可能会在三个优化问题之间感到困惑,实际上它们在数学上是等价的,它们只是来自数学、统计学、自然科学和计算机科学的不同子学科和子文化:

  1. 最大化训练数据的对数似然

  2. 最小化训练数据的经验分布与模型分布之间的 KL 散度

  3. 当我们使用 softmax 函数与多个类别进行组合进行分类时,最小化训练数据标签和模型输出之间的交叉熵损失函数。

不要混淆:最小化 KL 散度的参数与最小化交叉熵和负对数似然的参数相同。

显式和隐式密度模型

最大对数似然估计(或最小 KL 散度)的目标是找到一个概率分布p model ( x → ; θ → ),最好地解释观察到的数据。生成模型使用这个学习的p model ( x → ; θ → )来生成新数据。这里有两种方法,一种是显式的,另一种是隐式的:

  1. 显式密度模型:根据x →和θ →明确地定义概率分布的公式,然后通过沿着梯度向量(相对于θ →的分量的偏导数)向上走,找到最大化训练数据样本的对数似然的值。这里一个明显的困难是提出一个能够捕捉数据复杂性的概率密度公式,同时又能友好地计算对数似然及其梯度。

  2. 隐式密度模型:直接从p model ( x → ; θ → )进行采样,而无需为这个分布编写公式。生成随机网络基于马尔可夫链框架进行此操作,这种方法收敛速度慢,因此在实际应用中不受欢迎。使用这种方法,模型随机地转换现有样本,以获得来自相同分布的另一个样本。生成对抗网络间接与模型的概率分布交互,而不明确定义它。它们在两个网络之间建立一个零和博弈,其中一个网络生成一个样本,另一个网络充当分类器,确定生成的样本是否来自正确的分布。

显式密度-易处理:完全可见信念网络

这些模型具有明确的概率密度函数,可进行易处理的对数似然优化。它们依赖于概率链规则来将联合概率分布分解为一维概率分布的乘积:

p model ( x → ) = ∏ i=1 n p model ( x i | x 1 , x 2 , ⋯ , x i-1 )

这里的主要缺点是样本必须逐个组件生成(图像的一个像素,单词的一个字符,或离散音频波形的一个条目),因此,生成一个样本的成本是 O(n)

示例:通过 PixelCNN 生成图像和通过 WaveNet 生成机器音频。

PixelCNN 训练了一个卷积神经网络,模拟了给定先前像素(左侧和目标像素上方)的每个单独像素的条件分布。图 8-1 说明了这一点。

300

图 8-1. PixelCNN 学习第 n 个像素的条件分布,条件是前 n-1 个像素 (图像来源)

WaveNet 训练了一个卷积神经网络,模拟了音频波形中每个条目的条件分布,给定先前的条目。我们只会详细介绍 WaveNet。它是 PixelCNN 的一维模拟,并捕捉了基本思想。

WaveNet 的目标是生成宽带原始音频波形。因此,我们必须学习音频波形的联合概率分布 x → = ( x 1 , x 2 , ⋯ , x T ) 来自某种类型。

我们使用乘法规则将联合分布分解为单变量分布的乘积,其中我们将音频波形的每个条目条件化为其之前的条目:

p model ( x → ) = ∏ t=1 T p model ( x t | x 1 , x 2 , ⋯ , x t-1 )

一个困难是音频波形具有非常高的时间分辨率,每秒至少有 16000 个条目(因此,一分钟长的一个数据样本是一个具有 T=960000 个条目的向量)。这些条目中的每一个代表离散原始音频的一个时间步,并通常存储为 16 位整数。也就是说,每个条目可以假定为介于零和 65535 之间的任何值。如果我们保持这个范围,网络必须学习每个条目的概率,因此输出级别的 softmax 函数必须为每个单个条目输出 65536 个概率分数。我们必须为这些条目的总数以及网络本身的计算复杂性变得非常昂贵。为了使这更易处理,我们必须量化,这在电子学中意味着通过其幅度受限于一组规定值的信号来近似连续变化的信号。WaveNet 将原始数据转换为将条目值限制为每个 256 个选项的选项,范围从 0 到 255,类似于数字图像的像素范围。现在,在训练期间,网络必须学习每个条目在这 256 个值上的概率分布,给定先前的条目,在音频生成期间,它逐个条目从这些学习的分布中采样。

最后一个复杂性是,如果音频信号代表任何有意义的东西,那么表示它的向量在多个时间尺度上具有长距离依赖性。为了捕捉这些长距离依赖性,WaveNet 使用扩张卷积。这些是跳过一些条目以覆盖更广泛范围而不增加参数数量的一维核或滤波器(请参见 图 8-2 进行说明)。

300

图 8-2. 具有核大小为两的扩张卷积。在每一层,核只有两个参数,但它会跳过一些条目以获得更广泛的覆盖范围 (具有漂亮动画的图像来源)

还要注意,网络无法预知未来,因此每个层的滤波器不能使用训练样本中位于目标条目之前的条目。在一维中,我们只是在每个卷积层中较早地停止滤波,因此这是一个简单的时间偏移。在二维中,我们使用掩码滤波器,其右侧和底部的中心条目为零。

WaveNet 学习了总共T个概率分布,每个概率分布对应音频波形的一个条目,条件是前面的条目:p model ( x 1 ) , p model ( x 2 | x 1 ) , p model ( x 3 | x 1 , x 2 ) , d o t s 和 p model ( x T | x 1 , x 2 , ⋯ , x T-1 ) 。在训练过程中,这些分布可以并行计算。

现在假设我们需要学习第 100 个条目的概率分布,给定前面的 99 个条目。我们从训练数据中输入音频样本批次,卷积网络仅使用每个样本的前 99 个条目,计算线性组合(滤波器进行线性组合),通过非线性激活函数从一层传递到下一层,再到下一层,使用一些跳跃连接和残差层来对抗消失的梯度,最终通过 softmax 函数传递结果,并输出一个长度为 256 的向量,包含第 100 个条目的概率分数。这是模型输出的第 100 个条目的概率分布。将此输出分布与来自训练批次的第 100 个条目的经验分布进行比较后,网络的参数将被调整以减少错误(降低交叉熵或增加可能性)。随着更多数据批次和更多时代通过网络,给定前 99 个条目的第 100 个条目的概率分布将接近训练数据的经验分布。训练后我们在网络中保存的是参数的值。现在我们可以使用训练好的网络逐个生成机器音频条目:

  • 从概率分布中抽取一个值x 1 。

  • 用零增加( x 1 ),以建立网络输入所需的长度(请检查),并通过网络传递向量。我们将得到一个输出,稍后p model ( x 2 | x 1 ),从中我们可以对x 2进行采样。

  • 用零增加( x 1 , x 2 ),并通过网络传递向量。我们将得到一个输出,稍后p model ( x 3 | x 1 , x 2 ),从中我们可以对x 3进行采样。

  • 继续。

我们可以根据特定的说话者身份来调节 WaveNet,因此我们可以使用一个模型生成不同的声音。

我们可以并行训练 WaveNet,但只能顺序生成音频是一个主要缺点。这已经得到了纠正,Parallel WaveNet已经在线部署在 Google Assistant 上,包括提供多种英语和日语语音。

总结并将上述讨论放在与本章相同的数学背景下,PixelCNN 和 WaveNet 是旨在学习特定类型图像数据或音频数据的联合概率分布的模型。它们通过将联合分布分解为每个数据条目的一维概率分布的乘积,条件于所有先前的条目来实现这一目标。为了找到这些一维条件分布,它们使用卷积网络来学习观察到的条目如何相互作用以产生下一个条目的分布。这样,网络的输入是确定性的,其输出是一个概率质量函数。网络本身也是一个确定性函数。我们可以将网络及其输出视为具有我们调整参数的概率分布。随着训练的进行,输出会进行调整,直到与训练数据的经验分布达成可接受的一致。因此,我们不是将确定性函数应用于概率分布并调整函数的参数,直到我们同意训练数据的分布。相反,我们从一个具有许多参数(网络参数)的显式概率分布的公式开始,然后调整参数,直到这个显式概率分布与训练数据合理一致。我们对应于每个条目的每个条件概率分布都这样做。

密度显式-可计算:变量变换非线性独立分量分析

这里的主要思想是我们有代表观察到的训练数据的随机变量 x→,我们想要学习生成它的源随机变量 s→。我们假设存在一个可逆且可微的确定性转换 g(s→)= x→,将未知的 s→转换为观察到的 x→。然后 s→ = g^-1(x→)。现在我们需要找到一个适当的 g,并找到 s→的概率分布。此外,我们假设 s→具有独立的条目或组件,因此其概率分布仅仅是其组件的分布的乘积。

将随机变量的概率分布与其确定性转换的概率分布相关联的公式是:

p s ( s → ) = p x ( x → ) × d e t e r m i n a n t ( J a c o b i a n ) = p x ( g ( s → ) ) | det ( ∂g(s →) ∂s → ) |

乘以转换的雅可比行列式解释了由于转换而导致空间体积的变化。

非线性独立成分估计模型将联合概率分布建模为数据的非线性转换 s→ = g^-1(x→)。学习转换 g,使得 g^-1 将数据映射到一个潜在空间,其中符合分解分布,即映射导致独立的潜在变量。转换 g^-1 的参数化方式允许轻松计算雅可比行列式和逆雅可比。g^-1 基于深度神经网络,其参数通过优化对数似然来学习,这是可行的。

请注意,要求变换g必须是可逆的意味着潜在变量s →必须具有与数据特征相同的维度(x →的长度)。这对函数g的选择施加了限制,这是非线性独立成分分析模型的一个缺点。

相比之下,生成对抗网络对 g 的要求很少,特别是允许s →比x →具有更多维度。

显式密度-难以处理:变分自动编码器-通过变分方法进行近似

确定性自动编码器由一个将数据从 x 空间映射到较低维度的潜在 z 空间的编码器和一个将数据从 z 空间映射到x ^空间的解码器组成,其目标是不丢失太多信息,或者减少重构误差,这意味着保持 x 和x ^接近,例如在欧几里得距离意义上。在这个意义上,我们可以将基于奇异值分解X = U Σ V t的主成分分析视为线性编码器,其中解码器简单地是编码矩阵的转置。编码和解码函数可以是非线性和/或神经网络。

对于确定性自动编码器,我们不能将解码器用作数据生成器。至少,如果我们这样做,那么我们必须从潜在 z 空间中选择一些 z 并将解码器函数应用于它。除非我们选择了一个对应于编码 x 的 z,否则我们不太可能得到任何接近所需数据 x 外观的x ^,由于过拟合。我们需要一种正则化方法,使我们能够对 z 空间进行一定程度的控制,从而避免过拟合并将自动编码器用作数据生成器。我们通过从确定性自动编码转向概率自动编码来实现这一点。

变分自动编码器是概率自动编码器:编码器输出概率分布而不是单个点。此外,在训练过程中,损失函数包括一个额外的正则化项,用于控制潜在空间上的分布。因此,变分自动编码器的损失函数包含一个重构项(如均方距离)和一个正则化项,用于控制编码器输出的概率分布。正则化项可以是与高斯分布的 KL 散度,因为基本假设是简单的概率模型最好地描述训练数据。换句话说,复杂的关系可以在概率上简单描述。在这里我们必须小心,因为这引入了一种偏见:潜变量中对数据分布的简单假设如果太弱可能会有缺陷。也就是说,如果对先验分布或近似后验分布的假设太弱,即使使用完美的优化算法和无限的训练数据,估计值和真实对数似然之间的差距可能导致p model学习到一个与真实p data完全不同的分布。

在数学上,我们最大化数据对数似然的下界ℒ。在科学中,变分方法定义我们要最大化的能量泛函的下界,或者我们要最小化的能量泛函的上界。即使对数似然不容易获得,这些界通常更容易获得,并且具有可处理的优化算法。同时,它们为我们正在寻找的最优值提供了良好的估计。

ℒ ( x → , θ → ) ≤ log p model ( x → , θ → )

变分方法通常能够获得非常好的似然度,但对样本的主观评价认为它们生成的样本质量较低。人们认为它们比完全可见的信念网络更难优化。此外,人们发现它们的数学比完全可见的信念网络和生成对抗网络更难理解(即将讨论)。

显式密度-难以处理:Boltzman 机器-通过马尔可夫链近似

Boltzmann 机器(1980 年代)是一类依赖于马尔可夫链训练生成模型的家族。这是一种采样技术,比起从数据集中简单采样一个小批量来估计损失函数更昂贵。我们将在第十四章中讨论马尔可夫链在强化学习中的上下文。在数据生成的背景下,它们有许多缺点导致它们不受青睐:计算成本高,难以扩展到更高维度,收敛速度慢,甚至在理论上必须收敛时也没有明确的方法知道模型是否已经收敛。马尔可夫链方法尚未扩展到像 ImageNet 生成这样的问题规模。

马尔可夫链具有一个转移算子q,编码系统从一个状态过渡到另一个状态的概率。这个转移算子q需要明确定义。我们可以通过重复抽取样本x ' ∼ q ( x ' | x ),根据转移算子q依次更新x '。与单步生成相比,这种顺序生成的性质是另一个缺点。马尔可夫链方法有时可以保证 x'最终会收敛到从p model ( x )中抽取的样本,尽管收敛可能很慢。

一些模型,如深度玻尔兹曼机,同时使用马尔可夫链和变分逼近。

隐密度-马尔可夫链:生成随机网络

生成随机网络(Bengio 等人,2014)不明确定义密度函数,而是使用马尔可夫链转移算子与p model ( x )间接交互,通过从训练数据中抽样。必须多次运行这个马尔可夫链算子才能获得从p model ( x )中抽取的样本。这些方法仍然存在前一节提到的马尔可夫链方法的缺点。

隐密度-直接:生成对抗网络

目前最流行的生成模型有:

  • 完全可见的深度信念网络,如 PixelCNN,WaveNet 及其变体。

  • 变分自动编码器,由概率编码器-解码器架构组成。

  • 生成对抗网络,由于其概念简单和生成样本质量好,受到科学界的关注。我们现在讨论它们。

生成对抗网络由 Ian Goodfellow 等人于 2014 年提出。涉及的数学是概率和博弈论之间的美妙混合。生成对抗网络避免了与其他生成模型相关的一些缺点:

  • 一次性并行生成样本,而不是将新像素馈送回网络以预测像素,如 PixelCNN。

  • 生成函数的限制很少。这是与玻尔兹曼机相比的优势,对于玻尔兹曼机,很少有概率分布适合可计算的马尔可夫链抽样,相对于非线性独立成分分析,生成器必须是可逆的,潜在变量 z 必须与样本 x 具有相同的维度。

  • 生成对抗网络不需要马尔可夫链。这是与玻尔兹曼机和生成随机网络相比的优势。

  • 虽然变分自动编码器可能永远无法收敛到真实数据生成分布,如果它们假设的先验或后验分布太弱,生成对抗网络会收敛到真实

    ,假设我们有无限的训练数据和足够大的模型。此外,生成对抗网络不需要变分界限,而且在生成对抗网络框架内使用的特定模型族已知是通用逼近器。因此,生成对抗网络已知是渐近一致的。另一方面,一些变分自动编码器被推测为渐近一致,但这仍然需要证明(请检查)。

生成对抗网络的缺点在于训练它们需要找到博弈的纳什均衡,这比仅仅优化一个目标函数更困难。此外,解决方案往往在数值上不稳定。2015 年,Alec Radford 等人改进了这一点,深度卷积生成对抗网络。这种方法导致了更稳定的模型。

在训练过程中,生成对抗网络构建了两个独立网络之间的博弈:一个生成器网络和一个鉴别器网络,鉴别器试图将生成器样本分类为来自真实分布

或来自模型

。这两个网络的损失函数是相关的,因此鉴别器传达了两个分布之间的差异,生成器相应地调整其参数,直到生成器完全复制真实数据分布(理论上),使得鉴别器的分类不比随机猜测更好。

生成器网络希望最大化鉴别器在分类中分配错误标签的概率,无论样本是来自训练数据还是模型,而鉴别器网络希望最小化该概率。这是一个两人零和博弈,其中一方的收益是另一方的损失。我们最终解决了一个极小极大问题,而不是一个纯粹的最大化或最小化问题。存在唯一的解决方案。

生成对抗网络是如何工作的?

为了学习生成器的概率分布

,这里是生成对抗网络学习过程的进展:

  • 从先验概率分布

    中随机抽取一个样本

    ,对于

    的每个分量,这可能只是均匀随机噪声。

  • 同时从训练数据中随机抽取一个样本x →,使其成为生成器试图学习的概率分布p data ( x → )的样本。

  • 将确定性函数应用于z →,表示生成神经网络的函数G ( z → , θ → g )。参数θ → g是我们需要通过反向传播调整的参数,直到输出G ( z → , θ → g )看起来类似于训练数据集中的样本。

  • 将输出G ( z → , θ → g )传递到另一个确定性函数D,代表判别性神经网络。现在我们有新的输出D (G(z →,θ → g ),( →θ) d ),这只是一个接近一或零的数字,表示这个样本是来自生成器还是训练数据。因此,对于来自生成器的这个输入D (G(z →,θ → g ),( →θ) d )必须返回接近一的数字。参数θ → d是我们需要通过反向传播调整的,直到D返回错误分类约一半的时间。

  • 还将来自训练数据的样本x →传递给D,以便我们评估D ( x → , θ → d )。对于这个输入,D ( x → , θ → d )必须返回接近零的数字。

  • 这两个网络的损失函数是什么,其中的公式中包含两组参数θ → g和θ → d,以及采样向量x →和z →?鉴别器函数D希望对两种类型的输入x →和G ( z → , θ → g )做出正确判断。因此,它的参数θ → d必须被选择,以便在输入为G ( z → , θ → g )时,接近 1 的数字被赋予较大的分数,而在输入为x →时,接近 0 的数字被赋予较大的值。在这两种情况下,我们可以使用log函数的负值,因为它在接近零时较大,在接近 1 时较小。因此,D需要最大化的参数θ → d是:

𝔼 x →∼p data (x →) [ log D ( x → , θ → d ) ] + 𝔼 z →∼p z (z →) [ log ( 1 - D ( G ( z → , θ g → ) , θ d → ) ) ]

同时,G需要最小化的参数θ → g,使得log ( 1 - D ( G ( z → , θ g → ) , θ d → ) )。DG一起参与一个具有值函数 V(G, D)的两人零和博弈:

min G max D V ( D , G ) = 𝔼 x →∼p data (x →) [ log D ( x → ) ] + 𝔼 z →∼p z (z →) [ log ( 1 - D ( G ( z → ) ) ) ]

这是一个非常简单的数学结构,通过设置鉴别器网络,我们可以更接近真实数据分布,而无需明确定义它或假设任何关于它的内容。

最后,我们注意到生成对抗网络在许多应用中具有很高的潜力。一个例子是它们对半监督学习的显著增强,其中NIPS 2016 教程:生成对抗网络报告:我们引入了一种半监督学习的方法,使用生成对抗网络,其中鉴别器产生一个额外的输出,指示输入的标签。这种方法使我们能够在 MNIST、SVHN 和 CIFAR-10 上获得最先进的结果,即使只有很少的标记示例。例如,在 MNIST 上,我们只使用每类 10 个标记示例就实现了 99.14%的准确率,使用全连接神经网络——这个结果非常接近使用所有 60,000 个标记示例的全监督方法的最佳已知结果。这是非常有希望的,因为在实践中获得标记示例可能非常昂贵。

生成对抗网络(以及机器学习一般)的另一个广泛应用是模拟高能物理数据。我们接下来讨论这个。

示例:机器学习和生成网络用于高能物理

以下讨论受到并借鉴了2020 年强子物理机器学习研讨会和两篇文章深度学习及其在大型强子对撞机物理中的应用用于高能物理中稀疏数据生成的图生成对抗网络

在 2012 年之前的深度学习革命之前,高能物理领域传统上依赖于物理考虑和人类直觉、增强决策树、手工制作的数据特征工程和降维、传统统计分析进行分析和计算。这些技术虽然具有洞察力,但自然远非最佳,难以自动化或扩展到更高维度。多项研究表明,基于物理启发的工程化高级特征的传统浅层网络被基于接受较少预处理的更高维度低级特征的深层网络超越。大型强子对撞机数据分析的许多领域长期以来一直受到次优特征工程的困扰,值得重新审视。因此,高能物理领域是机器学习应用的肥沃土壤。在这方面正在取得很多进展。该领域正在应用多种机器学习技术,包括人工神经网络、核密度估计、支持向量机、遗传算法、增强决策树、随机森林和生成网络。

大型强子对撞机的实验计划探索现代物理学中最基本的问题:质量的本质、空间的维度、基本力的统一、暗物质的粒子性质以及标准模型的微调。一个驱动目标是理解物质的最基本结构。其中一部分包括搜索和研究异域粒子,如在大型强子对撞机等加速器中产生的顶夸克和希格斯玻色子。具体的基准和挑战包括:质量重建、喷注亚结构和喷注味道分类。例如,可以识别来自重*(c、b、t)或轻(u、d、s)夸克、胶子以及W*、ZH玻色子的喷注。

进行高能粒子实验并收集所得数据是非常昂贵的。所收集的数据在碰撞数量和每次碰撞的复杂性方面都是巨大的。此外,大部分加速器事件并不产生有趣的粒子(信号粒子与背景粒子)。信号粒子很少,因此需要高数据速率。例如,大型强子对撞机探测器有 O(108)个传感器用于记录每次碰撞后产生的大量粒子。因此,从实验数据中提取最大信息(考虑回归和分类模型),准确选择和识别事件以进行有效测量,并为模拟新数据(考虑生成模型)产生可靠方法至关重要。高能物理数据的特点是其高维度,以及许多信号事件的复杂拓扑结构。

这种讨论与我们的章节的联系在于碰撞的性质以及其产物与大型强子对撞机探测器的相互作用:它们是量子力学的,因此,由特定相互作用产生的观察结果基本上是概率性的。因此,随后的数据分析必须以统计和概率术语来构建。

在我们的章节中,我们的目标是学习模型参数的概率分布

θ|x)给定观察到的数据。如果数据是相当低维的,例如小于五维,那么从模拟样本中估计未知的统计模型的问题并不困难,可以使用直方图或基于核的密度估计。然而,我们无法轻易将这些简单方法扩展到更高维度,这是由于维度诅咒。在单个维度中,我们需要 N 个样本来估计源概率密度函数,但在 d 个维度中,我们需要 O(N^d)。其结果是,如果数据的维度大于十左右,使用朴素方法估计概率分布是不切实际甚至不可能的,需要大量的计算资源。

高能物理学家传统上通过一系列步骤来降低数据的维度,既对单个碰撞事件进行操作,也对事件集合进行操作,以应对维度诅咒。这些已建立的方法基于数据中的特定手工设计特征,将数据的维度降低到足够小的数量,以允许使用模拟工具生成的样本来估计未知概率分布p ( x | θ )。显然,由于数据的复杂性和潜在新物理的罕见性以及其微妙的特征,这种传统方法可能不是最佳选择。机器学习消除了手工设计特征和手动降维的需求,这可能会错过较低级别高维数据中的关键信息。此外,直接从传感器获得的较低级别数据的结构非常适合于已经建立的神经网络模型,例如卷积神经网络和图神经网络:例如,几乎所有现代高能物理探测器中存在的量能器的投影塔结构类似于图像的像素。

然而需要注意的是,虽然基于图像的方法取得了成功,但实际探测器的几何形状并不完全规则,因此需要一些数据预处理来表示喷流图像。此外,喷流图像通常非常稀疏。不规则的几何形状和稀疏性可以使用基于图的卷积网络来解决,而不是通常用于粒子数据建模的卷积网络。图卷积网络将卷积神经网络的应用扩展到不规则采样的数据。它们能够处理稀疏、置换不变的数据和复杂几何形状。我们将在下一章讨论图网络。它们始终带有节点、边和编码图中关系的矩阵,称为邻接矩阵。在高能物理的背景下,喷流的粒子代表图的节点,边编码了粒子在学习的邻接矩阵中的接近程度。在高能物理中,基于图的网络已成功应用于分类、重建和生成任务。

我们章节的主题是生成模型,或者生成类似给定数据集的数据。在高能物理中生成或模拟与实验数据相符的数据是非常重要的。在用于高能物理中稀疏数据生成的图生成对抗网络中,作者们开发了基于图的生成模型,使用生成对抗网络框架,用于模拟类似于CERN大型强子对撞机产生的稀疏数据集。

作者们通过对 MNIST 手写数字图像和质子-质子碰撞中产生的粒子喷流等稀疏表示进行训练和生成来说明他们的方法,这些类似于大型强子对撞机中的情况。该模型成功生成了稀疏的 MNIST 数字和粒子喷流数据。作者们使用两个指标来量化真实数据和生成数据之间的一致性:基于图的Fréchet Inception 距离,以及粒子和喷流特征级别的1-Wasserstein 距离

其他生成模型

我们已经讨论了最先进的生成模型(截至 2022 年),但如果我们不介绍朴素贝叶斯、高斯混合和玻尔兹曼机模型,这一章节将是不完整的。还有许多其他模型。话虽如此,Meta 的副总裁兼首席人工智能科学家 Yann LeCun 在一些模型上提供了他的观点:

在 2000 年代,语音识别、计算机视觉和自然语言处理领域的研究人员着迷于准确表示不确定性。这导致了大量关于概率生成模型的工作,如语音中的隐马尔可夫模型,视觉中的马尔可夫随机场和星座模型,以及自然语言处理中的概率主题模型,例如潜在狄利克雷分析。在计算机视觉研讨会上有关生成模型与判别模型的辩论。曾经有英勇而徒劳的尝试使用非参数贝叶斯方法构建物体识别系统。这在之前的贝叶斯网络、因子图和其他图形模型的基础上进行。这就是人们了解指数族、信念传播、循环信念传播、变分推断等的方式,中国餐馆过程、印度自助餐过程等。但几乎没有这项工作关注学习表示的问题。特征被认为是已知的。图形模型的结构,以及其中的潜在变量,被认为是已知的。人们所要做的就是通过线性组合特征计算某种对数似然,然后使用上述提到的一种复杂推断方法之一来生成未知变量的边际分布,其中之一就是答案,例如一个类别。事实上,指数族几乎意味着浅层:对数似然可以表示为特征(或其简单组合)的线性参数化函数。学习模型的参数被视为另一个变分推断问题。有趣的是,几乎没有这些内容与今天顶尖的语音、视觉和自然语言处理系统相关。事实证明,解决学习分层表示和复杂功能依赖的问题比能够使用浅层模型进行准确的概率推断更为重要。这并不是说准确的概率推断没有用处。

在同样的思路下,他继续说:生成对抗网络对于生成漂亮的图片很好(尽管它们正被扩散模型或“多步去噪自动编码器”所取代),但对于识别和表示学习,GANs 是一个巨大的失望。

尽管如此,从所有这些模型中可以学到很多数学知识。根据我的经验,当我们看到数学被开发和用于特定目的时,我们对数学的理解和保留会更加深入,而不仅仅是训练大脑的神经元。许多数学家声称在证明尚未找到应用的理论时会感到愉悦。我从来不是其中之一。

朴素贝叶斯分类模型

朴素贝叶斯模型是一个非常简单的分类模型,我们也可以将其用作生成模型,因为最终会计算数据的联合概率分布p ( x → , y k ),以确定其分类。训练数据具有特征x →和标签y k。因此,我们可以使用朴素贝叶斯模型从这个联合概率分布中抽样生成新的数据点和标签。

朴素贝叶斯模型的目标是计算给定数据特征x →的类别y k的概率,即条件概率p ( y k | x → )。对于具有许多特征(高维x →)的数据,这种计算是昂贵的,因此我们使用贝叶斯规则并利用逆条件概率,从而导致联合概率分布。也就是说:

p ( y k | x → ) = p(y k )p(x →|y k ) p(x →) = p(x →,y k ) p(x →)

朴素贝叶斯模型做出了非常强烈和天真的假设,实际上比人们预期的效果更好,即在给定类别标签y k时,数据特征是相互独立的。这种假设有助于极大地简化分子中的联合概率分布,特别是当我们将其扩展为单变量条件概率的乘积时。在给定类别标签y k的特征独立假设意味着:

p ( x i | x i+1 , x i+2 , ⋯ , x n , y k ) = p ( x i | y k )

因此,联合概率分布分解为:

p ( x → , y k ) = p ( x 1 | x 2 , ⋯ , x n , y k ) p ( x 2 | x 3 , ⋯ , x n , y k ) ⋯ p ( x n | y k ) p ( y k ) = p ( x 1 | y k ) p ( x 2 | y k ) ⋯ p ( x n | y k ) p ( y k )

现在我们可以从训练数据中轻松估计这些单个特征概率,条件是每个数据类别。我们也可以从训练数据中估计每个类别p ( y k )的概率,或者我们可以假设类别是等可能的,因此p ( y k ) = 1 类别数。

请注意,一般来说,生成模型找到标签y k和数据x →之间的联合概率分布p ( x → , y k → )。另一方面,分类模型计算条件概率p ( y k | x → )。它们专注于通过返回具有最高概率的类y k来计算数据中不同类之间的决策边界。因此,对于朴素贝叶斯分类器,它返回具有y 的最高值的标签y ,该值与p ( y k | x → )的最高值相同,这与p ( x 1 | y k ) p ( x 2 | y k ) ⋯ p ( x n | y k ) p ( y k )的最高值相同。

高斯混合模型

在高斯混合模型中,我们假设所有数据点都是从具有未知参数(均值和协方差矩阵)的有限数量的高斯分布混合中生成的。我们可以将混合模型视为类似于 k 均值聚类,但在这里我们包括有关聚类中心(高斯的均值)以及每个聚类中数据传播形状(由高斯的协方差确定)的信息。为了确定数据中的聚类数量,高斯混合模型有时会实现贝叶斯信息准则。我们还可以限制我们的模型以控制混合物中不同高斯的协方差:完全、绑定、对角线、绑定对角线和球形(参见图 8-3 以进行说明)。

250

图 8-3. 高斯混合协方差类型(图片来源)。

最终我们需要最大化数据的似然以估计混合物的未知参数(均值和协方差矩阵的条目)。

当数据中存在潜在或隐藏变量(即未直接测量或观察的变量)时,最大似然变得难以处理。解决这个问题的方法是使用期望最大化(EM)算法来估计最大似然。期望最大化算法的工作原理如下:

  1. 通过创建一个关于当前未知参数估计的期望对数似然的函数,估计潜在变量的值。

  2. 优化:计算新参数,使得在前一步中评估的期望对数似然最大化。

  3. 重复上述两个步骤直至收敛。

我们可以看到高斯混合模型可以用作聚类、生成或分类模型。对于聚类:这是模型构建的主要部分。对于生成:通过期望最大化计算未知参数后,从混合中抽样新数据点。对于分类:给定一个新数据点,模型将其分配给它最有可能属于的高斯分布。

生成模型的演变

在本节中,我们讲述了导致神经网络冬天结束的故事,最终导致了现代概率深度学习模型的出现,如变分自动编码器、完全可见深度信念网络和生成对抗网络。我们经历了从 Hopfield 网络到 Boltzmann 机器再到受限 Boltzmann 机器的发展过程。我对这些模型有特殊的偏爱:除了它们的历史价值外,通过组装基本计算单元网络来学习数据特征的联合概率分布,它们还利用了极其整洁和发展完善的统计力学领域的数学机制,这是我最初的研究领域。

在统计力学中,我们通过能量函数来定义概率分布。我们找到系统处于某种状态x →的概率取决于该状态的能量E ( x → )。更准确地说,高能态的概率较低,这在以下公式中的指数的负号中体现:

p ( x → ) = exp(-E(x →)) Z .

指数函数确保p为正,分区函数Z在分母中确保对所有状态x →的和(如果x是连续的,则是积分)为一,使p成为有效的概率分布。以这种方式定义联合概率分布的机器学习模型被称为基于能量的模型,原因显而易见。它们在如何分配每个状态的能量上有所不同,这意味着它们在E ( x → ) 的具体公式中使用的公式不同,这反过来影响了分区函数Z的公式。E ( x → ) 的公式包含模型参数θ →,我们需要使用最大似然估计从数据中计算出这些参数。事实上,如果我们在联合概率分布公式中明确地考虑pEZ对θ →的依赖性会更好:

p ( x → , θ → ) = exp(-E(x →,θ →)) Z(θ →) .

在大多数情况下,计算分区函数Z的闭合公式是不可能的,这使得最大似然估计变得棘手。更确切地说,当我们最大化对数似然时,我们需要计算其梯度,其中包括计算其对参数θ →的梯度,这反过来又迫使我们计算分区函数Z对θ →的梯度。在这些计算中,以下数量经常出现:

∇ θ → log Z ( θ → ) = 𝔼 x →∼p(x →) ( ∇ θ → log ( n u m e r a t o r ( x → , θ → ) )

在我们的情况下,基于能量的联合概率分布公式中的分子是e x p ( - E ( x → , θ → ) ),但这在模型之间也可能有所不同。

分区函数难以计算的情况促使我们求助于近似方法,如随机最大似然和对比散度。其他方法则避免近似计算分区函数,而是在不了解分区函数的情况下计算条件概率。它们利用条件概率的比率定义以及基于能量的联合概率分布定义中的比率,有效地消除了分区函数。这些方法包括得分匹配、比率匹配和去噪得分匹配。

其他方法,如噪声对比估计、退火重要性采样、桥接采样,或者结合这些方法的优势,直接近似计算分区函数,而不是其梯度的对数。

我们不会在这里讨论任何这些方法。相反,我们建议感兴趣的读者参考Ian Goodfellow(2016)的《深度学习书》

回到霍普菲尔德网络和玻尔兹曼机:这些是深度神经网络的基石,通过反向传播进行训练,最近的确定性和概率深度学习模型都依赖于这种方法。这些方法构成了学习任意概率分布的原始连接主义(神经元)方法,最初只针对二进制零和一的向量,后来扩展到具有任意实数值的向量。

霍普菲尔德网络

霍普菲尔德网络利用统计力学的优雅数学,通过将人工神经网络的神经元状态与物理系统中元素的状态进行对应。尽管霍普菲尔德网络最终被证明计算昂贵且实用性有限,但它们是现代神经网络时代的奠基人,值得探索,即使只是为了衡量人工智能领域的历史演变。霍普菲尔德网络没有隐藏单元,所有(可见)单元都彼此连接。每个单元可以处于状态(一或零),并且它们共同编码关于整个网络(或系统)的信息。

玻尔兹曼机

玻尔兹曼机是霍普菲尔德网络,但增加了隐藏单元。我们已经熟悉神经网络中输入单元和隐藏单元的结构,所以不需要解释它们,但这是它们的起点。与霍普菲尔德网络类似,输入和隐藏单元都是二进制的,状态为 0 或 1(现代版本实现了不仅是二进制值而且是实数值的单元)。

所有玻尔兹曼机都有一个难以处理的分区函数,因此我们使用在本节介绍中调查的技术来近似最大似然梯度。

玻尔兹曼机仅依赖计算密集的吉布斯抽样进行训练。吉布斯是在统计力学领域中反复出现的名字。吉布斯抽样提供了网络权重的无偏估计,但这些估计具有很高的方差。一般来说,偏差和方差之间存在权衡,这种权衡突出了依赖于每种方法的优缺点。

限制玻尔兹曼机(显式密度和难以处理)

玻尔兹曼机由于可见层内部和隐藏层内部之间的许多相互连接而具有非常缓慢的学习速率(想象一下非常混乱的反向传播)。这使得它们的训练非常缓慢,并且阻碍了它们在实际问题中的应用。限制玻尔兹曼机将连接仅限制在不同层之间,解决了这个问题。也就是说,在限制玻尔兹曼机的每一层内部没有连接,允许每一层的所有单元同时更新。因此,对于两个连接的层,我们可以通过交替更新每一层的所有单元来收集共现统计数据。在实践中,由于最小化抽样程序(如对比散度),可以实现更大的节省。

条件独立性

每一层内部缺乏连接意味着隐藏层中所有单元的状态不相互依赖,但它们确实依赖于前一层单元的状态。换句话说,给定前一层单元的状态,每个隐藏单元的状态与隐藏层中其他单元的状态是独立的。这种条件独立性使我们能够将隐藏层状态的联合概率因子化为各个隐藏单元状态的条件概率的乘积。例如,如果我们在隐藏层中有三个单元,则等于 。另一种方式也成立,即前一层单元的状态在给定当前层状态的情况下是条件独立的。这种条件独立性意味着我们可以对单元状态进行采样,而不是长时间迭代更新它们。

通用逼近

受限玻尔兹曼机中的受限连接允许它们堆叠,即具有一系列能够提取更复杂特征的多个隐藏层。我们现在可以看到现代多层人工神经网络的架构是如何逐渐出现的。回想一下,在第四章中,我们讨论了神经网络对各种确定性函数的通用逼近。在本章中,我们希望我们的网络代表(或学习)联合概率分布,而不是确定性函数。2008 年,Le Roux 和 Bengio 证明了玻尔兹曼机可以以任意精度逼近任何离散概率分布。这个结果也适用于受限玻尔兹曼机。此外,在某些温和条件下,每个额外的隐藏层都会增加对数似然函数的值,从而使模型分布更接近训练集的真实联合概率分布。

2015 年,Eldan 和 Shamir 经验性地验证了增加神经网络层数的价值远远超过增加网络层宽度中每层单元的数量(深度与宽度)。我们也从实践中知道(没有证明),可以训练一个具有数百个隐藏层的网络,其中更深层代表更高阶特征。从历史上看,必须克服梯度消失问题才能训练深度网络。

原始自动编码器

自动编码器架构旨在将输入的信息压缩到其较低维度的隐藏层中。隐藏层应该保留与输入层相同数量的信息,即使它们的单元数少于输入层。我们已经讨论了现代变分自动编码器,为训练自动编码器网络提供了一种高效的方法。在训练过程中,每个向量应该被映射到自身(无监督),网络试图学习最佳的编码。然后输入层和输出层必须具有相同数量的单元。一个玻尔兹曼机设置了一定数量的输入单元,较少数量的隐藏单元,以及一个具有与输入层相同数量的单元的输出层,解释了原始网络自动编码器架构。从历史的角度来看,这是重要的:自动编码器是网络成功学习代码的第一个例子,隐含在隐藏单元的状态中,以表示其输入。这使得网络能够强制将其输入压缩到一个隐藏层中,而最小化信息损失。这现在是神经网络中我们理所当然的一个重要部分。自动编码器架构,无论是否使用玻尔兹曼机(是否使用基于能量的联合概率分布),在深度学习领域仍然具有很大影响力。

在本章的前面,我们讨论了变分自动编码器。从历史的角度来看,这些综合了玻尔兹曼机自动编码器、深度自动编码器网络、去噪自动编码器和信息瓶颈(Tishby 等人,2000)的思想,这些思想源于分析合成的概念(Selfridge,1958)。变分自动编码器使用快速变分方法进行学习。在偏差-方差权衡的背景下,变分方法为网络的权重提供了偏差估计,具有较低的方差。

概率语言建模

这一章与第六章之间的自然联系,第六章几乎专注于自然语言处理以及从自然语言数据中提取含义的各种方法,这一章是调查概率语言模型背后的基本原理,然后强调前一章中遵循这些基本原理的模型。

本章以最大似然估计开始。当我们需要估计概率分布时,这种方法无处不在的原因之一是,通过最大似然估计获得的概率分布受到数学理论的支持,在一些条件下:最大似然估计会收敛到生成数据的真实分布,当数据样本数量趋于无穷大时(也就是,假设我们有大量数据),并且假设模型概率分布已经包含了真实的概率分布。也就是说,当样本数量趋于无穷大时,最大化数据似然性的模型参数将满足:。

在语言模型中,训练数据是来自某个语料库和/或流派的文本样本,我们希望学习其概率分布,以便生成类似的文本。重要的是要记住,真实的数据分布很可能包含在由提供的分布族中,因此前一段中的理论结果在实践中可能永远不会成立,然而,这并不会阻止我们,我们通常会满足于对我们的目的足够有用的模型。我们的目标是构建一个能够为语言片段分配概率的模型。如果我们随机组合一些语言片段,我们很可能最终得到一些无意义的话。我们实际上想要找到那些有意义的句子的分布。一个好的语言模型是那种为有意义的句子分配高概率的模型,即使这些句子不在训练数据中。人们通常计算语言模型在训练数据集上的困惑度来评估其性能。

语言模型基于这样一个假设,即下一个单词的概率分布取决于前面的n-1个单词,对于某个固定的n,因此我们关心计算p model ( x n | x 1 , x 2 , ⋯ , x n-1 )。如果我们使用一个 word2vec 模型,它将每个单词的含义嵌入到向量中,那么这些x中的每一个都由一个向量表示。那些有意义或在类似上下文中经常使用的单词往往具有相似的向量值。我们可以使用前一章的 transformer 模型来基于前面的单词向量预测下一个单词向量。

基于频率的语言模型通过计算训练语料库中单词一起出现的次数来构建条件概率表。例如,我们可以通过计算语料库中good morning出现的次数除以语料库中good出现的次数来估计单词morning在单词good之后出现的条件概率 p(morning|good)。即:

p ( m o r n i n g | g o o d ) = p(good,morning) p(good)

这在非常大的语料库或非结构化文本数据(如推特、Facebook 评论或短信消息)中会出现问题,因为这些数据通常不完全遵循语法/拼写等规则。

我们可以这样形式化概率语言模型的概念:

  1. 指定您语言的词汇表V。这可以是一组字符、空格、标点符号、符号、独特单词和/或 n-gram。从数学上讲,它是一个包括一个停止符号的有限离散集合,该符号表示思想或句子的结束,就像英语中的句号(尽管句号并不总是表示句子的结束,比如在缩写中使用时)。

  2. 将一个句子(可能有意义也可能没有)定义为一个以词汇表V结束的符号有限序列x → = ( x 1 , x 2 , ⋯ , x m )。每个x i可以从词汇表V中任意取值。我们可以将m指定为我们句子的最大长度。

  3. 将我们的语言空间l m = { ( x 1 , x 2 , ⋯ , x m ) , x i ∈ V }定义为所有长度小于或等于m的句子集合。这些句子中绝大多数将毫无意义,我们需要定义一个语言模型,只捕捉那些有意义的句子:对有意义句子的高概率和对无意义句子的低概率。

  4. 让ℒ表示l m的所有子集的集合。这涵盖了所有最大长度为m的有意义和无意义句子的集合。

  5. 在严格的概率理论中,我们通常从概率三元组开始:一个空间,包含该空间一些子集的sigma 代数,以及分配给所选 sigma 代数的概率测度(在本章中不必担心这些细节)。在这种情况下,语言模型是概率三元组:语言空间l m,由语言空间ℒ的所有子集组成的 sigma 代数,以及我们需要分配给ℒ的每个成员的概率测度P。由于我们的语言空间是离散且有限的,更容易为l m的每个成员分配一个概率p,即为每个句子x → = ( x 1 , x 2 , ⋯ , x m )分配一个概率(因为这将进而在所有子集ℒ的集合上引入一个概率测度P,所以我们永远不会为语言模型担心这一点)。我们需要从训练数据中学习的就是这个p。通常的方法是选择一个由θ →参数化的概率分布的完整系列p ( x → ; θ → )。

  6. 最后,我们需要通过最大化包含许多来自l m的句子样本的训练数据集的似然性来估计参数θ →。由于有意义的句子的概率非常小,我们使用这些概率的对数来避免下溢的风险。

为了保持一致性,在这一部分的背景下,检查对数线性模型和对数双线性模型(GloVe)以及来自第七章的潜在狄利克雷分配是一个不错的练习。

总结和展望

这是我们在寻找最先进人工智能模型所需的数学基础的旅程中的又一个基础章节。我们从早期章节中学习确定性函数转向学习数据特征的联合概率分布。目标是利用这些数据生成类似于训练数据的新数据。我们学到了很多关于概率分布的性质和规则,尽管还没有正式化。我们调查了最相关的模型,以及一些历史演变,导致我们到达这里。我们区分了提供其联合分布的显式公式的模型和间接与底层分布交互而不明确写出公式的模型。对于具有显式公式的模型,计算对数似然及其梯度可能是可行的或不可行的,每种情况都需要自己的方法。目标始终相同:通过找到最大化其对数似然的模型来捕捉数据的潜在真实联合概率分布。

如果我们的数据是低维的,只有一个或两个特征,那么这一切都是不必要的。直方图和核密度估计器很好地估计了低维数据的概率分布。机器学习中最重要的成就之一是能够从大量数据中建模高维联合概率分布。

本章中我们介绍的所有方法都有其优缺点。例如,变分自动编码器允许我们在具有隐藏(潜在)变量的概率图模型中执行学习和高效的贝叶斯推断。然而,它们生成的样本质量较低。生成对抗网络生成更好的样本,但由于其不稳定的训练动态,更难优化。它们寻找一个不稳定的鞍点,而不是一个稳定的最大值或最小值。像 PixelCNN 和 WaveNet 这样的深度信念网络具有稳定的训练过程,优化 softmax 损失函数。然而,在采样过程中效率低下,不像自动编码器那样有机地将数据嵌入到较低维度。

本章中出现的博弈论中的两人零和游戏是由生成对抗网络的设置自然产生的。

展望下一章关于图形建模,我们注意到神经网络图中的连接决定了我们如何编写条件概率,轻松指出各种依赖关系和条件独立性。我们在本章讨论受限玻尔兹曼机时看到了这一点。在下一章中,我们将专注于图形建模,这是我们在本书的三分之三中设法避免的。

第九章:图模型

图表和网络无处不在:城市和路线图,机场和连接航班,电力网络,电网,全球网络,分子网络,生物网络,如我们的神经系统,社交网络,恐怖组织网络,数学模型的图表表示,人工神经网络等等。它们很容易被识别,具有明显的节点代表我们关心的某些实体,然后由有向或无向边连接,表示连接节点之间存在某种关系。

具有自然图结构的数据通过利用和保留该结构的机制更容易理解,构建直接在图上操作的函数(无论它们如何在数学上表示),而不是将图数据输入到机器学习模型中,然后再分析它。这不可避免地导致有价值信息的丢失。这也是卷积神经网络在图像数据上成功的原因,循环神经网络在序列数据上成功的原因,等等。

基于图的模型对数据科学家和工程师非常有吸引力:图结构提供了一种在具有固定底层坐标系统的空间中无法提供的灵活性,例如在欧几里得空间或关系数据库中,数据及其特征被迫遵循严格和预定的形式。此外,图是一种自然的设置,允许我们研究数据集中点之间的关系。到目前为止,我们的机器学习模型消耗的数据表示为孤立的数据点。另一方面,图模型消耗孤立的数据点,以及它们之间的连接,从而实现更深入的理解和更具表现力的模型。

人类大脑自然内化了图形结构:它能够对实体及其连接进行建模。它也足够灵活,可以生成新的网络,或者扩展和增强现有的网络,例如在城市规划、项目规划或持续更新交通网络时。此外,人类可以无缝地从自然语言文本过渡到图模型,反之亦然:当我们阅读新内容时,我们自然会制定图形表示以更好地理解它或向其他人说明。相反,当我们看到图表时,我们能够通过自然语言描述它。目前有一些模型可以基于知识图生成自然语言文本,反之亦然。这被称为在知识图上推理。

此时,我们对神经网络的构建模块以及它们通常适用于的数据类型和任务已经非常熟悉:

  1. 多层感知器或全连接神经网络(第四章)

  2. 卷积层(第五章)

  3. 循环层(第七章)

  4. 编码器-解码器组件(第七章)

  5. 对抗组件和两人零和博弈(第八章)

  6. 变分组件(第八章)

主要任务主要是:分类、回归、聚类、编码和解码,或新数据生成,其中模型学习数据特征的联合概率分布。

我们也熟悉这样一个事实,即我们可以混合和匹配神经网络的一些组件,以构建针对特定任务的新模型。好消息是,图神经网络使用完全相同的组件,因此我们不需要在本章中介绍任何新的机器学习概念。一旦我们了解了如何数学表示图数据及其特征,以一种可以输入到神经网络中进行分析或生成新网络(图)数据的方式,我们就可以开始了。因此,我们将避免深入研究所有图神经网络。相反,我们专注于简单的数学公式、流行的应用程序、图模型的常见任务、可用的数据集和模型评估方法。我们的目标是对这一主题的工作原理有一个深刻的直觉。主要挑战再次是以一种使问题降维并易于计算和分析的方式,同时保留最多信息。换句话说,对于拥有数百万用户的网络,我们不能期望我们的模型以数百万维的向量或矩阵作为输入。我们需要有效的图数据表示方法。

对于希望深入了解和快速掌握图神经网络的读者,2019 年的调查报告:关于图神经网络的综合调查 是一个很好的起点(当然,在仔细阅读本章之后)。

图:节点、边和每个节点的特征

图自然适合模拟任何目标是通过它们之间的关系来理解离散对象集合(重点是离散而不是连续)的问题。图论是离散数学和计算机科学中一个相对年轻的学科,具有几乎无限的应用。这个领域需要更多的头脑来解决其许多未解决的问题。

一个图(见图 9-1)由以下组成:

  1. 节点或顶点:捆绑在一个集合中 N o d e s = { n o d e 1 , n o d e 2 , ⋯ , n o d e n } 。这可以是少数节点(甚至一个节点),也可以是数十亿个节点。

  2. 边:以有向(从一个节点指向另一个节点)或无向方式(边没有从任一节点指向另一个节点的方向)连接任意两个节点(这可以包括从一个节点到自身的边,或连接相同两个节点的多条边)。边的集合为E d g e s = { e d g e ij = ( n o d e i , n o d e j ) such that there is an edge pointing from n o d e i to n o d e j }。

  3. 节点特征:我们可以为每个n o d e i分配一个包含d个特征的列表(例如社交媒体用户的年龄、性别和收入水平),这些特征捆绑在一个向量features node i →中。然后,我们可以将图的所有n个节点的所有特征向量捆绑在一个大小为d × n的矩阵F e a t u r e s Nodes中。

  4. 边特征:类似地,我们可以为每个e d g e ij分配一个包含c个特征的列表(例如道路长度、速度限制以及是否是收费道路),这些特征捆绑在一个向量features edge ij →中。然后,我们可以将图的所有m条边的所有特征向量捆绑在一个大小为c × m的矩阵F e a t u r e s Edges中。

300

图 9-1。一个图由连接节点的有向或无向边和节点组成。

图模型很强大,因为它们灵活,不一定要遵循严格的网格结构。我们可以将它们的节点想象为在空间中漂浮,根本没有任何坐标。它们只是通过连接它们的边保持在一起。然而,我们需要一种方法来表示它们的内在结构。有一些软件包可以根据它们的节点和边的集合来可视化图形,但我们不能在这些漂亮(和信息丰富)的图片上进行分析和计算。有两种流行的图表示可以作为机器学习模型的输入:图的邻接矩阵关联矩阵。还有其他对于图论算法有用的表示,比如边列表两个线性数组后继列表。所有这些表示传达相同的信息,但在存储需求和图的检索、搜索和操作的效率方面有所不同。大多数图神经网络将邻接矩阵与节点和边的特征矩阵一起作为输入。许多时候,它们必须在将图数据输入模型之前进行维度缩减(称为图表示或图嵌入)。其他时候,维度缩减步骤是模型本身的一部分。

  1. 邻接矩阵:在计算机上存储图的结构并研究其属性的一种代数方法是通过邻接矩阵,它是一个n × n,如果从n o d e i到n o d e j有一条边,则其条目a d j a c e n c y ij = 1,如果从n o d e i到n o d e j没有边,则其条目a d j a c e n c y ij = 0。请注意,此定义可以容纳自环,即从一个顶点到自身的边,但不包括两个不同节点之间的多条边,除非我们决定在邻接矩阵中包含数字 2、3,作为条目。然而,这可能会破坏一些图论学家使用邻接矩阵建立的结果。

  2. 关联矩阵:这是另一种代数方式来存储图的结构并保留其完整信息。在这里,我们列出节点和边,然后制定一个矩阵,其行对应于顶点,列对应于边。如果矩阵的条目i n c i d e n c e ij为 1,则e d g e j连接n o d e i到其他节点,否则为零。请注意,此定义能够容纳两个不同节点之间的多条边,但不能容纳节点自身到自身的自环。由于许多图的边远多于顶点,因此这个矩阵往往非常宽,比邻接矩阵更大。

Laplacian 矩阵是与无向图相关联的另一个矩阵。它是一个对称矩阵,大小为n × n,其中每个节点都有对应的行和列。Laplacian 矩阵的对角线条目等于每个节点的度,非对角线条目为零,如果两个节点之间没有边相连,则为-1。这是从微积分和偏微分方程中的连续拉普拉斯算子离散化的过程,其中离散化发生在图的节点上。Laplacian 考虑了连续(且两次可微)函数的二阶导数,这些导数测量函数的凹凸性,或者函数在某一点的值与周围点的值有多大差异。与连续拉普拉斯算子类似,Laplacian 矩阵提供了一个度量,衡量图中一个节点与其附近节点的值有多大差异。当我们研究图上的随机游走以及电网络和电阻时,图的 Laplacian 矩阵会出现。我们将在本章后面看到这些内容。

我们可以从邻接矩阵和关联矩阵中轻松推断出简单的节点和边统计信息,例如节点的度数(节点的度数是连接到该节点的边的数量)。度分布 P(k)反映了所有节点的度数的变异性。P(k)是节点恰好有 k 条边的经验概率。这对于许多网络都很重要,比如网络连接和生物网络。例如,如果图中度为k的节点的分布遵循形式为P ( k ) = k -α的幂律分布,则这样的图具有少量高连通性的节点,或者中心节点,这些节点对网络拓扑结构至关重要,它们与许多低连通性的节点连接在一起。

我们还可以添加时间依赖性,并考虑随着时间演变而改变的动态图的属性。目前,有一些模型将时间依赖性添加到节点和/或边特征向量中(因此这些向量的每个条目都变得与时间有关)。例如,对于预测旅行路线的 GPS 系统,连接地图上一点到另一点的边特征会随着时间根据交通情况而改变。

现在我们已经有了一个数学框架,用于图对象以及它们的节点和边特征,我们可以将这些代表性向量、矩阵(以及用于监督模型的标签)输入到机器学习模型中,然后像往常一样进行业务。大多数时候,故事的一半是拥有一个良好的对象表示。另一半故事是机器学习模型的表达能力,我们可以在不编码(甚至不需要学习)导致这些结果的规则的情况下获得良好的结果。对于本章的目的,这意味着我们可以在学习适当的图论之前直接跳入图神经网络。

有向图

对于有向图,一方面,我们对于无向图感兴趣的属性也是一样的,比如它们的生成树、基本回路、割集、平面性、厚度等。另一方面,有向图有它们自己独特的属性,这些属性与无向图不同,比如强连通性、树形结构(根树的有向形式)、去环化等。

示例:PageRank 算法

PageRank是谷歌用于排名其搜索引擎结果中网页的一种当前已停用的算法(2019 年过期)。它根据有多少其他页面链接到它来衡量网页的重要性。在图语言中,节点是网页,有向边是从一个页面指向另一个页面的链接。根据 PageRank,当一个节点有许多其他网页指向它时,即其入度较大时,该节点是重要的(参见图 9-2)。

250

图 9-2. PageRank 为指向(或链接)到它们的页面给出更高的分数(图片来源)。

作为涉及图、邻接矩阵、线性代数和网络的具体示例,让我们通过 PageRank 算法来走一遍一个仅包含四个索引网页的荒谬简化全球网络,如图 9-3 中所示,而不是数十亿个。

250

图 9-3. 一个仅包含四个索引网页的虚构全球网络。

在图 9-3 的图中,只有 B 链接到 A;A 和 D 链接到 B;A 和 D 链接到 C;A、B 和 C 链接到 D;A 链接到 B、C 和 D;B 链接到 A 和 D;C 链接到 D;D 链接到 B 和 C。

让我们想象一个从某个页面开始然后随机点击该页面的链接,然后从这个新页面点击一个链接,依此类推的网络冲浪者。这个冲浪者模拟了网络图上的随机游走

一般来说,在代表全球网络的图上,这样一个随机冲浪者从某个节点遍历图到其邻居之一(或者如果有指向页面本身的链接,则返回到自身)。我们将在本章中再次遇到全球网络,并探讨我们想要了解有关其图性质的问题。我们需要一个用于随机游走的矩阵,对于这个应用我们称之为链接矩阵,但实际上它是由每个顶点的度加权的邻接矩阵。我们使用这个随机游走矩阵,或链接矩阵,来理解图上随机游走的长期行为。本章将在整个章节中出现图上的随机游走。

回到图 9-3 的四页全球网络。如果网络冲浪者在页面 A,有三分之一的机会冲浪者将移动到页面 B,三分之一的机会移动到 C,三分之一的机会移动到 D。因此,页面 A 的外向链接向量是

linking A → = 0 1 / 3 1 / 3 1 / 3

如果网络冲浪者在页面 B,有一半的机会他们会移动到页面 A,一半的机会他们会移动到页面 D。因此,页面 B 的外向链接向量是

linking B → = 1 / 2 0 0 1 / 2

类似地,页面 C 和 D 的外向链接向量是

linking C → = 0 0 0 1 and linking D → = 0 1 / 2 1 / 2 0

我们将所有网页的链接向量捆绑在一起,创建一个链接矩阵:

L i n k i n g = 0 1 / 2 0 0 1 / 3 0 0 1 / 2 1 / 3 0 0 1 / 2 1 / 3 1 / 2 1 0

请注意,链接矩阵的列是外向链接概率,A 的行是内向链接概率:冲浪者如何到达页面 A?他们只能在 B,从那里只有 0.5 的概率他们最终会到达 A。

现在我们可以通过将指向 A 的所有页面的排名加起来,每个页面的排名都加权,权重是冲浪者从该页面最终到达页面 A 的概率,也就是说,一个有许多高排名页面指向它的页面也会排名较高。因此,四个页面的排名是:

r a n k A = 0 r a n k A + 1 / 2 r a n k B + 0 r a n k C + 0 r a n k D r a n k B = 1 / 3 r a n k A + 0 r a n k B + 0 r a n k C + 1 / 2 r a n k D r a n k C = 1 / 3 r a n k A + 0 r a n k B + 0 r a n k C + 1 / 2 r a n k D r a n k D = 1 / 3 r a n k A + 1 / 2 r a n k B + 1 r a n k C + 0 r a n k D

要找到每个网页排名的数值,我们必须解决上述线性方程组,这是线性代数的领域。在矩阵向量表示中,我们将上述系统写为:

ranks → = L i n k i n g ranks →

因此,包含所有网页排名的向量是网页图的链接矩阵的特征向量(其中节点是网页,有向边是它们之间的链接)的特征值为 1。请记住,实际上,网络的图是巨大的,这意味着链接矩阵是巨大的,设计有效的方法来找到它的特征向量变得非常重要。

计算给定矩阵的特征向量和特征值是数值线性代数的最重要贡献之一,具有许多领域的直接应用。许多用于找到特征向量和特征值的数值方法涉及反复将矩阵与向量相乘。当处理巨大矩阵时,这是昂贵的,我们必须使用书中的每一个技巧来使操作更便宜:我们利用矩阵的稀疏性(许多条目为零,因此与这些条目相乘是浪费,然后发现它们只是零);我们引入随机化或随机性,并涉足高维概率和大型随机矩阵领域(我们将在第十一章中尝试这些)。目前,我们重申了我们在第六章中介绍的迭代方法:我们从一个随机向量ranks → 0开始,然后通过乘以链接矩阵迭代产生一系列向量:

ranks → i+1 = L i n k i n g ranks → i

对于我们的四页全球网络,这收敛到向量

ranks → = 0 . 12 0 . 24 0 . 24 0 . 4

这意味着页面 D 排名最高,在具有相似内容的搜索引擎查询中,它将是返回的第一个页面。然后,我们可以重新绘制图 9-3 中的图表,其中每个圆的大小对应页面的重要性。

当 PageRank 算法在使用时,真正的实现包括一个阻尼因子d,它是介于零和一之间的数字,通常约为 0.85,它考虑了只有 85%的机会,网络冲浪者点击当前所在页面的链接,以及 15%的机会,他们从当前所在页面开始访问一个完全新的页面,该页面没有从当前所在页面链接过来。这修改了找到网页排名的迭代过程的方式:

ranks → i+1 = d ( L i n k i n g ranks → i ) + 1-d totalnumberofpages ones →

最后,如果你想知道谷歌是否一直在搜索网络上的新网页并对其进行索引,并且是否一直在检查所有已索引的网页是否有新链接?答案是肯定的,以下摘录来自谷歌搜索工作原理谷歌搜索是一个完全自动化的搜索引擎,使用称为网络爬虫的软件定期探索网络以找到要添加到我们索引中的页面。事实上,我们结果中列出的绝大多数页面并非手动提交以进行包含,而是在我们的网络爬虫探索网络时自动发现并添加的。[...]并没有所有网页的中央注册表,因此谷歌必须不断寻找新的和更新的页面,并将它们添加到已知页面列表中。这个过程称为“URL 发现”。有些页面是已知的,因为谷歌已经访问过它们。当谷歌从已知页面跟踪到新页面时,例如,一个中心页面,比如一个类别页面,链接到一个新的博客文章时,就会发现其他页面。当您提交一个页面列表(站点地图)供谷歌爬取时,也会发现其他页面。[...]当用户输入查询时,我们的机器在索引中搜索匹配的页面,并返回我们认为对用户最有价值和最相关的结果。相关性由数百个因素决定,这些因素可能包括用户的位置、语言和设备(台式机或手机)等信息。例如,搜索“自行车修理店”会向巴黎用户显示与向香港用户显示不同的结果。

我们收集的数据越多,搜索就变得越复杂。谷歌在 2015 年推出了 RankBrain。它使用机器学习来对网页上的文本进行向量化,类似于我们在第七章中所做的。这个过程为索引页面添加了上下文和含义,使搜索结果更准确。这个过程增加的不好之处是与含义向量相关联的维度更高。为了避免在返回与查询最接近的网页之前检查每个维度上的每个向量的困难,谷歌使用了近似最近邻算法,帮助在毫秒内返回优秀的结果,这就是我们现在的体验。

使用图来求逆矩阵

应用科学中的许多问题涉及编写一个离散线性系统 A x → = b → 并解决它,这等同于求矩阵 A 的逆并找到解 x → = A -1 b → 。但对于大矩阵来说,这是一个计算昂贵的操作,加上高存储要求和低精度。我们一直在寻找有效的方法来求逆矩阵,有时利用手头特定矩阵的特殊特性。

以下是一个图论方法,用于计算一个相当大的矩阵(例如,一百行一百列)的逆:

  1. 用 1 替换矩阵 A 中的每个非零元素。我们得到一个二进制矩阵。

  2. 重新排列得到的二进制矩阵的行和相应的列,使所有对角线条目为 1。

  3. 我们将得到的矩阵视为一个有向图的邻接矩阵(在图中删除对应于对角线上的 1 的自环)。

  4. 得到的有向图被分成了片段。

  5. 如果一个片段太大,那么我们通过删除适当的边将其进一步分解为更小的片段。

  6. 我们反转较小的矩阵。

  7. 显然,这导致了原始矩阵的逆。

我们不会解释为什么和如何,但这种方法非常可爱,所以它进入了这一章节。

群的凯莱图:纯代数和并行计算

群的图,也称为凯莱图或凯莱图表,对于设计和分析并行计算机的网络架构、路由问题以及互连网络的路由算法都是有帮助的。论文Processor Interconnection Networks From Cayley Graphs是一篇有趣且易读的早期设计应用凯莱图进行并行计算网络的论文,解释了如何构建符合特定设计参数的凯莱图。凯莱图也被应用于数据分类

我们可以将具有 n 个元素的每个群表示为具有 n 个节点的连接有向图,其中每个节点对应于群中的一个元素,每条边代表由群中的一个生成器相乘。边根据我们要乘以的群中的生成器进行标记(或着色)(参见图 9-4)。这个有向图唯一定义了群:群中元素的每个乘积对应于在图上遵循一系列有向边。例如,具有 n 个元素的循环群的图是一个由 n 个节点组成的有向电路,其中每条边代表群的一个生成器的乘法。

从纯数学的角度来看,凯莱图对于可视化和研究抽象群是有用的,它在视觉图表中编码了它们的完整抽象结构和所有元素。凯莱图的对称性使它们对于构建更复杂的抽象对象很有用。这些是组合和几何群论的中心工具。要了解更多凯莱图,请查看此页面

250

图 9-4。自由群 a 和 b 的凯莱图:每个节点代表自由群的一个元素,每条边代表乘以 a 或 b。(图片来源)。

图中的消息传递在图内传递

一种用于模拟图中信息传播的有用方法,以及将节点、边和图结构传达的信息整齐地聚合到特定维度的向量中的方法是消息传递框架。在这个框架内,我们从相邻节点和连接到它们的边的特征向量中更新每个节点的信息。图神经网络执行多轮消息传递,每一轮传播一个节点的信息。最后,我们结合每个单独节点的潜在特征来获得其统一的向量表示,并表示整个图。

更具体地说,对于一个特定的节点,我们选择一个函数,该函数以节点的特征向量、其中一个相邻节点的特征向量(通过边连接到它的节点)以及连接它到这个相邻节点的边的特征向量作为输入,并输出一个包含来自节点、相邻节点和它们连接的边的信息的新向量。我们将同样的函数应用于所有节点的相邻节点,然后将生成的向量相加,产生一个消息向量。最后,我们通过将原始特征向量与消息向量结合在一起的更新函数来更新我们节点的特征向量,这也是我们选择的。当我们对图中的每个节点都这样做时,每个节点的新特征向量将包含来自它自身、所有相邻节点和所有连接的边的信息。现在当我们再次重复这个过程时,节点的最新特征向量将包含来自它自身、所有相邻节点及其相邻节点,以及所有相应的连接边的信息。因此,我们进行的消息传递轮数越多,每个节点的特征向量就包含了来自图中更远节点的信息,每次移动一个边的距离。信息逐渐在整个网络中传播。

图的无限应用

图神经网络和图模型的应用普遍且重要,以至于我有点后悔没有从图开始这本书。在任何图模型中,我们首先回答以下问题:

  • 节点是什么?

  • 是什么关系连接了两个节点,建立了它们之间的有向或无向边?

  • 模型是否应该包括节点和/或边的特征向量?

  • 我们的模型是动态的吗,其中节点、边和它们的特征随时间演变,还是静态的?

  • 我们感兴趣的是什么?分类(例如癌细胞或非癌细胞;虚假新闻传播者或非虚假新闻传播者)?生成新的图(例如用于药物发现)?聚类?将图嵌入到一个更低维度和结构化的空间中?

  • 可用或需要的数据是什么,数据是否组织和/或标记?是否需要预处理?

在本节中我们调查了一些应用,但还有许多应用真正适合图模型结构。阅读链接出版物的摘要是很好的,因为它们有助于捕捉这些模型的共同主题和思考方式。以下列表提供了图神经网络的常见任务的一个很好的概念,包括:

  • 节点分类

  • 图分类

  • 聚类和社区检测

  • 生成新的图

  • 影响最大化

  • 链接预测

图像数据作为图

我们可能会遇到在手写数字 MNIST 数据集上测试的图神经网络,这是计算机视觉的基准数据集之一。如果你想知道图像数据(存储为每个通道上的像素强度的三维张量)如何适应图结构,这里是它的工作原理:每个像素是一个节点,其特征是其三个通道的相应强度(如果是彩色图像,则只有一个特征)。边连接每个像素到其周围的三个、五个或八个像素,取决于像素是位于角落、边缘还是图像中间。

大脑网络

神经科学中的主要追求之一是理解大脑的网络组织。图模型为分析大脑的复杂网络提供了一个自然的框架和许多工具,无论是从解剖学还是功能学的角度。

要创建与人类智能相媲美的人工智能,我们必须在许多层面上了解人类大脑。其中一个方面是大脑的网络连接性,连接性如何影响大脑的功能,以及如何复制这一点,从小的计算单元逐步构建到模块化组件,最终形成一个完全独立和功能完善的系统。

人类大脑解剖网络展示了短路径长度(保持布线成本)以及高度皮层中枢,即高聚类。这既在细胞尺度上,也在整个大脑尺度上。换句话说,大脑网络似乎以一种最大化信息传输效率和最小化连接成本的方式组织自己。该网络还展示了模块化和分层的拓扑结构和功能。大脑网络的拓扑结构和功能在短时间尺度和长时间尺度上是相互依存的:网络的动态特性受其结构连接的影响,而在更长的时间尺度上,动态特性影响网络的拓扑结构。

最重要的问题是:大脑的网络属性与其认知行为之间的关系是什么?网络属性与大脑和精神障碍之间的关系是什么?例如,我们可以将神经精神障碍视为失连接综合征,图论可以帮助量化网络结构中的弱点、对损伤的脆弱性和异常。事实上,图论已被应用于研究精神分裂症、阿尔茨海默病和其他疾病中的结构和功能网络属性。

疾病传播

正如我们从 Covid19 大流行中学到的那样,准确可靠地预测疾病事件对于减轻目的、隔离措施、政策和许多其他决策因素至关重要。图模型可以将个体或整个地理区块视为节点,将这些个体或区块之间的接触事件视为边。最近用于预测 Covid19 传播的模型,例如文章结合图神经网络和时空疾病模型以改善对德国每周 COVID-19 病例的预测(2022),将来自 Facebook、Apple 和 Google 的人类流动数据纳入模型中,以模拟节点之间的相互作用。

这里有大量数据可以加以利用:Facebook 的Data For Good资源拥有大量关于人口密度、社会流动和旅行模式、社会联系等数据。谷歌的Covid 19 社区流动报告从谷歌地图和其他产品中获取见解,形成一个数据集,通过地理位置和不同类别的地点(如零售和娱乐、杂货店和药店、公园、交通站、工作场所和居住区)跟踪随时间变化的移动趋势。同样,苹果和亚马逊的流动数据也具有类似的目的,旨在帮助限制 Covid19 的传播。

信息传播

我们可以使用图形来模拟信息、疾病、谣言、八卦、计算机病毒、创新想法或其他事物的传播。这样的模型通常是一个有向图,其中每个节点对应一个个体,边缘带有关于个体之间互动的信息。边缘标签或权重通常是概率:连接n o d e i 和n o d e j 的边缘的权重w ij 是某种效应(疾病、谣言、计算机病毒)从n o d e i 传播到n o d e j 的概率。

检测和跟踪假新闻传播

图神经网络在检测假新闻的任务中表现比基于内容的自然语言处理方法更好(见图 9-5)。2019 年论文《在社交媒体上使用几何深度学习检测假新闻》的摘要很有信息量:社交媒体如今是全球数百万人的主要新闻来源之一,因为它们成本低、易于访问且传播迅速。然而,这也带来了可疑的信任度和暴露于“假新闻”的风险,这些新闻是有意编写以误导读者的。自动检测假新闻面临挑战,这挑战超越了现有基于内容的分析方法。其中一个主要原因是,新闻的解释通常需要政治或社会背景知识或“常识”,而当前的自然语言处理算法仍然缺乏。最近的研究实证表明,假新闻和真实新闻在社交媒体上传播方式不同,形成了传播模式,这些模式可以用于自动检测假新闻。基于传播的方法与基于内容的方法相比具有多个优势,其中包括语言独立性和更好的抵抗对抗性攻击。在本文中,我们展示了一种基于几何深度学习的新型自动假新闻检测模型。底层核心算法是将经典卷积神经网络推广到图形,允许融合异构数据,如内容、用户资料和活动、社交图和新闻传播。我们的模型在 Twitter 上传播的经专业事实核查组织验证的新闻报道上进行了训练和测试。我们的实验表明,社交网络结构和传播是重要特征,允许高度准确(92.7% ROC AUC)的假新闻检测。其次,我们观察到假新闻可以在传播几小时后可靠地检测出来。第三,我们测试了我们模型在时间上分开的训练和测试数据的老化情况。我们的结果指向基于传播的方法对于假新闻检测的潜力,作为基于内容的方法的替代或补充策略。

250

图 9-5。传播假新闻的节点标记为红色。思想相似的人在社交网络中聚集在一起(图片来源)。

Web-Scale Recommendation Systems

自 2018 年以来,Pinterest 一直在使用PinSage 图卷积网络。这个网络整理用户的主页并为新的相关的图钉提供建议。作者在他们的模型中使用了图上的随机游走,我们将在本章后面讨论。以下是完整的摘要:针对图结构数据的深度神经网络的最新进展已经在推荐系统基准测试中取得了最先进的性能。然而,使这些方法实用并可扩展到拥有数十亿个项目和数亿用户的网络规模推荐任务仍然是一个挑战。在这里,我们描述了一个我们在 Pinterest 开发和部署的大规模深度推荐引擎。我们开发了一种数据高效的图卷积网络(GCN)算法 PinSage,它结合了高效的随机游走和图卷积,生成了结合了图结构和节点特征信息的节点(即项目)嵌入。与先前的 GCN 方法相比,我们开发了一种基于高效随机游走的新方法来构造卷积,并设计了一种依赖于越来越难的训练示例来改善模型的鲁棒性和收敛性的新型训练策略。我们在 Pinterest 部署了 PinSage,并在拥有 30 亿个代表图钉和画板的节点和 180 亿条边的图上对其进行了 750 亿个示例的训练。根据离线指标、用户研究和 A/B 测试,PinSage 生成的推荐比可比的深度学习和基于图的替代方法具有更高的质量。据我们所知,这是迄今为止最大规模的深度图嵌入应用,并为基于图卷积架构的新一代网络规模推荐系统铺平了道路。

对抗癌症

在 2019 年的文章HyperFoods: 机器智能映射食物中的抗癌分子中,作者利用蛋白质、基因和药物相互作用数据来识别有助于预防和战胜癌症的分子。他们还绘制了富含抗癌分子的食物(见图 9-6)。作者再次利用图上的随机游走。以下是论文的摘要:最近的数据表明,30-40%的癌症可以仅通过饮食和生活方式措施来预防。在这里,我们介绍了一种独特的基于网络的机器学习平台,用于识别可能的基于食物的抗癌分子。这些分子是通过它们与临床批准的抗癌疗法的分子生物学网络共同性来识别的。使用图上的随机游走机器学习算法(在超级计算 DreamLab 平台内运行),模拟药物在人类相互作用网络上的作用,以获得 1962 种批准的药物的全基因组活性概况(其中 199 种被分类为“抗癌”并具有它们的主要适应症)。采用监督方法来预测抗癌分子,使用这些‘学习’相互作用活性概况。经验证的模型性能预测抗癌治疗药物的分类准确率为 84-90%。7962 种食物中的生物活性分子的全面数据库被输入模型,预测出 110 种抗癌分子(通过抗癌药物相似性阈值定义为>70%),其预期能力与来自各种化学类别的临床批准的抗癌药物相当。这反过来被用来构建一个‘食物地图’,其中每种成分的抗癌潜力由其中发现的抗癌分子数量来定义。我们的分析支持下一代癌症预防和治疗营养策略的设计。

250

图 9-6. 超级食物:食物中癌症抗击分子的机器智能映射。节点越大,癌症抗击分子集合越多样化。(图片来源)。

生化图

我们可以将分子和化合物表示为图,其中节点是原子,边是它们之间的化学键。来自化学信息学领域的数据集对于评估分类模型的性能很有用。例如,包含约 4100 种化合物的NCI-1数据集,对于抗癌筛选非常有用,其中化学品被标记为阻碍肺癌细胞的阳性或阴性。同一网站上还提供了蛋白质和其他化合物的类似标记图数据集,以及使用它们的论文以及不同模型在这些数据集上的性能。

药物和蛋白质结构发现的分子图生成

在上一章中,我们学习了生成网络如变分自动编码器和对抗网络如何从数据中学习联合概率分布,以便为各种目的生成外观相似的数据。生成图网络建立在类似的思想基础上,但是比单纯生成图像的网络更复杂。生成图网络以顺序方式生成新图,逐步输出节点和边,或者以全局方式一次性输出整个图的邻接矩阵。有关该主题的详细信息,请参见调查报告生成图网络(2020)

引文网络

在引文网络中,节点可以是作者,边是他们的合著关系,或者节点是论文,(有向)边是它们之间的引用:每篇论文都有指向它引用的论文的有向边。每篇论文的特征包括其摘要、作者、年份、会议、标题、研究领域等。任务包括节点聚类、节点分类和链接预测。用于论文引文网络的流行数据集包括 Cora、Citeseer 和 Pubmed。Cora 数据集包含约三千篇机器学习出版物,分为七个类别。引文网络中的每篇论文都由一个独热向量表示,指示预定字典中单词的存在或不存在,或者由词频-逆文档频率(TF-IDF)向量表示。随着更多论文加入网络,这些数据集将不断更新。

社交媒体网络和社交影响预测

社交媒体网络如 Facebook、Twitter、Instagram 和 Reddit 是我们这个时代(2010 年后)的一个独特特征。Reddit 数据集是可用数据集的一个例子:这是一个图,其中节点是帖子,边是两个帖子之间的评论来自同一用户。这些帖子还标有它们所属的社区。

社交媒体网络及其社会影响对我们的社会产生了重大影响,从广告到赢得总统选举再到推翻政治制度。代表社交网络的图模型的一个重要任务是预测网络中节点的社会影响。在这里,节点是用户,他们的互动是边缘。特征包括用户的性别、年龄、性别、位置、活动水平等。量化社会影响的一种方法是通过预测用户在网络中的邻近邻居的行为来预测目标变量。例如,如果用户的朋友购买了一个产品,那么在一段时间后他们购买相同产品的概率是多少?图上的随机游走有助于预测网络中某些节点的社会影响。

社会结构

社会图是代表社会中个人或个人群体之间关系的有向图。节点是社会成员或群体,有向边是这些成员之间的关系,如钦佩、联合、影响等。我们对这些社会图中的连通性、可分离性、片段大小等感兴趣。一个例子来自人类学研究,根据他们的亲属结构对一些部落进行分类。

贝叶斯网络

很快在本章中我们将讨论贝叶斯网络。这些是概率图模型,其目标是我们在人工智能领域非常熟悉的目标:学习数据集特征的联合概率分布。贝叶斯网络将这个联合概率分布视为表示数据特征之间关系的图中仅条件于节点的父节点的单变量分布的乘积。也就是说,节点是特征变量,边缘是我们认为相连的特征之间的边缘。应用包括垃圾邮件过滤、语音识别、编码和解码等。

交通预测

交通预测是使用历史道路地图、道路速度和交通量数据来预测交通量的任务。有基准交通数据集,我们可以用来跟踪进展并比较模型。例如,METR-LA是一个时空图数据集,包含洛杉矶县高速公路上 207 个传感器收集的四个月的交通数据。交通网络是一个图,其中节点是传感器,边缘是这些传感器之间的道路段。在某个时间t,特征是交通参数,如速度和量。图神经网络的任务是在经过一定时间后预测图的特征。

其他交通预测模型采用贝叶斯网络:相邻道路链接之间的交通流量。该模型利用相邻道路链接的信息来分析焦点链接的趋势。

物流与运营研究

我们可以使用图来建模和解决运筹学中的许多问题,例如运输问题和活动网络。涉及的图通常是加权有向图。运筹学问题具有组合性质,如果网络很小,问题总是微不足道的。然而,对于大型现实世界网络,挑战在于找到能够快速筛选出大部分搜索空间并迅速排除其中大部分内容的高效算法。研究文献的很大一部分涉及估计这些算法的计算复杂性。这被称为组合优化。典型问题包括“旅行推销员问题”、“供应链优化”、“共享乘车路线和票价”、“工作匹配”等。用于解决这些问题的一些图方法和算法包括最小生成树、最短路径、最大流最小割以及图中的匹配。我们将在本书的后面讨论运筹学示例。

语言模型

图模型与各种自然语言任务相关。这些任务在表面上看起来不同,但许多任务归结为聚类,而图模型非常适合这种任务。

对于任何应用程序,我们必须首先选择节点、边以及每个节点代表的特征。对于自然语言,这些选择揭示了语言和语言语料库中的隐藏结构和规律。

与将自然语言句子表示为递归模型的令牌序列或变压器的令牌向量不同,在图模型中,我们将句子嵌入到图中,然后使用图深度学习(或图神经网络)。

计算语言学中的一个例子是构建解析语言的图表图 9-7。

300

图 9-7。解析后的句子。

节点可以是单词、n-gram 或短语,边是它们之间的关系,这取决于语言的语法或语法(冠词、名词、动词等)。语言被定义为根据其语法规则从语言词汇表中正确生成的所有字符串的集合。在这个意义上,计算机语言易于解析(它们是这样构建的),而自然语言由于其复杂性而很难完全指定。

解析

解析意味着将输入流转换为结构化或正式表示,以便可以自动处理。解析器的输入可以是句子、单词,甚至字符。输出是包含有关输入每个部分功能的信息的树形图。我们的大脑是语言输入的出色解析器。计算机解析编程语言。

另一个例子是新闻聚类或文章推荐。在这里,我们使用文本数据的图嵌入来确定文本相似性:节点可以是单词,边可以是单词之间的语义关系,或者只是它们的共现关系。或者节点可以是单词和文档,边可以再次是语义或共现关系。节点和边的特征可以包括作者、主题、时间段等。在这样的图中,聚类自然而然地出现。

另一种不依赖于语言的语法或语法的解析类型是抽象意义表示(AMR)。它依赖于语义表示,即意义相似的句子应该被分配相同的抽象意义表示,即使它们的措辞不完全相同。抽象意义表示图是根据完整句子构建的有根、标记、有向、无环图。这对于机器翻译和自然语言理解非常有用。有用于抽象意义表示解析、可视化和表面生成的软件包和库,以及公开可用的数据集。

对于其他自然语言应用,以下调查论文是一个很好的参考,易于阅读并了解更多有关主题的信息:自然语言处理中的图调查

网络的图结构

自 1989 年万维网(www)的诞生以来,它已经得到了巨大的发展,并已成为全球数十亿人不可或缺的工具。它允许使用互联网浏览器访问数十亿个网页、文档和其他资源。由于数十亿个页面相互链接,研究网络的图结构具有极大的兴趣。从数学上讲,这个广阔而庞大的图本身就是迷人的。但理解这个图对于更多原因至关重要,它提供了对爬取、索引和排名网络的算法(如我们在本章前面看到的 PageRank 算法)、搜索社区以及发现表征其增长或衰退的社会和其他现象的洞察。

全球网络图具有:

  • 节点:网页,数量达数十亿。

  • 边:从一个页面指向另一个页面,数量达数百亿。

我们感兴趣的是:

  • 节点的平均度是多少?

  • 节点的度分布(对于入度和出度,可能非常不同)。它们是否符合幂律?其他一些规律?

  • 图的连通性:连接对的百分比是多少?

  • 节点之间的平均距离。

  • 观察到的网络结构是否依赖于特定的爬取?

  • 弱连接组件和强连接组件的特定结构。

  • 是否存在一个巨大的强连通分量?可以到达或可以从这个巨大分量到达的节点的比例是多少?

自动分析计算机程序

我们可以使用图来验证计算机程序、程序推理、可靠性理论、计算机故障诊断以及研究计算机内存的结构。文章程序分析中的图神经网络是一个例子:程序分析旨在确定程序的行为是否符合某些规范。通常,程序分析需要由人类定义和调整。这是一个昂贵的过程。最近,机器学习方法已经显示出在概率上实现各种程序分析的潜力。鉴于程序的结构化特性,以及程序分析中图表示的普遍性,图神经网络(GNN)提供了一种优雅的方式来表示、学习和推理程序,并广泛用于基于机器学习的程序分析。本文讨论了图神经网络在程序分析中的应用,重点介绍了两个实际用例:变量误用检测和类型推断。

计算机科学中的数据结构

在计算机科学中,数据结构是一种存储、管理和组织数据的结构。有不同的数据结构,它们通常被选择为使访问数据更有效(读取、写入、附加、推断或存储关系等)。

一些数据结构使用图来组织数据,计算设备在一个集群中,并表示数据和计算或通信网络的流动。还有一些面向存储和查询图数据的图数据库。其他数据库将图数据转换为更结构化的格式(如关系格式)。

以下是一些图数据结构的示例:

  1. 我们已经遇到了 PageRank 算法,以及网站的链接结构表示为有向图,其中节点是网页,边表示从一个页面到另一个页面的链接。一个数据库保存所有网页以及它们的链接结构可以是图结构化的,其中图以链接矩阵或邻接矩阵的形式存储,无需进行任何转换,或者可以转换以适应其他非图形数据库的结构。

  2. 用于组织数据库中文件的二叉搜索树:二叉搜索树是有序的数据结构,对于随机和顺序访问记录以及文件的修改都很高效。二叉搜索树的固有顺序加快了搜索时间:在树的每个级别,我们将要排序的数据量减少了一半。它还加快了插入时间:与数组不同,当我们向二叉树数据结构添加一个节点时,我们在内存中创建一个新的部分并链接到它。这比创建一个新的大数组然后将数据从较小的数组插入到新的更大数组要快。

  3. 基于图的信息检索系统:在一些信息检索系统中,我们为每个文档分配一定数量的索引项。我们可以将这些视为文档的指示符、描述符或关键词。这些索引项将被表示为图的节点。如果两个索引项密切相关,例如索引网络,我们用无向边连接这两个索引项。结果的相似性图非常庞大,可能是不连通的。该图的最大连接子图是其组件,它们自然地对该系统中的文档进行分类。对于信息检索,我们的查询指定了一些索引项,即图的某些节点,系统返回包含相应节点的最大完整子图。这给出了指定我们正在搜索的文档的完整索引项列表。

在分布式网络中的负载均衡

计算世界已经从摩尔定律发展到并行计算再到云计算。在云计算中,我们的数据、文件以及执行我们文件和对我们数据进行计算的机器都不在我们附近。它们甚至不彼此靠近。随着应用程序变得更加复杂,网络流量增加,我们需要软件或硬件的网络流量分配器,将网络流量分配到多个服务器上,以便没有单个服务器承担沉重负载,从而提高应用程序响应时间、最终用户体验等性能。随着流量增加,需要添加更多的设备或节点来处理体积。在保护数据安全和隐私的同时,需要进行网络流量分配,并且应该能够在发生之前预测流量瓶颈。这正是负载均衡器所做的。可以将分布式网络想象成一个图,其中节点是连接的服务器和设备。然后负载均衡是在给定图上的流量问题,有各种算法用于分配负载。所有算法都在网络的图上运行。有些是静态的,分配负载而不更新网络的当前状态,有些是动态的,但需要网络内关于节点状态的持续通信。以下是一些算法:

  1. 最少连接算法:这种方法将流量引导到具有最少活动连接的服务器。

  2. 最小响应时间算法:这种方法将流量引导到具有最少活动连接和最低平均响应时间的服务器。

  3. 轮询算法:该算法在服务器上轮流分配负载:首先将流量引导到第一个可用的服务器,然后将该服务器移动到队列的底部。

  4. IP 哈希:这种方法根据客户端的 IP 地址分配服务器。

人工神经网络

最后,人工神经网络本身是图,其中节点是计算单元,边是这些单元的输入和输出。图 9-8 总结了流行的人工神经网络模型作为图。

250

图 9-8. 神经网络作为图(图片来源)。

图上的随机行走

图上的随机行走(图 9-9)的意思就是:一系列步骤从某个节点开始,每个时间步骤选择一个相邻节点(使用邻接矩阵),概率与边的权重成比例,并移动到那里。

300

图 9-9. 无向图上的随机行走者。

如果边没有权重,那么相邻节点被选择作为行走移动的概率是相等的。在任何时间步骤中,如果存在自环,行走可以停留在同一节点,或者在进行懒惰随机行走时,行走者有一定概率停留在一个节点而不是移动到其邻居之一。我们感兴趣的是以下内容:

  1. 随机行走访问的节点列表,按访问顺序排列是什么?在这里,起点和图的结构对行走者覆盖范围或行走是否能到达图的某些区域有影响。在图神经网络中,人们希望根据邻居的特征学习给定节点的表示。在大图中,节点的邻居比可计算的要多,我们使用随机行走。然而,我们必须小心,图的不同部分具有不同的随机行走扩展速度,因此如果我们不根据子图结构调整随机行走的步数,我们可能会得到节点的低质量表示,并且随着这些表示进入工作流程,可能会产生不良后果。

  2. 随机行走的预期行为是什么,即在一定步数后访问节点的概率分布。我们可以通过使用图的谱,即其邻接矩阵的特征值集合,来研究随机行走的基本属性,比如其长期行为。一般来说,运算符的谱帮助我们理解当我们重复应用运算符时会发生什么。在图上随机行走等同于重复应用邻接矩阵的归一化版本到我们开始的图的节点上。每次应用这个随机行走矩阵,我们在图上向前走一步。

  3. 随机行走在不同类型的图上的行为如何,比如路径、树、两个完全连接的图通过一条边连接、无限图等?

  4. 对于给定的图,行走是否会回到起点?如果是,我们需要走多久才能回到?

  5. 我们需要走多久才能到达特定节点?

  6. 我们需要走多久才能访问所有节点?

  7. 随机行走如何扩展?也就是说,属于图中某些区域的特定节点的影响分布是什么?他们的影响大小是多少?

  8. 我们能否设计基于随机行走的算法,能够到达大图的隐秘部分?

随机行走和布朗运动

当随机行走的步长大小趋近于零时,我们得到布朗运动。布朗运动通常模拟悬浮在介质中的粒子的随机波动,比如液体中的粒子或者金融市场中衍生品的价格波动。我们经常将布朗运动与维纳过程一起提及,维纳过程是一个连续随机过程,对于运动(粒子或金融中价格波动)的开始(从零开始)、下一步的采样(从正态分布中采样并具有独立增量)以及关于其时间连续性的假设(几乎肯定是连续的)有明确的数学定义。另一个相关的术语是。我们将在第十一章中的概率部分看到这些内容。

我们在本章中讨论 PageRank 算法时曾遇到过随机行走,其中一个随机网页浏览者随机选择从当前页面移动到网络中的相邻页面。我们注意到当我们反复应用图的链接矩阵时,随机行走的长期行为会被发现,这与每个节点的度数归一化的邻接矩阵相同。在下一节中,我们将看到更多关于图神经网络中随机行走的用途。

我们可以利用随机行走(在有向或无向图、加权或非加权图上)进行社区检测和影响最大化,其中我们只需要图的邻接矩阵(而不是将节点嵌入到特征向量中然后进行聚类)。

节点表示学习

在机器上实现任何图任务之前,我们必须能够将图的节点表示为包含有关其在图中位置和相对于图中局部性的特征的向量。节点的表示向量通常是从节点自身的特征和周围节点的特征聚合而来的。

有不同的方法来聚合特征、转换特征,甚至选择哪些邻居节点对给定节点的特征表示有贡献。让我们看看一些方法:

  • 传统的节点表示方法依赖于子图摘要统计。

  • 在其他方法中,一起出现在短随机行走中的节点将具有相似的向量表示。

  • 其他方法考虑到随机行走在不同的图子结构上传播方式不同,因此节点的表示方法会根据节点所属的局部子结构进行调整,根据所属子图的拓扑结构决定每个节点的适当影响半径。

  • 其他方法通过将节点的特征向量与随机行走矩阵的幂相乘来产生多尺度表示。

  • 其他方法允许对节点及其邻居的特征向量进行非线性聚合。

确定节点从多大范围的邻域中获取信息(影响分布)也很重要,也就是找到哪些节点的特征会影响给定节点的表示。这类似于统计学中的敏感性分析,但在这里我们需要确定节点的表示对周围节点特征变化的敏感性。

创建节点表示向量后,在训练期间将其输入到另一个机器学习模型中,例如支持向量机模型进行分类,就像将数据的其他特征输入模型一样。例如,我们可以学习社交网络中每个用户的特征向量,然后将这些向量与其他特征一起传递到分类模型中,以预测用户是否是虚假新闻传播者。但是,我们不必依赖下游的机器学习模型来对节点进行分类。我们可以直接从图结构数据中进行分类,在那里我们可以根据其与其他局部节点的关联来预测节点的类别。图可能只有部分标记,任务是预测其余标签。此外,节点表示步骤可以是预处理步骤,也可以是端到端模型的一部分,例如图神经网络。

图神经网络的任务

经过线性代数图形式化、图模型应用、图上的随机游走以及编码节点特征及其在图中影响区域的向量节点表示,我们应该对图神经网络可以执行的任务有一个良好的了解。让我们来看看其中一些。

节点分类

  • 在文章引用网络中,比如在 Citeseer 或 Cora 中,其中节点是学术论文(表示为词袋向量),有向边是论文之间的引用,将每篇论文分类到特定学科中。

  • 在 Reddit 数据集中,其中节点是评论帖子(表示为词向量),无向边是由同一用户发布的评论之间的关系,根据其所属社区对每个帖子进行分类。

  • 蛋白质相互作用网络数据集包含 24 个图,其中节点标记有基因本体集(不用担心医学技术名称,专注于数学。这是数学建模的好处,它对来自各种领域的各种应用都起作用,这证实了它作为潜在的宇宙基础语言)。通常从蛋白质相互作用网络数据集中选取 20 个图用于训练,2 个图用于验证,其余用于测试,每个对应一个人类组织。与节点相关的特征包括位置基因集、模体基因集和免疫特征。根据其基因本体集对每个节点进行分类。

  • 有野生动物贸易监测网络,比如Trade.org,分析动态的野生动物贸易趋势,并使用和更新数据集,比如CITES 野生动物贸易数据库USADA 美国农业部数据共享(该数据集包括超过一百万个野生动物或野生动物产品运输,代表超过 60 个生物类别和超过 32 亿个活体生物)。贸易网络上的一个分类任务是将每个节点分类为从事非法贸易活动的交易者(买方或卖方)或不从事。网络中的边表示这些买方和卖方之间的交易。节点的特征包括交易者的个人信息、银行账号、位置等,边的特征包括交易标识号、日期、价格标签、购买或出售的物种等。如果我们已经有一部分交易者标记为非法交易者,那么我们模型的任务将是根据它们与网络中其他节点(及其特征)的连接来预测网络中其他节点的标签。

节点分类示例自然适合半监督学习,其中数据集中只有少数节点带有标签,任务是为其余节点标记。干净标记的数据是我们所有人都应该倡导的,这样我们的系统才能更准确、可靠和透明。

图分类

有时我们关心将整个图标记为与标记图的个别节点相对。例如,在 PROTEINS 数据集中,我们有一组化合物,每个化合物都表示为一个图,并标记为酶或非酶。对于图学习模型,我们将输入数据集中每个图的节点、边、它们的特征、图结构和标签,创建整个图表示或嵌入,而不是单个节点表示。

聚类和社区检测

图中的聚类是一个重要的任务,它在网络中发现社区或群组,比如恐怖组织。一种方法是创建节点和图表示,然后将它们输入传统的聚类方法,如k均值聚类。其他方法产生节点和图表示,考虑到聚类目标在其设计中。这些方法可以包括编码器解码器设计和类似于我们在之前章节中遇到的方法的注意机制。其他方法是谱方法,这意味着它们依赖于图的拉普拉斯矩阵的特征值。请注意,对于非图数据,主成分分析是我们用于聚类的一种方法,也是谱方法,依赖于数据表的奇异值。计算任何东西的特征值总是一个昂贵的操作,所以目标是找到避免这样做的方法。对于图,我们可以采用图论方法,如最大流最小割(我们将在本章后面看到)。不同的方法有各自的优势和缺点,例如一些采用经过时间验证的图论结果,但未包括节点或边的特征,因为该理论并未考虑任何特征,更不用说一大堆特征了。重要的是要始终诚实地说明我们的模型考虑了什么,没有考虑什么。

图生成

图生成对于药物发现、材料设计和其他应用非常重要。传统上,图生成方法使用手工制作的随机图模型系列,使用简单的随机生成过程。由于它们的简单属性,这些模型在数学上是很容易理解的。然而,由于同样的原因,它们在捕捉具有更复杂依赖关系的真实世界图,甚至是许多真实世界网络所展示的正确统计属性,如节点度的重尾分布方面存在局限性。更近期的方法,如生成图神经网络,将图和节点表示与我们在前一章中介绍的生成模型相结合。这些方法具有更大的能力从数据中学习结构信息,并生成复杂的图,如分子和化合物。

影响最大化

影响最大化是网络扩散的一个子领域,其目标是通过网络最大化某种东西(如信息或疫苗)的扩散,同时只将该东西给予少数初始节点或种子。因此,目标是找到具有整体最大影响力的少数节点。应用包括信息传播,如职位空缺、新闻、广告和疫苗接种。传统方法选择种子节点的方式是基于最高度、接近度、介数和其他图结构属性。其他方法采用离散优化领域,获得良好结果并证明近似优化器的存在。最近的方法采用图神经网络和对抗网络,当存在其他与最大化节点影响力目标竞争的目标时,例如达到特定人口部分,如某个少数群体,他们不一定与图的自然中心紧密连接。

链接预测

给定图中的两个节点,它们之间存在边的概率是多少?请注意,在共享共同邻居的意义上的接近性并不一定是连接(或互动)的指标。在社交网络中,人们倾向于在同一个圈子里活动,因此共享许多共同朋友的两个人很可能互动,因此它们也很可能相连,但在某些生物系统中,例如研究蛋白质相互作用时,情况恰恰相反:共享更多共同邻居的蛋白质更不可能相互作用。因此,基于基本属性(如图距离、度、共同邻居等)计算相似性分数并不总是产生正确结果。我们需要神经网络来学习节点和图的嵌入,并分类两个节点是否相连。这篇论文中有一个这样的网络示例:Link Prediction with Graph Neural Networks and Knowledge Extraction

动态图模型

本章讨论的许多应用都将受益于在我们的图模型中包含时间依赖性,因为它们具有动态性质。示例包括交通预测、分布式网络的负载平衡、模拟各种相互作用的粒子系统以及非法野生动物贸易监测。在动态图模型中,节点和边的特征允许随时间演变,一些节点或边可以被添加或移除。这种建模捕捉了市场中最新贸易趋势、波动、某些网络中的新犯罪活动以及交通系统中的新路线或连接等信息。

思考如何建模动态图并从中提取信息并不是新鲜事,例如可以参考 1997 年的文章Dynamic graph models,然而,深度学习的引入使得从这些系统中提取知识更加简单。目前用于动态图的方法将图卷积与循环神经网络或卷积神经网络相结合,以捕获空间依赖性并建模时间依赖性。

这篇论文Learning to Simulate Complex Physics with Graph Networks (2020)是一个很好的例子,展示了出色的高分辨率结果,利用动态图神经网络在更大的尺度上模拟任何相互作用粒子系统,无论是涉及的粒子数量还是系统允许(数值上)演化的时间,都比以前做的要多。粒子,如沙子或水粒子,是图的节点,具有属性如位置、速度、压力、外部力等,边连接允许相互作用的粒子。神经网络的输入是一个图,输出是一个具有相同节点和边的图,但具有更新后的粒子位置和属性。网络通过消息传递学习动态,或者说每个时间步的更新规则。更新规则取决于当前时间步系统的状态,以及一个参数化函数,其参数针对某个训练目标进行优化,该目标取决于特定应用,这是任何神经网络的主要步骤。监督学习的预测目标是每个粒子的平均加速度。

贝叶斯网络

贝叶斯网络是完全适合处理不确定性的图形,以数学上合理的方式编码概率。图 9-10 和图 9-11 是两个贝叶斯网络的示例。

300

图 9-10. 贝叶斯网络

300

图 9-11. 另一个贝叶斯网络

在贝叶斯网络中,我们有:

  1. 节点是我们认为模型应该包含的变量。

  2. 边是有向的,从节点指向节点,或者从更高的神经元指向更低的神经元,意思是:我们知道在观察到父变量的情况下子变量的概率。

  3. 网络图中不允许循环。

  4. 它们严重依赖于贝叶斯规则:如果从 A 到 B 有一个箭头,那么 P(B|A)是正向概率,P(A|B)是逆向概率。可以将其视为 P(证据|假设)或 P(症状|疾病)。我们可以根据贝叶斯规则计算逆向概率:

P ( A | B ) = P(B|A)P(A) P(B) .

  1. 如果没有箭头指向一个变量(如果它没有父节点),那么我们只需要该变量的先验概率,我们可以从数据或专家知识中计算,比如:美国有百分之十三的女性患乳腺癌。

  2. 如果我们在模型中的某个变量或更多证据上获得更多数据,那么我们更新对应于该变量的节点(条件概率),然后沿着网络中的连接传播该信息,更新每个节点的条件概率,有两种不同的方式,取决于信息是从父节点传播到子节点,还是从子节点传播到父节点。每个方向的更新非常简单:遵守贝叶斯规则。

贝叶斯网络代表的是一个紧凑的条件概率表。

贝叶斯网络代表的是一个紧凑的条件概率表。通常,当我们建模一个真实世界的场景时,每个离散变量可以假定某些离散值或类别,每个连续变量可以假定在给定连续范围内的任何值。理论上,我们可以构建一个巨大的条件概率表,该表给出了每个变量在固定其他变量值的情况下假定某个状态的概率。实际上,即使对于一个相对较小的变量数量,这也是不可行且昂贵的,无论是对于存储还是计算。此外,我们没有访问构建表所需的所有信息。贝叶斯网络克服这一障碍的方法是允许变量只与少数相邻变量交互,因此我们只需计算网络图中直接连接到它的变量的概率,无论是向前还是向后。如果网络中任何变量的新证据到达,那么网络的图结构,连同贝叶斯规则,将引导我们以系统化、可解释和透明的方式更新网络中所有变量的概率。以这种方式稀疏化网络是贝叶斯网络成功的一个特征。

总之,贝叶斯网络的图表明了模型变量(或数据特征)的联合概率分布,作为局部条件概率分布的乘积,每个节点一个:

P ( x 1 , x 2 , ⋯ , x n ) = ∏ i=1 n P ( x i | parents of x i )

使用贝叶斯网络进行预测

一旦贝叶斯网络设置并初始化条件概率(并持续使用更多数据进行更新),我们可以通过沿着贝叶斯规则或乘积规则搜索这些条件概率分布表来快速获得结果,具体取决于查询,比如:给定邮件包含的单词、发件人位置、一天中的时间、包含的链接、发件人和收件人之间的互动历史以及垃圾邮件检测变量的其他值,这封电子邮件是垃圾邮件的概率是多少?给定患者的乳腺癌概率是多少,考虑到她的乳腺 X 光检查结果、家族史、症状、血液检测等?这里最好的部分是我们不需要执行大型程序或使用大型计算机集群来获得结果。也就是说,我们的手机和平板电脑的电池将持续更长时间,因为它们不需要花费大量计算能力来编码和解码消息,而是应用贝叶斯网络来使用turbo code前向纠错算法。

贝叶斯网络是信念网络,而不是因果网络

在贝叶斯网络中,尽管从父变量指向子变量的箭头最好是因果关系,但一般来说并不是因果关系。这只是意味着我们可以模拟子变量的概率分布,考虑到其父变量的状态,我们可以使用贝叶斯规则找到逆概率:父变量给定子变量的概率分布。这通常是更困难的方向,因为它不太直观,更难观察。一种思考这个问题的方法是,在知道孩子的父母特征之前,计算孩子特征的概率分布更容易,P(孩子|母亲,父亲),甚至在有孩子之前,而推断出父母特征,P(父亲|孩子)P(母亲|孩子)。这个例子中的贝叶斯网络图 9-12 有三个节点,母亲、父亲和孩子,从母亲指向孩子的边,从父亲指向孩子的另一条边。

300

图 9-12。在这个贝叶斯网络中,孩子变量是一个碰撞器。

母亲和父亲之间没有边,因为他们的特征之间没有关联。知道母亲的特征不会给我们关于父亲的特征提供任何信息,然而,知道母亲的特征和孩子的特征可以让我们稍微了解更多关于父亲的特征,或者分布 P(父亲|母亲,孩子)。这意味着母亲和父亲的特征,最初是独立的,但在知道孩子的特征的情况下是有条件相关的。因此,贝叶斯网络模拟了图结构中变量之间的依赖关系,提供了一个关于这些变量之间关系的地图:它们的条件依赖和独立性。这就是为什么贝叶斯网络也被称为信念网络。

关于贝叶斯网络,请记住以下内容

让我们记住关于贝叶斯网络的以下内容:

  • 贝叶斯网络没有因果方向,并且在回答因果问题或为什么问题方面受到限制,比如:是什么导致了某种疾病的发作?也就是说,我们很快将会了解到,我们可以使用贝叶斯网络进行因果推理,并预测干预的后果。无论是用于因果推理还是其他用途,我们更新贝叶斯网络的方式,或者传播信念的方式,总是一样的。

  • 如果一些变量有缺失数据,贝叶斯网络可以处理,因为它们被设计成有效地从具有关于它们的丰富信息的变量向具有较少信息的变量传播信息。

链、分叉和碰撞器

贝叶斯网络的构建模块(具有三个或更多节点)是三种类型的连接:链、分叉和碰撞器,如图 9-13 所示。

300

图 9-13。贝叶斯网络中的三种连接类型。
  1. :A → B → C。在这个链中,B 是一个中介者。如果我们知道 B 的值,那么了解 A 不会增加或减少我们对 C 的信念。因此,在我们知道中介者 B 的值的情况下,A 和 C 是有条件独立的。条件独立性使我们和使用贝叶斯网络的机器只需关注相关信息。

  2. 分叉:B → A 和 B → C,也就是说,B 是 A 和 C 的共同父节点或混杂因素。数据将显示,即使它们之间没有因果关系,A 和 C 在统计上是相关的。我们可以通过对混杂因素 B 进行条件处理来暴露这种虚假相关性。

  3. 碰撞器:A → B 和 C → B。当我们对中间变量进行条件处理时,碰撞器与链或分叉是不同的。我们在上面父母指向孩子的例子中看到了这一点。如果 A 和 C 最初是独立的,那么对 B 进行条件处理会使它们变得相关!这种意外的、非因果关系的信息传递是贝叶斯网络条件处理的一个特征:对碰撞器进行条件处理会打开其父节点之间的依赖路径。

另一件我们需要小心的事情是:当结果和中介者混淆时。在这种情况下,对中介者进行条件处理与将其保持恒定是不同的。

给定一个数据集,我们如何为涉及的变量建立一个贝叶斯网络?

贝叶斯网络的图结构可以由我们手动决定,也可以通过算法从数据中学习。贝叶斯网络的算法非常成熟,而且有商业化。一旦网络的结构确定,如果有关网络中某个变量的新信息到达,只需按照图表更新每个节点的条件概率,通过网络传播信息,更新对网络中每个变量的信念。贝叶斯网络的发明者朱迪亚·珀尔将这个更新过程比作生物有机组织,比作神经元的生物网络,如果激发一个神经元,整个网络会做出反应,将信息从一个神经元传播到其邻居。

最后,我们可以将神经网络视为贝叶斯网络。

从数据中学习模式

需要注意的是,贝叶斯网络以及学习给定数据特征的联合概率分布的任何其他模型,比如我们在前一章中遇到的生成模型以及早期章节中的确定性模型,只是从数据中检测模式并学习关联,而不是学习这些模式最初是如何产生的。要使 AI 代理真正智能并像人类一样推理,他们必须询问关于他们所看到的和他们所做的事情的“如何”、“为什么”和“如果”等问题,并且必须寻找答案,就像人类在很小的时候那样。事实上,对于人类来说,在他们的发展早期有一个“为什么”的年龄:那就是孩子们让他们的父母因为询问一切事情的“为什么”而发疯的年龄。AI 代理应该有一个“因果模型”。这个概念对于获得通用人工智能非常重要。我们将在下一节和第十一章中再次讨论这个问题。

概率因果建模的图表

自从我们在统计学中迈出第一步以来,我们听到的一直是:“相关不意味着因果关系”。然后我们继续谈论数据、更多数据和数据中的相关性。好吧,我们明白了,但是因果关系呢?它是什么?我们如何量化它?作为人类,我们清楚知道“为什么”是什么意思?我们直观地概念化因果关系,即使是八个月大的婴儿也是如此。我实际上认为我们在“为什么”的世界中更多地依靠自然和直觉水平运作,而不是在关联的世界中。那么,我们期望有一天能像我们一样推理的机器,为什么只在关联和回归水平上运作?这是数学家和哲学家朱迪亚·珀尔在人工智能领域提出的观点,也是他在他出色的著作《为什么之书(2020)》中提出的观点。我从这本书中最喜欢的一句话是:“非因果关系违反了我们的常识”。这个想法是我们需要明确并量化哪些相关性是由因果关系引起的,哪些是由其他因素引起的。

珀尔使用图表(图)构建他的数学因果模型,这些图表类似于贝叶斯网络图,但具有基于“do 演算”的概率推理方案,或者计算概率“给定 do”运算符,而不是计算概率“给定观察”运算符,这在非因果统计模型中非常熟悉。主要观点是:

  • 观察并不等同于行动。在数学符号中,P r o b ( number of bus riders | color coded routes ) 不同于 P r o b ( number of bus riders | do color coded routes )。

我们可以从数据中推断第一个问题:查看某个城市的公交路线采用彩色编码时的乘客量。这种概率并不能告诉我们彩色编码路线对乘客数量的影响。第二种概率,带有 do 运算符,是不同的,仅凭数据,没有因果图,我们无法得出答案。区别在于当我们调用 do 运算符时,我们故意改变了公交路线为彩色编码,并且我们想评估这种改变对乘客量的影响。如果在这种故意的行动之后乘客量增加了,并且考虑到我们绘制了正确的图表包括变量及它们之间的关系,那么我们可以断言:使用彩色编码的公交路线导致了乘客量的增加。当我们行动而不是观察时,我们手动阻止了所有可能导致公交路线变为彩色的道路,比如领导层的变化,或者一年中的某个时间,同时可能影响乘客量。如果我们仅仅观察数据,我们无法阻止这些道路。此外,当我们使用 do 运算符时,我们故意和手动地设置了公交路线为彩色编码(而不是编号、等等)。

实际上,公交路线的例子并非虚构。我目前正在与弗吉尼亚州哈里森堡市的公共交通部门合作,旨在增加他们的乘客量,提高他们的效率,并在资源有限且大学不在开学期间市内人口急剧减少的情况下优化他们的运营。2019 年,交通部门故意将他们的路线从编号系统改为彩色编码系统,同时故意将他们的时间表从适应大学课程时间表改为固定时间表。结果如下:他们的乘客量增加了惊人的 18%。可以肯定,我今年夏天正在参与该项目的学生们很快将绘制因果图并编写概率,看起来像:

P ( r i d e r s h i p | do color coded routes , do fixed schedules ) .

一台机器如果擅长发现模式并采取行动,就像蜥蜴观察一只昆虫飞来飞去,学习它的模式,然后捕捉并吃掉它,那么它的智力水平就与一台能够在两个比简单模式检测更高层次上推理的机器有很大不同:

  1. 如果我故意采取这个行动,[在此插入变量]会发生什么?

  2. 如果我不采取这个行动,[变量取某个值]是否仍然会发生? 如果哈里森堡市没有转向彩色编码路线和固定时间表,乘客量是否仍然会增加?如果只有这两个变量中的一个改变而不是两者同时改变呢?

单凭数据无法回答这些问题。事实上,精心构建的因果图帮助我们区分何时可以仅凭数据回答上述问题,以及何时无论我们收集多少数据都无法回答这些问题。直到我们的机器被赋予代表因果推理的图表之前,我们的机器的智力水平与蜥蜴相同。令人惊讶的是,人类可以即时进行所有这些计算,尽管很多时候会得出错误的结论,并且几十年来争论起因和结果。我们仍然需要数学和图表来解决问题。事实上,图表指导我们,告诉我们必须寻找和收集哪些数据,对哪些变量进行条件设置,以及对哪些变量应用 do 运算符。这种有意识的设计和推理与积累大量数据或毫无目的地对各种变量进行条件设置的文化非常不同。

现在我们知道这一点,我们可以绘制图表和设计模型,帮助我们解决各种因果问题:我是因为医生的治疗而康复,还是因为时间过去了,生活平静下来了?我们仍然需要收集和整理数据,但这个过程现在将是有意识和有指导性的。一个具有这些推理方式的机器:一个因果图模型,以及与因果图模型配套的(非常简短的)有效操作列表,将能够回答所有三个层面的因果问题:

  • 变量 A 和 B 是否相关?乘客量和公交路线的标记是否相关?

  • 如果我将变量 A 设置为特定值,变量 B 会如何变化?如果我故意设置颜色编码的路线,乘客量会增加吗?

  • 如果变量 A 没有取某个值,变量 B 会发生变化吗?如果我没有改变颜色编码的公交路线,乘客量是否仍然会增加?

我们仍然需要学习如何处理涉及do运算符的概率表达式。我们已经确定看到和做不是一回事:看到是在数据中,而是有意地进行实验来评估某个变量对另一个变量的因果效应。这比仅仅计算数据中看到的比例更昂贵。Pearl 建立了三条关于操纵涉及do运算符的概率表达式的规则。这些规则帮助我们从涉及的表达式转移到仅涉及看到的表达式,从中我们可以从数据中得到答案。这些规则很有价值,因为它们使我们能够通过看到来量化因果效应,绕过。我们将在第十一章中详细介绍这些内容。

图论简史

我们不能在没有对图论和该领域当前状态进行良好概述的情况下结束本章。这个领域建立在如此简单的基础上,但它是美丽的、刺激的,并且具有广泛的应用,这使我重新评估了我的整个数学职业道路并试图迅速转变。

图论的词汇包括:图、节点、边、度、连通性、树、生成树、回路、基本回路、图的向量空间、秩和零度(类似于线性代数)、对偶、路径、行走、欧拉线、哈密顿回路、切割、网络流、遍历、着色、枚举、链接和脆弱性。

图论发展的时间线是启发性的,它的根源在于交通系统、地图和地理、电路和化学中的分子结构:

  • 1736 年,欧拉发表了图论的第一篇论文,解决了Königsberg 桥问题。然后在这个领域里一百多年没有发生任何事情。

  • 1847 年,基希霍夫在研究电网络时发展了树的理论。

  • 不久之后,在 1850 年代,凯利在尝试列举饱和烃异构体时发现了树。亚瑟·凯利(1821-1895)是图论的奠基人之一。无论何时涉及图数据,我们都会看到他的名字。最近,CayleyNet 使用称为凯利多项式的复有理函数,用于图数据的深度学习的谱域方法。

  • 在同一时间段内,1850 年,威廉·汉密尔顿爵士发明了成为汉密尔顿回路基础的游戏,并在都柏林出售:我们有一个木制的正多面体,有 12 个面和 20 个角,每个面都是一个正五边形,每个角有三条边相交。20 个角上有 20 个城市的名字,如伦敦、罗马、纽约、孟买、德里、巴黎等。我们必须找到一条路径沿着多面体的边,确保每个城市只经过一次(汉密尔顿回路)。这个特定问题的解决方案很容易,但到目前为止,我们还没有任意图中存在这样一条路径的必要和充分条件。

  • 在同一时间段内,莫比乌斯(1840 年代)在一次讲座中,德摩根(1850 年代)的一封信,以及凯利在皇家地理学会第一卷会议记录(1879 年)中的一篇文章中,图论中最著名的问题(在 1970 年解决),即四色定理,开始引起人们的关注。自那时以来,这一问题一直困扰着许多数学家,导致了许多有趣的发现。四色定理指出,四种颜色足以为平面上的任何地图着色,使具有共同边界的国家使用不同的颜色。有趣的是,如果我们通过离开平面,例如到球面的表面,为自己提供更多的空间,那么我们确实可以找到这个猜想的解决方案。

  • 不幸的是,接下来的 70 年左右没有发生任何事情,直到 20 世纪 20 年代,König 写了第一本关于这个主题的书,并于 1936 年出版。

  • 随着计算机的出现和它们越来越能够探索组合性质的大问题,情况发生了变化。这激发了纯粹和应用图论的激烈活动。现在有成千上万篇论文和数十本书籍涉及这一主题,重要的贡献者包括克劳德·贝尔热、奥斯坦·奥尔、保罗·埃尔德什、威廉·图特和弗兰克·哈拉里。

图论的主要考虑因素

让我们组织图论的主要主题,力求以鸟瞰的方式进行总览,而不深入细节:

生成树和最短生成树

这些都非常重要,并且在网络路由协议、最短路径算法和搜索算法中使用。图的生成树是一个子图,是一棵树(任意两个顶点可以使用唯一路径连接),包括图的所有顶点。也就是说,生成树将图的顶点保持在一起。同一个图可以有许多生成树。

割集和割点

我们可以通过切割足够多的边或者有时移除足够多的顶点,将任何连通图分开,使其断开连接。如果我们能够在给定的图中找到这些切割集合,比如在通信网络、电网、交通网络或其他网络中,我们可以切断其断开连接部分之间的所有通信方式。通常我们对最小或最小切割集感兴趣,这将通过移除最少数量的边或顶点来完成断开图的任务。这有助于我们识别网络中的最薄弱环节。与生成树相反,切割集将顶点分开,而不是将它们全部保持在一起。因此,我们可以合理地期望生成树和切割集之间存在密切关系。此外,如果图表示具有某种来源(如流体、交通、电力或信息)和汇点的网络,并且每条边只允许通过一定数量的流量,那么源到汇的最大流量与切割图的边之间存在密切关系,切割将源与汇断开,切割边的总容量最小。这就是最大流最小切割定理,它表明在流网络中,从源到汇的最大流量等于最小切割中边的总权重。在数学中,当最大化问题(最大流)以一种非平凡的方式等同于最小化问题(最小切割)时(例如不仅仅是改变目标函数的符号),这表明存在对偶性。事实上,图的最大流最小切割定理是线性优化对偶定理的一个特例。

平面性

图的几何表示是平面的还是三维的?也就是说,我们能否在同一平面上绘制图的顶点并连接其边,而不让边相互交叉?这对于技术应用如复杂系统的自动布线、印刷电路和大规模集成电路非常有趣。对于非平面图,我们对这些图的厚度和边之间的交叉数量等属性感兴趣。对于平面图的等价条件是存在对偶图,在图的向量空间的背景下,图与其对偶之间的关系变得清晰。线性代数和图论在这里相结合,代数和组合表示回答了关于几何图形的问题,反之亦然。对于平面性问题,我们只需要考虑所有顶点的度数均为三或更高的简单、不可分离图。此外,任何边数大于其顶点数减去六的三倍的图都是非平面的。在这个研究领域中有许多未解决的问题。

图作为向量空间

重要的是要理解图既作为几何对象又作为代数对象,以及两种表示之间的对应关系。这对于图来说是成立的。每个图对应于整数模 2 的一个e维向量空间,其中e是图的边数。因此,如果图只有三条边e d g e 1 , e d g e 2 , e d g e 3,那么它对应于包含向量的三维向量空间( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 1 , 1 , 0 ) , ( 1 , 0 , 1 ) , ( 0 , 1 , 1 ) , ( 0 , 0 , 1 ) , ( 1 , 1 , 1 )。这里( 0 , 0 , 0 )对应于不包含这三条边的空子图,( 1 , 1 , 1 )对应于包含所有三条边的完整图,( 0 , 1 , 1 )对应于只包含e d g e 2的子图,以及e d g e 3,等等。

整数模 2 的领域

整数模 2 的领域只包含两个元素 0 和 1,加法和×运算都是模 2 进行的。实际上,这等同于布尔逻辑中的异或(异或运算符)和操作。向量空间必须在一个领域上定义,并且必须对该领域的标量的向量乘法封闭。在这种情况下,标量只有 0 和 1,乘法是模 2 进行的。因此,图是有限域上向量空间的良好示例,这与通常的实数或复数不同。图的向量空间的维数是图的边数e,这个向量空间中的向量总数是 2^(e)。我们可以看到图论如何立即适用于开关电路(带有开关和关闭开关)、数字系统和信号,因为它们都在整数模 2 的领域中运行。

通过这种简单的对应关系,并倚靠整个线性代数领域,自然而然地尝试理解切割集、回路、基本回路、生成树以及其他重要的图子结构,以及它们之间的关系,这些都是在向量子空间、基、交点、正交性以及这些子空间的维度的背景下进行的。

可实现性

我们已经使用邻接矩阵和关联矩阵作为完全描述图的矩阵表示。其他矩阵描述了图的重要特征,比如回路矩阵、割集矩阵和路径矩阵。然后当然相关研究必须涉及这些矩阵之间以及它们之间的相互关系和交互。

另一个非常重要的主题是可实现性:给定矩阵必须满足什么条件,以便它是某个图的回路矩阵?

着色和匹配

在许多情况下,我们有兴趣为图的节点、边缘甚至平面图中的区域分配标签或颜色。著名的图着色问题是指我们要为每个节点分配的颜色是这样的,即相邻的顶点不会得到相同的颜色,而且我们希望使用最少的颜色来实现这一点。着色图所需的最少颜色数称为其色数。与着色相关的主题包括节点分区、覆盖和色多项式。

匹配是一组边,使得任意两条边都不相邻。最大匹配是一组边的最大集合,其中任意两条边都不相邻。在一般图和二部图中的匹配有许多应用,比如匹配最小的一组课程以满足毕业要求,或者匹配工作分配给员工的偏好(这最终成为一个最大流最小割问题)。我们可以使用基于随机游走的算法来在大型二部图上找到完美匹配。

枚举

1857 年,Cayley 对饱和烃异构体C n H 2n+2的数量进行了计数,这使他开始计算具有 n 个节点的不同树的数量,并为他在图论方面的贡献。有许多类型的图需要枚举,许多都有自己的研究论文。例如,枚举所有根树、简单图、简单有向图以及具有特定属性的其他图。枚举是图论中的一个重要领域。一个重要的枚举技术是 Pólya 计数定理,其中需要找到一个适当的置换群,然后获得其循环指数,这是非平凡的。

图的算法和计算方面

对于任何从事图模型工作的人来说,算法和计算机实现具有巨大的价值。存在用于传统图论任务的算法,例如:

  • 找出图是否可分。

  • 找出图是否连通。

  • 找出图的组件。

  • 寻找图的生成树。

  • 找到一组基本回路。

  • 找到割集。

  • 从给定节点到另一个节点找到最短路径。

  • 测试图是否是平面的。

  • 构建具有特定属性的图。

如今,图神经网络已经有了自己的开源软件包。对于任何算法来说,要想实际应用,它必须是高效的:其运行时间不能随着图的节点数量的增加而阶乘甚至指数增长。它应该是多项式时间,与n k成正比,其中k最好是一个较低的数字。

对于希望进入图模型领域的任何人来说,熟悉图的理论和计算方面是非常有用的。

总结和展望

这一章节总结了图形建模的各个方面,重点放在示例、应用和直觉上。对于希望深入了解的读者,有许多参考资料。主要信息是不要在没有目标或对大局、领域当前状态以及与人工智能的关系的理解的情况下迷失在细节中(而这些细节非常复杂)。

我们还介绍了图上的随机游走、贝叶斯网络和概率因果模型,这进一步引导我们的大脑朝着概率思维的方向发展,这也是第十一章的主题。在进入关于概率的数学章节之前,我一直打算讨论人工智能中概率的各种用途。

我们结束这一章节时推荐阅读这篇文章:《关系归纳偏差、深度学习和图网络》,该文章提出了深度学习社区应采用图网络的理由:我们提出了一种具有强关系归纳偏差的人工智能工具包的新构建模块——图网络,它推广和扩展了各种在图上操作的神经网络方法,并提供了一个直观的界面来操作结构化知识和产生结构化行为。我们讨论了图网络如何支持关系推理和组合泛化,为更复杂、可解释和灵活的推理模式奠定了基础。