你可以按任何顺序阅读“人工智能算法”系列图书,但是,本书确实扩展了卷1中介绍的某些主题。接下来将回顾这些主题。

向量本质上就是一维数组。请注意,不要将向量的“维度”概念与待求解问题的“维度”概念相混淆,即使待求解的问题有10个输入通道,它也依然是一个向量——向量始终是一维数组,10个输入通道则会被存储为一个长度为10的向量。

在人工智能算法中,向量通常用来存储某个具体实例的数据。该特定实例可能是位置、客户的统计信息、工厂的测量结果,甚至是神经网络的权重——所有这些数据都取决于你要解决的问题。现实世界中的“距离”概念在此也得到了很好的体现。一张纸上的某个点就具有xy两个维度,同样,三维空间中的一个点则具有xyz三个维度。二维空间中的一个点可以被存储为长度为2的向量,相应地,三维空间中的一个点也可以被存储为长度为3的向量。

我们的宇宙由3个可感知的维度构成——虽说“时间”有时被称作“第四维”,但这实际上是一种人云亦云的说法,并不意味着“时间”真的是一个实实在在的维度,至少我们只能感受到前3个维度。由于人类无法感知更高的维度,因此要理解高于三维的空间是极为困难的——只是稍有些不巧的是,在人工智能算法中,经常需要用到极高维度的向量空间。

由于AI经常使用鸢尾花数据集(iris data set)[1] ,因此你会在本书中多次看到它。它包含150种鸢尾花的测量值和物种信息,并且数据基本上表示为带有以下列(或特征)的电子表格:

  • 萼片长度;
  • 萼片宽度;
  • 花瓣长度;
  • 花瓣宽度;
  • 鸢尾花种属。

“花瓣”是指鸢尾花的最里面的花瓣,而“萼片”是指鸢尾花的最外面的花瓣。你可能会把这个数据集想成是长度为5的向量,然而实际上“种属”这一特性与其余4种属性的处理方式并不相同。因为向量通常只含有数字,而前4种特性本身就是数字量,“种属”却不是。

此数据集的主要应用之一是创建一个程序作为分类器。也就是说,它将花朵的特征作为输入(萼片长度、花瓣宽度等),并最终确定种类。对于完整的已知数据集,这种分类程序将是微不足道的,但是我们的目标是使用未知鸢尾花的数据来查看模型是否可以正确识别物种。

单纯的数字编码只能将鸢尾花种属转换为一维的量,因此我们必须使用像突显编码法、等边编码法这样可以添加额外维度的编码方法,以使各个种属编码结果间距相等。毕竟在分类鸢尾花的时候,我们并不希望由于编码方式而出现什么偏差。

把鸢尾花的各项特征视作高维空间中的各个维度这一想法意义极为重大,如此一来就可以把各个样本(即鸢尾花数据集中的各行)视作这个高维搜索空间中的点,相邻的点也就具有相似的特征。下面以鸢尾花数据集中的3行数据为例,我们来看看这些相似之处:

5.1,3.5,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica

第一行显示萼片长度为5.1、萼片宽度为3.5、花瓣长度为1.4、花瓣宽度为0.2。如果我们对0~1的范围使用突显编码法编码,则以上3行将编码为以下3个向量:

[5.1,3.5,1.4,0.2,1,0,0]
[7.0,3.2,4.7,1.4,0,1,0]
[6.3,3.3,6.0,2.5,0,0,1]

卷1中讨论的等边编码法是物种另一种可能的编码方式。现在你已经拥有向量形式的数据,可以计算任何两个数据项之间的距离。接下来将描述几种不同的方法,用来计算两个向量之间的距离。

根据勾股定理发展出来的欧氏距离测量基于两个向量之间的实际二维距离。换句话说,如果你绘制向量并用直尺对其进行测量,则两点之间的距离就是欧氏距离。具体来说,如果你有两个点(x_{1}, y_{1})(x_{2}, y_{2}),那么通过公式1描述两点之间的距离。

d=\sqrt{\left(x_{2}-x_{1}\right)^{2}+\left(y_{2}-y_{1}\right)^{2}}  (1)

图1展示了两点之间的二维欧式距离。

H:\20200205\2020年11月电子书\54431\PB54431-0101\QZ-web-resources\image\0002.jpg

图1 二维欧氏距离

