



为了更好地呈现思路,让我们以一个用于判断图像中是否包含汽车或长颈鹿的分类器为例。这种只涉及两个类别的分类器称为二元分类器。首先,我们需要确定输入信息的表示方法。
对汽车和长颈鹿进行分类的场景属于视觉场景分析的一种特殊情况。输入信息是投影到二维平面上的三维场景中各个点的亮度水平。图像中的每个元素代表实际场景中的一个点,称为 像素 。图像是一个二维数组(可以被视为一个矩阵),表示在某一时刻所有像素值的集合,通常被缩放到一个固定的尺寸,比如,一幅224×224像素的图像,可以表示为如下矩阵:
矩阵中的每个元素 X i , j ,是一个像素颜色值,取值范围为[0,255]。
图像栅格化
在前面的章节中,通常将向量作为机器学习系统的输入,这使得我们能够将输入视为高维空间中的一个点,从而更深入地了解分类的几何意义。但在这里,我们的输入是一幅图像,它更像一个矩阵而非一个向量。那么,能否将图像(矩阵)表示为向量?
答案是肯定的。通过一个称为
栅格化
(rasterization)的过程,任何矩阵都可以转换为向量
。在栅格化过程中,我们从左到右、从上到下遍历矩阵的每个元素,并且将这些元素连续地存储到一个向量中,从而得到一个栅格化的向量。该向量的元素与原始矩阵相同,但排列方式不同。栅格化向量的长度等于矩阵的行数与列数的乘积。前面提到的矩阵
X
的栅格化向量具有224×224=50176个元素,表示为
其中
是图像像素的值。因此,一个具有224×224个像素的输入图像可以被视为50176维空间中的一个向量(可以等价为一个点)。
通过栅格化,我们可以将输入图像转换为向量。每个向量都可以被视为高维空间中的一个点。但是对于任意给定对象或类别(比如长颈鹿或汽车)的点,它们并不是随机分布在整个空间中,而是在输入的高维空间中占据了一小部分(子空间)。这是因为同一类别的成员之间总是具有一些内在的共性。例如,所有的长颈鹿的颜色都是黄色带一些黑色斑纹,汽车都具有某种相对固定的形状。这使得包含相同对象的图像在像素值上会具有某种程度的相似性。总的来说,这意味着属于同一类别的点大致形成了一个簇。
注 :从几何角度讲,分类器是超曲面,它将需要识别的各类别点簇分隔开来。这个超曲面构成了 决策边界 ,通过观察某个特定点位于曲面的哪一侧来判断该点所属的类别。
图3.1a展示了一个用于长颈鹿和汽车分类问题的栅格化空间示例。其中,对应于长颈鹿的点标记为g,对应于汽车的点标记为c。在这个简单的示例中,将汽车对应的点簇和长颈鹿对应的点簇分隔开的分类器曲面(即决策边界)是一个超平面,如图3.1a所示。
注 :在超过三维的高维空间中,我们通常将曲面称为超曲面,将平面称为 超平面 。
图3.1b展示了一个更加复杂的例子:对马与斑马的图像进行分类。图中标记为h的点代表马,标记为z的点代表斑马。在这个例子中,我们需要一个非线性(弯曲)的表面(如超球面)来分隔这两个类别。
图3.1 分类问题的几何描述。在多维输入空间中,每个数据实例对应一个点。在图3.1a中,标记为c的点代表汽车,标记为g的点代表长颈鹿,这些点形成了相对明显的簇,因此分类可以通过一个相对简单的表面,即超平面来完成。超平面的具体参数,包括方向和位置,是通过训练确定的。在图3.1b中,标记为h的点代表马,标记为z的点代表斑马。这种情况稍微复杂一些:分类必须通过一个弯曲(非平面)的表面(即超球面)来完成。超球面的参数,即半径和中心位置,也是通过训练来确定的
遗憾的是,在许多典型的场景中,我们并不能预先知道这个分类曲面。事实上,我们甚至不知道哪些点属于我们感兴趣的类别。我们所知道的只是一组输入样本
x
i
(训练输入)及其对应的类别
(基准真值)。所有的训练输入和基准真值构成了训练数据集
(
i
的值可能非常大)。当我们想教一个婴儿识别汽车时,我们会向婴儿展示几辆汽车的示例,并告诉他:“这是一辆汽车。”对于神经网络而言,训练数据扮演的就是这个角色。
我们的目标是根据这个训练数据集
,识别出一个足够好的分类曲面的近似模型:当遇到一个随机场景时,我们可以将它映射到一个输入点
x
,通过检查该点位于曲面的哪一侧,来确定它对应的类别(如汽车或长颈鹿)。这个曲面构成了不同目标类别之间的决策边界,而开发这个最佳猜测曲面的过程被称为分类器建模。
注
:训练图像
x
i
的基准真值
往往需要人工创建,这是机器学习过程中最烦琐的环节之一。目前有大量的研究工作正致力于减轻这一负担。
如1.3节所述,建模包含两个步骤:
1.模型架构选择:选取参数化模型函数 ϕ ( x ; w , b ),该函数接收输入向量 x 并输出类别 y 。它有一组初始未知的参数,即 w , b 。该函数通常从一系列经过验证的已知函数库中选取。对于简单问题,我们可能会选择线性模型,而对于较复杂的问题,则可以选择非线性模型。模型的设计者需要基于他们对问题的理解来做出选择。注意,在这一步骤中,参数仍然是未知的——我们只是确定了模型的函数形式。
2.模型训练:我们需要估计参数
w
,
b
的值,以使
ϕ
在训练数据上产生的输出(尽可能地)接近已知的输出。这通常需要一个迭代过程来完成。对于每个训练数据实例
x
i
,我们计算输出
y
i
=
ϕ
(
x
i
;
w
,
b
),并且将该输出与相应的已知输出
进行比较。它们之间的差
称为训练误差。所有训练数据的训练误差之和即为总训练误差。通过迭代地调整参数
w
,
b
,来使总训练误差持续下降。这意味着在每次迭代中,对于所有的
i
,调整模型参数后输出的
y
i
都更接近目标输出
。如何调整参数以减少误差,则构成了本章的主要内容,我们将在3.3节中详细介绍。
函数 ϕ ( x ; w , b )表示决策边界的超曲面。例如,在图3.1所示的二元分类问题中, ϕ ( x ; w , b )可能表示一个平面(由虚线标识)。平面一侧的点被分类为汽车,而另一侧的点则被分类为长颈鹿。这里,
ϕ( x ; w ,b)= w T x +b
由式(2.14)知,这个方程代表一个平面。
在图3.1b中,平面分隔的方法已经不再适用——我们需要一个非线性分类器,例如,图中虚线所示的球形分类器。此时,
图3.2 现实生活中的问题,其中,分类曲面通常并不是众所周知的标准形状,如平面或球面。此外,分类也往往是不完美的——一些点被分类到了错误的一侧
这个方程代表一个球体。
需要注意的是,在典型的现实生活情景中,分类曲面并不总是已知的几何曲面(见图3.2)。但在本章中,我们将继续使用简单的例子来阐释这些基本概念。
对于二元分类器这类特殊情况,决策边界的表达式 ϕ ( x ; w , b )的符号具有特殊的含义。为了理解这一点,我们考虑二维平面上的一条直线,它对应于以下方程:
y+ 2 x+ 1 = 0
该直线上所有点的 x , y 坐标值都满足这个方程。这条线将二维平面分成两个半平面。其中一个半平面上的所有点的 x , y 坐标值使得 y +2 x +1为负数,另一个半平面上的所有点的 x , y 坐标值使得 y +2 x +1为正数,如图3.3所示。这一概念可以推广到其他类型的曲面和更高的维度。因此,在二元分类中,一旦我们估计出一个最优的决策曲面 ϕ ( x ; w , b ),给定任意输入向量 x ,我们就可以通过计算 ϕ ( x ; w , b )的符号来预测类别。
图3.3 给定一个点( x 0 , y 0 )和一条分隔线 y +2 x +1=0,我们可以通过 y 0 +2 x 0 +1的符号来判断该点位于分隔线的哪一侧