cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

目录

1. 引言

2. Parameterized mapping from images to label scores

3. 线性分类器

4. 损失函数cost function

4.1 多类别SVM损失函数 Multiclass SVM Loss

4.1.1 正则化

4.1.2  Practical Considerations

4.2 Softmax Classifier

4.3 SVM vs. Softmax

5. Summary


博客:https://blog.csdn.net/KangRoger/article/details/52425480 

1. 引言

上节课讲了什么是图像分类,介绍了一种简单的监督算法KNN。KNN的在图像分类上的效果并不好,后续我们会介绍神经网络和卷积神经网络。神经网络的方法涉及到两个重要的组成:score function(评分函数)和loss function(损失函数)。

评分函数Score function:将原始数据映射成类别得分。

损失函数Loss function:评估预测的类别得分与真实标签之间的差异。

通过这两个函数,可以将分类问题转换为优化问题,即:求使损失函数取得最小值的score function的参数。

2. Parameterized mapping from images to label scores

定义:图像训练集cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax包含cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax张图片,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax表示代表第i张图片,且cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmaxcs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax代表图像的维度。cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,代表图片cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的类别。

以CITAR-10数据集为例,共包含cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax张图片,每张图片包含cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax像素,共有cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax个类别。

定义评分函数为:cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

3. 线性分类器

线性分类器的映射函数/表达式为:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax 公式(1)

其中cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax代表图像数据:由原始图像展开得到的一个cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的向量。矩阵cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax代表权重,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax表示偏置bias。

以CITAR-10为例:cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的是维度为cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的向量;cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax是维度为cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的矩阵;cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmaxcs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax维度的向量。

注意:

(1) cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax得到cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的列向量,每一行代表在对应类别上的score。

(2)机器学习的目的是为了找到一组参数cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,使得上面的函数对数据的评分尽可能与真实的标签值接近。

(3)训练结束后,可以丢弃训练数据,只需要保存参数值就可以进行预测。

(4)预测的速度很快,就是进行矩阵的相乘和相加。

线性分类器的解释:

线性分类器就是计算图像所有像素的加权和。

权重cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的每一行可以看做对应类的模板,每一类的打分就是图像和对应模板的乘积。

此外,还可以将线性分类器看成Nearest Neighbor(最近邻学习),即:为输入图像在给定的不同类别的模板中找到最相似的一个模板,作为最后的得分。

偏置技巧:

我们可以将公式(1)中的偏置项移到前面的矩阵乘法中,即:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax 公式(2)

看图便可了解变换方法:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

4. 损失函数cost function

前面我们通过评分函数score function对来计算输入图像属于每一类的得分。而损失函数则是用来评估score function打分结果的好坏。打分越贴近真实标签值,则损失函数越小,反之越大。

4.1 多类别SVM损失函数 Multiclass SVM Loss

首先给出多类别SVM损失函数的定义,SVM Loss希望正确类别的得分比其他类别的得分至少高出cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax。用cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax代表score function给出的打分,第cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax个图像在第cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax类上的得分是cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,那么第cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax个图像的SVM损失可以用如下公式定义:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax 公式(3)

举一个例子:

假设共存在3个类别,score function对某样本的打分为cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,该样本的真实类别为cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmaxcs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,则该样本的损失函数为:cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax。虽然类别2的得分低于真实类别的得分,但是由于SVM Loss希望实现的是真实类别的得分比其他类别至少高出cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,由于不满足该条件所以仍会带来损失。

本节的分类器是线性分类器时,将score function带入公式(3)可以得到线性分类器的损失函数:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax 公式(4)

其中,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmaxcs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的第cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax行。

Hinge Loss:上面的损失函数叫Hinge Loss,形式为cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax。有时也会使用square hinge loss来替代,形如:cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

4.1.1 正则化

上面的损失函数存在一个“bug”。设想一下,假设评分函数都能够正确预测所有分类,即:cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,都有cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,那么这些性能问题是,这样的权重并不是唯一的。因为如果一组权重cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax满足这样的要求,那么对于cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax也都满足这个要求。只不过当评价函数的值不为cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的时候,那么其得分会被放大cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax倍。

为了解决这个问题,我们可以对cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax添加一些限制来移除上述不确定性,即:对原始损失函数进行扩展,为其添加一个正则项cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax常用惩罚是cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax范数:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax 公式(5)

注意1:惩罚项与数据无关。

这样,损失函数就可以被改写成由data loss和regularization loss两部分组成的:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

 

