cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax
目录
2. Parameterized mapping from images to label scores
4.1 多类别SVM损失函数 Multiclass SVM Loss
4.1.2 Practical Considerations
博客:https://blog.****.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
定义:图像训练集包含
张图片,
表示代表第i张图片,且
,
代表图像的维度。
,代表图片
的类别。
以CITAR-10数据集为例,共包含张图片,每张图片包含
像素,共有
个类别。
定义评分函数为:
3. 线性分类器
线性分类器的映射函数/表达式为:
公式(1) |
其中代表图像数据:由原始图像展开得到的一个
的向量。矩阵
代表权重,
表示偏置bias。
以CITAR-10为例:的是维度为
的向量;
是维度为
的矩阵;
为
维度的向量。
注意:
(1) 得到
的列向量,每一行代表在对应类别上的score。
(2)机器学习的目的是为了找到一组参数,使得上面的函数对数据的评分尽可能与真实的标签值接近。
(3)训练结束后,可以丢弃训练数据,只需要保存参数值就可以进行预测。
(4)预测的速度很快,就是进行矩阵的相乘和相加。
线性分类器的解释:
线性分类器就是计算图像所有像素的加权和。
权重的每一行可以看做对应类的模板,每一类的打分就是图像和对应模板的乘积。
此外,还可以将线性分类器看成Nearest Neighbor(最近邻学习),即:为输入图像在给定的不同类别的模板中找到最相似的一个模板,作为最后的得分。
偏置技巧:
我们可以将公式(1)中的偏置项移到前面的矩阵乘法中,即:
公式(2) |
看图便可了解变换方法:
4. 损失函数cost function
前面我们通过评分函数score function对来计算输入图像属于每一类的得分。而损失函数则是用来评估score function打分结果的好坏。打分越贴近真实标签值,则损失函数越小,反之越大。
4.1 多类别SVM损失函数 Multiclass SVM Loss
首先给出多类别SVM损失函数的定义,SVM Loss希望正确类别的得分比其他类别的得分至少高出。用
代表score function给出的打分,第
个图像在第
类上的得分是
,那么第
个图像的SVM损失可以用如下公式定义:
公式(3) |
举一个例子:
假设共存在3个类别,score function对某样本的打分为,该样本的真实类别为
,
,则该样本的损失函数为:
。虽然类别2的得分低于真实类别的得分,但是由于SVM Loss希望实现的是真实类别的得分比其他类别至少高出
,由于不满足该条件所以仍会带来损失。
本节的分类器是线性分类器时,将score function带入公式(3)可以得到线性分类器的损失函数:
公式(4) |
其中,是
的第
行。
Hinge Loss:上面的损失函数叫Hinge Loss,形式为。有时也会使用square hinge loss来替代,形如:
。
4.1.1 正则化
上面的损失函数存在一个“bug”。设想一下,假设评分函数都能够正确预测所有分类,即:,都有
,那么这些性能问题是,这样的权重并不是唯一的。因为如果一组权重
满足这样的要求,那么对于
也都满足这个要求。只不过当评价函数的值不为
的时候,那么其得分会被放大
倍。
为了解决这个问题,我们可以对添加一些限制来移除上述不确定性,即:对原始损失函数进行扩展,为其添加一个正则项
。常用惩罚是
范数:
公式(5) |
注意1:惩罚项与数据无关。
这样,损失函数就可以被改写成由data loss和regularization loss两部分组成的:
展开后可得: |
公式(6) |
其中,为一个超参数,可以通过交叉验证进行设置。
正则项可以惩罚大的权重值,这样可以提高模型的泛化能力。例如:输入数据,有两组权重
,内积相等
。但是L2惩罚不同,对于
是1.0,而对于
是0.25,故而
优于
。从直观上看,
的取值更小且更加分散,输入数据的所有维度都会对评价函数产生影响,而不是仅仅其中几个维度就决定了评价函数。因此,具有更好的泛化性能,能够减小过拟合。
注意2:惩罚项只针对,而不针对偏差
,因为偏差对输入数据各个维度大小没有影响。
margin和正则化系数的关系
4.1.2 Practical Considerations
的设定
也是一个超参数,常用取值为1.0。超参数
和
具有相同的作用:平衡目标函数中的data loss和regularization loss。因为二者均可以直接或间接影响评价函数的得分,进而影响不同类别之间的得分差异。
- Multiclass SVM与二分类SVM之间的关系
二分类SVM是Multiclass SVM的一种特例,其损失函数为:
|
公式(7) |
其中,是超参数,
,
。
- 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函数的定义:
|
公式(8) |
其中,代表第在第
个类别上softmax函数给出的归一化对数概率值,
代表线性函数在第
个类别上的输出。
此外,Softmax分类器使用的损失函数为cross-entropy loss,其定义如下:
|
公式(9) |
-
信息论角度:一个真实分布
和其估计分布
的交叉熵定义如下:
|
公式(10) |
Softmax分类器是最小化估计的分布和真实分布(
,只有第
个为1)之间的交叉熵。交叉熵可以看做熵和相对熵的和相对熵的和
,真实分布
的熵是零,所以最小化交叉熵等价于最小化相对熵。
- 概率角度:
|
公式(11) |
已知输入数据和权重参数
,上式可以看做对应类别
的归一化概率。评价函数的输出向量没有归一化,直接作为对数概率的输入,之后用对数概率除以所有概率的和来进行归一化,这样概率的和为1。从概率论角度看,我们再最小化正确分类的负概率(即最大化正确分类的概率),这是最大似然估计(Maximum Likelihood Estimation)。这样损失函数中的正则化部分
可以看过权重矩阵
的高斯先验,这样最大似然估计变成了最大后验概率估计(Maximum a posteriori Estimation)。
- 实践问题:
数值稳定:当写代码实现Softmax函数时,会涉及到和
的计算,因为指数的原因,这些数值可能会非常大。除以很大的数值可能会引起数值不稳定,这时可以使用归一化的技巧。在分子和分母同时乘以一个常数,分数的数值不变:
|
公式(12) |
通常设为
,这样分数向量中最大的值为0。
4.3 SVM vs. 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。对比了两者的区别。