公式1足以比较两个长度为2的向量。但是,大多数向量的长度大于2。要计算任意长度的向量的欧氏距离,请使用欧氏距离方程的一般形式。

机器学习通常利用欧氏距离测量,因为这是比较元素数量相同的两个数字向量的快速方法。考虑3个向量,分别为向量\boldsymbol{a}、向量\boldsymbol{b}和向量\boldsymbol{c},向量\boldsymbol{a}与向量\boldsymbol{b}之间的欧氏距离为10,向量\boldsymbol{a}与向量\boldsymbol{c}之间的欧氏距离为20。在这种情况下,向量\boldsymbol{a}的内容更匹配向量\boldsymbol{b},而不是向量\boldsymbol{c}

公式2展示了Deza(2009)提供的用于计算欧氏距离的公式。

d(\boldsymbol{p}, \boldsymbol{q})=d(\boldsymbol{q}, \boldsymbol{p})=\sqrt{\sum_{i=1}^{n}\left(\boldsymbol{q}_{i}-\boldsymbol{p}_{i}\right)^{2}}  (2)

公式2展示了两个向量\boldsymbol{p}\boldsymbol{q}之间的欧氏距离d。它还指出d\boldsymbol{(p,q)}d\boldsymbol{(q,p)}相同。换句话说,无论哪一端是起点,距离都是相同的。计算欧氏距离只需要对每个数组元素之差的平方求和,然后找到该和的平方根,该平方根就是欧氏距离。

下面以伪代码的形式展示公式2。

sub euclidean(position1, position2):
  sum = 0
  for i from 0 to len(position1) -1:
    d = position1[i] - position2[i]
    sum = sum + d * d;
  return sqrt(sum);

人工智能使用模型来接收输入向量并产生正确的输出,从而使模型能够识别该输入。例如,你可能会针对鸢尾花数据集中的4个测量值提供输入,并期望输出鸢尾花的种属。在本节中,我们将介绍一个径向基函数(Radial-Basis Function,RBF)网络[2],该网络是用于回归和分类的模型。回归模型返回数值,而分类模型返回一个非数值,例如鸢尾花种属。

为了使输入生成正确的输出,RBF网络使用了一个参数向量,即一个指定权重和系数的模型。通过调整一个随机的参数向量,RBF网络产生与鸢尾花数据集一致的输出。调整参数向量以产生所需输出的过程称为训练。有许多用于训练RBF网络的方法。参数向量也代表它的长期记忆。

下面将简要回顾径向基函数的概念,并描述这些向量的确切组成。

径向基函数是人工智能领域一个非常重要的概念,因为很多人工智能算法都需要用到这种技术。径向基函数关于其在x轴上的中点对称,并在中点处达到最大值,这一最大值称作“峰值”,且峰值一般为1。实际上在径向基函数网络中,峰值总是1,中点则视情况而定。

径向基函数可以是多维的,但无论输入向量是多少维的,输出总是一个标量值。

有很多常见的径向基函数,其中最常用的就是“高斯函数”。图2就是以0为中心的一维高斯函数的图像。

H:\20200205\2020年11月电子书\54431\PB54431-0101\QZ-web-resources\image\0003.jpg

图2 高斯函数

你可能会将上述曲线识别为正态分布或钟形曲线,其实这是一个径向基函数。径向基函数通常被用于选择性地放缩数据,高斯函数也不例外。以图2为例,如果用这个函数来放缩数据,则中心点处放缩幅值最大,越往x轴正负方向移动,放缩幅值越小。

在给出高斯径向基函数的公式之前,先要研究一下多维的情况如何处理。需要注意的是,径向基函数的输入是多维数据,返回的则是一个标量值——这是通过计算径向基函数的输入向量和中心向量之间的距离实现的,其中“距离”记为r。当然,要使计算能够进行,输入向量和中心向量维数必须相同。只要计算出了这个斜体文字r,接下来就可以计算出对应的径向基函数值了——所有的径向基函数都要用到这个计算出的“距离”r

公式3即为r的计算公式:

r = ||\boldsymbol{x}-\boldsymbol{x}_{i}||   (3)