展开后可得:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

公式(6)

其中,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax为一个超参数,可以通过交叉验证进行设置。

正则项可以惩罚大的权重值,这样可以提高模型的泛化能力。例如:输入数据cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,有两组权重cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,内积相等cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax。但是L2惩罚不同,对于cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax是1.0,而对于cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax是0.25,故而cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax优于cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax。从直观上看,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的取值更小且更加分散,输入数据的所有维度都会对评价函数产生影响,而不是仅仅其中几个维度就决定了评价函数。因此,具有更好的泛化性能,能够减小过拟合。

注意2:惩罚项只针对cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,而不针对偏差cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,因为偏差对输入数据各个维度大小没有影响。

margin和正则化系数的关系

4.1.2  Practical Considerations

  • cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的设定

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax也是​一个超参数,常用取值为1.0。超参数cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmaxcs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax具有相同的作用:平衡目标函数中的data loss和regularization loss。因为二者均可以直接或间接影响评价函数的得分,进而影响不同类别之间的得分差异。​​​​​​

  • Multiclass SVM与二分类SVM之间的关系

二分类SVM是Multiclass SVM的一种特例,其损失函数为:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

公式(7)

其中,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax是超参数,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmaxcs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

  • Optimization In Prime

想进一步了解SVM,了解核方法、对偶、SMO算法等可以参见博客:机器学习知识点总结 - SVM

  • 其它Multiclass SVM

如:OVA(One-vs-All)SVM:为每一个类别训练一个二分类SVM。

4.2 Softmax Classifier

Softmax分类器是二元Logistics回归泛化到多元分类的情况。与SVM不同的是,Softmax分类器不输出得分,而是输出对应类别的概率。Softmax分类器中,映射函数仍为前面介绍的线性分类器,但是利用Softmax函数将其输出进行运算得到归一化对数概率。

Softmax函数的定义:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

公式(8)

其中,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax代表第在第cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax个类别上softmax函数给出的归一化对数概率值,cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax代表线性函数在第cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax个类别上的输出。

此外,Softmax分类器使用的损失函数为cross-entropy loss,其定义如下:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax              或可以写成            cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

公式(9)
  • 信息论角度:一个真实分布cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax和其估计分布cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的交叉熵定义如下: 

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

公式(10)

Softmax分类器是最小化估计的分布cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax和真实分布(cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,只有第cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax个为1)之间的交叉熵。交叉熵可以看做熵和相对熵的和相对熵的和cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,真实分布cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的熵是零,所以最小化交叉熵等价于最小化相对熵。

  • 概率角度:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

公式(11)

已知输入数据cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax和权重参数cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,上式可以看做对应类别cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的归一化概率。评价函数的输出向量没有归一化,直接作为对数概率的输入,之后用对数概率除以所有概率的和来进行归一化,这样概率的和为1。从概率论角度看,我们再最小化正确分类的负概率(即最大化正确分类的概率),这是最大似然估计(Maximum Likelihood Estimation)。这样损失函数中的正则化部分cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax可以看过权重矩阵cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的高斯先验,这样最大似然估计变成了最大后验概率估计(Maximum a posteriori Estimation)。

  • 实践问题

数值稳定:当写代码实现Softmax函数时,会涉及到cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmaxcs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax的计算,因为指数的原因,这些数值可能会非常大。除以很大的数值可能会引起数值不稳定,这时可以使用归一化的技巧。在分子和分母同时乘以一个常数,分数的数值不变: 

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

公式(12)

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax通常设为cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax,这样分数向量中最大的值为0。

4.3 SVM vs. Softmax

下图可以帮助对比两者的区别:

cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

相对于SVM给出的是类别的得分,Softmax分类器计算每类的概率,直观上比较容易理解。

实践中,SVM和Softmax性能差别不大,不同的人对哪种效果更好持不同的观点。和Softmax相比,SVM更加局部化(local objective),它只关心小于间隔Δ的部分,例如Δ=1,那么分值[10, -100, -100]和[10, 9, 9]对于SVM来说,其loss函数值相同;但是对于softmax就不同了。Softmax的loss函数只有在完全正确情况下才会为0。

5. Summary

  • 定义了score function,并给出了线性函数的score function的定义。 
  • 和kNN使用不一样,参数化方法训练时间比较久,预测只是矩阵相乘。 
  • 通过一个trick,可以把偏置加入到矩阵相乘中。 
  • 定义了loss function,介绍了常用的SVM和Softmax loss。对比了两者的区别。