本章阅读材料链接为 CS231n Convolutional Neural Networks for Visual Recognition

# 线性分类

​ 在上一节中,我们介绍了图像分类问题,即从一组固定类别中为图像分配单个标签的任务。此外,我们描述了 k 最近邻 (kNN) 分类器,它通过将图像与训练集中的(带注释的)图像进行比较来标记图像。正如我们所见,kNN 有许多缺点:

  • 分类器必须记住所有训练数据并将其存储以供将来与测试数据进行比较。这是空间效率低下的,因为数据集的大小很可能达到千兆字节。

  • 对测试图像进行分类的成本很高,因为它需要与所有训练图像进行比较。

摘要:我们现在将开发一种更强大的图像分类方法,最终将自然地扩展到整个神经网络和卷积神经网络。该方法将有两个主要组成部分:将原始数据映射到类别分数的分数函数,以及量化预测分数和真实标签之间的一致性的损失函数。然后,我们将其视为一个优化问题,其中我们将相对于得分函数的参数最小化损失函数。

# 1. 从图像到标签分数的参数化映射

​ 首先我们定义一个评价函数,用于将图片的像素映射为每一类别的得分,具体来说假设我们有一个训练集,其中的每个样本xiRDx_i \in R^D 每个样本对应一个标签 yi,这里的 i=1...N, 并且yi1Ky_i \in { 1 \dots K }, 即表示有 N 个样本 (每个样本都有一个维度 D) 和 K 个不同的类别,例如在 CIFAR-10 中我们有一个训练集 N=50000,每个图像都有 32×32×3=3072 个像素,K=10,因为有 10 个不同的类别,故我们需要定义一个评估函数 f:f:RDRKf: R^D \mapsto R^K,即将原始图像像素映射到类别分数。

** 线性分类:** 我们以最简单的线性分类器为例,即我们定义评估函数为 (这里的 × 为矩阵的乘):

f(xi,W,b)=Wxi+bf(x_i, W, b) = W x_i + b

在上述方程中,我们假设图像 Xi,将其所有像素平展为形状为 [D×1] 的单列向量。矩阵 W(大小 [KxD])和向量 b(大小 [kx1])是函数的参数。在 CIFAR-10 中,xi 包含第 i 个图像中的所有像素,这些像素被展平为单个 [3072 x 1] 列,W 是 [10 x 3072],b 是 [10×1],因此 3072 个数字进入函数(原始像素值),10 个数字出来(类得分)。W 中的参数通常被称为权重,b 被称为偏差向量,因为它影响输出分数,但不与实际数据 xi 交互。然而,您经常会听到人们交替使用权重和参数这两个术语。