公式3中双竖线的符号表示计算的是“距离”。欧氏距离是径向基函数中最常用的距离概念,但在特殊情况下,也有可能使用其他的距离概念——本书中的示例均使用欧氏距离。因此本书中的r指的就是输入向量\boldsymbol{x}和中心向量\boldsymbol{x}_{i}之间的欧氏距离,本节所有径向基函数中的“距离”r均由公式3计算得出。

高斯径向基函数的公式如公式4所示:

\phi(r)=\mathrm{e}^{-r^{2}}  (4)

只要计算出了r,计算径向基函数的值就很容易了,公式4中的希腊字母\phi一般用来表示“径向基函数”。公式4中的常数e表示欧拉数或自然常数,值大约为2.718 28。

径向基函数网络本质上就是一至多个径向基函数的加权求和,其中每个径向基函数均接受一个带权重的输入,从而对输出进行预测。可将径向基函数网络视为包含参数向量的一个长方程。公式5描述了一个径向基函数网络:

f(\boldsymbol{X})=\sum_{i=1}^{N} a_{i} p\left(\left\|b_{i} \boldsymbol{X}-\boldsymbol{c}_{i}\right\|\right)  (5)

注意,其中双竖线表示运算结果是“距离”,但并未规定计算距离的算法,也就是说选取哪种距离参与运算需要视情况而定。公式5中的\boldsymbol{X}指的是输入向量;c是径向基函数的中心向量;p是所选的径向基函数(比如高斯函数);a是每个径向基函数对应的系数,一般为向量形式,也称“权重”;b则是每个输入对应的权重系数。

下面以鸢尾花数据集为例,应用径向基函数网络,图3即为该网络的图形化表示。

图3所示的网络有4项输入(包括萼宽、萼长、瓣宽、瓣长),分别对应于描述鸢尾花种属的各项特征。为简单起见,图3中假定3个鸢尾花种属的编码方式为突显编码法;当然也可以用等边编码法,不过输出项就应该只有两个了。示例中需要选取3个径向基函数——这一选择没有什么限制条件,全凭个人喜好。增加径向基函数的数目能够使模型学习更加复杂的数据集,但也会耗费更多的时间。

H:\20200205\2020年11月电子书\54431\PB54431-0101\QZ-web-resources\image\00t3.jpg

图3 以鸢尾花数据集为输入的径向基函数网络

图3中的箭头代表公式5中全部的系数:输入和径向基函数之间的箭头表示的是公式5中的系数b;径向基函数和求和号之间的箭头则表示系数a。可能你也注意到了图3中的“偏置”框,这是人为添加的一个返回值总是1的函数;由于偏置函数的输出是一个常数,因此也就不需要输入了。偏置项到求和号之间的权重起着类似于线性回归中“截距”的作用,因此偏置的存在并不总是坏事儿,在本例中,偏置就是径向基函数网络的一个重要组成部分。在神经网络中,也经常会用到“偏置节点”。

从图3中有多个求和号可以看出,这是一个分类问题,几个求和运算的最大值所对应项即预测结果。而如果是一个回归问题,则输出应当只有一项,即为回归问题的预测结果。

你肯定注意到了图3中的偏置节点,其所在位置与径向基函数属同一层级,就像是另一个径向基函数,只不过不像径向基函数那样需要接受输入而已。这个偏置节点总是输出常数1,然后这个1再乘以对应的系数,就相当于无论输入是什么情况,都把对应系数直接加到了输出项中。尤其在输入为0的时候,偏置节点就会很有用,因为它使得即使输入为0,径向基函数层也依然有值可以输出。

径向基函数网络的长期记忆向量由如下几个不同的部分组成:

  • 输入系数;
  • 输出系数(求和系数);
  • 径向基函数放缩范围(在各维度上范围相同);
  • 径向基函数中心向量。

径向基函数网络把所有的元素保存为一个向量,这个向量即为该径向基函数网络的“长期记忆向量”。稍后我们会使用贪心随机训练算法或爬山算法来训练网络,以使其长期记忆向量的值达到能够根据提供的特征数据正确判断鸢尾花类别的程度。

这个模型的工作原理与公式5相差无几,仅有的不同在于该方程更加复杂,因为现在需要计算多个输出值以及径向基函数的函数值了。

以上是有关向量、距离和径向基函数网络的基本概述。由于这里的讨论仅包含理解卷2内容所需的预备知识,因此,要了解这些主题的更全面的解释,请参阅卷1。


[1] Fisher,1936。

[2] Bishop,1996。