概念解释

  1. W:权重矩阵
  • 定义:W 是一个矩阵,通常被称为权重矩阵,它的大小为 [K x D],其中 K 是类别的数量,D 是输入特征的维度(对于图像数据,D 通常是像素数量)。
  • 作用:W 矩阵中的每一行对应一个类别,每一列对应一个输入特征。它用于将输入特征向量映射到类别得分。
  1. b:偏置向量
    • 定义:b 是一个向量,大小为 [K x 1],即它有 K 个元素,每个元素对应一个类别。
    • ** 作用:**b 是偏置向量,它在最终的分类得分中起到偏移作用,不与输入特征直接相乘。它的作用是调整模型的输出,使其更好地拟合训练数据。
  2. xi (输入特征向量)
    • 定义:xi 是输入数据的特征向量,大小为 [D x 1],即它有 D 个元素。
    • 作用:对于每个输入样本 xi,它包含了所有的特征(例如图像中的所有像素值)。
  3. WxiWx_i (线性变换)
    • 定义WxiWx_i (表示将权重矩阵 W 与输入特征向量 xi 进行矩阵乘法,得到一个新的向量,该向量大小为 [K x 1]。
    • 作用:这个向量包含了每个类别的线性组合得分。矩阵乘法的结果是将输入特征向量投影到类别得分空间中。

有几点需要注意:

  • 首先,请注意,单矩阵乘法WxiW x_i 有效地并行评估 10 个单独的分类器(每个类一个),其中每个分类器是一行 W。
  • 还要注意,我们认为输入数据(xi,yi)(x_i, y_i) 是给定的和固定的,但我们可以控制参数 W,b 的设置。我们的目标是以这样的方式设置这些参数,即计算出的分数与整个训练集的地面实况标签相匹配。我们将更详细地介绍如何做到这一点,但凭直觉,我们希望正确的类的分数高于不正确类的分数。
  • 这种方法的优点是使用训练数据来学习参数 W、b,但一旦学习完成,我们就可以丢弃整个训练集,只保留学习的参数。这是因为新的测试图像可以简单地通过函数转发,并基于计算出的分数进行分类。
  • 最后,请注意,对测试图像进行分类涉及单个矩阵的乘法和加法,这比将测试图像与所有训练图像进行比较要快得多。
  • 最后,哪个分类器的评估分数最大,说明该图片最有可能是那个类

# 1.1 对线性分类的直观理解

5

如下图就是线性分类器的工作过程,对于一张图片,假设是个黑白的 2×2 的图片,我们首先将其展开成一个 4×1 的列向量。假设我们一共有三个类比(猫,狗,船),下图中红色的表示识别猫的分类器,绿色的表示识别狗的分类器,蓝色表示识别船的分类器,三个分类器的参数堆叠在一起组成了评估函数的参数矩阵。将参数矩阵与原始数据相乘并加上对应的偏置项,得到每个分类器的得分,可以看到猫的得分为 -96.8,狗的得分为 437.9,这说明,分类器认为这张图片最可能是只狗,最不可能是只猫,对于图中的例子,这无疑是个很不好的结果(因为输入图片是一只猫)。

4

从上述例子我们可以看出,线性分类器首先将一个 RGB 通道的图片的每个位置的像素进行加权后求和,将求和后的值作为该分类器所属类别的分数(分数最高的分类器所属的类别作为这张图片的预测类别)。** 那么线性分类器的原理是什么呢?** 评估函数通过调整参数,使得其有能力倾向于或者不倾向于图片某个位置的某个颜色。举例来说,对于一张船的图片,图片的周围很可能有很多的蓝色(表示在大海中),那么对于船的分类器就可能对图片四周位置的蓝色通道的权重设置成一个正数,而对相同位置的红色通道和绿色通道的权重设置成一个负数,这样对于某张图,如果满足图片四周位置的蓝色通道的数值大,而其他通道数值小(在图片中表现为四周为蓝色),那么它的评估得分也就会高。

# 1.2 对线性分类的几何理解

运用线性分类器后,我们将每张图片都转变成了一个 K 维的向量,那么我们可以将其看成 K 维空间中的一个点,同样,对于原来的图片,也可以看成高维空间中的一个点(比如 CIFAR-10 数据集中的每个图片可以看成 3072 维空间中的一个点)。由于我们定义每个类别得分为某张图片所有像素的加权和,所有每个类别的得分其实可以看成这个高维空间中的一个超平面,虽然无法可视化高维空间,但是如果将高维空间降维至二维,我们可以尝试可视化每个分类器在做什么:

6

如上图所示,有三根直线分别代表汽车分类器、鹿分类器、飞机分类器,以红色的汽车分类器为例,如果某个点刚好在线上,则汽车种类的得分为 0,红色线上的箭头表示在这个方向上汽车得分为正,在反方向则为负。由此我们可以得出,评估函数中的 W 每一行代表一个分类器,而一个分类器在高维空间中就是一个划分空间的超平面,所以 W 中的每一行就代表一个分类器所对应超平面在空间中的方向,改变 W 的值的效果就是旋转这个超平面。而偏置项 b 其实就是超平面的截距,代表超平面在高维空间中的位置,如果没有偏置项,那么超平面只能过高维坐标系的原点。

# 摸匹配角度理解

对于参数 W 还有一种解释:对于每一行的 W,其代表了某一类别的模板,当预测图片时,我们将图片分别与每个类别的模板做内积,得到每个类别的评估得分,得分最高的类别作为预测结果。所以,线性分类器其实就是在做模板匹配的过程,而这些模板是从训练集中的图片训练得到的。另外还有一种理解角度,可以把线性分类器看成一种更高效的 KNN 算法。只是区别在于它不用和 KNN 一样存下整个训练集,而是将训练集浓缩成一个模板图片 W,并且将内积作为距离函数,而不是 KNN 中的 L1 和 L2 距离。

如下图是使用 CIFAR-10 作为训练集训练得到的分类器,从 W 得到每个种类分类器的可视化结果:

7